ETH Price: $1,865.56 (-0.00%)Gas: 0.020 GweiBase: 0.0203 GweiPriority: 0.0000 GweiTotal: 0.0203 Gwei

Address

jfmf(nf jf)0xbafc08afb957b25a03e5c86d022f287e09d9fb03
Overview
ETH Balance
0 ETH
ETH Value
$0.00 (@ $1,866/ETH)
Token Holdings
More Info
Private Name Tags
Token Tracker
Transactions Sent
Additional Info
Funded By
0xc303…6af0 · 13 days ago
Token Approvals
TransactionsInternal TransactionsToken Transfers (ERC-20)NFT TransfersOther TransactionsAnalyticsAssetsHoldersCardsInfo
✓ VerifiedExact Matchjfmf⤢ Open full
Contract Name
Token (jfmf)
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.