A Frontier-era subcurrency with dual-send pattern: direct transfers and exchange-authorized transfers. Deployed Sep 21 2015.
Token Information
Key Facts
Description
One of the earliest subcurrency contracts on Ethereum mainnet, deployed just 43 days after network launch. This contract implements a coin with two transfer modes:
Basic send: send(address, uint) — direct peer-to-peer transfer, returns 1 on success or 0 if insufficient balance.
Exchange-authorized send: send(address, uint, address exchange) — allows an exchange contract to transfer tokens on behalf of its own address. The caller must be the exchange itself (msg.sender == exchange), making this an early on-chain access control pattern for exchange integration.
The contract stores its name as bytes32 (not string), typical for Frontier-era contracts before dynamic string support was common. All non-view functions return uint (0=fail, 1=success) rather than using reverts or bool returns — a pattern from the early Solidity era.
Compiled with soljson v0.1.1 (emscripten build, no optimizer). The native C++ v0.1.1 build produces different getter ordering due to C++ set<Declaration*> pointer comparison vs JS heap allocation order.
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)
contract Coin {
mapping (address => uint) public balance;
address public issuer;
bytes32 public name;
event CoinTransfer(address from, address to, uint256 amount);
event CoinIssue(address issuer, address to, uint256 amount);
function Coin(bytes32 _name) {
issuer = msg.sender;
name = _name;
}
function send(address account, uint amount) returns (uint) {
if (balance[msg.sender] < amount) return 0;
balance[msg.sender] -= amount;
balance[account] += amount;
CoinTransfer(msg.sender, account, amount);
return 1;
}
function send(address account, uint amount, address exchange) returns (uint) {
if (msg.sender != exchange) return 0;
if (balance[exchange] < amount) return 0;
balance[exchange] -= amount;
balance[account] += amount;
CoinTransfer(exchange, account, amount);
return 1;
}
function issueCoin(address account, uint amount) returns (uint) {
if (msg.sender != issuer) return 0;
balance[account] += amount;
CoinIssue(msg.sender, account, amount);
return 1;
}
function changeIssuer(address newIssuer) returns (uint) {
if (msg.sender != issuer) return 0;
issuer = newIssuer;
return 1;
}
}