Pull to refresh

Межпланетная файловая система — больше нет необходимости копировать в сеть

Reading time3 min
Views20K

Всем хороша идея IPFS но вот только был один недостаток у неё. Данные загружаемые в сеть копировались в хранилище блоков удваивая занимаемое ими место. Более того файл резался на блоки которые мало пригодны для повторного использования.


Появилась экспериментальная опция --nocopy, которая избавляет от этого недостатка. Для того чтобы пользоваться ей необходимо выполнить несколько условий.


Также появился новый тип идентификаторов. Его мы тоже разберём.


Напомню: InterPlanetary File System — это новая децентрализованная сеть обмена файлами (HTTP-сервер, Content Delivery Network). О ней я начал рассказ в статье "Межпланетная файловая система IPFS".

image


--nocopy


Это опция заставляет IPFS использовать как источник блоков исходные файлы. Тем самым файлы не копируются в хранилище блоков и не занимают в 2 раза больше места.


Для использования этой опции выполним следующие действия:


  1. необходимо включить Filestore


    ipfs config --json Experimental.FilestoreEnabled true

  2. в каталог где лежит каталог ".ipfs"(он обычно в каталоге пользователя) нужно сделать ссылку на каталог или файл который надо загрузить в сеть


    Файл можно связать hardlink'ом:


    fsutil hardlink "[каталог где .ipfs]\[имя файла]" "[путь к файлу]\[имя файла]"

    или


    mklink /h "[каталог где .ipfs]\[имя файла]" "[путь к файлу]\[имя файла]"

    Каталог можно связать символьной ссылкой:


    linkd "[каталог где .ipfs]\[имя каталога]" "[путь к каталогу]\[имя каталога]"

    или


    mklink /j "[каталог где .ipfs]\[имя каталога]" "[путь к каталогу]\[имя каталога]"

  3. И теперь добавляем


    ipfs add -r -w --nocopy "[каталог где .ipfs]\[имя каталога или файла]"

    Ключ -w оборачивает цель в каталог тем самым сохраняя её имя.


    Результатом будут идентификаторы CIDv1 и CIDv0 (мультихеш)



WebSeed


Теперь в магнит или торрент можно будет добавить WebSeed.


Для файла:


http://127.0.0.1:8080/ipfs/[идентификатор]/[имя файла]
http://gateway.ipfs.io/ipfs/[идентификатор]/[имя файла]

Для каталога:


http://127.0.0.1:8080/ipfs/[идентификатор]/
http://gateway.ipfs.io/ipfs/[идентификатор]/

Пример магнита c WebSeed


magnet:?xt=urn:btih:953edbe75de612bc966194d2ee60099b3bc1a1aa&dn=Magnet-ссылка.txt&ws=http://gateway.ipfs.io/ipfs/QmfQCxNW9r2974xR5dXopXfQqsEvgexhza6aQgqTGL7Yh3/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


Разберём его на части


  1. zbase58 Bitcoin [префикс основания]


    base58: b2rhe143L6sgu2Nba4TZgFMdPidGMA6hmWhK9wLUoVGWYsR7
    переводим в
    HEX: 01 55 12 20 6D542257CBD1BE7FD0AE8914F42066BCBF1E79487EF67B959A86DBEE4670B386


  2. 01 — v1 [varint версия CID]


  3. 55 — raw binary [varint тип контента]


  4. 12sha2-256 [varint ID хеша]


  5. 20 — 32 байта [varint длинна хеша]


  6. 6D542257CBD1BE7FD0AE8914F42066BCBF1E79487EF67B959A86DBEE4670B386 — sha2-256 digest [хеш]



Заключение


Опция --nocopy очень помогает когда вы хотите поделиться с миром например дампом Википедии. Или другими полезными но очень большими по объёму массивами информации.


Ссылки


Ссылки в Windows, символьные и не только
ipfs command reference
List of experimental IPFS features


Другие части


  1. Межпланетная файловая система IPFS
  2. Публикуем сайт в межпланетной файловой системе IPFS
  3. Хостим сайт в межпланетной файловой системе IPFS под Windows
  4. Больше нет необходимости копировать в сеть
  5. Переключаем свой сайт на localhost (локальный шлюз IPFS)
  6. Локализуем глобальный шлюз или сайты в IPFS
Tags:
Hubs:
Total votes 24: ↑22 and ↓2+20
Comments15

Articles