Curriculum·G301 Solidity Mental Models·about 34 min
Immutable: one mistake can be permanent and total
By the end of this lesson you can
- →Explain that a deployed contract is immutable, so a logic error cannot be patched after the fact
- →Describe how a refund-gating bug permanently locked about 11,539 ETH in the Akutars contract
- →Reason that immutability turns an ordinary bug into an irreversible, total loss with no undo
- →Treat 'we can fix it later' as false for on-chain code and design for correctness before deployment
Graduate · enrolled learners
This lesson opens with Akutars, April 2022.
- What happened
- The Akutars project ran an NFT auction and collected about 11,539 ether, roughly 34 million dollars at the time, in its smart contract. The contract's logic tied the team's ability to withdraw the proceeds to a refund process completing, and a flaw in how that gate was written meant the condition could never be satisfied, so the withdrawal function could never succeed. Because a deployed contract is immutable, there was no way to patch the logic, no admin override, and no alternative path to move the funds, so the entire 11,539 ether was locked in the contract permanently. The team acknowledged the loss publicly. Nothing was stolen and no attacker profited; an ordinary logic error, the kind a patch would fix in any normal program, became a permanent and total loss because on-chain there was no patch to apply. The money is still there, visible to everyone, and reachable by no one.
- The decision point
- A deployed smart contract is immutable: its code cannot be changed after deployment, so a logic error cannot be patched, rolled back, or overridden the way a bug in ordinary software can, and a mistake that would be a quick fix elsewhere can become a permanent, total, irreversible loss on-chain. Akutars is the case: a flaw in how a withdrawal was gated behind a refund process meant the condition could never be met, and because the contract could not be changed and had no alternative path, about 11,539 ether, some 34 million dollars, was locked in it forever, with no theft and no attacker, simply a bug that could not be fixed. This is the hardest consequence of the course's mental model: the machine runs exactly what the code says, and once deployed it keeps running exactly that, so the code you ship is the code you are stuck with, and correctness is not something you iterate toward in production because there is no iterating on immutable code holding real value. So the discipline is to treat 'we can fix it later' as false for on-chain code, to design and review for correctness before deployment rather than after, and, where change genuinely must be possible, to build it in deliberately and carefully (the subject of a later course on upgrades) rather than assuming it, because the default is permanence. Akutars is what immutability does to an ordinary bug: it removes the undo, so the money sits in the contract forever, perfectly visible and permanently unreachable, a monument to the difference between software you can patch and software you cannot.
- Recorded loss
- $34,000,000
What you will be able to answer
- →Why was ~11,539 ETH lost in Akutars (April 2022)?
- →What does immutability mean for deployed code?
- →How does immutability change an ordinary bug?
- →The right stance toward 'we can fix it later' on-chain
Orientation and Year One are open: anyone can read them without an account. From Year Two onward the lessons are for enrolled learners, because progress through the later years only means anything if it is tracked against a record.
It is free. We do not sell the list and there is nothing to buy at the end of it.
Sources and review
Confidence high·Volatility low·Reviewed 2026-09-17·Owner unassigned
Contested
The roughly 34 million dollar figure is the approximate value of the about 11,539 ether at the time it was locked; the ether remains locked in the contract and its dollar value varies with the price of ether. The lesson uses the immutability mechanism, not a precise dollar loss.
The locked balance is verifiable on-chain and the loss was acknowledged publicly by the project; this lesson summarizes the cause as a refund-gated withdrawal whose condition could not be met, which is the transferable point rather than the exact line of code.
