Skip to content

How to Rotate the Validator Committee

Rotating the validator committee requires a governance proposal with --action set-treasury. The proposal updates the governance header in the BLKL payload, replacing the validatorMerkleRoot with a new one that commits to the updated validator set.

Use the CLI to compute the Merkle root for the new validator set:

Terminal window
# The Merkle root is computed from the ordered list of compressed pubkeys
# Leaves: blake2b(compressed_pubkey_33_bytes) for each validator
# Tree padded to next power of 2, built with CKB blake2b

(This tooling is in development. Contact the maintainers for the current approach.)

Terminal window
ckb-firewall propose \
--action set-treasury \
--treasury-lock-code-hash <treasury-lock code hash> \
--treasury-lock-hash-type data1 \
--treasury-lock-args <governance_lock_type_id(32) | proposal_anchor_type_id(32)> \
--evidence "https://..." \
--classification other \
--severity high \
--rationale "Add validator X, remove validator Y. New threshold: 4-of-7." \
--proposer operator

Anchor, collect votes from the current committee (before rotation), and execute. After execution, the registry’s governance header carries the new validatorMerkleRoot and threshold. Future proposals must be voted on by the new committee.