ZooBC wiki
Security and architecture

The two-thirds rules

You are looking at an old version of this page: revision #92 by zoobc.how, 2026-10-26 20:39 UTC. See the current version

Most of what happens on ZooBC needs no vote at all: one drawn producer signs each block, and every node checks it. But some decisions speak for the whole registry: a checkpoint that makes history final, coins minted for a deposit on another chain, the veto of a faulty release. For these ZooBC uses one bar: two thirds of the registered seats. With 11 seats, that is 8.

Where two thirds applies

DecisionWhat is needed
storing a spine blockco-signatures from two thirds of the full signer list, rounded up (8 of 11); more than half (6 of 11) only after 3 spine periods without a spine block; never fewer than 5
crediting a bridge deposit, releasing a bridge withdrawalattestations from two thirds of the registry, each signed with a node key
a bridge mint above the daily capevery seat that is not suspended
resolving an oracle fact that triggers paymentstwo thirds of the active registry attesting the same value
vetoing a releasetwo thirds of the registered seats attesting a veto
replacing the release authoritythe same two-thirds quorum, counted only once its oldest vote is a week old
switching on a bundle of new rulesat least two thirds of the registered producers having made a block with the new version recently

In more detail:

  • Spine blocks. The bar is max(spine_min_signatures, ceil(n × 67 / 100)) over the spine's signer list. Each signer checks the block's content against its own chain before signing. See spine chain.
  • The bridge. Keeper programs beside the nodes watch the custody addresses on the other chain and vote with fee-free attestations. A deposit is minted, one for one, when two thirds of the registered nodes attest the same token, amount and recipient. If one day's mints of a coin would pass the larger of one whole coin and 10 % of its supply, every non-suspended seat must agree. See bridge and wrapped coins.
  • Oracle facts. Registered nodes attest events; when two thirds of the active registry attest the same value, the event resolves and pays every pending trigger that names it. See triggers and attestations.
  • Releases. A veto attested by two thirds of the seats revokes a release exactly as the release authority's own revocation would. A vote naming a new release authority counts only once its oldest vote is a week (40,320 blocks) old, so the current holder sees it coming. See releases and updates.
  • The readiness gate. A bundle of new consensus rules switches on only once at least ceil(2R/3) distinct registered producers have made a block with the new version within a recent window of max(720, 5 × n) blocks, and not before the release has been registered for a day.
A table of decisions: spine block (suspended seats still count), bridge deposit or withdrawal, release veto and oracle fact need two thirds; an ordinary block and a votable price do not.
A table of decisions: spine block (suspended seats still count), bridge deposit or withdrawal, release veto and oracle fact need two thirds; an ordinary block and a votable price do not.

How suspended seats count

From version 0.5.8, suspended seats (see missed turns, suspension and expulsion) leave every two-thirds count: they neither vote nor count in the total. The spine is the one deliberate exception. It keeps counting every seat on its signer list, suspended or not, so that a spine checkpoint always speaks for two thirds of all seats.

The registry floor

The registry-wide decisions also have a floor: no registry-wide attestation resolves while the registry has fewer than max(3, min_registry_size) seats or distinct owner accounts: 7 on mainnet. Two seats of one operator are one voice for the owner count.

What does not need two thirds

  • An ordinary block. One producer, drawn by the seed, signs it, and every node checks it (see draw).
  • Votable prices, such as the account rent or the transfer fee. Once per cycle each price moves to the average of the counted seats' votes, each vote first limited to at most 20 % up or half down (see price votes).

Some checks a node makes for itself also use two thirds, but they are local policy, not consensus: a stale node follows the tip that two thirds of a sample of registered peers report; the snapshot check's wider round needs two thirds of the answering peers (see snapshots and fast sync); and a node's fork poll needs at least 0.66 of the voting peers.

The other side of two thirds

A two-thirds bar means that just over a third of the seats, acting together or simply not voting, can hold a decision back. For the spine this is softened by the fallback to more than half after three idle periods. The readiness gate has no deadline: just over a third of the seats can hold an upgrade back.

See also