...

пятница, 16 июня 2017 г.

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

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


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


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


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


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 -w --nocopy ".ipfs\[имя каталога или файла]"
    

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


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



WebSeed


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


Для файла:


http://ift.tt/2trc4xd файла]
http://ift.tt/2stJbUe файла]

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


http://ift.tt/2trztij
http://ift.tt/2stY88x

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


magnet:?xt=urn:btih:2F825A27112B0E5C89D20B656045920F1C10830C28&ws=http://ift.tt/2trqZaS

Идентификатор контента (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

Комментарии (0)

    Let's block ads! (Why?)

    Комментариев нет:

    Отправить комментарий