Внедрение консенсуса PoC в Substrate
May 21, 2021
Jeremiah Wagstaff
Ссылка на оригинал статьи:
https://medium.com/subspace-network/bringing-poc-consensus-to-substrate-d49d49a912bd
Мой Дискорд: useless_dorozhkina#1394
В конце статьи приведены пояснения некоторых терминов! :)
Мы рады сообщить, что Subspace Labs получила открытый грант от Web3 Foundation (W3F) для реализации консенсуса Proof-of-Capacity (PoC)* с использованием Substrate Framework. Мы объявляем об этом сегодня в связи со сдачей и утверждением нашего первого этапа, который демонстрирует возможность запуска локальной разработки блокчейна с помощью Substrate Client и PoC Farmer. Это первый важный шаг на долгом пути к нашей цели — развертыванию Subspace Network в качестве парачейна* в сети Polkadot.
Что такое консенсус Proof-of-Capacity (PoC)?
Proof-of-Capacity (PoC) — это ведущая альтернатива консенсусам, основанным на Proof-of-Work (PoW)* и Proof-of-Stake (PoS)*. В блокчейне PoC майнинг с расчетами, требующими больших вычислительных ресурсов, заменяется фармингом, требующим больших ресурсов памяти. Ключевым преимуществом является то, что фарминг энергоэффективный (и не вредит экологии), а его характеристики безопасности больше похожи на PoW, чем на PoS. Фарминг также потенциально может не требовать использования ASIC, позволяя обычным пользователям участвовать в консенсусе с обычным оборудованием, хотя это сильно зависит от реализации основополагающего proof-of-capacity.
Существующие блокчейны PoC включают в себя Burst, Filecoin, Chia Network и Spacemesh. На высоком уровне каждая из этих сетей стремится выбрать следующего производителя блоков в соответствии со своей индивидуальной долей общего дискового пространства, заложенного в их сети. Каждая сеть достигает этой цели по-своему. Вообще говоря, есть три основных решения проектирования:
- Является ли PoC proof-of-useless-space* (случайные биты) или proof-of-useful-storage* (реальные данные).
- Является ли участие в консенсусе эксклюзивным* (аналогично PoW) или общедоступным* (аналогично PoS).
- Интервал производства блоков реализуется через задержку CPU-bound* (аналогично PoW), или с помощью shared clock (аналогично PoS).
Например, Chia Network использует общедоступное proof-of-useless-space вместе с доказательством времени* CPU-bound, чтобы обеспечить интервал производства блоков; тогда как Filecoin использует эксклюзивное proof-of-useful-storage и обеспечивает задержку блока через shared clock.
Substrate— это фреймворк для создания блокчейнов, разработанный замечательными людьми из Parity. Это то же самое, что Django или Rails, но для блокчейнов. Substrate поддерживает сменный консенсус* и поставляется с несколькими существующими алгоритмами, включая: proof-of-stake (BABE), proof-of-authority* (Aura) и proof-of-work (Kulupu). Ключевая цель нашего гранта W3F — расширить этот набор алгоритмов консенсуса, чтобы он также поддерживал и PoC.
Для достижения этой цели мы разработали набор модулей Substrate, которые поддерживают абстрактное понятие PoC-консенсуса. Эти модули в настоящее время поддерживают общедоступный PoC (proof-of-useless-space или proof-of-useful-storage), в котором интервал между блоками осуществляется с помощью shared clock. Эти модули предназначены для работы в качестве уровня связующего программного обеспечения между базовым PoC и всеобъемлющим Substrate Pallet, который определяет конкретную логику on-chain*.
Для этого гранта мы внедряем Spartan, нарочито простое proof-of-useless-space, которое послужит основой для дальнейшей работы. Чтобы построить блокчейн, мы начнем с sp_consensus_spartan, адаптера для spartan-codec, специального proof-of-space в нашем случае. Затем эти примитивы используются sp_consensus_poc и sc_consensus_poc, которые определяют общую исполняющую среду и логику клиента для общедоступного протокола консенсуса PoC, основанного на циклах. Клиент также предполагает несвязанный spartan-farmer, который создает и запрашивает плот дискового пространства*. Связь между клиентом и фармером осуществляется через WebSocket RPC. Наконец, pallet_spartan управляет консенсусом через модули PoC, используя модули Spartan. Мы также сконструировали node-template-spartan, который реализует pallet_spartan в качестве Substrate Client. Для более подробного описания Spartan, пожалуйста, ознакомьтесь с design document.
Локальная сеть разработки состоит из одного Spartan Substrate Client и одного Spartan Farmer. Самый простой способ запустить сеть разработки — это использовать Docker. Контейнер фармера сначала создаст плот размером 1 ГБ (это должно занять несколько минут), после чего он подключится к контейнеру клиента и попытается решить задачу блока для каждого временного интервала. Когда фармер находит правильное решение, он передает его обратно клиенту, который затем создает новый блок и расширяет сеть. Для запуска с docker:
Сначала установите Docker
Затем выполните следующие команды
# Запустите фармер (терминал 1) # Создайте объем для плота и инициализируйте плот размером 1 гигабайт # Это должно занять от тридцати секунд до нескольких минут docker volume create spartan-farmer docker run --rm -it \ --name spartan-farmer \ --mount source=spartan-farmer,target=/var/spartan \ subspacelabs/spartan-farmer plot 256000 spartan # Запустите клиента (терминал 2) # Запускает сеть разработки с одной нодой docker run --rm --init -it \ --name node-template-spartan \ subspacelabs/node-template-spartan --dev --tmp # Запустите фармер (терминал 1) # Как только нода клиента запущена, вы можете подключить к ней фармера docker run --rm --init -it \ --name spartan-farmer \ --mount source=spartan-farmer,target=/var/spartan \ --net container:node-template-spartan \ subspacelabs/spartan-farmer farm # Теперь вы должны увидеть производство блоков в клиенте (терминал 2) # Останавливает клиент # Контейнер клиента должен быть остановлен через терминал 1 # Фармер может быть остановлен как обычно с помощью ctrl c docker kill node-template-spartan
Также возможно собрать и запустить клиента локально. Фармер может быть установлен непосредственно с crates.io или также собран локально. Пожалуйста, ознакомьтесь с подробными инструкциями по сборке или установке вручную в client readme и farmer readme.
Сеть локальной разработки — отличное начало, но предстоит еще много работы. На следующем этапе мы расширим Spartan-Substrate, чтобы он включал:
- Возможность синхронизации сети с другой полной нодой или с клиентскими узлами с минимальной нагрузкой*.
- Возможность управлять несколькими фармерами с плотами разного размера, с самонастраивающимся диапазоном решений (аналогично сбросу сложности работы в PoW).
- Возможность контролировать сеть из браузера с помощью Polkadot-JS, отображая при этом примерную общую память, заложенную в сеть.
- Запуск открытой и общедоступной тестовой сети.
Spartan — это только ступенька на пути к более крупной цели — развертыванию Subspace в качестве парачейна в сети Polkadot. Subspace — это первый PoC-блокчейн, который решает дилемму фармера, набор тонких проблем проектирования механизма, которые предполагают, что существующие PoC-блокчейны на самом деле несовместимы с поощрениями. Subspace расширяет proof-of-useless-space Spartan до proof-of-useful-storage истории самого блокчейна. Это позволяет пользователям Subspace Network хранить данные непосредственно on-chain, не беспокоясь о раздувании блокчейна*, поскольку фармеры коллективно хранят историю, образуя сеть с распределенным хранением. Для получения дополнительной информации о Subspace Network и дилемме фермера, пожалуйста, обратитесь к нашему technical whitepaper.
Proof-of-Capacity (PoC) - метод защиты криптовалюты, основанный на использовании свободного места на устройстве хранения файлов заранее выделенного пользователями.
Парачейн - индивидуальный блокчейн, привязанный к сигнальной сети, которая использует вычислительные ресурсы для подтверждения правильности транзакций.
Proof-of-Work (PoW) - принцип защиты сетевых систем от злоупотребления услугами (например, от DoS-атак или организации рассылок спама), основанный на необходимости выполнения на стороне клиента некоторой достаточно длительной работы (нахождение решения задачи), результат которой легко и быстро проверяется на стороне сервера.
Proof-of-Stake (PoS) - метод защиты в криптовалютах, при котором вероятность формирования участником очередного блока в блокчейне пропорциональна доле, которую составляют принадлежащие этому участнику расчётные единицы данной криптовалюты от их общего количества.
Proof-of-Useless-Space - вид PoC, в котором свободное место на носителе занимают бесполезные (случайные) данные, т.е. используется намеренно потраченная впустую память.
Proof-of-Useful-Storage - вид PoC, в котором сохраняются только полезные данные, например, любую данные пользователя. В случае Subspace сохраняется история блокчейна.
Эксклюзивный блокчейн - блокчейн, в котором обработка транзакций осуществляется определенным списком субъектов с установленными личностями.
Общедоступный блокчейн - блокчейн, в котором пользователям не требуется одобрение какого-либо доверенного органа для присоединения к сети и участия в протоколе, т.е. любой желающий может использовать блокчейн для транзакций и участия в генерации блоков.
Задержка CPU-bound - означает, что скорость, с которой процесс прогрессирует, ограничена скоростью центрального процессора.
Доказательство времени - это децентрализованный алгоритм консенсуса, который работает путем выбора валидаторов согласно их рейтинговым баллам и зафиксированному стейку.
Сменный консенсус - предлагает консенсус в отношении порядка транзакций, а затем передает блоки в пиры. Поставщик услуг с подобным консенсусом ответственны за то, чтобы ассоциировать участников сети с криптографическими идентификаторами.
On-chain - blockchain-транзакции, которые происходят непосредственно в блокчейне, проверяются с помощью его механизмов и обладают всеми присущими ему признаками.
Proof-of-Authority - использует значение идентификаторов, которые означают, что валидаторы блока не создают стейки монеты, а вместо этого имеют собственную репутацию. Следовательно, блокчейны PoA защищен проверяющими узлами, которые произвольно выбирают заслуживающего доверия.
Плот дискового пространства - участок местности, которую образовывает носитель данных.
Узел (нода) с минимальной нагрузкой необходим для того, чтобы пользователи через смартфон или другой гаджет могли синхронизироваться с актуальной сетью блокчейна и получить необходимую информацию. Например, проверить баланс кошелька или совершить перевод средств. Противоположность light client — “полная нода”, которая хранит всю информацию о блокчейне и запускается только с мощного устройства.
Раздувание блокчейна происходит по мере того, как в блокчейн добавляется все больше и больше информации. Поскольку каждая нода в блокчейне необходима для хранения и обработки этой информации, время обработки со временем замедляется по мере роста блокчейна.