Onpode
Cover art for Why code on a blockchain is law — and what that breaks when the code is wrong

Why code on a blockchain is law — and what that breaks when the code is wrong

October 21, 2026 · 13 min

Alex Mercer & Jordan Hale

Smart contracts execute code automatically and permanently on blockchain — immutability is the feature that makes them trustworthy and the flaw that makes errors unrecoverable. The 2016 DAO hack drained $70 million in minutes not because the code broke, but because it worked exactly as written, with no way to intervene.

Smart contracts are self-executing programs stored on a blockchain that automatically carry out transactions when predetermined conditions are met, eliminating the need for traditional intermediaries such as banks, lawyers, or escrow agents.

0:0013:28
Get the next episode on Crypto →

Follow it free — new episodes land in your feed.

Or make your own — any topic, in minutes

More Onpode episodes on Crypto →

About this episode

Smart contracts get pitched as trustless — no banks, no lawyers, no gatekeepers. But the real story is more unsettling. The episode starts with the 2016 DAO hack, where $70 million disappeared not because the code failed, but because it worked exactly as written. That's the central paradox: the immutability that makes a blockchain contract credible is the same property that makes any flaw in it permanent. No pause button, no patch, no one to call. From there it traces the full arc — Nick Szabo's 1994 definition, Ethereum's launch in 2015, and how Turing-completeness turned a theoretical framework into infrastructure capable of holding real financial stakes. It gets concrete: business logic vulnerabilities that pass clean security audits, the gap between what a developer meant and what the Solidity actually said, and why mutation testing frameworks had to be formally developed as an acknowledgment that pre-deployment correctness is everything. The episode then digs into the 'fix' — upgradeable proxy contracts — and why it quietly recreates the centralized authority the whole system was built to escape. There's also a direct economic disincentive: upgradeable architectures cost more gas to run, so projects skip the safer option to stay competitive on fees. And it ends somewhere genuinely uncomfortable: the possibility that if code and intent diverge, no court may have jurisdiction. The loss just lands. Worth your time if you've ever assumed that decentralized means protected.

Frequently asked

What is a smart contract and how does it work?

A smart contract is code deployed on a blockchain that executes automatically when predefined conditions are met, with no human approval required. Nick Szabo coined the term in 1994; Ethereum made it practical in 2015 by introducing a Turing-complete runtime — the EVM — capable of running arbitrarily complex logic across thousands of nodes identically.

What happened in the 2016 DAO hack?

The 2016 DAO hack drained $70 million in minutes. The smart contract did not malfunction — it executed exactly as its code specified. The logic permitted the drain, and because smart contracts are immutable once deployed, nothing could be altered or paused while the funds left. There was no recovery mechanism and no appeal.

Why can't a smart contract be fixed after deployment?

Smart contracts are immutable by design: once deployed to a blockchain, the code cannot be altered or deleted. This immutability is the property that makes them trustworthy — no intermediary can interfere — but it also means any error present at deployment is permanent, and the Ethereum Virtual Machine will execute that error with the same certainty as correct code.

Do upgradeable smart contracts solve the immutability problem?

Upgradeable smart contracts — using Proxy or Diamond patterns — allow logic to be swapped after deployment, but they reintroduce a trusted authority: the keyholder who controls which logic the proxy points to. That keyholder can rewrite financial agreements users believed were fixed. Upgradeable architectures also cost more in gas fees, creating a direct economic disincentive to adopt them.

Are smart contracts legally binding?

Smart contract on-chain execution is not automatically equivalent to a legally binding agreement. The American Arbitration Association has noted that smart contracts are not always binding in the traditional legal sense. If code and intent diverge, there may be no court or arbitration panel with jurisdiction — losses land on whoever the code disadvantages, with no appeal.

