The Solidity tutorial subcurrency, with the balance reader restricted to the minter
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.
Key Facts
Description
The Coin example from the August 2015 Solidity Tutorial with one change: queryBalance returns zero to anyone who is not the minter, so only the account that deployed the contract can read balances through it. The change is cosmetic, since every balance is still visible in storage and every transfer still emits a Send event naming both parties, but it shows the author reaching for access control on a read. The rest is the tutorial unaltered: the deployer is the minter, mint creates units, send moves them.
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 mint(address owner, uint amount) {
if (msg.sender != minter) return;
balances[owner] += 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) constant returns (uint balance) {
if (msg.sender != minter) return;
return balances[addr];
}
function Coin() {
minter = msg.sender;
}
}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, 2015Contract 0x578713...7d7060
Same deployerThe Solidity tutorial subcurrency, compiled without the optimiser
0x578713...7d7060September 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