Step 5: Share Your Vote and Learn About Execute
Share your vote
Section titled “Share your vote”Your vote is stored locally. To let other validators import it, export the updated proposal:
ckb-firewall export --proposal tutorial-abc123 --out proposal-tutorial-voted.jsonSend proposal-tutorial-voted.json to the other governance participants. When they import it, the vote is merged into their local copy:
ckb-firewall import proposal-tutorial-voted.jsonThis is how vote state accumulates without a shared server. Participants pass the proposal JSON file back and forth, merging votes, until the threshold is met.
When execute runs
Section titled “When execute runs”Once the proposal has:
- Been anchored on-chain as a
PBLKcell (done by the proposer withckb-firewall anchor) - Aged on-chain for at least 72 hours (enforced by CKB consensus via the
sincefield) - Accumulated threshold-many validator yes-votes (3 of 5 on the canonical registry)
Any participant can run:
ckb-firewall execute --proposal <id>execute does not require a private key for treasury-backed registries. It fetches the proposal anchor cell, verifies all vote signatures and Merkle proofs, builds the GOV1 v4 governance transaction, and submits it. If everything is valid, the registry cell is updated on-chain.
What you built
Section titled “What you built”You now know how to:
- Import a proposal shared by another participant
- Understand what the proposal fields commit to and why they are immutable
- Cast a signed validator vote
- Export the updated proposal to share your vote
Go deeper
Section titled “Go deeper” How to create a proposal The proposer side: create a new blacklist addition or removal.
How to anchor a proposal Lock the proposal on-chain to start the review window.
How to execute an approved proposal Run the execute transaction after the window and threshold are met.
Governance design Why the system is designed the way it is — on-chain anchors, Merkle trees, keyless treasury.