History – Late-vote swings

Back
v1.0.3 · currentEm dashes become spaced en dashes (VOICE.md); dashes inside quotes and source titles kept–
7 blocks modified
  • Modified – Text at Block 1 → Block 1

    Concept A late-vote swing – th…nd/proposal/289) (July 2024) —– 682.19K COMP for, 633.64K aga…ction time by handing someone —– a late voter, a guardian, a market —– the power to move the clock

  • Modified – Text at Block 2

    Why a deadline is an advantage…nd needs no privileged access —– it is simply the shape of a p…feated for most of the period —– which also suppresses turnout…e here, not only a complaint) —– and then to vote its whole po…ivated opposition to organise.

  • Modified – Text at Block 3

    Compound Proposal 289 The can…00 COMP of the DAO's reserves —– about $24 million at the time —– into a vault the proposers wo…e capture side of the episode —– see Compound DAO (/wiki/daos/lending/compound-dao) .

  • Modified – Text at Block 4

    Four answers, and what each on…after quorum is first reached —– the contract's own stated pur…um is already comfortably met —– a for-versus-against reversal rather than a quorum event —– extends nothing. Open an obj…ngths are contract parameters —– lastMinuteWindowInBlocks and…stead of procedurally awkward —– and it pays for that by makin…ne only relocates the problem —– it buys time for a response t…ll has to come from somewhere —– which is why it is usually pa…n, and someone has to hold it.

  • Modified – Text at Block 5

    What none of them give the dis…sumes a response is available —– that opponents can be mustere…the people walking through it.

  • Modified – Text at Block 6

    How Caper approaches this A …an before, and a tie ratifies —– holding is consent. And a hol…w to read them off the ledger.

  • Modified – Text at Block 7

    References - Compound Propos…z/gov/compound/proposal/289) —– the on-chain record: totals, …e/GovernorBravoDelegate.sol) —– the governor that ran the vot…vernorPreventLateQuorum.sol) —– the deadline-extension module…ance/NounsDAOInterfaces.sol) —– lastMinuteWindowInBlocks and ….io/@el4d/nouns-dao-v3-spec) —– the objection-only period's t…-brakes/) (5 September 2026) —– the minute-by-minute reconstr…change-for-staking-product/) —– the negotiated reversal.

v1.0.2Em dashes become spaced en dashes (VOICE.md); dashes inside quotes and source titles kept–
1 block modified
  • Modified – Text at Block 1 → Block 1

    Concept A late-vote swing —– the outcome of a vote changin… — the power to move the clock

v1.0.1Proposal 289's late swing re-read from Governor Bravo's VoteCast log (0xc0Da0293…6529, proposal 289, ended 17:45 UTC 28 Jul 2024): ~563,600 of 682,191 COMP For (82%) cast in the final 34 minutes, 20 votes; the largest late vote (~59,700) came 27 minutes out, so the CryptoSlate detail 'largest single block eight minutes before the deadline' is removed. The share itself matches CryptoSlate.–
1 block modified
  • Modified – Text at Block 3

    Compound Proposal 289 The can…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 deadlin Governor Bravo's own vote log (https://etherscan.io/address/0xc0Da02939E1441F497fd74F78cE7Decb17B66529#events) shows 82% of the support, about 564,000 of the 682,191 COMP cast for it, arriving in the final 34 minutes before the vote closed at 17:45 UTC on 28 July 2024. It came in 20 votes, the largest about 60,000 COMP at 27 minutes out and the last at 8 minutes out, and CryptoSlate's reconstruction (https://cryptoslate.com/daos-are-forcing-crypto-protocols-to-choose-between-code-and-emergency-brakes/) gives the same share. Nothing was exploited; Gove…i/daos/lending/compound-dao) .

v1.0.0New concept page: late-vote swings, the four design responses and what each keys on–
7 blocks added
  • Added – Text at Block 1 → Block 1

    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

  • Added – Text at Block 2

    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.

  • Added – Text at Block 3

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

  • Added – Text at Block 4

    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.

  • Added – Text at Block 5

    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.

  • Added – Text at Block 6

    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.

  • Added – Text at Block 7

    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.