Back to Home

DAO

Token
0x54715db7a8a5...195774cb564d
FrontierContract #5,761Exact Bytecode MatchEdit this contract
Deployed December 29, 2015 (10 years ago)Block 767,989

Direct December 2015 ancestor of The DAO, deployed by slock.it five months before the mainnet launch that triggered the Ethereum hard fork.

Frontier EraVerified Source

Historical Significance

The single most historically loaded pre-DAO contract on Ethereum. Five months before The DAO went live (and seven months before it was hacked and triggered the hard fork), the slock.it team was already running the exact same Token + Crowdfunding + DAO governance pattern on mainnet as a live test. The selector surface, contract inheritance structure, and security model that produced the 3.6 million ETH crisis all originate here. Understanding what changed between this December 2015 prototype and the April 2016 production deployment is one of the most important open questions for any researcher studying the DAO incident.

Context

Deployed 29 December 2015, three months before The DAO went live (30 April 2016) and seven months before the DAO hack (17 June 2016) that triggered the Ethereum hard fork (20 July 2016, block 1,920,000). Solidity was at v0.1.7 (latest stable in December 2015); the modern modifier _; syntax did not yet exist and throw was the sole error mechanism. The contract uses the pre-EIP-20 ERC-20 argument order with the sender as the LAST argument of transferFrom, a layout still common in early 2016 token deployments before Fabian Vogelsteller's standard solidified.

Key Facts
Deployment Block
767,989
Deployment Date
Dec 29, 2015, 09:53 PM
Code Size
6.2 KB
Gas at Deploy
1,760,114

Description

This is the December 2015 prototype DAO/Crowdfunding deployment by Christoph Jentzsch's slock.it team, the same architecture that became The DAO on 30 April 2016. The contract is contract DAO is DAOInterface, Token, Crowdfunding(...) from the blockchainsllc/DAO repository, combining a custom ERC-20-precursor Token (with the OLD transferFrom(address from, uint value, address to) argument order, sender last, predating EIP-20), a Crowdfunding base contract, and DAO governance into a single deployment.

The public surface exposes the full pre-DAO design: buyToken() / buyTokenProxy(address) to participate in the crowdsale at 1 ether per token, Crowdfunding(uint, uint) returning the constructor parameters as runtime selectors (a v0.1.x compiler quirk), closingTime() and minValue() for the crowdsale terms, totalAmountReceived() for the running tally, refund() for after-failure refunds, funded() for the success flag, and addAllowedAddress(address) for whitelist control. The DAO layer adds proposals(uint), numProposals(), vote(uint, bool), executeProposal(uint, bytes), checkProposalCode(uint, address, uint, bytes), and changeProposalDeposit(uint). The token layer adds standard balanceOf, transfer, transferFrom, approve, unapprove, plus the now-forgotten approveOnce(address, uint256) and isApprovedOnceFor(address, address) for single-shot delegated transfers.

The deployer 0xb9f40f5b61b5eb9135d268ee0964532f191edab8 was a slock.it test wallet. The 0.88 ETH balance has been stuck since the contract's 42-day closing window expired in early February 2016: minValue was 500,000 ETH and only fractional ETH was contributed, so the crowdsale failed and the contributions could have been pulled back via refund(), but the residual was never claimed.

This is the direct technical ancestor of the contract that triggered the Ethereum hard fork. The same Token + Crowdfunding + DAO inheritance pattern was reused for The DAO on 30 April 2016 at 0xbb9bc244d798123fde783fcc1c72d3bb8c189413.

Source Verified

SolidityExact bytecode match(6,345 bytes)
Compiler: v0.1.7-

Byte-for-byte exact bytecode match. Runtime SHA-256 b3f15f4fd3ab702172c3d8cfd4a201b7cca642e75d7762d51278099ce5ac33b1 reproduces with soljson-v0.1.7-nightly.2015.11.19+commit.58110b27 optimizer ON. Required two non-obvious adjustments: (1) deployed source had transfer/transferFrom moved into the DAO contract tail rather than the Token contract; (2) the v0.1.6 RELEASE emits 3*words+15 for the identity-precompile gas formula, while v0.1.7-nightly emits 15*words+3 (libethereum bumped to 1.1.0 between releases and the eth::c_identityGas/eth::c_identityWordGas constants effectively swapped). See proofs/dao-crowdfunding-0x54715db7/README.md and verify.js for full reproducer.

Heuristic Analysis

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

Detected Type: Token
Has ERC-20-like patterns

Bytecode Overview

Opcodes6,345
Unique Opcodes247
Jump Instructions286
Storage Operations231

External Links