The Solidity tutorial subcurrency, compiled without the optimiser
Historical Significance
The Solidity documentation opened with a subcurrency because it is the smallest program that is obviously a program about money: an issuer, a ledger and a transfer that refuses to overdraw. Everything a token standard later argued about, who may create units, who may move them, what a client is told when they move, is present here in the form it took before anyone had proposed a standard at all.
Context
Deployed in September 2015 on the Frontier chain, compiled with solc v0.1.1 and the optimiser off.
Key Facts
Description
The Coin example from the August 2015 Solidity Tutorial. The account that deploys it becomes the minter and is the only one who may create units through mint. Holders move balances with send, which checks the sender's balance, adjusts both entries and emits a Send event carrying the sender, the receiver and the amount. queryBalance reads any address's balance. There is no total supply and no approval mechanism, so it predates the token interface that ERC-20 would later standardise. The functions were written in the order send, queryBalance, mint, which the compiler preserves in the deployed layout.
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;
mapping (address => uint) balances;
event Send(address from, address to, uint value);
function Coin() {
minter = msg.sender;
}
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) constant returns (uint balance) {
return balances[addr];
}
function mint(address owner, uint amount) {
if (msg.sender != minter) return;
balances[owner] += amount;
}
}External Links
Related contracts
Bounce
Same deployerA 132-byte contract with one function, sendBack(), which immediately returns any ether sent with the call.
0x5954f5...ff93b8September 2, 2015Coin
Same deployerThe Solidity tutorial subcurrency, with the balance reader restricted to the minter
0x4d0cd1...4e6577September 3, 2015Coin
Same deployerThe subcurrency example from the Solidity documentation with a payable deposit bolted on.
0x8d9bba...d771b5September 4, 2015Bank
Same deployerA 534-byte deposit ledger: deposit() records the caller's ether, a timestamp and an id, and only the owner can read a balance back. No withdrawal function exists.
0x2e7145...3f0bf6September 4, 2015Bank
Same deployerA 541-byte deposit ledger: deposit() records the caller's ether and a timestamp, and only the owner can read a balance back. No withdrawal function exists.
0x8c953f...984534September 5, 2015Bank
Same deployerA 532-byte deposit ledger: deposit() records the caller's ether and a timestamp, and only the owner can read a balance back. No withdrawal function exists.
0x76000f...0bae2eSeptember 5, 2015