On Sunday 23 August 2026, someone withdrew 2 ETH from Tornado Cash, spent it accumulating a governance token on the open market, and then voted roughly $8.5 million out of Term Finance’s strategy vaults. No contract was broken. No function was called that was not meant to exist. The proposals passed.
Term had a seven-day timelock on vault proposals. Liquidity providers could veto anything sitting in the queue. Both protections were real, published, and completely irrelevant, because by the time there was something to veto the attacker held 100% of the voting power in four of the five USDC strategy vaults and around 91% of the Ethereum Meta Vault.
That is the thirty-second unasked half of fairness, and it is the one that survives a clean audit report.
TL;DR
- Term Finance lost an estimated $8.5 million on 23 August 2026, roughly 2,843 ETH and 1.68 million USDC, after an attacker bought enough governance tokens to control the vaults and voted the funds out.
- There was no smart contract bug. Audited code executed correctly. The attack ran through the governance system exactly as designed.
- A seven-day timelock and an LP veto existed. Neither helped, because the veto was itself a vote and the attacker already owned the majority. The failure was arithmetic, not apathy.
- The unasked question is not “is the code correct” but “what does it cost to buy the right to change the rules, and is that price lower than what the rules protect”.
- Satoshie’s position: outcome logic and VRF configuration should not be governable at all. No token, no proposal, no queue, nothing to outvote.
The half everyone asks
Was the code audited. Did the contracts do what they said they would do. Was there a reentrancy bug, a decimal mismatch, a rounding error somebody could farm. Good questions, and the industry has got noticeably better at answering them. Term had already survived that kind of failure: in May 2025 an oracle decimal mismatch during a routine upgrade cost about $1.5 million, non-malicious, funds eventually returned.
This was not that. Decurity’s monitoring bot flagged it, PeckShield and CertiK confirmed it, and the finding was the same every time: governance manipulation, not code exploitation. The contracts were fine. They were fine the entire time the money was leaving.
The half nobody asks
What does it cost to buy the right to change the rules?
Every system with a governance layer has that number. It is the market price of enough voting tokens to pass a proposal, and it sits somewhere completely different from the number everyone audits, which is the value the rules protect. Term’s pre-exploit vault TVL was around $12.45 million. The attacker took $8.55 million, about 68% of it, starting from 2 ETH and a market order.
Governance is only safe while control costs more than it captures. That is not a property of the code. It is a property of a token’s liquidity, its distribution, and how many holders treat it as a speculative position rather than a security parameter. All three can move against you in an afternoon, and none appear in an audit scope.
Why the timelock did not save anyone
On paper Term’s design was more careful than most. It separated the operational manager role from the governor role overseeing risk parameters and emergency functions. Proposals touching the vaults sat behind a seven-day delay. LPs could veto queued transactions.
But a timelock is not a defence, it is a notification. It buys time for somebody with both the power to act and the will to use it, and where no such party exists it gives you seven days of advance warning about a loss you cannot prevent.
The veto is the sharper lesson. It sounds like a safety catch, but it is a poll, and the attacker had already won the poll before proposing anything. The safeguard and the attack surface were the same mechanism. You cannot protect a vote by adding another vote.
Note how this differs from the usual complaint. The familiar failure is a protection nobody bothers to use: the firmware patch nobody installs, the block explorer nobody opens. This is not that. Attention would not have helped. Every LP could have watched the queue in shifts, caught the proposal the moment it landed, coordinated perfectly, voted as a bloc, and lost. A safeguard that resolves by majority is not a safeguard against somebody who can buy the majority. It is a formality with a countdown timer attached.
Term has since permanently closed the vault product and removed the relevant governance permissions. Its statement acknowledged a governance exploit but did not explain why the timelock and the veto failed, which is understandable while an investigation is live, and also the single most useful thing anyone in this space could publish right now.
The gaming version of this
Picture a crypto gaming platform with community governance. There is a token. Holders vote on the fee split, the prize distribution curve, the oracle the contracts read from, the implementation address behind the upgradeable proxy. Marketing calls it decentralisation.
Now notice what has happened to the odds on your results page. They have stopped being a fact and become the current value of a mutable variable. The 1-in-4,000 you were sold is accurate right up to the block in which a proposal changes it, and your protection is a vote you can be outbid on. The draw can be provably fair, the VRF proof can verify perfectly, and the payout logic underneath can still be replaced by whoever accumulated enough of a thinly traded token last Tuesday. A VRF proof certifies one execution. It says nothing about who is allowed to change what happens next time.
What Satoshie does about it, and what we do not
Our position is that outcome logic should not be governable. Satoshie’s raffle and coinflip contracts on Base settle from a Chainlink VRF callback, and there is no token, no proposal queue and no vote that can retarget the VRF coordinator, alter the payout path or rewrite the odds on a live draw. Nothing to accumulate, so nothing to outvote. That is not a claim about our restraint, it is the absence of a mechanism.
The honest half, carried forward from what we said about pause buttons: we do hold operational controls. We can stop new raffles and coinflips opening, and we can take the front end offline. What those controls cannot reach is a stake already committed or a VRF request already in flight, because those resolve on published rules we cannot amend mid-draw. BaseScan, which we do not operate, keeps last night’s result checkable whether we are up or not.
The other honest half: “no governance” is only worth anything if you verified it. Take a platform’s word that its contracts are not upgradeable and you are carrying a governance risk of exactly unknown size. Go and read the proxy admin.
Three questions worth asking any platform
- Can the rules deciding my payout be changed by a vote, and if so, what does enough voting power cost against the value sitting in the contracts?
- If a malicious proposal is queued, who can actually stop it, and does stopping it require out-holding whoever proposed it?
- Is the contract that resolves my game upgradeable? Not “did they say it isn’t”, but what does the proxy admin resolve to on a block explorer you opened yourself?
Term Finance did not get hacked in the way that word usually means. It got outvoted. Every line of its code performed to specification while $8.5 million walked out of the front door, through a process the protocol published in advance and invited people to participate in.
Fair execution of the rules is worth very little if the rules themselves are for sale.
📷 Photo by Elissa Garcia on Unsplash


