The prototype token that inspired ERC-20, deployed by Fabian Vogelsteller on November 3, 2015, sixteen days before he submitted the ERC-20 proposal.
Historical Significance
The token that preceded and inspired ERC-20. Fabian Vogelsteller, author of ERC-20, deployed MistCoin as a test implementation 16 days before submitting the ERC-20 draft proposal. While often called the first ERC-20 token, it technically does not implement the full standard: it is missing transferFrom, approve, allowance, and totalSupply. The historically accurate claim is that it is the prototype that inspired ERC-20, not a compliant implementation of it.
Context
In November 2015, Fabian Vogelsteller was working on the Mist wallet and experimenting with token contract interfaces. He deployed MistCoin at block 483,325 on November 3, 2015, gave tokens away on Reddit, and used it to test token handling in Mist. On November 19, 2015, he submitted ERC-20 as Issue #20 in the ethereum/EIPs repository, with the full interface including transferFrom, approve, and allowance. avsa noted that since Fabian had just written the spec, MistCoin became the first token deployed against the evolving standard concept. The token was later sent in bulk to the Doge-ETH Bounty DAO, which still holds 50,000 MistCoin.
Token Information
Key Facts
Description
MistCoin, deployed by Fabian Vogelsteller on November 3, 2015 as a test token while developing the concept that became ERC-20. The contract implements transfer and balanceOf but not transferFrom, approve, allowance, or totalSupply. Fabian submitted ERC-20 (Issue #20) to the ethereum/EIPs repo on November 19, 2015, sixteen days after deploying this contract. MistCoin is therefore not compliant with the ERC-20 standard even as originally proposed, but it is the prototype token that directly inspired and preceded it.
Source Verified
Source code verified by crypt0biwan. Fabian Vogelsteller's token created to test the ERC-20 standard, deployed November 3, 2015.
Historian Categories
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 for verification at Etherscan.io on 2025-05-23
*/
contract MyToken {
/* Public variables of the token */
string public name;
string public symbol;
uint8 public decimals;
/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;
/* This generates a public event on the blockchain that will notify clients */
event Transfer(address indexed from, address indexed to, uint256 value);
/* Initializes contract with initial supply tokens to the creator of the contract */
function MyToken(uint256 _supply, string _name, string _symbol, uint8 _decimals) {
/* if supply not given then generate 1 million of the smallest unit of the token */
if (_supply == 0) _supply = 1000000;
/* Unless you add other functions these variables will never change */
balanceOf[msg.sender] = _supply;
name = _name;
symbol = _symbol;
/* If you want a divisible token then add the amount of decimals the base unit has */
decimals = _decimals;
}
/* Send coins */
function transfer(address _to, uint256 _value) {
/* if the sender doenst have enough balance then stop */
if (balanceOf[msg.sender] < _value) throw;
if (balanceOf[_to] + _value < balanceOf[_to]) throw;
/* Add and subtract new balances */
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
/* Notifiy anyone listening that this transfer took place */
Transfer(msg.sender, _to, _value);
}
}