22 июня 2022

Распределённые и децентрализованные хранилища. Часть III. IPFS vs. SWARM

Недавно выпала задача сравнить IPFS & SWARM и оказалось, что всё не так просто, как написано на гите и форумах. Попробуем разобраться?

Источники, что удалось проштудировать:

  1. https://docs.ethswarm.org/docs/ 
  2. https://github.com/ethersphere/swarm 
  3. https://www.ethswarm.org/swarm-whitepaper.pdf 
  4. https://blog.ethereum.org/2016/12/15/swarm-alpha-public-pilot-basics-swarm/ 
  5. https://arxiv.org/pdf/2102.12737.pdf 
  6. https://sitepoint.com/ipfs-swarm-decentralized-content-publication-storage/
  7. https:/technoarete.org/common_abstract/pdf/IJERCSE/v4/i11/Ext_89203.pdf 
  8. https://www.blockchain.dcwebmakers.com/work-with-distributed-storage-ipfs-and-swarm-in-ethereum.html 
  9. https://hackernoon.com/swarm-ipfs-and-bigchaindb-comparing-data-storage-and-decentralization-4a2o3wf8 
  10. https://ethereum.stackexchange.com/questions/2138/what-is-the-difference-between-swarm-and-ipfs 
  11. https://github.com/ethereum/devp2p/blob/master/rlpx.md 
  12. https://github.com/ethersphere/swarm/issues/2186 
  13. https://medium.com/ethereum-swarm/pinning-files-in-swarm-efcecaf71d41 
  14. https://youtu.be/0JxGfhjmGhY 

“Swarm — это BitTorrent на стероидах». Разработчик: Ethersphere. 

Swarm — платформа распределённого хранения и служба распространения контента, встроенная в базовый уровень стека Ethereum. Основная цель — обеспечить достаточно децентрализованное и избыточное хранилище публичных записей Ethereum, в частности, для хранения и распространения кода и данных dApps, а также данных блокчейна. [Здесь и далее представлена компиляция из перевода документации, моих мыслей и цитат других исследователей]. 

При этом: “IPFS находится гораздо дальше в плане зрелости кода, масштабирования, внедрения, вовлечения сообщества и взаимодействия со специализированным сообществом разработчиков”.

В то же время IPFS нацелен на создание протокола и является более низкоуровневым, более общим проектом, но Swarm связан с концепцией Ethereum Web 3, уделяя больше внимания противодействию цензуре: он «реализует правдоподобную отрицаемость с неправдоподобной подотчётностью посредством комбинации обфускации и двойной маскировки».

Это напоминает о проекте Freenet, где те, кто размещает определённый контент, не обязательно имеют к нему доступ или знают, что он собой представляет.

Swarm использует все возможности смарт-контрактов для работы с зарегистрированными узлами с депозитом (залогом) на кону. Это позволяет применять карательные меры в качестве сдерживающих факторов. Swarm обеспечивает схему отслеживания ответственности, делая хранителей индивидуально ответственными за конкретный контент.

С одной стороны, это включает стимулы для долгосрочного хранения не слишком популярного контента, а с другой — стимулы для очень популярного контента с высокой пропускной способностью. Эти два варианта требуют двух разных подходов к штрафам/вознаграждениям.

В случае Swarm это требует работы над криптографическими конструкциями, известными как Proof-of-Custody, которые позволяют «иметь компактное доказательство, доказывающее любой третьей стороне, что вы храните сгусток данных без передачи всей информации и без раскрытия фактического содержимого». Таким образом, доказательство хранения некоторого содержимого не требует полной загрузки этого содержимого каждый раз.

В Swarm даже есть протокол учёта, SWAP, который сейчас находится в разработке, в качестве одного из уровней стимулирования. Также есть подход: менее популярный контент может быть удалён, и от этого нет никакой страховки (по умолчанию).

Swarm можно будет использовать в качестве облачного хостинга, в то время как IPFS отводит эту функцию проектам, которые будут построены на его инфраструктуре. IPFS оставляет на усмотрение реализаторов/разработчиков поиск фактических устройств хранения.

