Back to Home

Unicorns(๐Ÿฆ„)

Token
0xe36905580fa8...0ecf39c9c124
FrontierContract #8,376Source VerifiedEdit this contract
Deployed February 11, 2016 (10 years ago)Block 988,921

Unicorns token by avsa (Alex Van de Sande). Ethereum.org Advanced Token template without payable fallback.

Token Information

Token Name
Unicorns
Symbol
๐Ÿฆ„
Decimals
0

Key Facts

Deployment Block
988,921
Deployment Date
Feb 11, 2016, 06:11 PM
Code Size
2.5 KB
Gas at Deploy
610,074

Source Verified

SolidityNear-exact bytecode match
Compiler: solc ~v

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,574
Unique Opcodes172
Jump Instructions122
Storage Operations78

Verified Source Available

Source verified through compiler archaeology (near-exact bytecode match).

View Verification Proof
Show 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) {
        owner = msg.sender;
        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);
    }

    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;
    }
}

External Links