Доведення PoC консенсусу до Substrate

Ivan Arenovich
5 min readFeb 17, 2022

--

Посилання на оригінал https://medium.com/subspace-network/bringing-poc-consensus-to-substrate-d49d49a912bd

Ми раді повідомити, що Subspace Labs отримала грант від Web3 Foundation (W3F) на впровадження консенсусу Proof-of-Capacity (PoC) за допомогою Substrate Framework. Ми оголошуємо про це сьогодні разом із схваленням нашого першого етапу, який демонструє можливість запускати блокчейн локальної розробки за допомогою клієнта Substrate та PoC Farmer. Це перший важливий крок на довгому шляху до нашої мети — розгортання Subspace Network як парачейна в мережі Polkadot.

Що таке консенсус Proof-of-Capacity (PoC) ?

Proof-of-Capacity (PoC) є провідною альтернативою консенсусу на основі Proof-of-Work (PoW) і Proof-of-Stake (PoS). У блокчейні PoC майнінг із інтенсивними обчисленнями замінений farming із інтенсивним зберіганням даних. Основна перевага полягає в тому, що farming є енергоефективним (і екологічно стійким), але має властивості безпеки, більш схожі на PoW, ніж на PoS. Farming також має потенціал бути стійким до ASIC, що дозволяє звичайним користувачам брати участь у консенсусі з товарним обладнанням, хоча це значною мірою залежить від реалізації базового proof-of-capacity.

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

  1. Чи є PoC proof-of-useless-space (random bits) чи proof-of-useful-storage (real-world data)
  2. Чи є участь у консенсусі без дозволу (подібно до PoW) або з дозволом (подібно до PoS).
  3. Чи забезпечується інтервал виробництва блоку за допомогою затримки, пов’язаної з процесором (подібно до PoW) або shared clock (подібно до PoS).

Наприклад, мережа Chia використовує proof-of-useless-space разом із CPU-bound proof-of-time для забезпечення інтервалу блокування; тоді як Filecoin використовує proof-of-useful-storage та забезпечує затримку блокування через shared clock.

PoC на Substrate

Substrate — це основа для побудови блокчейнів, розроблена людьми з Parity. Подумайте про Django або Rails, але для блокчейнів. Substrate підтримує та підключає консенсус і постачається з кількома існуючими алгоритмами, включаючи: proof-of-stake (BABE), proof-of-authority (Aura) та proof-of-work (Kulupu). Ключова мета нашого гранту W3F — розширити цей набір консенсусних алгоритмів для підтримки PoC.

Для досягнення цієї мети ми розробили набір модулів Substrate, які підтримують абстрактне поняття консенсусу PoC. Наразі ці модулі підтримують PoC без дозволу (або proof-of-neuseful-space, або proof-of-useful-storage), в якому інтервал блокування забезпечується за допомогою shared clock. Ці модулі розроблені, щоб діяти як проміжний рівень між базовим PoC і всеосяжним Substrate Pallet, який визначає конкретну логіку ланцюга.

Для цього гранту ми реалізуємо Spartan, навмисно простий proof-of-useless-space, який послужить основою для подальшої роботи. Щоб побудувати блокчейн, ми починаємо з sp_consensus_spartan, адаптера для spartan-codec, специфічного proof-of-space в нашому випадку. Ці примітиви потім використовуються sp_consensus_poc і sc_consensus_poc, які визначають загальну логіку середовища виконання та клієнта для протоколу консенсусу PoC без дозволу на основі раунду. Клієнт також припускає відокремленого spartan-farmer, який створює та запитує графік на основі диска. Зв’язок між клієнтом і farmer здійснюється через WebSocket RPC. Нарешті, pallet_spartan організовує консенсус через модулі PoC за допомогою модулів Spartan. Ми також створили node-template-spartan, який реалізує pallet_spartan як клієнт Substrate. Для більш детального опису Spartan, будь ласка, зверніться до конструктивної документації .

Запуск Spartan Node

Локальний ланцюг розробки складається з одного клієнта Spartan Substrate та одного Spartan Farmer. Найпростіший спосіб запустити ланцюжок розробників — це використовувати Docker. Farmer контейнер спочатку створить графік розміром 1 Гб (це має зайняти кілька хвилин), після чого він підключиться до клієнтського контейнера і спробує вирішити задачу блоку для кожного часового інтервалу. Коли farmer знайде дійсне рішення, він передасть його назад клієнту, який потім створить новий блок і розширить ланцюжок. Щоб запустити з Docker:

Спочатку інсталюйте Docker

Потім виконайте наступні команди

# Initialize the farmer (terminal 1)
# Create volume for plot and initialize 1 GiB plot
# Should take thirty seconds to a few minutesdocker 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 chaindocker 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 normaldocker kill node-template-spartan

Також можна створити та запустити клієнт локально. Farmer можна встановити безпосередньо з crates.io або створити локально. Будь ласка, зверніться до client readme і farmer readme, щоб отримати докладні інструкції щодо створення або встановлення вручну.

Наступні кроки для Spartan

Місцевий ланцюг розвитку — це чудовий початок, але попереду ще багато роботи. На нашому наступному етапі ми розширимо Spartan-Substrat, щоб включити:
1.Можливість синхронізації ланцюга з іншим повним вузлом або лайт версією клієнта.
2.Можливість керувати кількома farmers з ділянками змінного розміру, з діапазоном рішень, що саморегулюються (подібно до скидання труднощів роботи в PoW).
3.Можливість відстежувати ланцюжок з браузера за допомогою Polkadot-JS, відображаючи при цьому оцінку загального простору відданого мережі.
4.Запуск відкритої публічної тестової мережі без дозволів.

Наступні кроки для Subspace

Spartan — це лише сходинка до більшої мети — розгортання Subspace як парачейна в мережі Polkadot. Subspace — це перший блокчейн PoC, який вирішує farmer’s dilemma , набір тонких проблем, пов’язаних із розробкою механізмів, які свідчать про те, що існуючі блокчейни PoC насправді несумісні із стимулами. Subspace роширює proof-of-useless-space Spartan у a proof-of-useful-storage в історії самого блокчейну. Це дозволяє користувачам Subspace Network зберігати дані безпосередньо в ланцюзі, не турбуючись про роздуття блокчейну, оскільки farmers зберігають історію колективно, утворюючи розподілену мережу зберігання. Для отримання додаткової інформації про Subspace Network та farmer’s dilemma, будь ласка, зверніться до нашої технічної документації.

--

--