Rounds, timing and windows
You are looking at an old version of this page: revision #110 by zoobc.how, 2026-10-26 20:44 UTC. See the current version
ZooBC aims at one block every 15 seconds. After each block, time is cut into 15-second rounds, and the draw names one producer per round. A block's timestamp places it in a round, and only a node drawn for that round or the round before may make it. The rule gives the chain a steady rhythm and makes sure that an absent producer delays the next block by 15 seconds, never more.
Rounds and targets
Let P be the timestamp of the previous block. Round r has its target at P + 15 × r: round 1 at 15 seconds after the previous block, round 2 at 30 seconds, round 3 at 45 seconds, and so on. The producer of round 1 aims to stamp its block at its target. If it stays silent, the producer of round 2 makes the block, aiming at 30 seconds; and so on down the list.
Heights are never skipped. When a producer is absent, the next block simply arrives 15 seconds later, at the same height, from the next producer in line. Every node drawn before the actual producer counts a missed turn (see missed turns, suspension and expulsion).
Two rounds for every producer
A producer drawn in round i may make a block of round i or of round i + 1. So a late round-1 node may still deliver during round 2, while the round-2 node is entitled too. At any moment two drawn nodes are entitled to produce, and the chain never waits on a single node. Nor does it wait for anyone to be suspended: suspension needs four missed turns in a row and only removes a node from future draws.
Which round a timestamp falls in
The round of a block stamped at time T is:
round(T) = 1 + floor((T − P − 15 + 7) / 15) (and never less than 1)
Each round also has an acceptance window of 14 seconds, from 7 seconds before its target to just under 7 seconds after it. In whole seconds:
| Round | Target | Seconds the formula counts | Acceptance window (target ± 7 s) |
|---|---|---|---|
| 1 | P + 15 | up to P + 22 | P + 8 to P + 21 |
| 2 | P + 30 | P + 23 to P + 37 | P + 23 to P + 36 |
| 3 | P + 45 | P + 38 to P + 52 | P + 38 to P + 51 |
| 4 | P + 60 | P + 53 to P + 67 | P + 53 to P + 66 |
The last second the formula gives to each round (P + 22, P + 37, P + 52, ...) lies one second past that round's window. Validators check a block's timestamp against the window of its round with 2 seconds of tolerance, so these seam seconds are accepted too.
The round matters twice. It decides who may make the block, and it caps the block's weight in fork choice and cumulative difficulty: a block is never weighed as better than the round its stamp falls in, so a producer drawn in round 2 that stamps into round 3 weighs no more than a round-3 block.
Clock rules every node applies
- A block stamped less than 13 seconds after its parent is refused as produced too fast (the 15-second interval minus 2 seconds of tolerance). Stamping a block at once, as soon as a gap is noticed, is therefore impossible.
- A block stamped more than 7,200 seconds (2 hours) ahead of a node's own clock is refused by that node until its clock catches up.
- After a stall of more than an hour (the 3,600-second recovery limit), a block is still accepted when it comes from the producer the draw expects, so a halted chain can start again.
Two windows are involved. A producer drawn in round i must stamp its block within that round's creation window, from 7 seconds before the round's target to 27 seconds after it, which reaches into the next round. Validators also require the stamp to lie in the acceptance window of the round it falls in, with the 2 seconds of tolerance.
Local timing policy
Two timings are each node's own policy, not consensus rules. The producer drawn first sends its block at P + 15; others send theirs at the end of their round's window minus 5 seconds (and never before P + 15). And about once a second, each node applies, among the candidate blocks it holds, the one with the lowest position whose window is open.
For comparison, Bitcoin aims at one block every ten minutes. ZooBC's 15-second rhythm is the same on every ZooBC chain: a day is 5,760 blocks (see blocks and time).