Overview
ETH Balance
0 ETH
ETH Value
$0.00 (@ $1,858/ETH)
Token Holdings
—
More Info
Additional Info
TransactionsInternal TransactionsToken Transfers (ERC-20)NFT TransfersOther TransactionsAnalyticsAssetsHoldersCardsInfo
Contract Name
Token (Meme Empire)
Compiler
solidity · v0.8.30+commit.73712a01
Optimization
Yes · 200 runs
EVM Version
prague
Source
Mirrored from Robinhood Chain explorer
Contract Source Code
Outline
I IPool
ƒ token0
ƒ token1
I IERC20
ƒ balanceOf
C Token
ƒ approve
ƒ transfer
ƒ transferFrom
ƒ setPool
ƒ setMetadata
ƒ checkMigration
ƒ _transfer
ƒ _privileged
ƒ _checkMigration
Token.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;
interface IPool {
function token0() external view returns (address);
function token1() external view returns (address);
}
interface IERC20 {
function balanceOf(address account) external view returns (uint256);
}
contract Token {
string public name;
string public symbol;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
address public pool;
uint256 public launchBlock;
bool public migrated;
string public description;
string public website;
string public telegram;
string public twitter;
string public logoURI;
string public tokenURI;
bool public metadataSet;
address public immutable launchpad;
address public immutable deployer;
uint256 public immutable maxWallet;
uint256 public immutable limitWindow;
uint8 public constant decimals = 18;
uint256 public constant GRADUATION_WETH = 3.7 ether;
struct Metadata {
string description;
string website;
string telegram;
string twitter;
string logoURI;
string tokenURI;
}
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
event MetadataUpdated(string logoURI, string tokenURI);
event Migrated(uint256 reserve);
error OnlyLaunchpad();
error MetadataAlreadySet();
error PoolAlreadySet();
error MaxWalletExceeded();
error TradingNotActive();
constructor(
string memory _name,
string memory _symbol,
uint256 _totalSupply,
address _deployer,
uint256 _maxWallet,
uint256 _limitWindow
) {
launchpad = msg.sender;
name = _name;
symbol = _symbol;
deployer = _deployer;
maxWallet = _maxWallet;
limitWindow = _limitWindow;
totalSupply = _totalSupply;
balanceOf[msg.sender] = _totalSupply;
emit Transfer(address(0), msg.sender, _totalSupply);
}
function approve(address spender, uint256 amount) public returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transfer(address to, uint256 amount) public returns (bool) {
_transfer(msg.sender, to, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) public returns (bool) {
uint256 allowed = allowance[from][msg.sender];
if (allowed != type(uint256).max) {
allowance[from][msg.sender] = allowed - amount;
}
_transfer(from, to, amount);
return true;
}
function setPool(address _pool, uint256 _launchBlock) external {
if (msg.sender != launchpad) revert OnlyLaunchpad();
if (pool != address(0)) revert PoolAlreadySet();
pool = _pool;
launchBlock = _launchBlock;
}
function setMetadata(Metadata calldata data) external {
if (msg.sender != launchpad) revert OnlyLaunchpad();
if (metadataSet) revert MetadataAlreadySet();
metadataSet = true;
description = data.description;
website = data.website;
telegram = data.telegram;
twitter = data.twitter;
logoURI = data.logoURI;
tokenURI = data.tokenURI;
emit MetadataUpdated(data.tokenURI, data.logoURI);
}
function checkMigration() external returns (bool) {
_checkMigration();
return migrated;
}
function _transfer(address from, address to, uint256 amount) internal {
if (block.number < launchBlock && !_privileged(from) && !_privileged(to)) {
revert TradingNotActive();
}
balanceOf[from] -= amount;
unchecked {
balanceOf[to] += amount;
}
if (
block.number < launchBlock + limitWindow &&
!(to == launchpad || to == deployer || to == pool || to == address(0)) &&
balanceOf[to] > maxWallet
) {
revert MaxWalletExceeded();
}
if (!migrated && pool != address(0) && (from == pool || to == pool)) {
_checkMigration();
}
emit Transfer(from, to, amount);
}
function _privileged(address account) internal view returns (bool) {
return account == launchpad || account == deployer;
}
function _checkMigration() internal {
if (migrated || pool == address(0)) return;
(bool ok, bytes memory data) = pool.staticcall(abi.encodeWithSelector(IPool.token0.selector));
if (!ok || data.length < 32) return;
address other = abi.decode(data, (address));
if (other == address(this)) {
(ok, data) = pool.staticcall(abi.encodeWithSelector(IPool.token1.selector));
if (!ok || data.length < 32) return;
other = abi.decode(data, (address));
}
(ok, data) = other.staticcall(abi.encodeWithSelector(IERC20.balanceOf.selector, pool));
if (!ok || data.length < 32) return;
if (abi.decode(data, (uint256)) >= GRADUATION_WETH) {
migrated = true;
emit Migrated(abi.decode(data, (uint256)));
}
}
}Contract ABI
[
{
"type": "constructor",
"inputs": [
{
"name": "_name",
"type": "string",
"internalType": "string"
},
{
"name": "_symbol",
"type": "string",
"internalType": "string"
},
{
"name": "_totalSupply",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_deployer",
"type": "address",
"internalType": "address"
},
{
"name": "_maxWallet",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_limitWindow",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "MaxWalletExceeded",
"type": "error",
"inputs": []
},
{
"name": "MetadataAlreadySet",
"type": "error",
"inputs": []
},
{
"name": "OnlyLaunchpad",
"type": "error",
"inputs": []
},
{
"name": "PoolAlreadySet",
"type": "error",
"inputs": []
},
{
"name": "TradingNotActive",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MetadataUpdated",
"type": "event",
"inputs": [
{
"name": "logoURI",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "tokenURI",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"name": "Migrated",
"type": "event",
"inputs": [
{
"name": "reserve",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "GRADUATION_WETH",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "checkMigration",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "deployer",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "description",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "launchBlock",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "launchpad",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "limitWindow",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "logoURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "maxWallet",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "metadataSet",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "migrated",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "pool",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "setMetadata",
"type": "function",
"inputs": [
{
"name": "data",
"type": "tuple",
"components": [
{
"name": "description",
"type": "string",
"internalType": "string"
},
{
"name": "website",
"type": "string",
"internalType": "string"
},
{
"name": "telegram",
"type": "string",
"internalType": "string"
},
{
"name": "twitter",
"type": "string",
"internalType": "string"
},
{
"name": "logoURI",
"type": "string",
"internalType": "string"
},
{
"name": "tokenURI",
"type": "string",
"internalType": "string"
}
],
"internalType": "struct Token.Metadata"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setPool",
"type": "function",
"inputs": [
{
"name": "_pool",
"type": "address",
"internalType": "address"
},
{
"name": "_launchBlock",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "telegram",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "tokenURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "twitter",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "website",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
}
]Creation code isn’t shown — this contract was deployed by a factory (internal CREATE), so it has no standalone creation transaction.
A wallet address is a publicly available address that allows its owner to receive funds from another party. To access the funds in an address, you must have its private key.