Networks
| Network | Chain ID | Block time | Notes |
|---|---|---|---|
| Mainnet | 20803 | 15 s | Production network |
| Testnet | configurable | 5–15 s | For staging and integration |
| Devnet | any | 1–5 s | Local development; single sealer |
configs/mainnet/genesis.json.
Genesis file structure
extraData field encodes the initial sealer set:
extradatagenerator tool:
Initialize a new network
init writes the genesis block. Run init once per data directory; running it again on a populated directory is a no-op.
Run a validator (Clique sealer)
A validator must be in the sealer set encoded inextraData, and must run with --mine:
15s and N sealers, each sealer proposes one block every 15 × N seconds on average.
Add or remove a sealer
Sealers vote on changes through theclique_propose API. Voting completes when a majority of current sealers agree.
extraData.
Inspect the active sealer set
Static peers
For private networks where discovery is undesirable, hard-code peers instatic-nodes.json under your --datadir:
--bootnodes.
Bootnodes
For public networks, run a bootnode:enode://... URL.
Operating a private testnet
A typical 3-validator testnet:- Generate three keystores with
keygenerator. - Build genesis with
extradatagenerator --validators <3 addresses>. geth initon each node.- Connect them via
static-nodes.json. - Start each with
--mine --unlock.
--mine and discovers at least one peer.
Reorg safety
Clique reorgs are bounded by the sealer-out-of-turn rule and are typically 1–2 blocks. For institutional flows,Qustody waits for CUSTODY_CONFIRMATION_DEPTH (default 12) blocks before marking a transaction CONFIRMED. Increase for high-value transfers.