The node registry and its seats
You are looking at an old version of this page: revision #52 by zoobc.how, 2026-10-26 20:39 UTC. See the current version
The node registry is the on-chain list of the nodes allowed to make ZooBC blocks. Each entry is a seat. In Proof of Participation the seats, not coins or hardware, decide who makes blocks: an operator's chance to make the next block equals its share of the seats. Every change to the registry is a transaction that every node validates, and anyone can read it.
What a seat records
For each node the registry holds:
- the node id, a number derived from the node key: its first 8 bytes read as a little-endian integer, with the top bit cleared;
- the node key, a 32-byte Ed25519 public key that signs the node's work (see keys of a node);
- the owner account, the ordinary account that registered the node and controls it;
- the registration height, the block in which the node registered;
- the locked stake, the ZBC the owner locked as a bond;
- the status: registered (active), queued or deleted.
The node's participation score is kept beside it. The registry is versioned by block height, so the membership at any past height can be rebuilt, and each block is judged against the registry as it stood at the previous block.
Why seats
Under Proof of Work, a share of block production can be bought as fast as hardware; under Proof of Stake, as fast as coins. In ZooBC it is a share of seats, and seats are admitted one at a time at a pace the protocol sets (admission pace). A majority of block production therefore cannot be bought quickly. Proof of Participation compared with PoW and PoS sets the three designs side by side.
The producer draw is uniform over the registered seats that are not suspended (draw). Every seat is equally likely to be drawn, whatever its owner has locked. An operator holding 3 of 30 seats makes about one block in ten, whether each of its seats locks 100 ZBC or 10,000 ZBC.
What the stake does
If the stake buys no blocks, what is it for?
- It orders the queue of nodes waiting to join, by stake multiplied by time waited (queue).
- It makes every seat cost something: a newcomer must lock at least the entry minimum (registering a node).
- It is a bond. A tenth of it is lost if the node is expelled, or leaves while missing or suspended; that tenth goes to the longevity pool, which pays the working nodes (leaving the registry).
The stake earns nothing by itself. Rewards ignore it too: the coinbase lottery is weighted by participation score, which only real work raises (maturity and earnings).
Genesis seats and newcomers
Each chain starts with 11 genesis seats held by the ZooBC Foundation. They are written into the registry at height 0 with no locked stake, the default score of 20 % and an operating balance of 10 ZBC on each node's own account. Everyone else joins through the queue: no one picks applicants, there is no approval step and there is no weekly schedule. A registration does not expire.
How a seat changes status
| From | To | Caused by |
|---|---|---|
| (none) | registered | the genesis, at height 0 |
| (none) or deleted | queued | a registration |
| queued | registered | admission |
| registered | deleted | expulsion, removal by the owner, or a claim |
| queued | deleted | removal, a claim, or a drop for missed attendance |
Suspension is not a status. A suspended node stays "registered" but is left out of the producer draw until it returns (missed turns, suspension and expulsion).
Reading the registry
The registry is public, and no key is needed to read it:
GET /api/v1/nodes?status=alllists every seat with its owner and registration height; genesis seats keep height 0.GET /api/v1/nodes?status=queuedlists the queue, with each node's stake and registration height.GET /api/v1/blockchain/ruleslists the rules in force.
It is not a list of wallets: an ordinary account needs no registration to hold or send ZBC.