An early large-scale contract exploit forced a decision that split a network and established engineering practices still followed today.
The vulnerability
A contract sent funds before updating its internal balance record.
Which allowed the receiving contract to call back in and withdraw repeatedly before the balance was reduced.
This pattern is now called reentrancy and is checked for as a matter of routine.
Why it was not obvious
The code looked correct read sequentially.
Which is the essential difficulty — an external call transfers control, and execution does not simply continue.
Developers coming from conventional programming did not expect a function call to re-enter the caller.
The mitigation
Update state before making external calls.
Which became a standard pattern taught in every introduction to the subject.
Reentrancy guards providing a lock during execution are the other common defence.
The response
A protocol change reversing the effect of the exploit.
Which was contested on the grounds that immutability was the point of the system.
The disagreement produced a permanent chain split, with both chains continuing.
What the split established
That protocol rules are ultimately social, enforced by what operators choose to run.
Which was demonstrated rather than argued.
The precedent has been cited in every subsequent debate about intervention.
The development consequences
Formal audit practice, standard security patterns, and libraries implementing safe defaults.
Which developed substantially in the following years.
Test frameworks specifically checking for known vulnerability classes are now standard tooling.
What has not changed
Reentrancy still appears in incidents, generally in novel forms or in unusual cross-contract interactions.
Which indicates that the pattern is understood and its variations are not always recognised.
The broader point
The most consequential incident in the field's history arose from a subtle property of the execution model rather than from cryptography.
Nearly every subsequent failure has followed the same pattern.
The organisation involved
A distributed investment vehicle raising a very large sum through token sale.
Which held those funds in a contract that the exploit drained.
The scale relative to the network at the time is what made intervention conceivable.
The intervention debate
Arguments turned on whether reversing the exploit undermined the property that made the system valuable.
Which was argued in public at length.
Both positions were coherent, and the disagreement was philosophical rather than technical.
The persisting chain
The chain rejecting the intervention continues to operate with a community defined partly by that decision.
Which makes the split unusually legible as a values disagreement.
Security tooling since
Static analysis, symbolic execution and formal verification tools were developed substantially afterwards.
Which catch known vulnerability classes automatically.
Standard libraries implementing safe patterns removed a large category of error from new code.
The enduring point
Code executing exactly as written can still do something nobody intended, and that gap is where the risk lives.
Bug bounty adoption
Programmes offering payment for responsible disclosure spread substantially afterwards.
Which creates a legitimate route for researchers who find vulnerabilities.
Payout size relative to exploitable value determines whether the incentive works.
The white hat convention
Security researchers extracting funds to protect them before an attacker can.
Which has saved substantial sums and carries genuine legal ambiguity.
Safe harbour frameworks have been proposed to clarify the position.
Audit industry growth
A specialist review profession developed in response to repeated incidents.
Which is now standard practice before deploying anything substantial.
Audits reduce risk without eliminating it, as subsequent audited failures demonstrated.
Language and tooling
Compiler warnings, safe arithmetic by default and standard secure libraries.
Which removed entire categories of historical error from new code.
The recurring theme
Nearly every major loss since has been an economic or logic failure rather than a cryptographic one.
Why it still matters
The episode established both a technical practice and a political precedent, and the second has proved more consequential.
Every subsequent argument about whether a network should intervene in an exploit refers back to it.
The existence of two chains from that decision means both answers remain live rather than settled.
Reading the primary material
The contract code, the exploiting transactions and the contemporaneous discussion are all preserved and public.
Which makes it possible to read the actual vulnerability rather than a description of it.
Security researchers still use it as a teaching example for exactly that reason.
The pattern to remember
Update state before external calls, and treat any external call as a transfer of control.
The one sentence version
Code that did exactly what it said produced an outcome nobody wanted, and the response to that split a network permanently.
A note on scale
The sum involved was a substantial fraction of the network's total value at the time, which is why intervention was even considered.
A comparable exploit today would be large in absolute terms and small relative to the network, and the intervention question would not arise in the same form.