An early Ethereum token contract deployed October 26, 2015 by Fabian Vogelsteller, one week before MistCoin. Likely a prototype of the ERC-20 standard Fabian wa...
Key Facts
Description
This contract was deployed on October 26, 2015 (block 443,423) by address 0x9b22a80d5c7b3374a05b446081f97d0a34079e7f, identified as Fabian Vogelsteller.
Deployed eight days before MistCoin (November 3, 2015), this minimal token contract appears to be an early prototype of the token mechanics Fabian was developing at the time. The constructor defaults to 10,000 supply if called with 0. It includes a public balanceof mapping (lowercase) and an explicit balanceOf function (camelCase), resulting in two distinct function selectors for balance lookups. Transfer events use non-indexed parameters (LOG1).
Fabian Vogelsteller authored web3.js and co-authored EIP-20 (the ERC-20 token standard). MistCoin, deployed eight days after this contract, became the first notable ERC-20 token and is still traded today.
Source Verified
Source reconstructed as MyToken.sol. Compiler soljson-v0.1.5+commit.23865e39, optimizer OFF. Compiled output matches 622 of 625 runtime bytes. The 3-byte difference is a dispatch table body placement swap between the auto-generated balanceof getter and the explicit balanceOf function. Both bodies are byte-for-byte identical (same mapping slot read). No compiler version or source ordering tried produces the on-chain body placement order, likely a pre-release nightly between v0.1.4 and v0.1.5.
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Frontier Era
The initial release of Ethereum. A bare-bones implementation for technical users.
Bytecode Overview
Verified Source Available
Source verified through compiler archaeology and exact bytecode matching.
View Source CodeShow source code (Solidity)
// MyToken.sol
// Compiler: soljson-v0.1.5+commit.23865e39, optimizer OFF
// Deployed: block 443,423 (Oct 26, 2015) by Fabian Vogelsteller
contract MyToken {
mapping (address => uint) public balanceof;
event Transfer(address _from, address _to, uint256 _value);
function MyToken(uint supply) {
if (supply == 0) supply = 10000;
balanceof[msg.sender] = supply;
}
function transfer(address _to, uint256 _value) returns (bool success) {
if (balanceof[msg.sender] < _value) return false;
balanceof[msg.sender] -= _value;
balanceof[_to] += _value;
Transfer(msg.sender, _to, _value);
return true;
}
function balanceOf(address _owner) constant returns (uint256 balance) {
return balanceof[_owner];
}
}