Вики ZooBC
Proof of Participation

Раунды, время и окна

ZooBC стремится к одному блоку каждые 15 секунд. После каждого блока время делится на 15-секундные раунды, и жеребьёвка называет по одному производителю на раунд. Метка времени блока помещает его в раунд, и создать его может только узел, выбранный на этот раунд или на предыдущий. Это правило задаёт цепочке ровный ритм и гарантирует, что отсутствующий производитель задерживает следующий блок на 15 секунд, но никогда больше.

Раунды и целевое время

Пусть P — метка времени предыдущего блока. Целевое время раунда r — P + 15 × r: раунд 1 — через 15 секунд после предыдущего блока, раунд 2 — через 30 секунд, раунд 3 — через 45 секунд и так далее. Производитель раунда 1 стремится поставить на свой блок метку своего целевого времени. Если он молчит, блок создаёт производитель раунда 2, целясь в 30 секунд; и так далее по списку.

Высоты никогда не пропускаются. Когда производитель отсутствует, следующий блок просто приходит на 15 секунд позже, на той же высоте, от следующего производителя в очереди. Каждый узел, выбранный раньше фактического производителя, получает пропущенный ход (см. Пропущенные ходы, приостановка и исключение).

Шкала времени после предыдущего блока: раунд 1 на +15 с молчит и получает пропуск; раунд 2 на +30 с создаёт блок; раунд 3 не нужен.
Шкала времени после предыдущего блока: раунд 1 на +15 с молчит и получает пропуск; раунд 2 на +30 с создаёт блок; раунд 3 не нужен.

Два раунда для каждого производителя

Производитель, выбранный в раунде i, может создать блок раунда i или раунда i + 1. Так что опоздавший узел раунда 1 ещё может выпустить блок во время раунда 2, при этом право имеет и узел раунда 2. В любой момент право создать блок есть у двух выбранных узлов, и цепочка никогда не ждёт одного-единственного узла. Не ждёт она и чьей-либо приостановки: для приостановки нужны четыре пропущенных хода подряд, и она лишь исключает узел из будущих жеребьёвок.

Раунды 1, 2 и 3 как полосы вокруг +15 с, +30 с и +45 с; узел раунда 1 ещё может выпустить блок во время раунда 2, а замена из раунда 2 ставит метку на +30 с.
Раунды 1, 2 и 3 как полосы вокруг +15 с, +30 с и +45 с; узел раунда 1 ещё может выпустить блок во время раунда 2, а замена из раунда 2 ставит метку на +30 с.

В какой раунд попадает метка времени

Раунд блока с меткой времени T равен:

round(T) = 1 + floor((T − P − 15 + 7) / 15)     (and never less than 1)

У каждого раунда также есть окно приёма длиной 14 секунд — от 7 секунд до его целевого времени до чуть меньше 7 секунд после него. В целых секундах:

РаундЦелевое времяСекунды, которые засчитывает формулаОкно приёма (целевое время ± 7 с)
1P + 15до P + 22от P + 8 до P + 21
2P + 30от P + 23 до P + 37от P + 23 до P + 36
3P + 45от P + 38 до P + 52от P + 38 до P + 51
4P + 60от P + 53 до P + 67от P + 53 до P + 66

Последняя секунда, которую формула отдаёт каждому раунду (P + 22, P + 37, P + 52, ...), лежит на одну секунду за окном этого раунда. Валидаторы проверяют метку времени блока по окну его раунда с допуском в 2 секунды, поэтому эти секунды на стыках тоже принимаются.

Раунд важен дважды. Он определяет, кто может создать блок, и ограничивает вес блока при выборе ветви: блок никогда не оценивается выше, чем раунд, в который попадает его метка, поэтому производитель, выбранный в раунде 2 и поставивший метку в раунде 3, весит не больше блока раунда 3.

Ось времени от родителя P с раундами с 1 по 4 в виде соседних полос; метка P + 50 попадает в раунд 3, поэтому её вес считается как минимум по 3 жребиям.
Ось времени от родителя P с раундами с 1 по 4 в виде соседних полос; метка P + 50 попадает в раунд 3, поэтому её вес считается как минимум по 3 жребиям.

Правила часов, которые применяет каждый узел

  • Блок с меткой менее чем через 13 секунд после родителя отклоняется как созданный слишком быстро (15-секундный интервал минус 2 секунды допуска). Поэтому поставить метку на блок сразу, как только замечен пропуск, невозможно.
  • Блок с меткой более чем на 7 200 секунд (2 часа) впереди собственных часов узла этот узел отклоняет, пока его часы не догонят.
  • После остановки более чем на час (предел восстановления 3 600 секунд) блок всё равно принимается, если он исходит от производителя, которого ожидает жеребьёвка, поэтому остановившаяся цепочка может запуститься снова.

Здесь действуют два окна. Производитель, выбранный в раунде i, должен поставить метку на свой блок в пределах окна создания этого раунда — от 7 секунд до целевого времени раунда до 27 секунд после него, что заходит в следующий раунд. Валидаторы, кроме того, требуют, чтобы метка лежала в окне приёма того раунда, в который она попадает, с допуском в 2 секунды.

Локальная политика времени

Две временные настройки — собственная политика каждого узла, а не правила консенсуса. Производитель, выбранный первым, отправляет свой блок в P + 15; остальные отправляют свои в конце окна своего раунда минус 5 секунд (и никогда не раньше P + 15). И примерно раз в секунду каждый узел применяет из имеющихся у него блоков-кандидатов тот, у которого наименьшая позиция и открыто окно.

Для сравнения, Bitcoin стремится к одному блоку каждые десять минут. 15-секундный ритм ZooBC одинаков во всех цепочках ZooBC: сутки — это 5 760 блоков (см. Блоки и время).

См. также