InterPlanetary File System — это новая децентрализованная сеть обмена файлами (HTTP-сервер, Content Delivery Network). О ней я рассказывал в статье "Межпланетная файловая система IPFS".
Всем хороша идея IPFS но вот только был один недостаток у неё. Данные загружаемые в сеть копировались в хранилище блоков удваивая занимаемое ими место. Более того файл резался на блоки которые мало пригодны для повторного использования.
Появилась экспериментальная опция --nocopy
, которая избавляет от этого недостатка. Для того чтобы пользоваться ей необходимо выполнить несколько условий.
Также появился новый тип идентификаторов. Его мы тоже разберём.
--nocopy
Это опция заставляет IPFS использовать как источник блоков исходные файлы. Тем самым файлы не копируются в хранилище блоков и не занимают в 2 раза больше места.
Для использования этой опции выполним следующие действия:
-
необходимо включить Filestore
ipfs config --json Experimental.FilestoreEnabled true
-
в каталог ".ipfs"(он в каталоге пользователя) нужно сделать ссылку на каталог или файл который надо загрузить в сеть
Файл можно связать hardlink'ом:
fsutil hardlink ".ipfs[имя файла]" "[путь к файлу][имя файла]"
или
mklink /h ".ipfs[имя файла]" "[путь к файлу][имя файла]"
Каталог можно связать символьной ссылкой:
linkd ".ipfs[имя каталога]" "[путь к каталогу][имя каталога]"
или
mklink /j ".ipfs[имя каталога]" "[путь к каталогу][имя каталога]"
-
И теперь добавляем
ipfs add -w --nocopy ".ipfs[имя каталога или файла]"
Ключ
-w
оборачивает цель в каталог тем самым сохраняя её имя.Результатом будут идентификаторы CIDv1 и CIDv0 (мультихеш)
WebSeed
Теперь в магнит или торрент можно будет добавить WebSeed.
Для файла:
http://127.0.0.1:8080/ipfs/[идентификатор]/[имя файла]
http://ipfs.io/ipfs/[идентификатор]/[имя файла]
Для каталога:
http://127.0.0.1:8080/ipfs/[идентификатор]/
http://ipfs.io/ipfs/[идентификатор]/
Пример магнита c WebSeed
magnet:?xt=urn:btih:2F825A27112B0E5C89D20B656045920F1C10830C28&ws=https://ipfs.io/ipfs/QmPbs8syAxac39bcNuMLpHXnqjKUguqakCM8LN8sZVPD9R/Magnet-ссылка.txt
Идентификатор контента (CID)
В связи с этими изменениями в IPFS появились RAW блоки. Ключ --nocopy
автоматически включает использование RAW блоков. Но можно включить этот режим и ключом --raw-leaves
. В связи с этим появился новый CID (Content IDentifier) или по русски "идентификатор контента".
Старый идентификатор
Называется CIDv0 и обычно имеет постоянный префикс "Qm".
CIDv0 это просто мультихеш в Base58
[varint ID хеша][varint длинна хеша][хеш]
Пример CIDv0: QmPbs8syAxac39bcNuMLpHXnqjKUguqakCM8LN8sZVPD9R
Новый идентификатор
У RAW блоков свой CID. Его можно отличить по постоянному префиксу "zb2rh".
CIDv1 содержит в себе больше информации.
[префикс основания][varint версия CID][varint тип контента][varint ID хеша][varint длинна хеша][хеш]
Пример CIDv1: zb2rhe143L6sgu2Nba4TZgFMdPidGMA6hmWhK9wLUoVGWYsR7
Разберём его на части
-
z
— base58 Bitcoin [префикс основания]base58:
b2rhe143L6sgu2Nba4TZgFMdPidGMA6hmWhK9wLUoVGWYsR7
переводим в
HEX:01 55 12 20 6D542257CBD1BE7FD0AE8914F42066BCBF1E79487EF67B959A86DBEE4670B386
01
— v1 [varint версия CID]55
— raw binary [varint тип контента]12
— sha2-256 [varint ID хеша]20
— 32 байта [varint длинна хеша]6D542257CBD1BE7FD0AE8914F42066BCBF1E79487EF67B959A86DBEE4670B386
— sha2-256 digest [хеш]
Заключение
Опция --nocopy
очень помогает когда вы хотите поделиться с миром например дампом Википедии. Или другими полезными но очень большими по объёму массивами информации.
Ссылки
Ссылки в Windows, символьные и не только
ipfs command reference
List of experimental IPFS features
Другие части
- Межпланетная файловая система IPFS
- Публикуем сайт в межпланетной файловой системе IPFS
- Хостим сайт в межпланетной файловой системе IPFS под Windows
Автор: ivan386