Grounded in 7 sources
A Comparative Gas Cost Analysis of Proxy and Diamond Patterns in EVM Blockchains for Trusted Smart Contract Engineering ↗ · arxiv.org
Bridging Immutability with Flexibility: A Scheme for Secure and Efficient Smart Contract Upgrades ↗ · arxiv.org
Mutation Testing for Ethereum Smart Contract ↗ · arxiv.org
From smart legal contracts to contracts on blockchain: An empirical investigation ↗ · sciencedirect.com
What Are Smart Contracts and How Do They Work? ↗ · adr.org
Smart Contracts Explained: Use Cases, Benefits & Platforms | Aezion ↗ · aezion.com
What Is a Smart Contract? Definition, How It Works & Security Risks - Chainalysis ↗ · chainalysis.com
Read transcript

Jordan Hale: Alex, I have to tell you — I had this moment this week where I was trying to explain to my sister what a smart contract actually is, and I got about two sentences in and she just looked at me and said 'so it's just code,' and I could not, like, I could not articulate why that's wrong and also kind of right at the same time.

Alex Mercer: That's a genuinely hard thing to explain, and I think the difficulty is the right starting point for today.

Jordan Hale: Because 'just code' sounds safe and boring, you know, like, code has bugs, you patch them, whatever — but that's not how this works at all.

Alex Mercer: It is not. The DAO hack — 2016, seventy million dollars gone in minutes — that's the illustration your sister needs. The attacker didn't find a bug and exploit it. The contract executed perfectly. The code did exactly what it said. And seventy million dollars was unrecoverable by the time anyone understood what had happened.

Jordan Hale: Wait — so the problem wasn't that the code was broken. The problem was that it worked.

Alex Mercer: That's the core tension. And it traces back to a property called immutability — once you deploy a smart contract, the code is fixed. Cannot be altered, cannot be deleted. That's intentional. That's what makes it trustworthy. But it also means any error present at deployment is permanent. There is no pause button. Self-execution fires when conditions are met, automatically, no human approval required.

Jordan Hale: And this idea is — wait, how old is this actually? Smart contracts aren't, like, a 2015 invention?

Alex Mercer: Nick Szabo coined the term in 1994. He defined it as a set of promises specified in digital form, with protocols for parties to perform on those promises. The concept existed more than a decade before any infrastructure could run it.

Jordan Hale: So he invented the idea and then had to wait twenty years for computers to catch up to him.

Alex Mercer: More or less. Ethereum launched in 2015 and that's when it became real infrastructure — because the Ethereum Virtual Machine is Turing-complete, meaning you can write arbitrarily complex logic, not just simple if-then transfers. That's what turned Szabo's theoretical framework into something that could hold forty, seventy, hundreds of millions of dollars.

Jordan Hale: And the moment it can hold that much money, the fact that nobody can touch it once it's deployed stops being a feature and starts being — terrifying?

Alex Mercer: Both, simultaneously. Immutability is the promise — the logic executes exactly as written, no intermediary can interfere. And immutability is the trap — every error is locked in with the same finality. The DAO didn't teach us that smart contracts are flawed. It taught us that the thing we love about them and the thing that can destroy you are the same thing.

Jordan Hale: Okay but — that same-thing point is what I keep getting stuck on, you know, because I want a concrete image for it. And the one that finally clicked for me is — it's like a vending machine locked behind glass. You put in the right coins, the snack drops, no cashier anywhere near it. That's the whole design. But if the machine is wired wrong, it dispenses the wrong thing with exactly the same certainty, and nobody can reach inside to fix it.

Alex Mercer: That's the right image. And the glass is load-bearing — it's not decorative. The glass is what makes you trust the machine in the first place.

Jordan Hale: Right — but then what actually guarantees the snack drops? Like, what's the mechanism underneath?

Alex Mercer: The Ethereum Virtual Machine. The EVM is the runtime — think of it as the engine room. It runs the contract's code identically across every single node on the network. Not approximately identically. Identically. That identical execution across thousands of machines is what generates the trustlessness guarantee — two parties who've never met can swap digital assets because the result is agreed upon by consensus, not by any single authority.

Jordan Hale: Wait — every node runs the exact same code at the same time?

Alex Mercer: Every node. And they all have to get the same answer. That's the check.

Jordan Hale: So if the machine is wired wrong — to keep the analogy going — every node in the network is simultaneously watching it dispense the wrong snack, and they're all, like, confirming that yes, this is in fact the wrong snack being dispensed correctly.

