RARE Pepe collectible card token (Series 2). Factory-deployed by the Peperium platform with transfer events and an admin toggle.
Token Information
Key Facts
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
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.
Spurious Dragon Era
Continued DoS protection. State trie clearing.
Bytecode Overview
Verified Source Available
This contract has verified source code.
View Verification ProofShow 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();
}
}