Правила двух третей
Большая часть того, что происходит в ZooBC, вообще не требует голосования: каждый блок подписывает один выбранный жеребьёвкой производитель, и каждый узел его проверяет. Но некоторые решения говорят от имени всего реестра: контрольная точка, которая делает историю окончательной, монеты, выпущенные за депозит в другой цепочке, вето неисправного релиза. Для них ZooBC использует одну планку: две трети зарегистрированных мест. При 11 местах это 8.
Где применяются две трети
| Решение | Что требуется |
|---|---|
| сохранение spine-блока | соподписи 67 % полного списка подписантов с округлением вверх (8 из 11); больше половины (6 из 11) — только после 3 периодов spine-цепочки без spine-блока; никогда меньше 5 |
| зачисление депозита моста, освобождение вывода через мост | аттестации двух третей реестра, каждая подписана ключом узла |
| выпуск через мост сверх суточного лимита | все места, которые не приостановлены |
| разрешение факта оракула, запускающего платежи | две трети активного реестра, аттестующие одно и то же значение |
| вето релиза | две трети зарегистрированных мест, аттестующие вето |
| замена органа выпуска релизов | тот же кворум двух третей, засчитываемый, только когда самому старому голосу исполнилась неделя |
| включение набора новых правил | не меньше двух третей зарегистрированных производителей недавно создали блок с новой версией |
Подробнее:
- Spine-блоки. Планка — max(
spine_min_signatures, ceil(n × 67 / 100)), где n — число мест в списке подписантов spine-цепочки: 67 % списка с округлением вверх. Каждый подписант перед подписанием сверяет содержимое блока со своей цепочкой. См. Spine-цепочка. - Мост. Его правила входят в узел начиная с версии 0.5.8. Программы-киперы рядом с узлами следят за адресами хранения в другой цепочке и голосуют аттестациями без комиссии. Депозит выпускается, одна к одной и без комиссии моста, когда две трети учтённых мест — зарегистрированных узлов, которые не приостановлены, — аттестуют один и тот же токен, сумму и получателя. Если выпуск монеты за сутки превысил бы большее из одной целой монеты и 10 % её предложения, должны согласиться все не приостановленные места. Цепочки перезапускаются на версии 0.5.8 без запуска сервиса моста. См. Мост и обёрнутые монеты.
- Факты оракула. Зарегистрированные узлы аттестуют события; когда две трети активного реестра аттестуют одно и то же значение, событие разрешается и выплачивает средства по каждому ожидающему триггеру, который его называет. См. Триггеры и аттестации.
- Релизы. Вето, аттестованное двумя третями мест, отзывает релиз в точности так, как это сделал бы собственный отзыв органа выпуска. Голос, называющий новый орган выпуска релизов, засчитывается, только когда самому старому голосу исполняется неделя (40 320 блоков), так что нынешний держатель роли видит его заранее. См. Релизы и обновления.
- Порог готовности. Набор новых правил консенсуса включается, только когда не меньше ceil(2 × R / 3) различных зарегистрированных производителей создали блок с новой версией в пределах недавнего окна в max(720, 5 × n) блоков, и не раньше чем через сутки после регистрации релиза. Здесь R — число зарегистрированных мест, которые не приостановлены, а n — число зарегистрированных узлов.
Как учитываются приостановленные места
Начиная с версии 0.5.8 приостановленные места (см. Пропущенные ходы, приостановка и исключение) выпадают из каждого подсчёта двух третей: они не голосуют и не учитываются в общем числе. Единственное намеренное исключение — spine-цепочка. Она продолжает учитывать каждое место в своём списке подписантов, приостановлено оно или нет, чтобы контрольная точка spine-цепочки всегда говорила от имени двух третей всех мест.
Нижняя граница реестра
У решений всего реестра есть и нижняя граница: ни одна аттестация всего реестра не разрешается, пока в реестре меньше max(3, min_registry_size) мест или различных аккаунтов владельцев — 7 в mainnet. Два места одного оператора при подсчёте владельцев — один голос.
Что не требует двух третей
- Обычный блок. Его подписывает один производитель, выбранный по сиду, и каждый узел его проверяет (см. Жеребьёвка).
- Голосуемые цены, например аренда аккаунта или комиссия за перевод. Раз в цикл каждая цена переходит к среднему голосов учтённых мест, причём каждый голос предварительно ограничивается ростом не более чем на 20 % или снижением не более чем вдвое (см. Голосования по ценам).
Некоторые проверки, которые узел выполняет сам, тоже используют планку в две трети или близкую к ней, но это локальная политика, а не консенсус: отставший узел следует вершине, о которой сообщают две трети выборки зарегистрированных пиров; расширенный раунд проверки снимка требует двух третей ответивших пиров (см. Снимки и быстрая синхронизация); а опрос узла о форке требует не меньше 0,66 голосующих пиров — чуть меньше двух третей.
Обратная сторона двух третей
Планка в две трети означает, что чуть больше трети мест — действуя сообща или просто не голосуя — может задержать решение. Для spine-цепочки это смягчается переходом к большинству больше половины после трёх периодов простоя. У порога готовности крайнего срока нет: чуть больше трети мест может задержать обновление.