Alex Mercer: Exactly. And that's — I mean, that's where Turing-completeness becomes the relevant thing. Before Ethereum launched in 2015, blockchains could only run simple logic. Turing-completeness, which the EVM introduced, means you can write arbitrarily complex conditions. The contract isn't just 'transfer ten coins if balance is sufficient' — it can be hundreds of interlocking rules. Which is what makes it powerful enough to hold real financial agreements. And it's what makes the wiring complicated enough to go wrong in ways that aren't obvious until someone's already lost money.

Jordan Hale: So complexity is — wait, no, the complexity isn't the enemy exactly, it's more that complexity is the thing that makes the glass-box valuable and the thing that makes it dangerous.

Alex Mercer: Right. And it all gets written in Solidity — that's the primary language, the thing a developer is actually typing before deployment locks it in. Once it's on chain, whatever Solidity said is what the EVM runs. Forever.

Jordan Hale: Picture someone — a developer, Saturday afternoon, deploying a liquidity contract — and they're checking the Solidity one more time, and everything looks right, and they hit deploy, and that's... that's the moment the glass seals.

Alex Mercer: That's the moment. And the auditors can have signed off, the logic can look clean — but if what the code says diverges even slightly from what the developer meant, the EVM doesn't care about the intent. It runs what's there.

Jordan Hale: And that's the thing I keep bumping into — because everyone sells this as 'no intermediaries, no gatekeepers,' but like... someone wrote that Solidity. Someone decided what the conditions were. So where did the trust actually go?

Alex Mercer: It got relocated. That's the precise word. You're not removing trust from the system — you're moving it from a bank regulator or a lawyer to the developer who wrote the Solidity, to the auditors who reviewed it before deployment, and to the language itself.

Jordan Hale: So different gatekeepers. Not fewer.

Alex Mercer: Exactly. And the dangerous part — I think this gets understated — is that the old gatekeepers were at least visible. You know who your bank regulator is. The developer who holds the deploy key? Often anonymous, or a three-person team with no legal accountability. That's not obviously safer.

Jordan Hale: Okay, make that concrete for me. Like, what does it actually look like when that relocation goes wrong?

Alex Mercer: There's a scenario that I think captures it almost perfectly. A DAO raises $40 million in a liquidity pool contract. The developer intends to cap withdrawals at 10% per day — reasonable risk control. But the Solidity has a typo in the timestamp condition. The code actually allows 100% withdrawal if the transaction hits before noon UTC. Contract deploys Tuesday. Someone notices Thursday. The fix itself? Two hours of work. But the contract has no upgrade mechanism — they chose immutability for credibility. By Friday morning, $8 million is gone, and the developer can see the exact line causing it and cannot touch it.

Jordan Hale: They can see it. They just — they can't do anything.

Alex Mercer: That's a business logic vulnerability. The code is not broken — it executed exactly as written. The EVM did its job perfectly. What failed is the gap between what the developer meant and what the Solidity actually said. And that class of flaw, specifically, tends to pass security audits because audits are scanning for syntax errors and known exploit patterns, not for whether the code encodes the right intent.

Jordan Hale: Wait — so you can have a clean audit and still lose $8 million?

Alex Mercer: Yes. The audit passed. The auditors weren't wrong — they found no known vulnerabilities, no syntax issues. The correctness problem is a different problem. And by 2019 there was academic documentation of mutation testing frameworks built specifically for Ethereum contracts — where you deliberately introduce small code changes to check whether your test suite catches them. The fact that this methodology had to be formally developed is, basically, the industry acknowledging in writing that pre-deployment correctness verification is essential because once you deploy, you cannot fix it.

Jordan Hale: So the formal answer to 'what if we encoded the wrong thing' is a whole testing discipline that nobody was using yet when the money was already on chain.

Alex Mercer: Formal verification can go even further — mathematically proving the contract satisfies a specification. But it requires serious expertise, and it can only verify that the code matches the spec, not that the spec matches what anyone actually wanted. The intent problem is not fully solvable. And there's a layer on top of all this — the 'fix' most teams reach for — that honestly makes the trust question even messier, and we'll get into exactly why those upgrade mechanisms reintroduce the very intermediaries the whole system was supposed to remove.

