Early tutorial-derived coin contract compiled with Solidity v0.1.1, deployed 9 days after Ethereum Frontier launch.
Key Facts
Description
FirstCoin is one of the earliest smart contracts deployed on the Ethereum mainnet, appearing on August 8, 2015 — just 9 days after the Frontier launch on July 30, 2015. The contract implements a minimal coin with functions for checking balances (coinBalanceOf) and transferring coins (sendCoin), plus a CoinTransfer event.
The code was compiled with Solidity v0.1.1, one of the first production Solidity compiler versions. The constructor hardcodes a supply of 1,000,000 coins assigned to the deployer (ignoring the supply constructor parameter). This simple pattern — a mapping of balances, a transfer function with insufficient-balance check, and an event — closely mirrors the coin examples from the Ethereum Frontier Guide and early Solidity documentation.
The deployer (0x4b0C6F0297CEe4B551B6fab3277067B64B238990) deployed five instances of this same contract within hours on August 8, 2015, a pattern consistent with tutorial experimentation during the Frontier era. At least four additional FirstCoin instances were deployed by other addresses between August 8–11, 2015, totaling nine known deployments — all sharing identical bytecode.
The contract has seen minimal activity since deployment: a single external transaction in November 2024 (a sendCoin call) represents the only recorded interaction beyond the original deployment.
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.
View Source CodeShow source code (Solidity)
contract FirstCoin {
mapping (address => uint) public coinBalanceOf;
event CoinTransfer(address sender, address receiver, uint amount);
function FirstCoin(uint supply) {
coinBalanceOf[msg.sender] = 1000000;
}
function sendCoin(address receiver, uint amount) returns(bool sufficient) {
if (coinBalanceOf[msg.sender] < amount) {
return false;
}
coinBalanceOf[msg.sender] -= amount;
coinBalanceOf[receiver] += amount;
CoinTransfer(msg.sender, receiver, amount);
return true;
}
}