Proof of Participation
Proof of Participation (PoP) — это способ, которым ZooBC приходит к согласию о своих блоках. Блоки создают узлы реестра узлов, хранящегося в цепочке; их выбирает жеребьёвка по сиду предыдущего блока с одинаковым шансом для каждого места. Каждый узел оценивается по той работе, которая нужна сети, — передаче блоков и транзакций назначенным ему протоколом пирам, — и эта оценка определяет его долю новых монет. Блок действителен потому, что его подписал правильный ключ, и каждый узел проверяет это сам.
Четыре цели дизайна
- Равная власть над производством блоков. Баланс, стейк, оборудование и оценка не меняют шанс места.
- Открытое, но размеренное членство. Любой может встать в очередь на место, заблокировав стейк; протокол допускает одного новичка за цикл.
- Измеряемое и вознаграждаемое участие. Ретрансляция доказывается квитанциями, которые подписывают получающие пиры, и квитанции определяют доход каждого узла.
- Никакой напрасной работы. Безопасность обеспечивают подписи, хеши и проверяемая случайная функция, а не головоломки.
Статья Proof of Participation в сравнении с PoW и PoS сопоставляет эти цели с Proof of Work, Proof of Stake и их делегированными и федеративными вариантами.
Один блок, шаг за шагом
- Жеребьёвка. Сид предыдущего блока запускает генератор случайных чисел, который все узлы выполняют одинаково. Он называет производителя для раунда 1, другого для раунда 2 и так далее (жеребьёвка).
- Раунды. Производитель раунда 1 стремится поставить на свой блок метку времени через 15 секунд после предыдущего. Если он молчит, через 15 секунд его сменяет производитель раунда 2 (раунды, время и окна). Транзакции могут нести только первые десять раундов, а производитель предыдущего блока понижается в очереди (приоритетные раунды, пустые блоки и предыдущий производитель).
- Блок. Производитель подписывает блок своим ключом узла и доказывает новый сид с помощью проверяемой случайной функции, поэтому выбрать этот сид он не может (сид блока (VRF)).
- Проверки. Каждый узел проверяет, что производитель был выбран на тот раунд, в который попадает метка времени блока, или на предыдущий раунд, а также подпись, доказательство сида, каждую транзакцию и каждую квитанцию. Пустой блок действителен.
- Работа. Узлы ретранслируют блоки и транзакции своим приоритетным пирам и собирают подписанные квитанции (квитанции и топология сети). Квитанции, которые узел показывает в своих собственных блоках, двигают его оценку участия, которая взвешивает лотерею coinbase.
- Цена отсутствия. Пропущенный ход делает узел «отсутствующим»: никакого дохода и падающая оценка. Четыре пропуска подряд приводят к его приостановке, а нулевая оценка — к исключению (пропущенные ходы, приостановка и исключение).
Власть и доход — по отдельности
Жеребьёвка производителей не учитывает оценку, а лотерея не учитывает стейк. Узел с высокой оценкой зарабатывает больше, но не создаёт больше блоков и не выбирает больше сидов: власть одинакова для каждого места, а доход следует за работой, которую выполняет каждый узел. Больше власти — значит больше мест, а места приходят только через очередь, по одному допуску за раз (темп допуска).
Когда ветви конкурируют
Узлы следуют ветви с наибольшей накопленной сложностью, в которой своевременные блоки весят больше поздних; при точном равенстве побеждает ветвь с меньшим хешем вершины (выбор ветви и накопленная сложность). Ни один узел не откатывается больше чем на 720 блоков (3 часа) и ниже последней контрольной точки, соподписанной в spine-цепочке (финальность и откат). На производителя, подписавшего два блока на одном и том же родителе, можно подать отчёт, и он понесёт наказание (двойное подписание (эквивокация)).
Ключевые числа
| Параметр | Значение (mainnet) |
|---|---|
| интервал между блоками и длина раунда | 15 секунд |
| генезис-мест в каждой цепочке | 11 |
| раунды, которые могут нести транзакции | с 1 по 10 |
| начальная оценка участия | 20 % |
| пропущенных ходов подряд до приостановки | 4 |
| приоритетных пиров на узел, перетасовка каждые | 12, каждые 40 блоков |
| предел отката | 720 блоков (3 часа) |
См. также
Статьи по этой теме
- Proof of Participation в сравнении с PoW и PoS
Чем Proof of Participation в ZooBC отличается от Proof of Work, Proof of Stake, делегированных и федеративных схем: кто создаёт блоки, как приобретается власть и на чём держится безопасность блока. - Выбор ветви и накопленная сложность
Как узлы ZooBC выбирают между конкурирующими ветвями: побеждает наибольшая накопленная сложность, своевременные блоки весят больше поздних, а при точном равенстве побеждает меньший хеш вершины. - Двойное подписание (эквивокация)
Что происходит, когда производитель подписывает два разных блока на одном родителе: как честные узлы этого избегают, как любой зарегистрированный узел доказывает это транзакцией EquivocationReport и чего это стоит. - Жеребьёвка: кто создаёт следующий блок
Как каждый узел вычисляет по сиду предыдущего блока один и тот же упорядоченный список производителей следующего блока и почему у каждого активного места одинаковый шанс. - Квитанции и топология сети
Как ZooBC доказывает, что узел ретранслировал блоки и транзакции: приоритетные пиры, назначаемые жеребьёвкой каждые 40 блоков, подписанная квитанция в 232 байта и проверки, которые выполняет каждый валидатор. - Оценка участия
Оценка от 0 до 100 %, измеряющая, насколько хорошо узел выполняет свою работу: как она растёт и падает, что она определяет (доход в лотерее, исключение) и чего никогда не касается (производство блоков). - Приоритетные раунды, пустые блоки и предыдущий производитель
Почему транзакции могут нести только первые десять раундов, почему пустой блок — всё равно полноценный блок и почему производитель предыдущего блока понижается, но никогда не исключается. - Пропущенные ходы, приостановка и исключение
Что происходит с узлом, который пропускает свой ход: пропущенный ход, состояние «отсутствия», которое останавливает доход и снижает оценку, приостановка после четырёх пропусков и исключение при нуле. - Раунды, время и окна
Как ZooBC делит время после каждого блока на 15-секундные раунды, в какой раунд попадает метка времени и почему ни один отсутствующий производитель не может остановить цепочку. - Сид блока (VRF)
64-байтовый сид в каждом блоке определяет случайные выборы цепочки. Это выход проверяемой случайной функции, поэтому производитель не может его выбрать, а любой может его проверить.