The subcurrency example from the Solidity documentation with a payable deposit bolted on.
Context
Deployed in 2015 on the Ethereum Frontier network.
Key Facts
Description
Coin is the first real contract in the Solidity documentation: a minter address, a balance mapping, mint(address,uint256) that only the minter may call, and send(address,uint256) that moves a balance and fires an event. This deployment adds two things the documentation does not have. deposit() is payable and credits the caller's own balance with the ether sent, turning the example into a one way wrapper with no way to withdraw, and queryBalance(address) is restricted to the minter, so a holder cannot read their own balance through it. The storage slot between the minter and the balances is declared and never touched, so its width is recoverable but its name and type are not. Source recovered by exact bytecode match: solc v0.1.4+commit.5f6c3cdf with the optimizer off reproduces all 866 bytes of the deployed code.
Source Verified
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 Verification ProofShow source code (Solidity)
// Submitted by EthereumHistory (ethereumhistory.com)
contract Coin {
address minter;
uint supply;
mapping (address => uint) balances;
event Send(address from, address to, uint amount);
function Coin() {
minter = msg.sender;
}
function mint(address receiver, uint amount) {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
function send(address receiver, uint amount) {
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Send(msg.sender, receiver, amount);
}
function queryBalance(address addr) returns (uint balance) {
if (msg.sender != minter) return;
return balances[addr];
}
function deposit() {
balances[msg.sender] += msg.value;
}
}External Links
Related contracts
token
Same eraAn early ERC-20-like token deployed in Ethereum's first week, built directly from the example in the official Ethereum Frontier Guide documentation.
0x8374f5...46609aAugust 7, 2015token
Same eraA second deployment of the FirstCoin tutorial token by the same creator, 11 blocks after the original — both derived from the official Ethereum Frontier Guide e
0x3b4446...295f52August 7, 2015Contract 0xd958b5...ec4c9f
Same eraEthereum.org tutorial Coin contract deployed on Frontier day 1. Contains a bug: balance(address) ignores its argument and returns msg.sender balance.
0xd958b5...ec4c9fAugust 7, 2015token
Same eraEarly tutorial-derived coin contract compiled with Solidity v0.1.1, deployed 9 days after Ethereum Frontier launch.
0x3c401b...da1634August 8, 2015token
Same eraTutorial-derived coin contract (Solidity v0.1.1), one of multiple token instances deployed by the same address on Aug 8, 2015.
0x33e986...395d13August 8, 2015CoinStub
Same eraCoin tutorial stub — mapping getter + empty function returning default bool.
0x4fb5ac...3b08aeAugust 8, 2015