Back to Home

()

exploit
0x3887078843a2...396c991fdceb
HomesteadContract #19KDecompiledEdit this contract
Deployed June 14, 2016 (10 years ago)Block 1,698,527

Development version of the DAO reentrancy exploit, deployed June 13, 2016, two days before the attack. Distinct 1886-byte build with a my_balance getter.

Homestead Era

Historical Significance

This is the earliest known on-chain iteration of the code that drained The DAO. Deployed on June 13, 2016, four days before the June 17 attack, it is direct evidence that the exploit was developed and tested on Ethereum mainnet ahead of time rather than assembled in the moment. It was deployed from a separate address, 0x1c64baab..., and shares the author's distinctive WRONG event and constuctor fail string with the final drain contracts.

The attack this code carried out on June 17, 2016 removed about 3.6 million ether and led to the July 20, 2016 hard fork that split the network into Ethereum and Ethereum Classic.

References:

Context

The DAO was a decentralized venture fund launched in April and May 2016 by slock.it, whose crowdsale gathered more than 12.7 million ether, the largest crowdfunding event created up to that point. Its splitDAO reward path sent ether before clearing the caller's token balance, the ordering flaw that made reentrancy possible.

This contract belongs to the days immediately before the attack, when the exploit was being prepared. The presence of a working, deployed earlier build on June 13 shows that the vulnerability had been identified and turned into functioning attack code before it was used at scale on June 17. After the attack, the White Hat Group reused the same exploit to rescue remaining funds, and the July 20, 2016 hard fork moved recovered ether to a WithdrawDAO contract for redemption.

Token Information
Token Name

Symbol

Decimals
1
Key Facts
Deployment Block
1,698,527
Deployment Date
Jun 14, 2016, 12:02 AM
Code Size
1.8 KB
Gas at Deploy
596,520
Transactions by Year
20161
20264

Description

An earlier development build of the contract later used to drain The DAO. It was deployed on June 13, 2016, four days before the attack, from 0x1c64baabc6d34767b84bebabafe0fa11872bd1bc, an address distinct from the two externally owned accounts that deployed and operated the final drain contracts.

This build has a distinct 1886-byte runtime and does not match the five byte-identical contracts used in the attack. It carries the same recursive splitDAO structure and the same WRONG event that logs the misspelled string constuctor fail, which ties it to the same author. It also exposes two functions absent from the final version: a getter named my_balance (selector 0xf8167eb8, the only identifier from this contract family that appears in a public signature database), and a four argument variant of splitDAO (selector 0xa9ab39ab) where the final version uses a five argument setup function. These differences indicate an earlier iteration of the exploit that was later refined.

This record is documented from bytecode analysis and decompilation. Unlike the five final contracts, an exact source reconstruction of this earlier build has not been produced.

Heuristic Analysis

The following characteristics were detected through bytecode analysis and may not be accurate.

Detected Type: exploit
Has ERC-20-like patterns

Bytecode Overview

Opcodes1,886
Unique Opcodes188
Jump Instructions89
Storage Operations56

External Links

Related contracts