June 12, 2022

Интеграция консенсуса PoC в Substrate.

Мы рады сообщить, что 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, позволяя обычным пользователям участвовать в консенсусе с обычным оборудованием, хотя это сильно зависит от реализации лежащего в основе доказательства емкости.

Существующие блокчейны PoC включают Burst, Filecoin, Chia Network и Spacemesh. На высоком уровне каждая из этих цепочек стремится выбрать следующего производителя блоков в соответствии с их индивидуальной долей общего дискового пространства, выделенного их сети. Каждая сеть достигает этой цели по-своему. Вообще говоря, есть три основных дизайнерских решения:

1. Является ли PoC доказательством бесполезного пространства (случайные биты) или доказательством полезного хранения (реальные данные)
2. Является ли участие в консенсусе не разрешенным (аналогично PoW) или разрешенным (аналогично PoS).
3. Применяется ли интервал производства блоков через задержку, связанную с процессором (аналогично PoW), или с помощью общих часов (аналогично PoS).


Например, Chia Network использует безразрешенное доказательство бесполезного пространства вместе с привязкой к ЦП для обеспечения интервала блокировки; тогда как Filecoin использует разрешенное доказательство полезного хранения и обеспечивает задержку блока через общие часы.

PoC на Substrte

Substrate — это фреймворк для создания блокчейнов, разработанный замечательными людьми из Parity. Вспомните Django или Rails, но для блокчейнов. Substrate поддерживает подключаемый консенсус и поставляется с несколькими существующими алгоритмами, включая: доказательство доли (BABE), доказательство полномочий (Aura) и доказательство работы (Kulupu). Ключевая цель нашего гранта W3F — расширить этот набор алгоритмов консенсуса, чтобы он также поддерживал PoC.

Для достижения этой цели мы разработали набор модулей Substrate, которые поддерживают абстрактное понятие PoC-консенсуса. Эти модули в настоящее время поддерживают PoC без разрешения (либо доказательство бесполезного пространства, либо доказательство полезного хранилища), в котором интервал между блоками применяется через общие часы. Эти модули предназначены для работы в качестве промежуточного слоя программного обеспечения между базовым PoC и всеохватывающим Substrate Pallet, который определяет конкретную логику в цепочке.

Для этого гранта мы внедряем Spartan, простое доказательство бесполезного пространства, которое послужит основой для дальнейшей работы. Чтобы построить блокчейн, мы начнем с sp_consensus_spartan, адаптера для spartan-codec, конкретного PoS в нашем случае. Затем эти примитивы используются sp_consensus_poc и sc_consensus_poc, которые определяют общую среду выполнения и клиентскую логику для протокола консенсуса PoC без разрешений, основанного на циклах. Клиент также предполагает разъединенного spartan-farmer, который создает и запрашивает участок на основе диска. Связь между клиентом и фермером осуществляется через WebSocket RPC. В заключении, pallet_spartan организует консенсус через модули PoC, используя модули Spartan. Мы также сконструировали node-template-spartan, который реализует pallet_spartan в качестве клиента-Substrate. Более подробное описание Spartan смотрите в документации.

Запуск спартанского узла

Локальная цепочка разработки состоит из одного Spartan Substrate Client и одного Spartan Farmer. Самый простой способ запустить цепочку разработки — использовать Docker. Контейнер фермера сначала создаст участок размером 1 ГБ (это должно занять несколько минут), после чего он подключится к клиентскому контейнеру и попытается решить задачу блока для каждого временного интервала. Когда фермер находит правильное решение, он передает его обратно клиенту, который затем создает новый блок и расширяет цепочку. Для запуска с помощью Docker:

Сначала установите Docker

Затем выполните следующие команды :

# Initialize the farmer (terminal 1)
# Create volume for plot and initialize 1 GiB plot
# Should take thirty seconds to a few minutes

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

# Run the client (terminal 2)
# Starts a single node development chain

docker run --rm --init -it \
   --name node-template-spartan \
   subspacelabs/node-template-spartan --dev --tmp


# Run the farmer (terminal 1)
# Once client node is running, you can connect farmer to it

docker run --rm --init -it \
 --name spartan-farmer \
 --mount source=spartan-farmer,target=/var/spartan \
 --net container:node-template-spartan \
 subspacelabs/spartan-farmer farm

# Now you should see block production on the client (terminal 2)

# Stopping the client
# The client container must be stopped from terminal 1
# Farmer can be stopped with ctrl c as normal

docker kill node-template-spartan

Также возможно запустить клиент локально. Фермер может быть установлен непосредственно с crates.io или собран локально. Подробные инструкции по сборке или установке вручную см. в файлах client readme и farmer readme.

Следующие шаги для Spartan

Локальная цепочка развития — отличное начало, но предстоит еще много работы. На следующем этапе мы расширим Spartan-Substrate, включив в него:

1. Возможность синхронизации цепочки с другим полным узлом или легким клиентом.
2. Возможность управлять несколькими фермерами с участками разного размера с самонастраивающимся диапазоном решений (аналогично сбросу сложности в работе в PoW).
3. Возможность контролировать цепочку из браузера с помощью Polkadot-JS, отображая при этом оценку общего места, заложенного в сеть.
4. Запуск открытой и общедоступной тестовой сети без разрешений.


Следующие шаги для Subspace

Spartan — это только ступенька на пути к более крупной цели — развертыванию Subspace в качестве парачейна в сети Polkadot. Subspace — это первый PoC-блокчейн, который решает дилемму фермера, набор тонких проблем проектирования механизмов, которые предполагают, что существующие PoC-блокчейны на самом деле несовместимы со стимулом. Subspace расширяет доказательство бесполезности пространства Spartan до доказательства полезности хранения истории самого блокчейна. Это позволяет пользователям Subspace Network хранить данные непосредственно в цепочке, не беспокоясь о "раздувании" блокчейна, поскольку фермеры коллективно хранят историю, образуя распределенную сеть хранения. Для получения дополнительной информации о Subspace Network и дилемме фермера, пожалуйста, обратитесь к нашему техническому документу (whitepaper).