Skip to content

Step 5: Share Your Vote and Learn About Execute

Your vote is stored locally. To let other validators import it, export the updated proposal:

Terminal window
ckb-firewall export --proposal tutorial-abc123 --out proposal-tutorial-voted.json

Send proposal-tutorial-voted.json to the other governance participants. When they import it, the vote is merged into their local copy:

Terminal window
ckb-firewall import proposal-tutorial-voted.json

This 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.

Once the proposal has:

  1. Been anchored on-chain as a PBLK cell (done by the proposer with ckb-firewall anchor)
  2. Aged on-chain for at least 72 hours (enforced by CKB consensus via the since field)
  3. Accumulated threshold-many validator yes-votes (3 of 5 on the canonical registry)

Any participant can run:

Terminal window
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.

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