Вики ZooBC
Proof of Participation

Proof of Participation

Proof of Participation (PoP) — это способ, которым ZooBC приходит к согласию о своих блоках. Блоки создают узлы реестра узлов, хранящегося в цепочке; их выбирает жеребьёвка по сиду предыдущего блока с одинаковым шансом для каждого места. Каждый узел оценивается по той работе, которая нужна сети, — передаче блоков и транзакций назначенным ему протоколом пирам, — и эта оценка определяет его долю новых монет. Блок действителен потому, что его подписал правильный ключ, и каждый узел проверяет это сам.

Четыре цели дизайна

  • Равная власть над производством блоков. Баланс, стейк, оборудование и оценка не меняют шанс места.
  • Открытое, но размеренное членство. Любой может встать в очередь на место, заблокировав стейк; протокол допускает одного новичка за цикл.
  • Измеряемое и вознаграждаемое участие. Ретрансляция доказывается квитанциями, которые подписывают получающие пиры, и квитанции определяют доход каждого узла.
  • Никакой напрасной работы. Безопасность обеспечивают подписи, хеши и проверяемая случайная функция, а не головоломки.

Статья Proof of Participation в сравнении с PoW и PoS сопоставляет эти цели с Proof of Work, Proof of Stake и их делегированными и федеративными вариантами.

Один блок, шаг за шагом

  1. Жеребьёвка. Сид предыдущего блока запускает генератор случайных чисел, который все узлы выполняют одинаково. Он называет производителя для раунда 1, другого для раунда 2 и так далее (жеребьёвка).
  2. Раунды. Производитель раунда 1 стремится поставить на свой блок метку времени через 15 секунд после предыдущего. Если он молчит, через 15 секунд его сменяет производитель раунда 2 (раунды, время и окна). Транзакции могут нести только первые десять раундов, а производитель предыдущего блока понижается в очереди (приоритетные раунды, пустые блоки и предыдущий производитель).
  3. Блок. Производитель подписывает блок своим ключом узла и доказывает новый сид с помощью проверяемой случайной функции, поэтому выбрать этот сид он не может (сид блока (VRF)).
  4. Проверки. Каждый узел проверяет, что производитель был выбран на тот раунд, в который попадает метка времени блока, или на предыдущий раунд, а также подпись, доказательство сида, каждую транзакцию и каждую квитанцию. Пустой блок действителен.
  5. Работа. Узлы ретранслируют блоки и транзакции своим приоритетным пирам и собирают подписанные квитанции (квитанции и топология сети). Квитанции, которые узел показывает в своих собственных блоках, двигают его оценку участия, которая взвешивает лотерею coinbase.
  6. Цена отсутствия. Пропущенный ход делает узел «отсутствующим»: никакого дохода и падающая оценка. Четыре пропуска подряд приводят к его приостановке, а нулевая оценка — к исключению (пропущенные ходы, приостановка и исключение).
Узел A ретранслирует блок узлу B, и B возвращает подписанную им квитанцию. Следующий блок A несёт эту квитанцию, которая двигает оценку участия A, а оценка задаёт шанс A получить долю новых ZBC.
Узел A ретранслирует блок узлу B, и B возвращает подписанную им квитанцию. Следующий блок A несёт эту квитанцию, которая двигает оценку участия A, а оценка задаёт шанс A получить долю новых ZBC.

Власть и доход — по отдельности

Жеребьёвка производителей не учитывает оценку, а лотерея не учитывает стейк. Узел с высокой оценкой зарабатывает больше, но не создаёт больше блоков и не выбирает больше сидов: власть одинакова для каждого места, а доход следует за работой, которую выполняет каждый узел. Больше власти — значит больше мест, а места приходят только через очередь, по одному допуску за раз (темп допуска).

Два узла с оценками 90 % и 30 %: в жеребьёвке производителей их доли равны (1 : 1), в лотерее coinbase — 3 : 1. Оценка влияет на вознаграждение, а не на производство блоков.
Два узла с оценками 90 % и 30 %: в жеребьёвке производителей их доли равны (1 : 1), в лотерее coinbase — 3 : 1. Оценка влияет на вознаграждение, а не на производство блоков.

Когда ветви конкурируют

Узлы следуют ветви с наибольшей накопленной сложностью, в которой своевременные блоки весят больше поздних; при точном равенстве побеждает ветвь с меньшим хешем вершины (выбор ветви и накопленная сложность). Ни один узел не откатывается больше чем на 720 блоков (3 часа) и ниже последней контрольной точки, соподписанной в spine-цепочке (финальность и откат). На производителя, подписавшего два блока на одном и том же родителе, можно подать отчёт, и он понесёт наказание (двойное подписание (эквивокация)).

Ключевые числа

ПараметрЗначение (mainnet)
интервал между блоками и длина раунда15 секунд
генезис-мест в каждой цепочке11
раунды, которые могут нести транзакциис 1 по 10
начальная оценка участия20 %
пропущенных ходов подряд до приостановки4
приоритетных пиров на узел, перетасовка каждые12, каждые 40 блоков
предел отката720 блоков (3 часа)

См. также

Статьи по этой теме