- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

image [3]

--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

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

Для файла:

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 это просто мультихеш [7] в Base58

[varint ID хеша][varint длинна хеша][хеш]

Пример CIDv0: QmPbs8syAxac39bcNuMLpHXnqjKUguqakCM8LN8sZVPD9R

Новый идентификатор

У RAW блоков свой CID. Его можно отличить по постоянному префиксу "zb2rh".

CIDv1 содержит в себе больше информации.

[префикс основания][varint версия CID][varint тип контента][varint ID хеша][varint длинна хеша][хеш]

Пример CIDv1: zb2rhe143L6sgu2Nba4TZgFMdPidGMA6hmWhK9wLUoVGWYsR7

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

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

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

  2. 01 — v1 [varint [10] версия CID [11]]
  3. 55 — raw binary [varint тип контента [12]]
  4. 12sha2-256 [13] [varint ID хеша [7]]
  5. 20 — 32 байта [varint длинна хеша]
  6. 6D542257CBD1BE7FD0AE8914F42066BCBF1E79487EF67B959A86DBEE4670B386 — sha2-256 digest [хеш]

Заключение

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

Ссылки

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

Другие части

  1. Межпланетная файловая система IPFS [2]
  2. Публикуем сайт в межпланетной файловой системе IPFS [18]
  3. Хостим сайт в межпланетной файловой системе IPFS под Windows [19]

Автор: ivan386

Источник [3]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/detsentralizovanny-e-seti/257988

Ссылки в тексте:

[1] Content Delivery Network: https://ru.wikipedia.org/wiki/Content_Delivery_Network

[2] "Межпланетная файловая система IPFS": https://habrahabr.ru/post/314768/

[3] Image: https://habrahabr.ru/post/331010/

[4] магнит: https://ru.wikipedia.org/wiki/Magnet-%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0

[5] торрент: https://ru.wikipedia.org/wiki/.torrent

[6] WebSeed: https://ru.wikipedia.org/wiki/BitTorrent_(%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB)#Web-.D1.81.D0.B8.D0.B4.D1.8B

[7] мультихеш: https://github.com/multiformats/multihash

[8] base58 Bitcoin: https://ru.wikipedia.org/wiki/Base58

[9] префикс основания: https://github.com/multiformats/multibase

[10] varint: https://github.com/multiformats/unsigned-varint

[11] CID: https://github.com/ipld/cid

[12] тип контента: https://github.com/multiformats/multicodec/

[13] sha2-256: https://ru.wikipedia.org/wiki/SHA-2

[14] дампом Википедии: https://dumps.wikimedia.org/ruwiki/

[15] Ссылки в Windows, символьные и не только: https://geektimes.ru/post/50878/

[16] ipfs command reference: https://ipfs.io/docs/commands/

[17] List of experimental IPFS features: https://github.com/ipfs/go-ipfs/issues/3397

[18] Публикуем сайт в межпланетной файловой системе IPFS: https://habrahabr.ru/post/316468/

[19] Хостим сайт в межпланетной файловой системе IPFS под Windows: https://habrahabr.ru/post/325176/