| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {ERC20} from "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol";
import {ERC20Permit} from "openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol";
import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol";
/// @notice ERC-7572 contract-level metadata. `contractURI()` returns a URI to a JSON document
/// (name/description/image/socials); `ContractURIUpdated` is emitted whenever it changes so
/// marketplaces/indexers know to refresh. See https://eips.ethereum.org/EIPS/eip-7572.
interface IERC7572 {
function contractURI() external view returns (string memory);
event ContractURIUpdated();
}
/// @notice The consumer view of a V3 launch token: a reassignable `creator` plus the epoch nonce that
/// scopes CtoManager vote boards. Consumed by CircusLaunchpad, CircusLockerV2, and CtoManager
/// (and implemented identically by CircusQuoteTokenV3).
interface ICircusTokenV3 {
function creator() external view returns (address);
function creatorNonce() external view returns (uint64);
function setCreator(address newCreator) external;
}
/// @notice Minimal view of the launchpad consulted by the transfer lock. A local interface (rather than
/// importing the launchpad) so the token's bytecode — part of the CREATE3 blueprint the vanity /
/// prediction machinery reads — stays independent of launchpad changes. Shared by both launch
/// tokens (CircusTokenV3 and the stock-lane CircusQuoteTokenV3, which imports it from here).
interface ICircusTransferExemption {
function isCurveTransferExempt(address from, address to) external view returns (bool);
}
/// @title CircusTokenV3
/// @notice Fixed-supply launch token for the circus bonding-curve launchpad, with a **reassignable
/// creator role** (community takeover). Identical to V1 in every other respect — the entire
/// supply is minted to the launchpad, transfers are locked to/from the launchpad until
/// graduation, and the metadata URI carries the opaque socials/description pointer.
///
/// WHAT'S NEW vs V1. The `creator` role is no longer set-once. It can be reassigned via
/// `setCreator` by either (a) the current creator (wallet rotation / voluntary handoff) or
/// (b) the `ctoManager` contract (for community takeover of an abandoned project). Reassignment
/// bumps `creatorNonce`, a monotonic epoch counter that the CtoManager uses to scope its vote
/// board so a creator change automatically invalidates any in-flight votes.
///
/// The token is the single source of truth for the creator: the launchpad's creator-gated
/// surfaces (`claimCreatorFees`, `tokenState`) and CircusLockerV2's fee payee both resolve
/// `creator()` from here at read time, so a takeover is a single atomic state change on the
/// token rather than three copies to reconcile.
///
/// CTO_MANAGER AS CONSTRUCTOR IMMUTABLE (not a hardcoded constant). We inject it as a
/// constructor arg → `immutable ctoManager`, sourced from the launchpad. CREATE3 deployment
/// (see CircusLaunchpad) makes the token address a function of `(deployer, salt)` only, so
/// constructor args don't affect the ground/vanity address. This keeps the manager address fixed
/// per token (each token's `ctoManager` is immutable), removes the "compile CircusTokenV3 only
/// after the CtoManager proxy address is known" ordering constraint, and makes the whole thing
/// trivially testable (a fresh CtoManager can be wired into a fresh launchpad without grinding
/// a hardcoded address). Logic changes still happen behind the CtoManager UUPS proxy.
contract CircusTokenV3 is ERC20, ERC20Permit, IERC7572, IERC165, ICircusTokenV3 {
/// @notice The launchpad that deployed this token and controls the transfer lock + metadata init.
address public immutable launchpad;
/// @notice The CtoManager trusted for community-takeover reassignment of `creator`. Fixed at
/// deployment (injected by the launchpad); logic changes happen behind its UUPS proxy.
address public immutable ctoManager;
/// @notice The MetadataController trusted to update this token's metadata URI (in addition to the
/// creator). Fixed at deployment (injected by the launchpad); logic changes happen behind
/// its UUPS proxy. Lets protocol-configured admins moderate/fix socials/description/image
/// across any token without holding the creator role.
address public immutable metadataController;
/// @notice The coin's creator — the only account (besides the CtoManager) allowed to edit the
/// metadata URI and, on the launchpad/locker, collect creator economics. Reassignable via
/// `setCreator`. address(0) until `initMetadata`.
address public creator;
/// @notice Monotonic epoch counter, bumped on every creator change (CTO or self-transfer). Consumed
/// by CtoManager to scope votes so a creator change invalidates the whole vote board.
uint64 public creatorNonce;
/// @notice Once true, transfers are unrestricted (set by the launchpad at graduation).
bool public unlocked;
/// @dev The opaque metadata pointer. Read via tokenURI()/contractURI()/metaURI(); written by the
/// launchpad once (initMetadata) then by the creator (setTokenURI/setContractURI).
string private _metadataURI;
error TransfersLocked();
error OnlyLaunchpad();
error OnlyCreator();
error AlreadyInitialized();
error OnlyCreatorOrCtoManager();
error InvalidCreator();
event CreatorChanged(address indexed oldCreator, address indexed newCreator, uint64 nonce);
constructor(
string memory name_,
string memory symbol_,
address launchpad_,
uint256 supply_,
address ctoManager_,
address metadataController_
) ERC20(name_, symbol_) ERC20Permit(name_) {
launchpad = launchpad_;
ctoManager = ctoManager_;
metadataController = metadataController_;
_mint(launchpad_, supply_);
}
/// @notice One-shot metadata initializer, called by the launchpad in the same tx as deployment to
/// set the creator and the initial metadata URI. Idempotency is guarded by `creator`: once
/// set (non-zero) it cannot be re-initialized. Does NOT bump `creatorNonce` — the initial
/// assignment is not a "change", so nonce stays a faithful count of real reassignments.
function initMetadata(address creator_, string calldata uri_) external {
if (msg.sender != launchpad) revert OnlyLaunchpad();
if (creator != address(0)) revert AlreadyInitialized();
creator = creator_;
_metadataURI = uri_;
emit ContractURIUpdated();
}
/// @notice Launch-token generation tag — `"v4"` (the Uniswap-V4 graduation generation).
function version() external pure returns (string memory) {
return "v4";
}
/*//////////////////////////////////////////////////////////////////////
CREATOR
//////////////////////////////////////////////////////////////////////*/
/// @notice Reassign the creator role. Callable by the current creator (self-transfer / wallet
/// rotation) or the CtoManager (community takeover). Bumps `creatorNonce`, which orphans any
/// in-flight CtoManager vote board for this token.
///
/// `newCreator != address(0)` is load-bearing: the launchpad uses a zero creator as its
/// unknown-token sentinel. `newCreator != creator` keeps `creatorNonce` a faithful count of
/// real changes and rejects a no-op call that could otherwise cheaply grief a pending board.
function setCreator(address newCreator) external {
if (msg.sender != creator && msg.sender != ctoManager) revert OnlyCreatorOrCtoManager();
if (newCreator == address(0) || newCreator == creator) revert InvalidCreator();
address old = creator;
creator = newCreator;
unchecked {
creatorNonce += 1;
}
emit CreatorChanged(old, newCreator, creatorNonce);
}
/*//////////////////////////////////////////////////////////////////////
METADATA
//////////////////////////////////////////////////////////////////////*/
/// @notice The coin's metadata URI (ERC-721-style alias). On-chain this is just an opaque string.
function tokenURI() external view returns (string memory) {
return _metadataURI;
}
/// @notice ERC-7572 contract-level metadata URI (canonical name for marketplaces/indexers).
function contractURI() external view returns (string memory) {
return _metadataURI;
}
/// @notice The coin's metadata URI (alternate alias used by some launchpad indexers).
function metaURI() external view returns (string memory) {
return _metadataURI;
}
/// @notice Update the metadata URI. Callable by the coin's `creator` (the coin-socials access model)
/// or the `metadataController` (protocol moderation across any token). Emits ERC-7572
/// `ContractURIUpdated`. Updates the single underlying URI, so all three aliases
/// (`tokenURI`/`contractURI`/`metaURI`) reflect the change.
function setTokenURI(string calldata uri_) public {
if (msg.sender != creator && msg.sender != metadataController) revert OnlyCreator();
_metadataURI = uri_;
emit ContractURIUpdated();
}
/// @notice ERC-7572-style alias for `setTokenURI`. Same creator-only access.
function setContractURI(string calldata uri_) external {
setTokenURI(uri_);
}
/// @inheritdoc IERC165
function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
return interfaceId == type(IERC165).interfaceId || interfaceId == type(IERC7572).interfaceId;
}
/*//////////////////////////////////////////////////////////////////////
TRANSFER LOCK
//////////////////////////////////////////////////////////////////////*/
/// @notice Enable free transfers. Idempotent-safe; only the launchpad may call it (once, at graduation).
function unlock() external {
if (msg.sender != launchpad) revert OnlyLaunchpad();
unlocked = true;
}
/// @dev While locked: allow mint (`from == 0`), any move touching the launchpad, and any move where a
/// launchpad-exempt address is an endpoint. The launchpad-exempt staticcall is ordered last so the
/// constructor mint and plain curve legs never pay for it. After unlock: standard ERC20 semantics.
function _update(address from, address to, uint256 value) internal override {
if (
!unlocked && from != address(0) && from != launchpad && to != launchpad
&& !ICircusTransferExemption(launchpad).isCurveTransferExempt(from, to)
) {
revert TransfersLocked();
}
super._update(from, to, value);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "launchpad_",
"type": "address",
"internalType": "address"
},
{
"name": "supply_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "ctoManager_",
"type": "address",
"internalType": "address"
},
{
"name": "metadataController_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadyInitialized",
"type": "error",
"inputs": []
},
{
"name": "ECDSAInvalidSignature",
"type": "error",
"inputs": []
},
{
"name": "ECDSAInvalidSignatureLength",
"type": "error",
"inputs": [
{
"name": "length",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ECDSAInvalidSignatureS",
"type": "error",
"inputs": [
{
"name": "s",
"type": "bytes32",
"internalType": "bytes32"
}
]
},
{
"name": "ERC20InsufficientAllowance",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "allowance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSpender",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC2612ExpiredSignature",
"type": "error",
"inputs": [
{
"name": "deadline",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC2612InvalidSigner",
"type": "error",
"inputs": [
{
"name": "signer",
"type": "address",
"internalType": "address"
},
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "InvalidAccountNonce",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "currentNonce",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InvalidCreator",
"type": "error",
"inputs": []
},
{
"name": "InvalidShortString",
"type": "error",
"inputs": []
},
{
"name": "OnlyCreator",
"type": "error",
"inputs": []
},
{
"name": "OnlyCreatorOrCtoManager",
"type": "error",
"inputs": []
},
{
"name": "OnlyLaunchpad",
"type": "error",
"inputs": []
},
{
"name": "StringTooLong",
"type": "error",
"inputs": [
{
"name": "str",
"type": "string",
"internalType": "string"
}
]
},
{
"name": "TransfersLocked",
"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": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ContractURIUpdated",
"type": "event",
"inputs": [],
"anonymous": false
},
{
"name": "CreatorChanged",
"type": "event",
"inputs": [
{
"name": "oldCreator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newCreator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "nonce",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
}
],
"anonymous": false
},
{
"name": "EIP712DomainChanged",
"type": "event",
"inputs": [],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "DOMAIN_SEPARATOR",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "contractURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "creator",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "creatorNonce",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "ctoManager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "eip712Domain",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "fields",
"type": "bytes1",
"internalType": "bytes1"
},
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "version",
"type": "string",
"internalType": "string"
},
{
"name": "chainId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "verifyingContract",
"type": "address",
"internalType": "address"
},
{
"name": "salt",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "extensions",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"name": "initMetadata",
"type": "function",
"inputs": [
{
"name": "creator_",
"type": "address",
"internalType": "address"
},
{
"name": "uri_",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "launchpad",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "metaURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "metadataController",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "nonces",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "permit",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "deadline",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "v",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "r",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "s",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setContractURI",
"type": "function",
"inputs": [
{
"name": "uri_",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setCreator",
"type": "function",
"inputs": [
{
"name": "newCreator",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setTokenURI",
"type": "function",
"inputs": [
{
"name": "uri_",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "supportsInterface",
"type": "function",
"inputs": [
{
"name": "interfaceId",
"type": "bytes4",
"internalType": "bytes4"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "pure"
},
{
"name": "symbol",
"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": "value",
"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": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "unlock",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "unlocked",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "version",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "pure"
}
]0x6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714610cb95750806302669b5214610c7557806302d05d3f14610c4d57806306fdde0314610ba8578063095ea7b314610b8257806318160ddd14610b6557806323b872dd14610a86578063313ce56714610a6b5780633644e51514610a495780633c130d901461015b5780633f516018146109235780635201b472146108df57806354fd4d501461089b57806365932a38146106a4578063676057871461015b5780636a5e26501461067f57806370a08231146106485780637ecebe001461061057806384b0196e14610518578063938e3d7b1461016057806395d89b4114610436578063a69df4b5146103d2578063a9059cbb146103a1578063d505accf1461025e578063d8f7bace14610234578063dd62ed3e146101e4578063de7250aa146101a0578063e0df5b6f146101605763e8a3d4851461015b575f80fd5b610d5c565b3461019c57602036600319011261019c5760043567ffffffffffffffff811161019c5761019461019a913690600401610dee565b90610ef7565b005b5f80fd5b3461019c575f36600319011261019c576040517f00000000000000000000000074d4b708e6ce0748e4b968403e115dd69e60be8f6001600160a01b03168152602090f35b3461019c57604036600319011261019c576101fd610d30565b610205610d46565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b3461019c575f36600319011261019c57602067ffffffffffffffff60085460a01c16604051908152f35b3461019c5760e036600319011261019c57610277610d30565b61027f610d46565b604435906064359260843560ff8116810361019c5784421161038e5761035361035c9160018060a01b03841696875f52600760205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261032160e082610ed5565b51902061032c6112a4565b906040519161190160f01b83526002830152602282015260c43591604260a43592206114bd565b9092919261153f565b6001600160a01b0316848103610377575061019a93506113c0565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461019c57604036600319011261019c576103c76103bd610d30565b602435903361109b565b602060405160018152f35b3461019c575f36600319011261019c577f000000000000000000000000b7fa26c6fcb8801cabc538b82a6e80ae1c43cb006001600160a01b03163303610427576008805460ff60e01b1916600160e01b179055005b63236deb5b60e01b5f5260045ffd5b3461019c575f36600319011261019c576040515f60045461045681610e1c565b80845290600181169081156104f45750600114610496575b6104928361047e81850382610ed5565b604051918291602083526020830190610d0c565b0390f35b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b8082106104da5750909150810160200161047e61046e565b9192600181602092548385880101520191019092916104c2565b60ff191660208086019190915291151560051b8401909101915061047e905061046e565b3461019c575f36600319011261019c576105b46105547f4245504500000000000000000000000000000000000000000000000000000004611423565b61057d7f3100000000000000000000000000000000000000000000000000000000000001611486565b60206105c2604051926105908385610ed5565b5f84525f368137604051958695600f60f81b875260e08588015260e0870190610d0c565b908582036040870152610d0c565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b8281106105f957505050500390f35b8351855286955093810193928101926001016105ea565b3461019c57602036600319011261019c576001600160a01b03610631610d30565b165f526007602052602060405f2054604051908152f35b3461019c57602036600319011261019c576001600160a01b03610669610d30565b165f525f602052602060405f2054604051908152f35b3461019c575f36600319011261019c57602060ff60085460e01c166040519015158152f35b3461019c57604036600319011261019c576106bd610d30565b60243567ffffffffffffffff811161019c576106dd903690600401610dee565b90917f000000000000000000000000b7fa26c6fcb8801cabc538b82a6e80ae1c43cb006001600160a01b0316330361042757600854906001600160a01b03821661088d576001600160a01b03166001600160a01b0319919091161760085567ffffffffffffffff811161087957610755600954610e1c565b601f8111610822575b505f601f82116001146107ba5781925f926107af575b50508160011b915f199060031b1c1916176009555b7fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad9625f80a1005b013590508280610774565b601f198216925f5160206115b45f395f51905f52915f5b85811061080a575083600195106107f1575b505050811b01600955610789565b01355f19600384901b60f8161c191690558280806107e3565b909260206001819286860135815501940191016107d1565b8181111561075e57601f820160051c9060208310610871575b601f82910160051c03905f5b82811061085557505061075e565b5f8282015f5160206115b45f395f51905f520155600101610847565b5f915061083b565b634e487b7160e01b5f52604160045260245ffd5b62dc149f60e41b5f5260045ffd5b3461019c575f36600319011261019c576104926040516108bc604082610ed5565b60028152611d8d60f21b6020820152604051918291602083526020830190610d0c565b3461019c575f36600319011261019c576040517f0000000000000000000000007d687dd0e3bf5025fbac010042a5943300c8463a6001600160a01b03168152602090f35b3461019c57602036600319011261019c5761093c610d30565b600854906001600160a01b038216903382141580610a16575b610a07576001600160a01b031691821580156109fe575b6109ef5760207f5905a6d5f4eb2f990e88a85822a892f03abaf25ef6a2a3b05c138f78d7def1f8918467ffffffffffffffff60a01b600167ffffffffffffffff836bffffffffffffffffffffffff60a01b86161760a01c160160a01b169163ffffffff60e01b1617178060085567ffffffffffffffff6040519160a01c168152a3005b6332db94d160e21b5f5260045ffd5b5081831461096c565b632fc687a760e01b5f5260045ffd5b50337f0000000000000000000000007d687dd0e3bf5025fbac010042a5943300c8463a6001600160a01b03161415610955565b3461019c575f36600319011261019c576020610a636112a4565b604051908152f35b3461019c575f36600319011261019c57602060405160128152f35b3461019c57606036600319011261019c57610a9f610d30565b610aa7610d46565b6001600160a01b0382165f818152600160209081526040808320338452909152902054909260443592915f198110610ae5575b506103c7935061109b565b838110610b4a578415610b37573315610b24576103c7945f52600160205260405f2060018060a01b0333165f526020528360405f209103905584610ada565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b3461019c575f36600319011261019c576020600254604051908152f35b3461019c57604036600319011261019c576103c7610b9e610d30565b60243590336113c0565b3461019c575f36600319011261019c576040515f600354610bc881610e1c565b80845290600181169081156104f45750600114610bef576104928361047e81850382610ed5565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610c335750909150810160200161047e61046e565b919260018160209254838588010152019101909291610c1b565b3461019c575f36600319011261019c576008546040516001600160a01b039091168152602090f35b3461019c575f36600319011261019c576040517f000000000000000000000000b7fa26c6fcb8801cabc538b82a6e80ae1c43cb006001600160a01b03168152602090f35b3461019c57602036600319011261019c576004359063ffffffff60e01b821680920361019c576020916301ffc9a760e01b8114908115610cfb575b5015158152f35b63e8a3d48560e01b14905083610cf4565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361019c57565b602435906001600160a01b038216820361019c57565b3461019c575f36600319011261019c576040515f600954610d7c81610e1c565b80845290600181169081156104f45750600114610da3576104928361047e81850382610ed5565b60095f9081525f5160206115b45f395f51905f52939250905b808210610dd45750909150810160200161047e61046e565b919260018160209254838588010152019101909291610dbc565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b90600182811c92168015610e4a575b6020831014610e3657565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610e2b565b5f9291815491610e6383610e1c565b8083529260018116908115610eb85750600114610e7f57505050565b5f9081526020812093945091925b838310610e9e575060209250010190565b600181602092949394548385870101520191019190610e8d565b915050602093945060ff929192191683830152151560051b010190565b90601f8019910116810190811067ffffffffffffffff82111761087957604052565b919060018060a01b036008541633141580611068575b6110595767ffffffffffffffff811161087957610f2b600954610e1c565b601f8111610ffe575b505f601f8211600114610f91578192935f92610f86575b50508160011b915f199060031b1c1916176009555b7fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad9625f80a1565b013590505f80610f4b565b601f1982169360095f525f5160206115b45f395f51905f52915f5b868110610fe65750836001959610610fcd575b505050811b01600955610f60565b01355f19600384901b60f8161c191690555f8080610fbf565b90926020600181928686013581550194019101610fac565b81811115610f345760095f52601f820160051c9060208310611051575b601f82910160051c03905f5b828110611035575050610f34565b5f8282015f5160206115b45f395f51905f520155600101611027565b5f915061101b565b6308f78f9960e31b5f5260045ffd5b50337f00000000000000000000000074d4b708e6ce0748e4b968403e115dd69e60be8f6001600160a01b03161415610f0d565b6001600160a01b0316908115611291576001600160a01b031691821561127e5760ff60085460e01c161580611276575b80611243575b80611210575b80611167575b61115857815f525f60205260405f205481811061113f57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b6336e278fd60e21b5f5260045ffd5b50604051633cfbfda960e21b815260048101839052602481018490526020816044817f000000000000000000000000b7fa26c6fcb8801cabc538b82a6e80ae1c43cb006001600160a01b03165afa908115611205575f916111ca575b50156110dd565b90506020813d6020116111fd575b816111e560209383610ed5565b8101031261019c5751801515810361019c575f6111c3565b3d91506111d8565b6040513d5f823e3d90fd5b507f000000000000000000000000b7fa26c6fcb8801cabc538b82a6e80ae1c43cb006001600160a01b03168314156110d7565b507f000000000000000000000000b7fa26c6fcb8801cabc538b82a6e80ae1c43cb006001600160a01b03168214156110d1565b5060016110cb565b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b307f0000000000000000000000008a6d5f7ff02ad02f35a1df3c666b30b1c3b431fb6001600160a01b03161480611397575b156112ff577fd66f57b35bdf7c8076280abb014c19233338bf83e106e704e728f993db5ee4a390565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f405f987292c5ab529537dc66977adef0dfd6887abd17a0db7e87f99f9458b3c660408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a0815261139160c082610ed5565b51902090565b507f000000000000000000000000000000000000000000000000000000000000123746146112d6565b6001600160a01b0316908115610b37576001600160a01b0316918215610b245760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b60ff81146114695760ff811690601f821161145a5760405191611447604084610ed5565b6020808452838101919036833783525290565b632cd44ac360e21b5f5260045ffd5b506040516114838161147c816005610e54565b0382610ed5565b90565b60ff81146114aa5760ff811690601f821161145a5760405191611447604084610ed5565b506040516114838161147c816006610e54565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611534579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611205575f516001600160a01b0381161561152a57905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561159f5780611551575050565b600181036115685763f645eedf60e01b5f5260045ffd5b60028103611583575063fce698f760e01b5f5260045260245ffd5b60031461158d5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffdfe6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7afa2646970667358221220060aef30d482e1a8cb6a8d29144bd52312ad07f9f20a191c7889999bfea2245164736f6c63430008230033
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x4c37a8…666ded | 14 hrs agoSun, 16 Aug 2026 07:44:59 UTC | Transfer | [0] 0x000000000000…478f0b38 [1] 0x000000000000…43e40951 data: 0x000000000000000000…1aec58a5 |
| 0x5c656f…6d016b | 14 hrs agoSun, 16 Aug 2026 07:44:59 UTC | Approval | [0] 0x000000000000…478f0b38 [1] 0x000000000000…72c22734 data: 0xffffffffffffffffff…ffffffff |
| 0x4e1bfa…d4581c | 14 hrs agoSun, 16 Aug 2026 07:43:53 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…478f0b38 data: 0x000000000000000000…8bab50a8 |
| 0xc67939…d81b39 | 1 day agoSat, 15 Aug 2026 20:07:16 UTC | Transfer | [0] 0x000000000000…e6260c27 [1] 0x000000000000…43e40951 data: 0x000000000000000000…fce2bfb5 |
| 0x46405c…a9c889 | 1 day agoSat, 15 Aug 2026 20:07:16 UTC | Approval | [0] 0x000000000000…e6260c27 [1] 0x000000000000…262c40dc data: 0x000000000000000000…fce2bfb5 |
| 0x7ba57b…26905d | 1 day agoSat, 15 Aug 2026 19:27:47 UTC | Approval | [0] 0x000000000000…9c36d510 [1] 0x000000000000…3ac78ba3 data: 0x000000000000000000…00000000 |
| 0x0b3811…a2531a | 1 day agoSat, 15 Aug 2026 03:42:06 UTC | Transfer | [0] 0x000000000000…73039843 [1] 0x000000000000…43e40951 data: 0x000000000000000000…97bb5ee8 |
| 0x9a07f3…d601ea | 1 day agoSat, 15 Aug 2026 03:42:06 UTC | Approval | [0] 0x000000000000…73039843 [1] 0x000000000000…72c22734 data: 0xffffffffffffffffff…ffffffff |
| 0x42e3a1…a95fcb | 1 day agoSat, 15 Aug 2026 03:42:04 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…73039843 data: 0x000000000000000000…97bb56d4 |
| 0xa268d7…e6ac51 | 1 day agoSat, 15 Aug 2026 00:22:26 UTC | Transfer | [0] 0x000000000000…3c87acfa [1] 0x000000000000…43e40951 data: 0x000000000000000000…40fa5d28 |
| 0x59657f…c47684 | 1 day agoSat, 15 Aug 2026 00:22:25 UTC | Approval | [0] 0x000000000000…3c87acfa [1] 0x000000000000…72c22734 data: 0xffffffffffffffffff…ffffffff |
| 0x12c50d…74ffbc | 1 day agoSat, 15 Aug 2026 00:22:24 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…3c87acfa data: 0x000000000000000000…40fa5b55 |
| 0x552d80…65a621 | 2 days agoFri, 14 Aug 2026 19:19:30 UTC | Transfer | [0] 0x000000000000…d113f996 [1] 0x000000000000…43e40951 data: 0x000000000000000000…b5ca4e80 |
| 0x552d80…65a621 | 2 days agoFri, 14 Aug 2026 19:19:30 UTC | Transfer | [0] 0x000000000000…ec4fff4f [1] 0x000000000000…d113f996 data: 0x000000000000000000…b5ca4e80 |
| 0x552d80…65a621 | 2 days agoFri, 14 Aug 2026 19:19:30 UTC | Approval | [0] 0x000000000000…ec4fff4f [1] 0x000000000000…b66337b5 data: 0x000000000000000000…b5ca4e80 |
| 0x552d80…65a621 | 2 days agoFri, 14 Aug 2026 19:19:30 UTC | Transfer | [0] 0x000000000000…ee0d86bc [1] 0x000000000000…ec4fff4f data: 0x000000000000000000…b5ca4e80 |
| 0x552d80…65a621 | 2 days agoFri, 14 Aug 2026 19:19:30 UTC | Approval | [0] 0x000000000000…ee0d86bc [1] 0x000000000000…f1c315be data: 0x000000000000000000…b5ca4e80 |
| 0x328e31…03cbbb | 2 days agoFri, 14 Aug 2026 14:24:33 UTC | Transfer | [0] 0x000000000000…5afce453 [1] 0x000000000000…43e40951 data: 0x000000000000000000…33c866cd |
| 0x1765a6…9373fa | 2 days agoFri, 14 Aug 2026 14:24:33 UTC | Approval | [0] 0x000000000000…5afce453 [1] 0x000000000000…262c40dc data: 0x000000000000000000…33c866cd |
| 0xe42c23…a23c72 | 2 days agoFri, 14 Aug 2026 11:35:28 UTC | Transfer | [0] 0x000000000000…12784bc2 [1] 0x000000000000…43e40951 data: 0x000000000000000000…00877b4c |
| 0xd40610…2f76c1 | 2 days agoFri, 14 Aug 2026 11:35:28 UTC | Approval | [0] 0x000000000000…12784bc2 [1] 0x000000000000…262c40dc data: 0x000000000000000000…00877b4c |
| 0x08d84d…c0d4a3 | 2 days agoFri, 14 Aug 2026 11:35:22 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…12784bc2 data: 0x000000000000000000…00877b4c |
| 0x749293…ff8f85 | 2 days agoFri, 14 Aug 2026 07:17:21 UTC | Transfer | [0] 0x000000000000…24c8fce5 [1] 0x000000000000…43e40951 data: 0x000000000000000000…29627066 |
| 0x0904a5…2ee957 | 2 days agoFri, 14 Aug 2026 07:02:35 UTC | Approval | [0] 0x000000000000…24c8fce5 [1] 0x000000000000…72c22734 data: 0xffffffffffffffffff…ffffffff |
| 0x47645d…fbafa7 | 2 days agoFri, 14 Aug 2026 06:27:40 UTC | Transfer | [0] 0x000000000000…d2fd7efd [1] 0x000000000000…43e40951 data: 0x000000000000000000…1cf82211 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x5c656f…6d016b | Approve | 37,806,421 | 14 hrs agoSun, 16 Aug 2026 07:44:59 UTC | 0x6634…0b38 | IN | BEPE | $0.000 ETH | 0.00000109 | |
| 0x46405c…a9c889 | Approve | 37,389,271 | 1 day agoSat, 15 Aug 2026 20:07:16 UTC | 0xdee8…0c27 | IN | BEPE | $0.000 ETH | 0.00000132 | |
| 0x7ba57b…26905d | Approve | 37,365,635 | 1 day agoSat, 15 Aug 2026 19:27:47 UTC | 0x69e5…d510 | IN | BEPE | $0.000 ETH | 0.00000069 | |
| 0x9a07f3…d601ea | Approve | 36,799,958 | 1 day agoSat, 15 Aug 2026 03:42:06 UTC | 0xd720…9843 | IN | BEPE | $0.000 ETH | 0.00000174 | |
| 0x59657f…c47684 | Approve | 36,680,409 | 1 day agoSat, 15 Aug 2026 00:22:25 UTC | 0x069e…acfa | IN | BEPE | $0.000 ETH | 0.00000181 | |
| 0x1765a6…9373fa | Approve | 36,322,251 | 2 days agoFri, 14 Aug 2026 14:24:33 UTC | 0x722d…e453 | IN | BEPE | $0.000 ETH | 0.00000193 | |
| 0xd40610…2f76c1 | Approve | 36,221,028 | 2 days agoFri, 14 Aug 2026 11:35:28 UTC | 0x23a3…4bc2 | IN | BEPE | $0.000 ETH | 0.00000188 | |
| 0x0904a5…2ee957 | Approve | 36,057,713 | 2 days agoFri, 14 Aug 2026 07:02:35 UTC | 0xad01…fce5 | IN | BEPE | $0.000 ETH | 0.00000200 | |
| 0xb8857d…f636b8 | Approve | 36,036,758 | 2 days agoFri, 14 Aug 2026 06:27:40 UTC | 0xba21…7efd | IN | BEPE | $0.000 ETH | 0.00000199 | |
| 0xc253c2…3a0952 | Approve | 35,908,546 | 2 days agoFri, 14 Aug 2026 02:53:35 UTC | 0x4c6f…c050 | IN | BEPE | $0.000 ETH | 0.00000198 | |
| 0xe086bc…1ce6ba | Approve | 35,821,009 | 2 days agoFri, 14 Aug 2026 00:27:29 UTC | 0x1644…ccac | IN | BEPE | $0.000 ETH | 0.00000198 | |
| 0xc38b3a…3a2c13 | Approve | 35,816,721 | 2 days agoFri, 14 Aug 2026 00:20:19 UTC | 0x831f…9f7e | IN | BEPE | $0.000 ETH | 0.00000199 | |
| 0xc3dee7…8f641b | Approve | 35,816,058 | 2 days agoFri, 14 Aug 2026 00:19:12 UTC | 0x831f…9f7e | IN | BEPE | $0.000 ETH | 0.00000125 | |
| 0xc1ed25…aed9cd | Approve | 35,816,048 | 2 days agoFri, 14 Aug 2026 00:19:11 UTC | 0x831f…9f7e | IN | BEPE | $0.000 ETH | 0.00000197 | |
| 0x7f7707…d463b8 | Approve | 35,816,038 | 2 days agoFri, 14 Aug 2026 00:19:10 UTC | 0x831f…9f7e | IN | BEPE | $0.000 ETH | 0.00000199 | |
| 0x6025bc…d33a65 | Approve | 35,810,624 | 2 days agoFri, 14 Aug 2026 00:10:09 UTC | 0x305b…f6ba | IN | BEPE | $0.000 ETH | 0.00000124 | |
| 0x73f039…f53f89 | Approve | 35,805,160 | 2 days agoFri, 14 Aug 2026 00:01:01 UTC | 0x16a7…f455 | IN | BEPE | $0.000 ETH | 0.00000197 | |
| 0x86b51e…bbde93 | Approve | 35,803,108 | 2 days agoThu, 13 Aug 2026 23:57:34 UTC | 0x305b…f6ba | IN | BEPE | $0.000 ETH | 0.00000125 | |
| 0xda90a0…f03b72 | Approve | 35,802,820 | 2 days agoThu, 13 Aug 2026 23:57:07 UTC | 0x9fad…3d7c | IN | BEPE | $0.000 ETH | 0.00000197 | |
| 0xdf948d…1c8a39 | Approve | 35,802,582 | 2 days agoThu, 13 Aug 2026 23:56:43 UTC | 0x6f7d…9c96 | IN | BEPE | $0.000 ETH | 0.00000198 | |
| 0xabd364…66b8dd | Approve | 35,802,035 | 2 days agoThu, 13 Aug 2026 23:55:48 UTC | 0x305b…f6ba | IN | BEPE | $0.000 ETH | 0.00000198 | |
| 0x5752c8…b43ebf | Approve | 35,801,967 | 2 days agoThu, 13 Aug 2026 23:55:41 UTC | 0xd635…4e61 | IN | BEPE | $0.000 ETH | 0.00000200 | |
| 0x28e7fc…d28cfb | Approve | 35,801,509 | 2 days agoThu, 13 Aug 2026 23:54:55 UTC | 0x69e5…d510 | IN | BEPE | $0.000 ETH | 0.00000198 | |
| 0xe5b343…286699 | Approve | 35,801,440 | 2 days agoThu, 13 Aug 2026 23:54:48 UTC | 0x1f37…e6db | IN | BEPE | $0.000 ETH | 0.00000200 | |
| 0xc87f84…4a5f19 | Approve | 35,801,280 | 2 days agoThu, 13 Aug 2026 23:54:32 UTC | 0x17dd…81a5 | IN | BEPE | $0.000 ETH | 0.00000199 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 35,785,487 | 2 days agoThu, 13 Aug 2026 23:28:11 UTC | 0x8a77d8…e491ab | CREATE | createToken | 0xf845…2122 | IN | 0x8a6d…31fb | 0 ETH |