Back to Home

Peperium Series 2(PEPE)

Token
0x5921f43985a0...e09b96de943e
Spurious DragonSource Verified
Deployed August 27, 2017 (8 years ago)Block 4,210,431

RARE Pepe collectible card token (Series 2). Factory-deployed by the Peperium platform with transfer events and an admin toggle.

Token Information

Token Name
Peperium Series 2
Symbol
PEPE
Decimals
0

Key Facts

Deployment Block
4,210,431
Deployment Date
Aug 27, 2017, 07:51 PM
Code Size
5.9 KB
Transactions by Year
20173

Description

Peperium Series 2 card token, part of the RARE Pepe digital collectible ecosystem on Ethereum. Each card was deployed as an independent ERC-20-like contract through a factory at 0xb4e34890. The token includes standard transfer, approve, and approveAndCall functionality, plus owner-controlled minting (mintToken), account freezing (freezeAccount), and buy/sell with ETH pricing.

Series 2 added Transfer event emission to the transfer() function (missing in Series 1) and introduced a boolean admin toggle. 13 identical token contracts were deployed from this factory.

The source has been recovered to near-exact match. One unknown remains: a bool variable name (getter 0xea76f7d8, setter 0x8675c3e8) that exists in no known signature database and was never called on-chain.

Source Verified

SolidityNear-exact bytecode match
Compiler: 0.4.14+

All 21 functions, storage layout, events verified. One unknown bool variable name (getter 0xea76f7d8). Compiler: solc 0.4.14+commit.c2215d46, no optimizer.

Heuristic Analysis

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

Detected Type: Token

Spurious Dragon Era

Continued DoS protection. State trie clearing.

Block span: 2,675,0004,369,999
November 22, 2016October 16, 2017

Bytecode Overview

Opcodes6,075
Unique Opcodes199
Jump Instructions243
Storage Operations82

Verified Source Available

This contract has verified source code.

View Verification Proof
Show source code (Solidity)
pragma solidity ^0.4.11;

contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); }

contract PeperiumToken {
    address public owner;
    string public standard = 'Token 0.1';
    string public name;
    string public symbol;
    string public ipfs_hash;
    string public description;
    bool locked;
    uint8 public decimals;
    uint256 public totalSupply;
    bool public xVar;

    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event XEvent(bool _val);

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function PeperiumToken(
        uint256 initialSupply,
        string tokenName,
        string tokenSymbol,
        string tokenDescription,
        string ipfsHash
    ) {
        owner = msg.sender;
        balanceOf[msg.sender] = initialSupply;
        totalSupply = initialSupply;
        name = tokenName;
        symbol = tokenSymbol;
        description = tokenDescription;
        ipfs_hash = ipfsHash;
        decimals = 0;
    }

    function transfer(address _to, uint256 _value) {
        require(!locked);
        require(balanceOf[msg.sender] >= _value);
        require(balanceOf[_to] + _value > balanceOf[_to]);
        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;
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
        require(!locked);
        require(balanceOf[_from] >= _value);
        require(balanceOf[_to] + _value > balanceOf[_to]);
        require(_value <= allowance[_from][msg.sender]);
        balanceOf[_from] -= _value;
        balanceOf[_to] += _value;
        allowance[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;
    }

    function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
        allowance[msg.sender][_spender] = _value;
        tokenRecipient spender = tokenRecipient(_spender);
        spender.receiveApproval(msg.sender, _value, this, _extraData);
        return true;
    }

    function mintToken(address target, uint256 mintedAmount) onlyOwner {
        balanceOf[target] += mintedAmount;
        totalSupply += mintedAmount;
        Transfer(0, target, mintedAmount);
    }

    function lock() onlyOwner {
        locked = true;
    }

    function isLocked() constant returns (bool) {
        return locked;
    }

    function setDescription(string desc) onlyOwner {
        description = desc;
    }

    function setXVar(bool _val) onlyOwner {
        xVar = _val;
        XEvent(_val);
    }

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

    function () {
        revert();
    }
}

External Links