Back to Home
Meme logo

Meme

Token
0x84965cf265d7...b80b5d5e38cf
HomesteadContract #14KExact Bytecode MatchEdit this contract
Deployed April 13, 2016 (9 years ago)Block 1,330,011

Early puzzle token experiment with a fun name and unique supply mechanics.

Token Information

Logo
Meme logo
via RPC
Token Name
Meme
Decimals
0

Key Facts

Deployer
Matt Beton(0x45ede7...b668e0)
Deployment Block
1,330,011
Deployment Date
Apr 13, 2016, 08:08 PM
Code Size
901.0 B
Gas at Deploy
401,846
Transactions by Year
20161
20258

Description

Minting was gated behind an on-chain riddle: rewardMathGeniuses() dispenses one 0-decimal token if you submit the exact cube root of the current challenge. However, submitting a non-perfect cube as nextChallenge, mints a final token and locks the supply forever.

Sadly, the symbol() function does not return a ticker symbol.

Nine years after deployment, tschoerv unearthed the contract and hard-capped the total supply at 690,420 tokens.

Source Verified

SolidityExact bytecode match(901 bytes)
Compiler: soljson

Exact bytecode match (init + runtime). Runtime: 901 bytes. Creation: 1256 bytes init + 192 bytes args. Based on ethereum.org token tutorial with owned inheritance, address centralMinter param, and rewardMathGeniuses cubic root puzzle. soljson v0.2.2 through v0.3.2 all produce identical output.

Heuristic Analysis

The following characteristics were detected through bytecode analysis and may not be accurate.

Detected Type: Token
Has ERC-20-like patterns

Homestead Era

The first planned hard fork. Removed the canary contract, adjusted gas costs.

Block span: 1,150,0001,919,999
March 14, 2016July 20, 2016

Bytecode Overview

Opcodes901
Unique Opcodes107
Jump Instructions45
Storage Operations23

Verified Source Available

Source verified through compiler archaeology and exact bytecode matching.

View Verification Proof
Show source code (Solidity)
contract owned {
    address public owner;

    function owned() {
        owner = msg.sender;
    }

    modifier onlyOwner {
        if (msg.sender != owner) throw;
        _
    }

    function transferOwnership(address newOwner) onlyOwner {
        owner = newOwner;
    }
}

contract MyToken is owned {
    /* This creates an array with all balances */
    mapping (address => uint256) public balanceOf;

    /* Public variables of the token */
    string public name;
    string public symbol;
    uint8 public decimals;
    uint currentChallenge = 1;

    /* 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 initialSupply,
        string tokenName,
        uint8 decimalUnits,
        address centralMinter
        ) {
        if(centralMinter != 0 ) owner = msg.sender;
        balanceOf[msg.sender] = initialSupply;              // Give the creator all initial tokens
        name = tokenName;                                   // Set the name for display purposes
        decimals = decimalUnits;                            // Amount of decimals for display purposes
    }

    /* Send coins */
    function transfer(address _to, uint256 _value) {
        if (balanceOf[msg.sender] < _value || balanceOf[_to] + _value < balanceOf[_to]) throw;
        balanceOf[msg.sender] -= _value;                     // Subtract from the sender
        balanceOf[_to] += _value;                            // Add the same to the recipient
        Transfer(msg.sender, _to, _value);                   // Notify anyone listening that this transfer took place
    }

    function rewardMathGeniuses(uint answerToCurrentReward, uint nextChallenge) {
        if (answerToCurrentReward**3 != currentChallenge) throw; // If answer is wrong do not continue
        balanceOf[msg.sender] += 1;         // Reward the player
        currentChallenge = nextChallenge;   // Set the next challenge
    }
}

External Links