Back to HomeToken Name Unicorns Symbol ๐ฆ Decimals 0
Deployed February 11, 2016 (10 years ago)Block 988,807
Unicorns ERC-20 token deployed by avsa (Alex Van de Sande) in Feb 2016. Same source as siblings, but compiled with centralMinter set to 0xfb6916... (Ethereum Fo
Token Information
Key Facts
Transactions by Year
20163
20251
Deployment Transaction: 0xd2b09d906e470f73...929e352c5ce47f03
Source Verified
SolidityNear-exact bytecode match
Compiler: solc v0
Compiler identified: soljson-v0.2.0-nightly.2016.1.13+commit.d2f18c73. Source structure fully reconstructed (owned base contract + MyToken is owned). Compiles to correct byte size. Two small optimizer instruction-ordering regions differ from on-chain bytecode - not resolvable without the exact build of this compiler.
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Detected Type: Token
Has ERC-20-like patterns
Frontier Era
The initial release of Ethereum. A bare-bones implementation for technical users.
Block span: 0 โ 1,149,999
July 30, 2015 โ March 14, 2016
Bytecode Overview
Opcodes2,602
Unique Opcodes182
Jump Instructions121
Storage Operations76
Verified Source Available
Source verified through compiler archaeology (near-exact bytecode match).
View Verification ProofShow source code (Solidity)
contract MyToken {
address public owner;
string public name;
string public symbol;
uint8 public decimals;
uint256 public totalSupply;
mapping (address => uint256) public balanceOf;
mapping (address => bool) public frozenAccount;
mapping (address => mapping (address => uint256)) public allowance;
mapping (address => mapping (address => uint256)) public spentAllowance;
event Transfer(address indexed from, address indexed to, uint256 value);
event FrozenFunds(address target, bool frozen);
function MyToken(uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol, address centralMinter) {
if(centralMinter != 0 ) owner = centralMinter;
balanceOf[msg.sender] = initialSupply;
totalSupply = initialSupply;
name = tokenName;
symbol = tokenSymbol;
decimals = decimalUnits;
}
function transfer(address _to, uint256 _value) {
if (balanceOf[msg.sender] < _value) throw;
if (balanceOf[_to] + _value < balanceOf[_to]) throw;
if (frozenAccount[msg.sender]) throw;
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
Transfer(msg.sender, _to, _value);
}
function approve(address _spender, uint256 _value) returns (bool success) {
allowance[msg.sender][_spender] = _value;
}
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
if (balanceOf[_from] < _value) throw;
if (balanceOf[_to] + _value < balanceOf[_to]) throw;
if (frozenAccount[_from]) throw;
if (spentAllowance[_from][msg.sender] + _value > allowance[_from][msg.sender]) throw;
balanceOf[_from] -= _value;
balanceOf[_to] += _value;
spentAllowance[_from][msg.sender] += _value;
Transfer(msg.sender, _to, _value);
/* no explicit return true */
}
function mintToken(address target, uint256 mintedAmount) {
if (msg.sender != owner) throw;
balanceOf[target] += mintedAmount;
totalSupply += mintedAmount;
Transfer(owner, target, mintedAmount);
}
function freezeAccount(address target, bool freeze) {
if (msg.sender != owner) throw;
frozenAccount[target] = freeze;
FrozenFunds(target, freeze);
}
function transferOwnership(address newOwner) {
if (msg.sender != owner) throw;
owner = newOwner;
}
function() {
owner.send(msg.value);
}
}