Вики ZooBC
Работа узла

Темп допуска

ZooBC допускает новые узлы в реестр узлов по одному, по таймеру, который намеренно идёт медленно. Доля оператора в производстве блоков — это его доля мест, поэтому темп, в котором можно получить места, — это темп, в котором кто угодно может обрести власть над цепочкой. Протокол фиксирует этот темп, и наблюдать за ним может любой.

Почему медленно

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

Медлительность никак не связана со скоростью цепочки. Новый узел может начать с недавнего снимка, а не со всей истории, никто не проводит собеседований с операторами, а цепочка создаёт один блок каждые 15 секунд, сколько бы в ней ни было узлов.

Формула

Задержка между двумя допусками равна:

delay = clamp(base ÷ counted seats, minimum, maximum)

В mainnet база — 600 дней, минимум — 7 дней, максимум — 90 дней. Testnet использует те же значения. Первый новичок может быть допущен через 7 дней после генезиса. Таймер читает метки времени блоков и допускает не более одного узла за цикл, причём никогда — в том же блоке, который поставил его в очередь. Какой узел он допускает, решает очередь.

Задержка до следующего допуска устанавливается в момент допуска новичка, по числу мест до него.

Какие места учитываются

  • Генезис-места учитываются не более чем как 11 (это генезис-значение, 11 в каждой цепочке).
  • Новички учитываются полностью.
  • Приостановленные места не учитываются ни в одной из групп.

Ограничение не даёт большому генезису быстро открыть реестр. Без него цепочка, запущенная со 100 генезис-местами, получила бы 600 ÷ 100 = 6 дней, поднятые до минимума в 7 дней, и с самого начала допускала бы новичка каждую неделю. С ограничением подсчёт начинается с 11, и расписание такое же, как в цепочке из 11 мест. Неучёт приостановленных мест означает, что темп задают только работающие места.

100 генезис-мест протискиваются через воронку, которая учитывает не более 11, новички учитываются полностью, приостановленные места не учитываются, что даёт 600 ÷ 11 ≈ 54,5 дня на обеих временных шкалах
100 генезис-мест протискиваются через воронку, которая учитывает не более 11, новички учитываются полностью, приостановленные места не учитываются, что даёт 600 ÷ 11 ≈ 54,5 дня на обеих временных шкалах

Расписание

Если очередь никогда не пустеет и никто не уходит, новички приходят так:

НовичокПриходит примерно
1-йна 7-й день
2-йна 61,5-й день
7-йна 278-й день
11-йна 408-й день

Это 9 новичков за первый год, 25 к концу второго года, 54 к третьему и около 155 к пятому. Начиная с 86 учтённых мест 600 ÷ 86 меньше 7 дней, поэтому в силу вступает минимум: допуски становятся еженедельными примерно с 77-го новичка, примерно через 3,5 года после генезиса. Претендент, который выиграл бы каждый допуск подряд, получил бы своё 12-е место, достаточное, чтобы превзойти числом 11 генезис-мест, лишь около 437-го дня.

Новички за пять лет с генезиса: 9 после первого года, 25 после второго, 54 после третьего, около 155 после пятого, еженедельно примерно с 3,5 года
Новички за пять лет с генезиса: 9 после первого года, 25 после второго, 54 после третьего, около 155 после пятого, еженедельно примерно с 3,5 года

Пока решает базовый член формулы, реестр растёт на фиксированную долю за единицу времени, потому что каждый допуск добавляет одно место, а задержка равна базе, делённой на число мест. Поэтому удвоение реестра занимает около base × ln 2, примерно 416 дней в mainnet, независимо от его размера.

Особые случаи

  • Маленький реестр. Пока активных узлов меньше min_registry_size (7 в mainnet), максимальная задержка ограничена 7 днями.
  • После долгой остановки таймер допускает один узел, а затем возвращается к обычному ритму.
  • Devnet, цепочка для разработки, использует ту же формулу с базой 180 секунд, минимумом 60 секунд и максимумом 300 секунд, поэтому её допуски идут с интервалом в минуты.

Все входные данные находятся в цепочке, поэтому любой может пересчитать, когда наступит следующий допуск.

См. также