Вики ZooBC
Proof of Participation

Приоритетные раунды, пустые блоки и предыдущий производитель

Два правила определяют, что выбранный производитель может положить в свой блок и когда. Только производители первых десяти раундов могут включать транзакции; более поздние производители могут создавать только пустые блоки. А узел, создавший предыдущий блок, понижается в следующей жеребьёвке, так что следующий блок он создаёт только как поздний запасной вариант. Оба правила поддерживают движение цепочки, что бы ни случилось, и при этом оставляют важные решения за производителями, которых жеребьёвка поставила первыми.

Приоритетные раунды

У каждого производителя есть позиция — номер жребия, который его назвал, отсчитываемый от 0. Параметр max_priority_blocksmiths равен 10, поэтому:

  • позиции с 0 по 9, то есть раунды с 1 по 10, могут нести транзакции;
  • начиная с позиции 10 (раунд 11 и далее) блок не должен нести транзакций. Квитанции он нести по-прежнему может.

Правило проверяется при создании блока, в пуле блоков-кандидатов каждого узла и каждым валидатором. Поздний блок, содержащий транзакции, отклоняется.

Раунды с 1 по 10 могут нести транзакции; раунды с 11 по 14 создают только пустые блоки, квитанции разрешены. Производитель раунда 12 создаёт пустой блок, и coinbase всё равно выплачивается.
Раунды с 1 по 10 могут нести транзакции; раунды с 11 по 14 создают только пустые блоки, квитанции разрешены. Производитель раунда 12 создаёт пустой блок, и coinbase всё равно выплачивается.

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

Пустой блок — полноценный блок

Пустой блок полностью действителен. Он несёт квитанции, заработанные его производителем, поэтому работа производителя по ретрансляции по-прежнему засчитывается в его оценку участия. Он также выплачивает coinbase, запланированный на его время, как и любой другой блок: начиная с версии 0.5.8 coinbase каждого блока должен в точности соответствовать графику, так что лотерея coinbase никогда не пропускает блок (см. Предложение и эмиссия).

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

Предыдущий производитель понижается

Производитель блока N остаётся в жеребьёвке для блока N+1, но его жребии засчитываются не раньше раунда 10 — последнего раунда, который может нести транзакции. Вес его блока ограничивается так же: в формуле веса его число жребиев k никогда не меньше 10, поэтому если он всё же создаёт блок N+1 как запасной вариант, этот блок добавляет не больше десятой части веса блока первого раунда (см. Выбор ветви и накопленная сложность). На практике блок N+1 создаёт другой выбранный узел, как только кто-то из них в состоянии это сделать.

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

Жеребьёвка для блока N+1: предыдущий производитель D, выбранный первым, сдвигается вниз, на раунд 10; блок создаёт узел B, выбранный вторым. D никогда не исключается, поэтому цепочка никогда не останавливается.
Жеребьёвка для блока N+1: предыдущий производитель D, выбранный первым, сдвигается вниз, на раунд 10; блок создаёт узел B, выбранный вторым. D никогда не исключается, поэтому цепочка никогда не останавливается.

Почему не позволить ему создать два блока подряд?

Сид блока N+1 определяет розыгрыши, зависящие от блока N, например результаты игр и ставок в цепочке (см. Сид блока (VRF) и приложения в ZooBC). Узел, создавший оба блока, держал бы в руках содержимое блока и сид, который определяет его исход. Правило таково: никто не должен владеть одновременно ставкой и сидом, который её решает, пока другой узел способен ответить.

Почему не убрать его из жеребьёвки?

Если бы предыдущий производитель исключался, цепочка из двух узлов строго чередовала бы их, а цепочка с единственным работающим узлом вообще не смогла бы создавать блоки. Будучи пониженным, а не исключённым, предыдущий производитель остаётся производителем последней надежды: если никто другой не выпустит блок, он всё равно может создать его в раунде 10, целевое время которого — 150 секунд после предыдущего блока. Из-за этого правила цепочка никогда не останавливается.

См. также