Сама IPFS, как нижний уровень, не имеет никаких гарантий хранения. В то время как Swarm включает это в свою дорожную карту, команда IPFS, для сравнения, планирует это на уровне Filecoin, но пока это только на стадии идеи.

Более широкое внедрение IPFS обеспечивает компромисс с системой обзора, предоставляя инструменты «черного списка», но использование этих инструментов является полностью добровольным. Swarm занимает очень сильную антицензурную позицию в этом отношении. Он поощряет коллективное хранение с неизвестным содержимым (схема распространения/распределения блоков). Благодаря сочетанию путаницы и двойной маскировки реализуется разумная отрицаемость и невероятная ответственность.

Дальнейшие различия в основном касаются технологий, на основе которых построена каждая платформа.

Например, Swarm использует чанкстор с адресацией содержимого, а не распределенную хэш-таблицу (DHT), используемую в IPFS. Ещё один пример: благодаря тесной связи с остальной частью стека Ethereum, Swarm может использовать протокол DevP2P от Ethereum, тогда как IPFS использует более общий сетевой уровень libp2p (https://github.com/libp2p).

Ещё раз: основной компонент хранения Swarm рассматривает chunkstore как неизменяемое содержимое вместо общей DHT (распределенной хэш-таблицы). Пользователи могут загружать контент в Swarm и использовать его как виртуальную машину. В IPFS пользователи могут только регистрировать / публиковать контент, уже находящийся на их жестком диске. Кроме того, эти две системы используют разные уровни сетевого взаимодействия и протоколы управления пирами.

Как и IPFS, Swarm реализует маршрутизацию на основе ключей (применяется к общему адресному пространству ID узла и хэша содержимого) на основе XOR. Однако Swarm использует гибридный стиль отправки/пересылки kademlia: вместо того, чтобы полагаться на больший пул пиров инициатора запроса для выполнения итеративного поиска и фильтрации, Swarm рекурсивно передает непрерывные шаги поиска и использует только меньший пул активных соединений.

Коротко о сути

Пчела (bee) — единичная нода, которая объединяется в одноранговую сеть с другими и получается рой (swarm). Пчела становится брокером данных, храня и предоставляя блоки данных в обмен на токены BZZ.

Чтобы загрузить контент или заплатить за загрузку большего количества контента, чем разрешено порогом бесплатного уровня, ваш узел должен заплатить некоторое количество xBZZ (и потенциально получить xBZZ).

Чтобы ускорить этот процесс, были созданы чеки. Они представляют собой внецепочечный (offchain) метод оплаты, при котором эмитент подписывает чек, указывая получателя, дату и сумму, и передаёт его получателю в знак обещания заплатить позже. Приятным моментом является то, что чеки могут «складываться», так что при расчёте, «зафиксировав» обмен BZZ в блокчейне, множество мелких чеков могут быть засчитаны как одна крупная выплата.

ChequeBook — смарт-контракт, который позволяет бенефициару выбирать время обработки платежей. Что по сути означает, что это адрес и логический механизм, позволяющий обналичивать полученные чеки.

Когда загружаете свои файлы в рой, они разбиваются на чанки размером 4 кб, а затем распределяются по узлам сети, которые отвечают за хранение и обслуживание этих частей вашего контента. К каждому куску приклеивается почтовая марка, которая прикрепляет к этому куску значение в BZZ, которое вы согласны сжечь при покупке партии марок. Это означает для узлов хранения, что эти данные важны и должны быть сохранены в Распределяемом неизменяемом хранилище чанков (Distributable Immutable Store of Chunks — DISC).

Чтобы загрузить данные в рой, необходимо выполнить следующие шаги:

  1. Пополните кошелек своего узла с помощью BZZ.
  2. Приобретите партию марок на свои BZZ.
  3. Подождите, пока партия распространится в сети.
  4. Загрузите свой контент, указав идентификатор партии, чтобы Bee мог прикрепить марки к вашим фрагментам.
  5. Загрузите содержимое, используя хэш вашего содержимого.

Таким образом, чтобы загрузить свои данные в рой, вы должны согласиться сжечь (потратить) часть своих BZZ, чтобы дать понять узлам хранителя и передатчика, что это содержимое ценно. Прежде чем перейти к следующему шагу, вы должны купить марки! 

Данные, загруженные в рой, всегда являются общедоступными. В Swarm конфиденциальные файлы должны быть зашифрованы перед загрузкой, чтобы их содержимое всегда оставалось приватным.

В случае успешной работы будет возвращён ответ в формате JSON, содержащий ссылку на рой или хэш, который является адресом загруженного файла,

В Swarm каждый фрагмент данных имеет уникальный адрес, который представляет собой уникальный и воспроизводимый криптографический хэш-дайджест. Если вы дважды загрузите один и тот же файл, вы всегда будете получать один и тот же хэш. Это делает работу с данными в Swarm супер-безопасной!

Каждый узел Bee настроен на резервирование определенного объёма памяти на жестком диске вашего компьютера для хранения и обслуживания фрагментов в пределах своей зоны ответственности для других узлов сети Swarm. После заполнения выделенного пространства каждый узел Bee удаляет старые фрагменты, чтобы освободить место для новых по мере их загрузки в сеть.

Каждый раз, когда к фрагменту обращаются, он перемещается в конец очереди на удаление, таким образом, содержимое, к которому регулярно обращаются, остаётся живым в сети и не удаляется процедурой сборки мусора узла.

Для процесса Bee последним этапом получения BZZ является обналичивание чека. Стоит отметить, что чек — это ещё не настоящие BZZ. В Bee чек, как и настоящий чек, — обещание передать деньги по первому требованию. В реальной жизни вы бы предъявили чек в банк. В жизни роя мы передаем чек смарт-контракту.

В Swarm есть слой стимулов, который пока (до конца) не реализован. Этот слой строится на основе протоколов Swap, Swear и Swindle, которые сделают всю процедуру недоверчивой.

Pin Index: Pin Index — отдельное хранилище индексов, которое создаётся в локальном хранилище данных с целью управления пиннингом чанков. Поэтому, когда файл загружается с заголовком pinning как «true», после обычного процесса загрузки файла, описанного выше, запускается этот процесс. 

Но зачем это всё вообще нужно?

Дело в том, что Виртуальная машина Ethereum (EVM) работает со словами размером 256 бит, или 32 байта. Для хранения каждого 256-битного слова данных требуется 20 000 единиц газа, что составляет 640 000 единиц газа на килобайт. На момент написания статьи цена газа составляет около 4,5 Гвэй (0,0000000045 ETH), поэтому стоимость одного килобайта данных составляет 0,00288 ETH. Если увеличить этот показатель, то стоимость одного гигабайта данных составит 2 880 ETH, а при цене в 220 долларов за ETH каждый гигабайт будет обходился в 621 000 долларов. А теперь умножьте на $1000? $4000? $10 000? Это чрезвычайно высокая стоимость по сравнению с обычным централизованным облачным хранилищем, где стоимость одного гигабайта обычно составляет несколько центов. 

Для файлов, которые слишком велики для хранения целиком, оба проекта предлагают модель, при которой большие файлы могут передаваться частями, подобно протоколу BitTorrent.  Чтобы смягчить подобные проблемы, IPFS и Swarm могут стимулировать пользователей запускать клиентов путем денежного вознаграждения. В Swarm стимулы встроены, поскольку Swarm должен запускаться вместе с клиентом Ethereum Geth.

Подробней о монетезиации: https://docs.ethswarm.org/docs/working-with-bee/cashing-out 

P.S. Пару слов после

Мир ещё не оценил, что создаётся внутри Web 3.0: в том числе — в части хранения данных, но время придёт и вы можете быть в первых рядах…, а пока —

До!

P.P.S. И не забудьте изучить предыдущие материалы:

  1. О распределённых и децентрализованных хранилищах;
  2. О Filecoin & Chia как их представителях;
  3. Об архитектуре систем будущего…