Jordan Hale: You know, I came into this thinking trustlessness meant something was watching out for you. Turns out someone is always watching — you just might not know who.

Alex Mercer: And that's exactly where the upgrade trap closes around you. Because the obvious fix — the thing every team reaches for — is just make the contract upgradeable. Proxy Pattern. You point a proxy contract at a separate logic contract, so you can swap the logic out after deployment.

Jordan Hale: Okay, that sounds — wait, that actually sounds fine? Like, that's just sensible engineering.

Alex Mercer: It is sensible. And it works. But now you have someone holding the key that controls which logic contract the proxy points to. One entity, or a multisig, with the power to change the code after users have already locked in funds. That is a trusted authority. That's the thing smart contracts were designed to eliminate.

Jordan Hale: So the fix to immutability is — you just re-hire the intermediary.

Alex Mercer: Functionally, yes. And the Diamond Pattern extends this further — one proxy pointing to multiple logic contracts simultaneously, more modularity, more flexibility. But higher gas costs than a simple Proxy Pattern. Which is the part that I think is genuinely perverse.

Jordan Hale: Wait — higher gas costs meaning what, exactly? Like, it costs more money to run the safer version?

Alex Mercer: Every transaction through an upgradeable architecture costs more to execute than through an immutable one. So you're creating a direct economic disincentive to adopt the mechanism that reduces your catastrophic deployment risk. Projects look at that overhead and skip the upgrade pattern to stay competitive on fees.

Jordan Hale: That's — no, I mean, that's genuinely insane. The price of safety is baked into the system as a reason not to buy it.

Alex Mercer: And timelocks, multisignature governance — those help distribute the authority, sure, reduce single points of failure. But a multisig is still a group of humans who can be pressured, compromised, or simply wrong. A contract that can be paused by a keyholder is not, in any meaningful sense, trustless.

Jordan Hale: So does the multisig actually reduce risk or does it just — like, move the risk to a different room nobody's watching?

Alex Mercer: It moves it. Think about my Tuesday lending contract scenario — logic error, users can withdraw more than they deposited. Three options: let it drain, try to convince users to migrate to a new contract voluntarily, or invoke emergency governance through a multisig. The third option works. But the moment you invoke it, you've handed a committee the power to rewrite a financial agreement that users trusted was immutable. That's a bank board meeting with worse PR.

Jordan Hale: You know what that sounds like? It sounds like every solution to the trust problem just — it generates a new trust problem one layer up.

Alex Mercer: That's the actual paradox. Every mechanism that makes a contract correctable quietly recreates the centralized authority the technology was built to escape. The upgradeability vs. finality trade-off isn't a solvable engineering problem — it's a structural contradiction in what the system is trying to be.

Jordan Hale: And then there's the part that — what if the code executes perfectly and you still have no legal recourse? Like, not because the law failed, but because the American Arbitration Association has actually published analysis saying smart contracts aren't always legally binding agreements in the traditional sense. They just... aren't.

Alex Mercer: That's the piece nobody wants to sit with. On-chain execution is not the same thing as a binding legal agreement. The AAA has noted that explicitly. Which means if the code and your intent diverge — if the Solidity said one thing and you meant another — there may be no court, no arbitration panel, no neutral arbiter with jurisdiction over what just happened to your funds.

Jordan Hale: So the loss just... lands on whoever the code disadvantages.

Alex Mercer: With no appeal. That's not a flaw in the implementation — that's the architecture. The trustlessness guarantee and the no-recourse outcome are the same design choice.

Jordan Hale: And every fix brings back a human with a key, which — I mean, that's exactly what Szabo was trying to design around in 1994. You know, the whole point was no trusted party. And here we are.

Alex Mercer: Every practical fix reintroduces centralized trust. That's probably the one thing I'd want someone to actually take away from all of this.

Jordan Hale: It's a genuinely uncomfortable place to land.

Alex Mercer: Yeah. Thanks for working through it — this one didn't resolve cleanly, and I think that's the honest result.

Why code on a blockchain is law — and what that breaks when the code is wrong · Onpode