---
title: "Late-vote swings"
url: "https://caper.network/wiki/dao-governance/concepts/voting/late-vote-swings"
updated: 2026-09-20
license: CC-BY-4.0
license_url: "https://creativecommons.org/licenses/by/4.0/"
---

# Late-vote swings

| Concept | A **late-vote swing** — the outcome of a vote changing in the closing minutes of a fixed voting period, when there is no longer time for anyone to answer it |
| --- | --- |
| Problem addressed | A deadline known in advance is a deadline that can be waited out. Votes are public while they are being cast, so a holder who votes last votes with strictly more information than everyone else and gives up strictly less of it |
| Common mechanisms | Deadline extension on late quorum · objection-only periods · time-weighted voting power · execution timelocks with a guardian veto · two-phase ratification |
| Reference implementations | [OpenZeppelin `GovernorPreventLateQuorum`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/extensions/GovernorPreventLateQuorum.sol) · [Nouns DAO `objectionPeriodDurationInBlocks`](https://github.com/nounsDAO/nouns-monorepo/blob/master/packages/nouns-contracts/contracts/governance/NounsDAOInterfaces.sol) · [Compound Governor Bravo](https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/GovernorBravoDelegate.sol) |
| Worked example | [Compound Proposal 289](https://www.tally.xyz/gov/compound/proposal/289) (July 2024) — 682.19K COMP for, 633.64K against, cancelled before execution |
| Key trade-off | Every remedy buys the electorate reaction time by handing someone — a late voter, a guardian, a market — the power to move the clock |

## Why a deadline is an advantage

An on-chain vote publishes each ballot as it is cast, and closes at a block height fixed when the proposal was created. Both properties are usually treated as virtues: the tally is auditable in flight, and nobody can extend a losing vote. Together they hand a measurable advantage to whoever votes last.

A holder who votes early reveals their weight and their direction to everyone who votes after them. A holder who votes late sees the whole distribution and reveals nothing anyone can still act on. The advantage is not an exploit and needs no privileged access — it is simply the shape of a public auction with a hard close, and it grows with the concentration of the electorate, because the fewer addresses can move the outcome, the more of it one late address captures.

It is sharpest against a proposal that appears to be losing. A minority that expects to be outvoted has an incentive to let the tally read _Defeated_ for most of the period — which also suppresses turnout among opponents, since a proposal that is clearly failing is not worth the gas to oppose ([voter apathy](/wiki/dao-governance/concepts/analysis/voter-apathy) is a resource here, not only a complaint) — and then to vote its whole position at once, too close to the close for the newly-motivated opposition to organise.

## Compound Proposal 289

The canonical case. In July 2024 a group calling itself the Golden Boys put [Proposal 289](https://www.tally.xyz/gov/compound/proposal/289), _Trust Setup for DAO investment into GoldCOMP_, to Compound's Governor Bravo: 499,000 COMP of the DAO's reserves — about $24 million at the time — into a vault the proposers would influence. Tally's record of the on-chain vote is **682.19K COMP for, 633.64K against, 5.24 abstaining**, and the proposal's final state is **Canceled**: it was never executed.

The timing is what makes it a case rather than an anecdote. On [CryptoSlate's reconstruction of the vote](https://cryptoslate.com/daos-are-forcing-crypto-protocols-to-choose-between-code-and-emergency-brakes/), 563,591 of the 682,191 supporting votes — 82% of all support — were cast in the final 34 minutes, with the largest single block landing eight minutes before the deadline. Nothing was exploited; Governor Bravo did exactly what it is written to do. The proposal passed, and then [the proposers agreed to rescind it](https://unchainedcrypto.com/compound-governance-attackers-agree-to-cancel-proposal-in-exchange-for-staking-product/) in exchange for a negotiated staking product.

That resolution is the part worth reading twice. The rules produced an outcome the DAO did not want, and what reversed it was not the rules but a negotiation conducted off-chain under reputational pressure, by people with no formal standing to conduct it. A governance system whose last line of defence is that the winner can be talked out of winning does not have a last line of defence. Compound's own directory entry covers the capture side of the episode — see [Compound DAO](/wiki/daos/lending/compound-dao).

## Four answers, and what each one keys on

The design responses differ less in what they do than in _what event they watch for_, and that difference decides which swings they catch.

### Extend the deadline when quorum arrives late

OpenZeppelin ships this as [`GovernorPreventLateQuorum`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/extensions/GovernorPreventLateQuorum.sol), a Governor module that pushes a proposal's deadline back so that a set amount of time always remains after quorum is first reached — the contract's own stated purpose is to stop "a large voter from swaying a vote and triggering quorum at the last minute, by ensuring there is always time for other voters to react". The parameter is `lateQuorumVoteExtension` and governance itself can change it. Its documented limit is precise and easy to miss: the module "only reacts to the **first** time a proposal reaches quorum", so a swing that happens once quorum is already comfortably met — a for-versus-against reversal rather than a quorum event — extends nothing.

### Open an objection-only period when the outcome flips

Nouns DAO V3 keys on the outcome instead. Its [specification](https://hackmd.io/@el4d/nouns-dao-v3-spec) defines a `lastMinuteWindow` at the end of the voting period: if a proposal is Defeated inside that window and a For vote flips it to Successful, an objection period opens, during which accounts that have already voted cannot vote and accounts that have not may only vote _Against_. Both lengths are contract parameters — [`lastMinuteWindowInBlocks` and `objectionPeriodDurationInBlocks`](https://github.com/nounsDAO/nouns-monorepo/blob/master/packages/nouns-contracts/contracts/governance/NounsDAOInterfaces.sol). It is a narrower instrument than a deadline extension and a more exact one: it fires on precisely the manoeuvre it is named for, and the asymmetric ballot means the extra time cannot be used to widen the winning margin.

### Weight the vote by how long the position has been held

[Conviction voting](/wiki/dao-governance/concepts/voting/conviction-voting) removes the deadline rather than defending it: support accrues weight the longer it is held, so a position taken minutes before a close carries almost none. It is the only one of the four that makes the late vote structurally weak instead of procedurally awkward — and it pays for that by making every decision slower, including the ones nobody contests.

### Put a delay between the vote and the money

[Governance timelocks](/wiki/dao-governance/concepts/voting/governance-timelocks) do not touch the vote at all; they separate passing from executing, so a surprising result is visible before it is irreversible. A timelock alone only relocates the problem — it buys time for a response that still has to come from somewhere — which is why it is usually paired with a guardian or [security council](/wiki/dao-governance/concepts/fundamentals/security-councils) that can cancel within the delay. That pairing is the trade the 289 episode pushed the industry toward, and it is a real trade: the DAO gets a stop button, and someone has to hold it.

## What none of them give the dissenter

All four remedies are defences of the _process_. Each extends the window in which the electorate can respond, and each assumes a response is available — that opponents can be mustered, that a guardian will act, that waiting is affordable. None of them changes what happens to a holder who loses the vote on the merits and wants no part of the result.

That holder's only exit is the market: sell the governance token into whatever bid exists, at a price that already reflects the decision they are trying to escape. It is the worst moment to be selling, which is exactly why the threat of it disciplines nothing. A governance system can be perfectly defended against late-vote swings and still offer a dissenting minority nothing but the door, priced by the people walking through it.

## How Caper approaches this

A [caper](/wiki/foundations/what-is-a-caper) splits the decision in two, so that winning the ballot is not the same as getting the money. The ranked vote is **legislative**: it decides what the caper wants, and the contract will not proceed without it (`trigger_proposal` refuses anything that has not passed its tally). What it does not do is execute. A passed proposal then has to be triggered, which opens a **market window**, and [resolution](/wiki/governance/execution) compares the curve's time-weighted average price across that window against the baseline recorded when the window opened. Only if the market holds does the proposal become executable.

A swing in the closing seconds of the ballot therefore buys its author the first phase and nothing else. The second phase has no ballot to snipe: it is priced continuously by everyone holding the token, it starts _after_ the tally is known rather than before, and a tie ratifies — holding is consent. And a holder who dislikes the result does not have to sell into that window: the [exit right](/wiki/governance/execution) redeems a share of the treasury sized by their own weight, at treasury value rather than at market. The mechanics are set out on [voting](/wiki/governance/voting) and [proposals](/wiki/governance/proposals); the window length and the ballot period are fields on the deployed component, and the [FAQ](/wiki/help/faq) explains how to read them off the ledger.

## References

- [Compound Proposal 289 on Tally](https://www.tally.xyz/gov/compound/proposal/289) — the on-chain record: totals, timeline and final state.
- [GovernorBravoDelegate.sol](https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/GovernorBravoDelegate.sol) — the governor that ran the vote.
- [OpenZeppelin `GovernorPreventLateQuorum`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/extensions/GovernorPreventLateQuorum.sol) — the deadline-extension module, and its own note on what it does not catch.
- [Nouns DAO `NounsDAOInterfaces.sol`](https://github.com/nounsDAO/nouns-monorepo/blob/master/packages/nouns-contracts/contracts/governance/NounsDAOInterfaces.sol) — `lastMinuteWindowInBlocks` and `objectionPeriodDurationInBlocks` as deployed.
- [Nouns DAO V3 specification](https://hackmd.io/@el4d/nouns-dao-v3-spec) — the objection-only period's trigger and ballot rules.
- [CryptoSlate: DAOs are forcing crypto protocols to choose between code and emergency brakes](https://cryptoslate.com/daos-are-forcing-crypto-protocols-to-choose-between-code-and-emergency-brakes/) (5 September 2026) — the minute-by-minute reconstruction of 289's close.
- [Unchained: Golden Boys agree to cancel Proposal 289](https://unchainedcrypto.com/compound-governance-attackers-agree-to-cancel-proposal-in-exchange-for-staking-product/) — the negotiated reversal.
