Curriculum·G301 Solidity Mental Models·about 33 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. A check in the contract's refund logic compared the wrong counters: instead of comparing its refund-progress count to the bid index, it required that count to reach the total number of bids, a condition that could never be satisfied, so every attempt to claim funds from the contract failed. 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. Nothing was stolen and nothing was taken out; 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 a refund check meant its 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, 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
- https://consensysdiligence.github.io/smart-contract-best-practices/attacks/
- https://www.halborn.com/blog/post/explained-the-akutars-nft-incident-april-2022
- https://decrypt.co/98530/aku-ethereum-nft-launch-ends-with-34m-locked-in-flawed-smart-contract
- https://www.theblock.co/linked/143198/smart-contract-mistake-locks-up-34-million-of-eth-for-nft-project
- https://etherscan.io/address/0xf42c318dbfbaab0eee040279c6a2588fa01a961d
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.
Halborn's account gives 11,539.5 ether, about 34 million dollars, and names two flaws: an out-of-gas denial of service in the refund processing, which it says was never triggered, and the refund check that compared refundProgress to totalBids instead of bidIndex, which is what locked the funds. Decrypt and The Block report it differently on the first flaw: a user calling themselves USER221 deployed a griefing contract on April 22, 2022 that halted refunds and withdrawals until the team acknowledged it, after which the sale resumed; the funds were then locked by the counter mismatch, which neither the users nor the team could get past. This lesson uses only the second flaw, a condition that could never be met, which is the transferable point rather than the exact line of code. A balance read of the contract (0xf42c318dbfbaab0eee040279c6a2588fa01a961d) on 2026-10-20 still showed 11,539.5 ether.
