CatCoin (๐ฑ), deployed 15 December 2015, is the first Ethereum token with an emoji ticker.
Historical Significance
First Ethereum token with an emoji ticker, checked against all 5,495 top-level contract creations before block 697,515.
Context
Frontier era, 15 December 2015. A trimmed ethereum.org token tutorial whose minting and freezing rights were assigned to an Association DAO deployed the same afternoon.
Token Information
Key Facts
Description
CatCoin is the earliest Ethereum token found on-chain whose ticker is an emoji: ๐ฑ (U+1F431 CAT FACE, UTF-8 f0 9f 90 b1). It carries the name "CatCoin", 2 decimals, and a supply of 1,000,000.00 units.
The claim was tested by scanning every block from 0 to 697,515, the block containing CatCoin's own deployment, and collecting all 5,495 top-level contract-creation transactions. Of those, 173 have init code containing symbol() or name(). Decoding the ABI-encoded strings in their constructor arguments returns six earlier tokens with non-ASCII tickers: ร (Markoin), ฮด (Djannons), ร (DANCOIN), ยง (Muh Shares), Iโฌ (ITABIT_EUR) and ร (catenaDAO). All six are Latin, currency or legal glyphs. CatCoin is the only pictographic emoji among them. The scan does not cover contracts created by other contracts, or symbols assigned after deployment.
The contract is a trimmed copy of the ethereum.org token tutorial, in its central-mint and account-freezing variant. The allowance functions are removed and the owner variable is renamed issuer. There is no totalSupply and no approve or transferFrom, as ERC-20 had not yet been settled.
Minting and freezing rights were not held by a person. The issuer address 0x18EBd42Dc5E42EDaC84e8DEd1dc824Af20008564 is an ethereum.org Association DAO deployed the same afternoon, governed by the catenaDAO (ร) shares token at 0x38b1a2d1ccab24e8c8e66ffbacfd54a0b049186d, with a 50-share quorum and a 10-minute debating period.
15 December 2015 was a single day of work by one operator using two addresses, both funded from Kraken. Catena (CAT) was deployed at 13:44 UTC, the catenaDAO (ร) shares token at 14:04, the DAO at 14:16, and CatCoin at 21:52. The DAO precedes Vitalik Buterin's Blockchain Congress deployment by 13 days.
CatCoin then emitted no events for 10 years and 8 months. Its constructor assigns balanceOf directly without a Transfer log, and the supply was never moved. On 24 August 2026 the original operator ran the DAO through a newProposal, vote and executeProposal cycle and sent the full supply to their own address. That transaction carries the first and only Transfer event in the contract's history.
No contemporary record of CatCoin has been found. Searches of Reddit, blogs, forums and news coverage return nothing for the token, its address or its deployer. It appears to have been a private test that was never announced.
Source Verified
Exact bytecode match. Runtime 1,093 bytes. Creation 1,582 bytes plus 288 bytes of ABI-encoded constructor arguments (initialSupply=100000000, tokenName="CatCoin", decimalUnits=2, tokenSymbol="๐ฑ", centralMinter=0x18EBd42Dc5E42EDaC84e8DEd1dc824Af20008564). The compiler is pinned to the Solidity 0.1.x line by the identity-precompile gas formula in the string-return helper: this contract emits words*3+15 (600302600f01), while 0.2.0 and later emit words*15+3. Both 0.1.5 and 0.1.6 reproduce the deployed bytecode exactly; 0.1.3 and 0.1.4 produce 1,059 bytes. Optimizer on. The source is a trimmed ethereum.org MyAdvancedToken with owner renamed to issuer and the allowance functions removed. This contract cannot be verified on Etherscan or Sourcify. solc 0.1.x emits two valid, semantically identical code layouts for this source depending on emscripten heap state: the shared string-copy block used by the name() and symbol() getters sits either before the function bodies (fresh compiler) or at the end of the contract (warm compiler). The deployed contract uses the warm-module layout, which is what browser-solidity produces because it recompiles on every keystroke. Etherscan and Sourcify each compile once in a clean process and land on the other layout. Sourcify does accept solc 0.1.4 through 0.1.7 and compiles this source successfully, but returns no_match. The script proofs/catcoin-0x8e72a683/verify.js in awesome-ethereum-proofs warms the compiler and reproduces the match byte for byte.
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 MyToken {
string public name;
string public symbol;
uint8 public decimals;
address public issuer;
mapping (address => uint256) public balanceOf;
mapping (address => bool) public frozenAccount;
event Transfer(address indexed from, address indexed to, uint256 value);
event FrozenFunds(address target, bool frozen);
modifier onlyOwner { if (msg.sender != issuer) throw; _ }
function MyToken(uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol, address centralMinter) {
if (initialSupply == 0) initialSupply = 1000000;
if (centralMinter == 0) centralMinter = msg.sender;
issuer = centralMinter;
balanceOf[centralMinter] = initialSupply;
name = tokenName;
symbol = tokenSymbol;
decimals = decimalUnits;
}
function freezeAccount(address target, bool freeze) onlyOwner {
frozenAccount[target] = freeze;
FrozenFunds(target, freeze);
}
function mintToken(address target, uint256 mintedAmount) onlyOwner {
balanceOf[target] += mintedAmount;
Transfer(0, target, mintedAmount);
}
function transfer(address _to, uint256 _value) {
if (balanceOf[msg.sender] < _value || balanceOf[_to] + _value < balanceOf[_to] || frozenAccount[msg.sender]) throw;
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
Transfer(msg.sender, _to, _value);
}
}External Links
Related contracts
NetsCoin
Same deployerThe ethereum.org 'advanced' MyToken (Homestead, Mar 2016): an issuer-minted token with mintToken, freezeAccount/FrozenFunds and the standard Transfer event.
0x1bf963...c9caabMarch 21, 2016token
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, 2015NameRegistry
Same eraFixed-fee name registry from Day 9 of Ethereum (Aug 8, 2015). Reserve names for 69 ETH, resolve addresses. A precursor to ENS.
0xa1a111...b8af00August 8, 2015token
Same eraEarly tutorial-derived coin contract compiled with Solidity v0.1.1, deployed 9 days after Ethereum Frontier launch.
0x3c401b...da1634August 8, 2015