Priority rounds, empty blocks and the previous producer
You are looking at an old version of this page: revision #851 by zoobc.how, 2026-10-26 22:31 UTC. See the current version
Two rules decide what a drawn producer may put in its block, and when. Only the producers of the first ten rounds may include transactions; later producers may make empty blocks only. And the node that made the previous block is demoted in the next draw, so it makes the next block only as a late fallback. Both rules keep the chain moving whatever happens, while keeping the important choices with the producers the draw put first.
Priority rounds
Each producer has a position: the index, counted from 0, of the draw that named it. The parameter max_priority_blocksmiths is 10, so:
- positions 0 to 9, that is rounds 1 to 10, may carry transactions;
- from position 10 on (round 11 and later), the block must carry no transactions. It may still carry receipts.
The rule is checked when the block is produced, in each node's pool of candidate blocks, and by every validator. A late block that includes transactions is refused.
The rule balances two goals. Liveness never depends on the top producers being online: even if many drawn nodes are down, someone further down the list keeps the chain growing. But the right to choose transactions stays with the highest-priority producers, so a low-ranked node gains nothing by racing a full block, or a block of hand-picked transactions, onto the chain.
An empty block is a complete block
An empty block is perfectly valid. It carries the receipts its producer earned, so the producer's relaying work still counts towards its participation score. It also pays the coinbase scheduled for its time like any other block: from version 0.5.8 every block's coinbase must equal the schedule exactly, so the coinbase lottery never misses a block (see supply and emission).
Pending transactions are not lost. They wait in the nodes' pools for the next block whose producer may include them.
The previous producer is demoted
The producer of block N stays in the draw for block N+1, but its draws count as no earlier than round 10, the last round that may carry transactions. Its block weight is capped the same way: in the weight formula its draw count k is never less than 10, so if it does make block N+1 as the fallback, the block adds at most a tenth of the weight of a first-round block (see fork choice and cumulative difficulty). In practice another drawn node makes block N+1 whenever one is able to.
The demotion is not a penalty. A demoted draw is never counted as a missed turn, and the node keeps its seat and its score.
Why not let it produce twice in a row?
The seed of block N+1 settles draws that depend on block N, such as the results of on-chain games and bets (see block seed (VRF) and apps on ZooBC). A node that made both blocks would hold a block's contents and the seed that settles them. The rule is that nobody should own both a bet and the seed that resolves it, as long as another node is able to answer.
Why not remove it from the draw?
Removing the previous producer would make a two-node chain alternate strictly between its nodes, and it would leave a chain with a single working node unable to produce at all. Demoted rather than removed, the previous producer remains the producer of last resort: if nobody else delivers, it can still make the block from round 10, whose target is 150 seconds after the previous block. The chain never halts because of this rule.