The subcurrency from the Solidity documentation's opening chapter: one minter creates coins into any account, and holders send them on.
Historical Significance
The contract that opens the Solidity documentation, deployed to mainnet rather than left on the page. Its shape, a minter plus a balance mapping, is the smallest complete statement of what a token is, and it is deliberately not a standard token: no approvals, no allowances, no metadata.
Context
The Solidity documentation opened with this subcurrency for years, and the chapter it belongs to was written to introduce state, ownership and events in one page. Copies of it on mainnet are readers following along.
Key Facts
Description
The worked example that opens Introduction to Smart Contracts in the Solidity documentation. The account that deploys it becomes the minter and is stored publicly. mint(receiver, amount) adds to any balance and is ignored when called by anyone else; send(receiver, amount) moves a holder's own balance and emits a Sent event.
Both functions return silently instead of reverting when their check fails, which the documentation used to keep the example short. There is no total supply, no cap on minting and no way to change or renounce the minter, so the contract is a currency with a permanent central issuer.
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
This contract has verified source code on Etherscan.
Show source code (Solidity)
// Submitted by EthereumHistory (ethereumhistory.com)
contract Coin {
// The keyword "public" makes those variables
// readable from outside.
address public minter;
mapping (address => uint) public balances;
// Events allow light clients to react on
// changes efficiently.
event Sent(address from, address to, uint amount);
// This is the constructor whose code is
// run only when the contract is created.
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;
Sent(msg.sender, receiver, amount);
}
}
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