# Votes locked in failed proposal

Governance liveness when votes or slots stay parked in failed, cancelled, or unexecutable proposals

_Area: Smart contract access control and control flow. Seen in 4 disclosed reports; latest 2024-04-19. Updated 2026-10-23._

## How it works
Governance assumes that failed or stalled proposals release their resources (votes, the active-proposal slot, eligibility) so the system can move on. When that release never happens, the resources stay parked. If the parked amount is large enough relative to a threshold, no new proposal can ever gather the required support, and governance stops permanently. The root cause is a liveness assumption: thresholds and state machines are designed for the happy path where proposals terminate cleanly, not for the case where a proposal fails, is cancelled, or cannot execute.

## Where it shows up
- Endorsement or activation thresholds measured against total supply while votes are held by an active proposal [E4](https://bugbountylibrary.com/r/c4%3A2022-08-olympus%3AH-01.md).
- A single-slot state machine where `makeProposal` requires the current slot to be empty [E5](https://bugbountylibrary.com/r/c4%3A2022-01-behodler%3AM-04.md).
- Terminal transitions (execute) that can revert, rolling back the state change that would have freed the slot [E5](https://bugbountylibrary.com/r/c4%3A2022-01-behodler%3AM-04.md).
- "Best/most votes" selectors that do not filter by deadline or eligibility [E2](https://bugbountylibrary.com/r/c4%3A2024-01-salty%3AM-14.md).
- Per-actor permissions where one role can cancel everything and another is the sole proposer [E3](https://bugbountylibrary.com/r/c4%3A2023-10-zksync%3AM-13.md).
- Membership gated on prior-epoch state while quorum counts current-epoch power [E1](https://bugbountylibrary.com/r/sherlock%3A2024-12-seda-protocol%3AM-11.md).

## How to review
The invariant to check: for every proposal state (active, failed, cancelled, unexecutable), the resources it holds must be reclaimable, and the remaining eligible resources must still be able to satisfy every threshold. Concretely: can votes locked in a failed proposal be withdrawn or reused? If a proposal cannot execute, does the slot free itself or require a separate path? Does the selector exclude ineligible or immature ballots? Map each role's permissions and ask which single compromise or stuck state is unrecoverable [E3](https://bugbountylibrary.com/r/c4%3A2023-10-zksync%3AM-13.md).

## Variants seen
- Votes locked in a failed active proposal starve the endorsement threshold [E4](https://bugbountylibrary.com/r/c4%3A2022-08-olympus%3AH-01.md).
- Accepted-but-unexecutable proposal jams a single-slot DAO [E5](https://bugbountylibrary.com/r/c4%3A2022-01-behodler%3AM-04.md).
- Immature ballots with mutable tallies block finalization of a mature proposal [E2](https://bugbountylibrary.com/r/c4%3A2024-01-salty%3AM-14.md).
- Asymmetric cancel-vs-propose rights deadlock upgrades [E3](https://bugbountylibrary.com/r/c4%3A2023-10-zksync%3AM-13.md).
- Prior-epoch gating versus current-epoch quorum halts consensus [E1](https://bugbountylibrary.com/r/sherlock%3A2024-12-seda-protocol%3AM-11.md).

## Impact and severity
Permanent governance freeze or chain halt; severity is high because recovery requires out-of-band intervention. Worse when the stuck fraction exceeds the threshold margin, when no cancel/withdraw path exists, or when a minority can trigger the stuck state cheaply [E2](https://bugbountylibrary.com/r/c4%3A2024-01-salty%3AM-14.md)[E4](https://bugbountylibrary.com/r/c4%3A2022-08-olympus%3AH-01.md).

## Evidence
- E1: https://bugbountylibrary.com/r/sherlock%3A2024-12-seda-protocol%3AM-11.md
- E2: https://bugbountylibrary.com/r/c4%3A2024-01-salty%3AM-14.md
- E3: https://bugbountylibrary.com/r/c4%3A2023-10-zksync%3AM-13.md
- E4: https://bugbountylibrary.com/r/c4%3A2022-08-olympus%3AH-01.md
- E5: https://bugbountylibrary.com/r/c4%3A2022-01-behodler%3AM-04.md
