Bytecode verified via sibling
This contract shares identical runtime bytecode with EtherToken (0xacfd9d15...) which has been verified through compiler archaeology.
The ether wrapper code of 0xacFD9D15fA769EaBb68410c4c675Ff2030f26416, the first fully EIP-20 compliant contract, redeployed 81 blocks later. This is the copy that saw real use, with around 400 transactions.
Historical Significance
Byte identical to 0xacFD9D15fA769EaBb68410c4c675Ff2030f26416, the first contract on Ethereum mainnet to satisfy every mandatory requirement of EIP-20 as finalised, and deployed 81 blocks after it on 20 March 2016 by the same account, 0x3a77633f26ddd2cf58d1fea2c889098565ca5c8c. Because the runtime is identical, everything established by execution about the compliance of that contract holds here too. The difference between the two is what happened next: 0xacFD9D15fA769EaBb68410c4c675Ff2030f26416 holds a single transaction, its own creation, while this one took around 400 and is therefore the first contract meeting the full standard that anyone actually used. The pair is worth keeping straight, since the two are indistinguishable by code and separable only by address and by history.
Context
Deployed 20 March 2016 at 15:30 UTC, twenty minutes after 0xacFD9D15fA769EaBb68410c4c675Ff2030f26416 and byte identical to it. Where that one was never called, this is the copy that was actually used: 400 transactions and 806 events, the most recent in February 2026, and it still holds a dust balance of wrapped ether.
Same code: deposit() credits the caller with the ether sent, withdraw(uint256) pays it back, totalSupply() returns the contract's own ether balance, the fallback forwards to deposit(), and the Deposit and Withdrawal event signatures are the ones WETH9 would later use.
Source recovered by compiling against solc v0.3.0+commit.11d67369 with the optimizer off, reproducing the deployed runtime exactly.
Key Facts
Source Verified
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Homestead Era
The first planned hard fork. Removed the canary contract, adjusted gas costs.
Bytecode Overview
Verified Source Available
This contract has verified source code.
View Verification ProofShow source code (Solidity)
// Submitted by EthereumHistory (ethereumhistory.com)
contract EtherToken {
mapping (address => uint256) balances;
mapping (address => mapping (address => uint256)) allowed;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
event Deposit(address indexed _owner, uint256 _value);
event Withdrawal(address indexed _owner, uint256 _value);
function balanceOf(address _owner) constant returns (uint256 balance) {
return balances[_owner];
}
function transfer(address _to, uint256 _value) returns (bool success) {
if (balances[msg.sender] < _value) throw;
if (!safeToAdd(balances[_to], _value)) throw;
balances[msg.sender] -= _value;
balances[_to] += _value;
Transfer(msg.sender, _to, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
if (balances[_from] < _value) throw;
if (allowed[_from][msg.sender] < _value) throw;
if (!safeToAdd(balances[_to], _value)) throw;
allowed[_from][msg.sender] -= _value;
balances[_from] -= _value;
balances[_to] += _value;
Transfer(_from, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) returns (bool success) {
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
return allowed[_owner][_spender];
}
function totalSupply() constant returns (uint256 supply) {
return this.balance;
}
function withdraw(uint256 _value) returns (bool success) {
if (balances[msg.sender] >= _value) {
if (msg.sender.call.value(_value)()) {
balances[msg.sender] -= _value;
Withdrawal(msg.sender, _value);
return true;
}
}
}
function deposit() returns (bool success) {
balances[msg.sender] += msg.value;
Deposit(msg.sender, msg.value);
return true;
}
function () returns (bool success) {
return deposit();
}
function safeToAdd(uint a, uint b) internal returns (bool) {
return (a + b >= a);
}
}External Links
Related contracts
EtherToken
Same deployerThe first contract on Ethereum mainnet fully compliant with EIP-20 as finalised, tested by execution against all ten mandatory requirements. An ether wrapper, deployed 20 March 2016, and never used.
0xacfd9d...f26416March 20, 2016token
Same eraBare Homestead-era token (Mar 14 2016): public balanceOf mapping + a single unchecked transfer firing the standard Transfer event.
0xc77f06...494c69March 14, 2016DinastyCoinToken
Same eraHomestead-era transfer-only token, DinastyCoinToken (DCT), fixed supply 200000000 and 6 decimals.
0x3693fd...c11466March 14, 2016token
Same eraMinimal Homestead-era token shell (Mar 14 2016): just a public balanceOf mapping and its compiler-generated getter, with no other functions.
0x38e1da...41a81aMarch 14, 2016666๐
Same eraSix hundred and sixty six units, named and ticketed with a ram emoji.
0x7684aa...d0ed06March 16, 2016CampusCoin
Same eraByte-identical deployment of: Standard ethereum.org tutorial token (Homestead, Mar 2016): name/symbol/decimals metadata, a public balanceOf mapping and an overf
0x00f0b1...e6fcd2March 16, 2016