Fix: execute Fails — Vote Digest Mismatch
Symptom
Section titled “Symptom”ckb-firewall execute fails with:
Error: voteDigestHash mismatch Expected: 0xabc... Recomputed: 0xdef...The voteDigestHash stored in the proposal JSON no longer matches what the CLI recomputes from the stored vote records. This happens when:
- The proposal JSON was edited after votes were recorded
- Votes were imported in an inconsistent state (two participants imported each other’s exports out of order)
- The proposal file was manually modified
Re-import the proposal from the participant whose vote records are authoritative:
ckb-firewall import proposal-latest-from-alice.jsonimport validates the proposalIdHash and voteDigestHash before merging. If the import succeeds, the local state is now consistent. Run execute again.
If no single participant has a consistent copy, re-collect votes:
-
Start from the original export before any votes were cast:
Terminal window ckb-firewall export --proposal <id> --out proposal-clean.json(If the original file is not available, look at the
createdAttimestamp and find the earliest export.) -
Distribute
proposal-clean.jsonto each validator -
Each validator re-imports and re-votes:
Terminal window ckb-firewall import proposal-clean.jsonckb-firewall vote --proposal <id> --vote yesckb-firewall export --proposal <id> --out proposal-voted.json -
Collect and merge all voted exports sequentially:
Terminal window ckb-firewall import proposal-voted-alice.jsonckb-firewall import proposal-voted-bob.jsonckb-firewall import proposal-voted-carol.json
Once all votes are merged and proposals shows the correct count, execute should succeed.
Verify
Section titled “Verify”Before running execute, check that the vote count is correct:
ckb-firewall proposals --status approvedThe proposal should show threshold-many yes-votes and status approved. If it shows fewer, import the missing voted exports.