# It's not possible to execute governance proposals through the GovernorBravoDelegate contract

GovernorBravoDelegate sets executed=true on queue, so state() returns Executed and execute() reverts, permanently bricking governance proposal execution.

- Payout: Audit contest
- Severity: high
- Program: Canto
- Found by: Ruhum
- Disclosed: 2022-10-18
- Write-up quality: 6/10
- Original: https://github.com/code-423n4/2022-06-newblockchain-findings/issues/39
- Library page: https://bugbountylibrary.com/r/c4%3A2022-06-canto%3AH-13
- Tags: area:web3 domain:web3 impact:dos kind:contest platform:code4rena sev:high tech:evm tech:solidity technique:regression technique:source-review vuln:business-logic vuln:governance

**Target:** GovernorBravoDelegate governance contract (Solidity/EVM)
**Root cause:** The queue path sets proposal.executed = true prematurely; state() then returns Executed instead of Queued, so execute()'s require(state == Queued) always fails.
**Steps:**
1. Read GovernorBravoDelegate.sol queue logic: `proposal.executed = true` set at queue time (L63).
2. Observe execute() requires `state(proposalId) == ProposalState.Queued` (L87).
3. Observe state() returns Executed when `proposal.executed` is true (L117).
4. Queue a proposal, then call execute(): state() returns Executed, require fails, execution reverts permanently.
5. Compare to Compound original where executed stays false until execution.
**How found:** Code review comparing the forked GovernorBravoDelegate against the original Compound implementation, spotting the divergent `executed = true` assignment in the queue function.
**Insight:** When auditing governance forks of Compound, diff the proposal state machine (queued/executed flags) against upstream; a single premature flag assignment can permanently brick execution.

