// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
import {PoolAddress} from "./libraries/PoolAddress.sol";
/// @notice Read by the token during the launch window: the launcher raises
/// this flag around the atomic dev-buy swap so the dev-buy bypasses the
/// launch-block and max-wallet rules. Backed by regular storage (not
/// EIP-1153 transient storage) so behavior never depends on chain TSTORE
/// support; see the fork-test TSTORE probe for the optimization decision.
interface IDevBuyFlag {
function devBuyActive() external view returns (bool);
}
/// @notice Fixed-supply ERC-20 + Permit launched straight into a Uniswap v3
/// pool. Named LaunchTokenV3 because the Phase 1 bonding-curve LaunchToken
/// already exists in this Foundry project and artifact names must not
/// collide. Anti-snipe window: while
/// launchBlock <= block.number < launchBlock + 300 (block.number is the L1
/// estimate on Arbitrum Orbit, ~1 hour), launch-block buys from the pool
/// revert and no non-exempt wallet may exceed 2% of supply. From
/// launchBlock + 300 the hook short-circuits and the token is permanently
/// vanilla: no tax, no max-tx, no owner, no further mint path.
contract LaunchTokenV3 is ERC20, ERC20Permit {
uint256 public constant TOTAL_SUPPLY = 1e27; // 1B tokens, 18 decimals
uint256 public constant MAX_WALLET = 2e25; // 2% of supply
uint256 public constant RESTRICTION_BLOCKS = 300; // L1-estimate blocks (~1h on Orbit)
uint24 public constant POOL_FEE = 10000; // 1% tier, tickSpacing 200
address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
address public immutable launcher;
address public immutable locker;
address public immutable pool;
uint256 public immutable launchBlock;
uint256 public immutable restrictionEndBlock;
string public tokenURI;
string public logo;
error LaunchBlockBuyBlocked();
error MaxWalletExceeded();
constructor(
string memory name_,
string memory symbol_,
string memory tokenURI_,
string memory logo_,
address locker_,
address uniswapV3Factory_,
address weth_
) ERC20(name_, symbol_) ERC20Permit(name_) {
tokenURI = tokenURI_;
logo = logo_;
launcher = msg.sender;
locker = locker_;
// The pool cannot exist before this token does, so its address is
// derived deterministically here; the launcher reverts the whole
// launch if the factory ever returns a different address
// (init-code-hash guard).
pool = PoolAddress.computeAddress(
uniswapV3Factory_, PoolAddress.getPoolKey(address(this), weth_, POOL_FEE)
);
// block.number is the L1 estimate on Arbitrum Orbit chains, which is
// exactly the semantics decision #6 of the spec wants.
launchBlock = block.number;
restrictionEndBlock = block.number + RESTRICTION_BLOCKS;
_mint(msg.sender, TOTAL_SUPPLY);
}
/// @dev OZ v5 transfer hook. Max wallet applies to EVERY transfer during
/// the window, not just pool buys: checking the final hop closes the
/// router-custody bypass (swap with recipient = router, then sweep to a
/// wallet). Sells stay uncapped because to == pool is exempt. No router
/// exemptions by design: a transfer path that needs a custodian holding
/// more than 2% during the window is meant to fail. No tx.origin
/// tricks, no max-tx rule, no transfer tax.
function _update(address from, address to, uint256 value) internal override {
// from == address(0) is the constructor mint only (no later mint
// path exists); skipping it first also avoids reading immutables
// mid-construction. launchBlock <= block.number is implicit: block
// numbers never decrease.
if (from != address(0) && block.number < restrictionEndBlock) {
bool exemptRecipient =
to == pool || to == locker || to == launcher || to == DEAD;
if (!exemptRecipient && !IDevBuyFlag(launcher).devBuyActive()) {
if (from == pool && block.number == launchBlock) {
revert LaunchBlockBuyBlocked();
}
if (balanceOf(to) + value > MAX_WALLET) {
revert MaxWalletExceeded();
}
}
}
super._update(from, to, value);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "tokenURI_",
"type": "string",
"internalType": "string"
},
{
"name": "logo_",
"type": "string",
"internalType": "string"
},
{
"name": "locker_",
"type": "address",
"internalType": "address"
},
{
"name": "uniswapV3Factory_",
"type": "address",
"internalType": "address"
},
{
"name": "weth_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"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": "InvalidPoolKey",
"type": "error",
"inputs": []
},
{
"name": "InvalidShortString",
"type": "error",
"inputs": []
},
{
"name": "LaunchBlockBuyBlocked",
"type": "error",
"inputs": []
},
{
"name": "MaxWalletExceeded",
"type": "error",
"inputs": []
},
{
"name": "StringTooLong",
"type": "error",
"inputs": [
{
"name": "str",
"type": "string",
"internalType": "string"
}
]
},
{
"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": "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": "DEAD",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "DOMAIN_SEPARATOR",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "MAX_WALLET",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "POOL_FEE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint24",
"internalType": "uint24"
}
],
"stateMutability": "view"
},
{
"name": "RESTRICTION_BLOCKS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "TOTAL_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"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": "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": "launchBlock",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "launcher",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "locker",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "logo",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"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": "pool",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "restrictionEndBlock",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"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"
}
]0x608060405234801561000f575f80fd5b506004361061016d575f3560e01c80637ecebe00116100d9578063d505accf11610093578063dd62ed3e1161006e578063dd62ed3e14610390578063df7787a4146103c8578063ee4762eb146103da578063fb7f21eb146103e3575f80fd5b8063d505accf14610337578063d7b96d4e1461034c578063dd1b9c4a14610373575f80fd5b80637ecebe00146102b457806384b0196e146102c7578063902d55a5146102e257806395d89b41146102f5578063a9059cbb146102fd578063d00efb2f14610310575f80fd5b806318160ddd1161012a57806318160ddd1461025257806323b872dd1461025a578063313ce5671461026d5780633644e5151461027c5780633c130d901461028457806370a082311461028c575f80fd5b806303fd2a451461017157806306fdde03146101975780630861ac61146101ac578063095ea7b3146101e157806316eebd1e1461020457806316f0115b1461022b575b5f80fd5b61017a61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b61019f6103eb565b60405161018e9190611116565b6101d37f000000000000000000000000000000000000000000000000000000000185876181565b60405190815260200161018e565b6101f46101ef36600461114a565b61047b565b604051901515815260200161018e565b61017a7f000000000000000000000000985dfae571a0c5c90ac997f08687056d2ce1e46f81565b61017a7f000000000000000000000000b94c44a1773e1f109d31d0a53fd408c7d5421f9f81565b6002546101d3565b6101f4610268366004611172565b610494565b6040516012815260200161018e565b6101d36104b7565b61019f6104c5565b6101d361029a3660046111ab565b6001600160a01b03165f9081526020819052604090205490565b6101d36102c23660046111ab565b610551565b6102cf61056e565b60405161018e97969594939291906111c4565b6101d36b033b2e3c9fd0803ce800000081565b61019f6105b0565b6101f461030b36600461114a565b6105bf565b6101d37f000000000000000000000000000000000000000000000000000000000185863581565b61034a61034536600461125b565b6105cc565b005b61017a7f0000000000000000000000008321b824f5dca3b75f6a66d5f501755ba303930881565b61037c61271081565b60405162ffffff909116815260200161018e565b6101d361039e3660046112c8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101d36a108b2a2c2802909400000081565b6101d361012c81565b61019f610707565b6060600380546103fa906112f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610426906112f9565b80156104715780601f1061044857610100808354040283529160200191610471565b820191905f5260205f20905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b5f33610488818585610714565b60019150505b92915050565b5f336104a1858285610726565b6104ac8585856107a2565b506001949350505050565b5f6104c06107ff565b905090565b600880546104d2906112f9565b80601f01602080910402602001604051908101604052809291908181526020018280546104fe906112f9565b80156105495780601f1061052057610100808354040283529160200191610549565b820191905f5260205f20905b81548152906001019060200180831161052c57829003601f168201915b505050505081565b6001600160a01b0381165f9081526007602052604081205461048e565b5f6060805f805f606061057f610928565b610587610955565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546103fa906112f9565b5f336104888185856107a2565b834211156105f55760405163313c898160e11b8152600481018590526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106408c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61069a82610982565b90505f6106a9828787876109ae565b9050896001600160a01b0316816001600160a01b0316146106f0576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105ec565b6106fb8a8a8a610714565b50505050505050505050565b600980546104d2906112f9565b61072183838360016109da565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981101561079c578181101561078e57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105ec565b61079c84848484035f6109da565b50505050565b6001600160a01b0383166107cb57604051634b637e8f60e11b81525f60048201526024016105ec565b6001600160a01b0382166107f45760405163ec442f0560e01b81525f60048201526024016105ec565b610721838383610aac565b5f306001600160a01b037f000000000000000000000000806b2b299e03218826842c3603dea4d60c3ecc1f1614801561085757507f000000000000000000000000000000000000000000000000000000000000123746145b1561088157507ff0b83766572980eb4320a6d20f4302374f749c7c64a736b02428b8332db9af2d90565b6104c0604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f262269594e191cc109b4823e1022a43a6bcd6d5279ec50af39695559385706bc918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60606104c07f506172747920506172726f74000000000000000000000000000000000000000c6005610d1c565b60606104c07f31000000000000000000000000000000000000000000000000000000000000016006610d1c565b5f61048e61098e6107ff565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f806109be88888888610dc5565b9250925092506109ce8282610e8d565b50909695505050505050565b6001600160a01b038416610a035760405163e602df0560e01b81525f60048201526024016105ec565b6001600160a01b038316610a2c57604051634a1406b160e11b81525f60048201526024016105ec565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561079c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a9e91815260200190565b60405180910390a350505050565b6001600160a01b03831615801590610ae357507f000000000000000000000000000000000000000000000000000000000185876143105b15610d11575f7f000000000000000000000000b94c44a1773e1f109d31d0a53fd408c7d5421f9f6001600160a01b0316836001600160a01b03161480610b5a57507f0000000000000000000000008321b824f5dca3b75f6a66d5f501755ba30393086001600160a01b0316836001600160a01b0316145b80610b9657507f000000000000000000000000985dfae571a0c5c90ac997f08687056d2ce1e46f6001600160a01b0316836001600160a01b0316145b80610bab57506001600160a01b03831661dead145b905080158015610c3857507f000000000000000000000000985dfae571a0c5c90ac997f08687056d2ce1e46f6001600160a01b031663a6275b6d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c369190611331565b155b15610d0f577f000000000000000000000000b94c44a1773e1f109d31d0a53fd408c7d5421f9f6001600160a01b0316846001600160a01b0316148015610c9d57507f000000000000000000000000000000000000000000000000000000000185863543145b15610cbb576040516305fa917160e51b815260040160405180910390fd5b6a108b2a2c2802909400000082610ce6856001600160a01b03165f9081526020819052604090205490565b610cf09190611350565b1115610d0f57604051632ce93b5960e01b815260040160405180910390fd5b505b610721838383610f49565b606060ff8314610d3657610d2f8361106f565b905061048e565b818054610d42906112f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6e906112f9565b8015610db95780601f10610d9057610100808354040283529160200191610db9565b820191905f5260205f20905b815481529060010190602001808311610d9c57829003601f168201915b5050505050905061048e565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610dfe57505f91506003905082610e83565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610e4f573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610e7a57505f925060019150829050610e83565b92505f91508190505b9450945094915050565b5f826003811115610ea057610ea061136f565b03610ea9575050565b6001826003811115610ebd57610ebd61136f565b03610edb5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610eef57610eef61136f565b03610f105760405163fce698f760e01b8152600481018290526024016105ec565b6003826003811115610f2457610f2461136f565b03610f45576040516335e2f38360e21b8152600481018290526024016105ec565b5050565b6001600160a01b038316610f73578060025f828254610f689190611350565b90915550610fe39050565b6001600160a01b0383165f9081526020819052604090205481811015610fc55760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105ec565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610fff5760028054829003905561101d565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161106291815260200190565b60405180910390a3505050565b60605f61107b836110ac565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561048e57604051632cd44ac360e21b815260040160405180910390fd5b5f81518084525f5b818110156110f7576020818501810151868301820152016110db565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f61112860208301846110d3565b9392505050565b80356001600160a01b0381168114611145575f80fd5b919050565b5f806040838503121561115b575f80fd5b6111648361112f565b946020939093013593505050565b5f805f60608486031215611184575f80fd5b61118d8461112f565b925061119b6020850161112f565b9150604084013590509250925092565b5f602082840312156111bb575f80fd5b6111288261112f565b60ff60f81b881681525f602060e060208401526111e460e084018a6110d3565b83810360408501526111f6818a6110d3565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b818110156112495783518352928401929184019160010161122d565b50909c9b505050505050505050505050565b5f805f805f805f60e0888a031215611271575f80fd5b61127a8861112f565b96506112886020890161112f565b95506040880135945060608801359350608088013560ff811681146112ab575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f80604083850312156112d9575f80fd5b6112e28361112f565b91506112f06020840161112f565b90509250929050565b600181811c9082168061130d57607f821691505b60208210810361132b57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611341575f80fd5b81518015158114611128575f80fd5b8082018082111561048e57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea26469706673582212208cc04fdda7d7eb620d704b535a70e76d10425a20caef8cba986ef48e16d9719a64736f6c63430008180033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| DIH | 1 | $0.0000102 | $0 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x984456bf…d90fb1 | Transfer | 18,494,615 | 23 days agoFri, 24 Jul 2026 22:05:55 UTC | 0xcaf7…5d11 | IN | 0x806b…cc1f | $0.001 DIH |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x260521…bea2ba | 24 days agoFri, 24 Jul 2026 05:55:10 UTC | Transfer | [0] 0x000000000000…c8aebb4f [1] 0x000000000000…d5421f9f data: 0x000000000000000000…244d0a09 |
| 0x260521…bea2ba | 24 days agoFri, 24 Jul 2026 05:55:10 UTC | Transfer | [0] 0x000000000000…0f03cb16 [1] 0x000000000000…c8aebb4f data: 0x000000000000000000…244d0a09 |
| 0x0e51f2…4da4dd | 24 days agoFri, 24 Jul 2026 05:55:05 UTC | Approval | [0] 0x000000000000…0f03cb16 [1] 0x000000000000…f6797d6d data: 0xffffffffffffffffff…ffffffff |
| 0xd52149…4a93db | 24 days agoFri, 24 Jul 2026 05:55:00 UTC | Approval | [0] 0x000000000000…0f03cb16 [1] 0x000000000000…db8c0904 data: 0xffffffffffffffffff…ffffffff |
| 0xc5cd3b…dc7646 | 24 days agoFri, 24 Jul 2026 05:54:56 UTC | Approval | [0] 0x000000000000…0f03cb16 [1] 0x000000000000…e1a4f53d data: 0xffffffffffffffffff…ffffffff |
| 0xcd9625…e59924 | 24 days agoFri, 24 Jul 2026 05:54:54 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…0f03cb16 data: 0x000000000000000000…2325d5a6 |
| 0xb2b916…9fab79 | 27 days agoMon, 20 Jul 2026 22:11:19 UTC | Transfer | [0] 0x000000000000…94624eff [1] 0x000000000000…d5421f9f data: 0x000000000000000000…62706390 |
| 0xb2b916…9fab79 | 27 days agoMon, 20 Jul 2026 22:11:19 UTC | Transfer | [0] 0x000000000000…94624eff [1] 0x000000000000…03d3e2e4 data: 0x000000000000000000…5fc2f88b |
| 0xb2b916…9fab79 | 27 days agoMon, 20 Jul 2026 22:11:19 UTC | Transfer | [0] 0x000000000000…9bcf5c5c [1] 0x000000000000…94624eff data: 0x000000000000000000…c2335c1b |
| 0xb2b916…9fab79 | 27 days agoMon, 20 Jul 2026 22:11:19 UTC | Approval | [0] 0x000000000000…9bcf5c5c [1] 0x000000000000…72c22734 data: 0xffffffffffffffffff…ffffffff |
| 0x0f8ff0…f41335 | 28 days agoMon, 20 Jul 2026 18:26:40 UTC | Transfer | [0] 0x000000000000…273eab7f [1] 0x000000000000…d5421f9f data: 0x000000000000000000…1b08d640 |
| 0x0f8ff0…f41335 | 28 days agoMon, 20 Jul 2026 18:26:40 UTC | Transfer | [0] 0x000000000000…273eab7f [1] 0x000000000000…e622fd7a data: 0x000000000000000000…0bb6b7c0 |
| 0x0f8ff0…f41335 | 28 days agoMon, 20 Jul 2026 18:26:40 UTC | Transfer | [0] 0x000000000000…94e69bf2 [1] 0x000000000000…273eab7f data: 0x000000000000000000…26bf8e00 |
| 0x4c48b0…dd6bfa | 28 days agoSun, 19 Jul 2026 22:20:52 UTC | Transfer | [0] 0x000000000000…d5421f9f [1] 0x000000000000…94e69bf2 data: 0x000000000000000000…1ab848de |
| 0x069b38…119334 | 29 days agoSun, 19 Jul 2026 15:42:11 UTC | Transfer | [0] 0x000000000000…273eab7f [1] 0x000000000000…94e69bf2 data: 0x000000000000000000…2588b613 |
| 0x069b38…119334 | 29 days agoSun, 19 Jul 2026 15:42:11 UTC | Transfer | [0] 0x000000000000…94624eff [1] 0x000000000000…273eab7f data: 0x000000000000000000…2588b613 |
| 0x069b38…119334 | 29 days agoSun, 19 Jul 2026 15:42:11 UTC | Transfer | [0] 0x000000000000…d5421f9f [1] 0x000000000000…94624eff data: 0x000000000000000000…2588b613 |
| 0x6df3f0…c0a79b | 29 days agoSun, 19 Jul 2026 13:41:04 UTC | Transfer | [0] 0x000000000000…273eab7f [1] 0x000000000000…d5421f9f data: 0x000000000000000000…81600000 |
| 0x6df3f0…c0a79b | 29 days agoSun, 19 Jul 2026 13:41:04 UTC | Transfer | [0] 0x000000000000…273eab7f [1] 0x000000000000…e622fd7a data: 0x000000000000000000…d3a00000 |
| 0x6df3f0…c0a79b | 29 days agoSun, 19 Jul 2026 13:41:04 UTC | Approval | [0] 0x000000000000…273eab7f [1] 0x000000000000…72c22734 data: 0xffffffffffffffffff…ffffffff |
| 0x6df3f0…c0a79b | 29 days agoSun, 19 Jul 2026 13:41:04 UTC | Transfer | [0] 0x000000000000…94e69bf2 [1] 0x000000000000…273eab7f data: 0x000000000000000000…55000000 |
| 0xd555d6…a06e63 | 29 days agoSun, 19 Jul 2026 13:41:02 UTC | Approval | [0] 0x000000000000…94e69bf2 [1] 0x000000000000…e35fd727 data: 0xffffffffffffffffff…ffffffff |
| 0x72c232…ce2b16 | 29 days agoSun, 19 Jul 2026 12:33:29 UTC | Transfer | [0] 0x000000000000…273eab7f [1] 0x000000000000…94e69bf2 data: 0x000000000000000000…3b77982c |
| 0x72c232…ce2b16 | 29 days agoSun, 19 Jul 2026 12:33:29 UTC | Transfer | [0] 0x000000000000…94624eff [1] 0x000000000000…273eab7f data: 0x000000000000000000…3b77982c |
| 0x72c232…ce2b16 | 29 days agoSun, 19 Jul 2026 12:33:29 UTC | Transfer | [0] 0x000000000000…d5421f9f [1] 0x000000000000…94624eff data: 0x000000000000000000…3b77982c |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 9,166,465 | 34 days agoTue, 14 Jul 2026 02:22:09 UTC | 0x275d61…0bba1e | CREATE2 | launchToken | 0x985d…e46f | IN | 0x806b…cc1f | 0 ETH |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x0e51f2…4da4dd | Approve | 17,913,707 | 24 days agoFri, 24 Jul 2026 05:55:05 UTC | hoodi.hood | IN | Party Parrot | $0.000 ETH | 0.00000550 | |
| 0xd52149…4a93db | Approve | 17,913,659 | 24 days agoFri, 24 Jul 2026 05:55:00 UTC | hoodi.hood | IN | Party Parrot | $0.000 ETH | 0.00000554 | |
| 0xc5cd3b…dc7646 | Approve | 17,913,611 | 24 days agoFri, 24 Jul 2026 05:54:56 UTC | hoodi.hood | IN | Party Parrot | $0.000 ETH | 0.00000557 | |
| 0xd555d6…a06e63 | Approve | 13,883,984 | 29 days agoSun, 19 Jul 2026 13:41:02 UTC | 0x86c0…9bf2 | IN | Party Parrot | $0.000 ETH | 0.00000258 | |
| 0x239f81…c17eca | Approve | 13,326,493 | 29 days agoSat, 18 Jul 2026 22:07:26 UTC | 0x3be9…8182 | IN | Party Parrot | $0.000 ETH | 0.00000305 | |
| 0xa0b056…33aebf | Approve | 11,504,552 | 32 days agoThu, 16 Jul 2026 19:21:02 UTC | 0xcd3a…db89 | IN | Party Parrot | $0.000 ETH | 0.00000335 | |
| 0x23c785…71825e | Approve | 11,081,770 | 32 days agoThu, 16 Jul 2026 07:35:47 UTC | 0x3179…22b7 | IN | Party Parrot | $0.000 ETH | 0.00000298 | |
| 0xed42bb…b64c36 | Approve | 10,810,064 | 32 days agoThu, 16 Jul 2026 00:02:22 UTC | 0x2cc6…6a66 | IN | Party Parrot | $0.000 ETH | 0.00000318 | |
| 0x89b67f…3e6229 | Approve | 10,198,484 | 33 days agoWed, 15 Jul 2026 07:05:04 UTC | 0x3585…f1e1 | IN | Party Parrot | $0.000 ETH | 0.00000243 | |
| 0x372b39…493fdb | Approve | 9,610,964 | 34 days agoTue, 14 Jul 2026 14:44:26 UTC | 0x5c2a…7907 | IN | Party Parrot | $0.000 ETH | 0.00000213 | |
| 0xca217b…e4f20e | Approve | 9,533,367 | 34 days agoTue, 14 Jul 2026 12:35:26 UTC | 0x3ce7…9968 | IN | Party Parrot | $0.000 ETH | 0.00000213 | |
| 0x7260c3…6fb206 | Approve | 9,356,397 | 34 days agoTue, 14 Jul 2026 07:39:43 UTC | 0xf5c4…6157 | IN | Party Parrot | $0.000 ETH | 0.00000217 | |
| 0xc8fcc2…de344c | Approve | 9,354,657 | 34 days agoTue, 14 Jul 2026 07:36:49 UTC | 0x94e9…ae31 | IN | Party Parrot | $0.000 ETH | 0.00000220 | |
| 0xe0a64e…850559 | Approve | 9,332,279 | 34 days agoTue, 14 Jul 2026 06:59:27 UTC | 0x05de…343f | IN | Party Parrot | $0.000 ETH | 0.00000216 | |
| 0x71bb4c…97f46d | Approve | 9,324,508 | 34 days agoTue, 14 Jul 2026 06:46:29 UTC | 0xd369…ba03 | IN | Party Parrot | $0.000 ETH | 0.00000222 | |
| 0x46ee9b…eddd2f | Approve | 9,303,119 | 34 days agoTue, 14 Jul 2026 06:10:43 UTC | 0xbbc8…97d4 | IN | Party Parrot | $0.000 ETH | 0.00000218 | |
| 0xeb3454…a3596e | Approve | 9,303,088 | 34 days agoTue, 14 Jul 2026 06:10:40 UTC | 0x07fb…f959 | IN | Party Parrot | $0.000 ETH | 0.00000219 | |
| 0xd8be18…16b6ee | Approve | 9,302,705 | 34 days agoTue, 14 Jul 2026 06:10:02 UTC | 0xfcc5…724a | IN | Party Parrot | $0.000 ETH | 0.00000217 | |
| 0x06454d…b4e7d2 | Approve | 9,302,705 | 34 days agoTue, 14 Jul 2026 06:10:02 UTC | 0x9cb0…e5c0 | IN | Party Parrot | $0.000 ETH | 0.00000217 | |
| 0x7f3882…3dfcec | Approve | 9,302,611 | 34 days agoTue, 14 Jul 2026 06:09:52 UTC | 0xe988…5df0 | IN | Party Parrot | $0.000 ETH | 0.00000125 | |
| 0x23c3aa…b89336 | Approve | 9,302,609 | 34 days agoTue, 14 Jul 2026 06:09:52 UTC | 0xe988…5df0 | IN | Party Parrot | $0.000 ETH | 0.00000217 | |
| 0x0a0ef3…aee82c | Approve | 9,293,938 | 34 days agoTue, 14 Jul 2026 05:55:22 UTC | 0x90a4…512e | IN | Party Parrot | $0.000 ETH | 0.00000218 | |
| 0x3a612b…6136ea | Approve | 9,293,604 | 34 days agoTue, 14 Jul 2026 05:54:49 UTC | 0x22d5…201c | IN | Party Parrot | $0.000 ETH | 0.00000216 | |
| 0xb08596…a52ae5 | Approve | 9,292,499 | 34 days agoTue, 14 Jul 2026 05:52:58 UTC | 0x6a7d…d473 | IN | Party Parrot | $0.000 ETH | 0.00000218 | |
| 0xac2af3…d08978 | Approve | 9,292,220 | 34 days agoTue, 14 Jul 2026 05:52:29 UTC | 0x2e84…3821 | IN | Party Parrot | $0.000 ETH | 0.00000219 |