// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
interface IUniswapV3Factory {
function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool);
}
library LauncherTypes {
struct Socials {
string telegram;
string twitter;
string discord;
string website;
string farcaster;
}
struct TokenConfig {
string name;
string symbol;
uint256 supply;
address pairToken;
address positionManager;
address dexFactory;
address locker; // FIX F-7 — fee-custody contract, excluded from anti-snipe limits
uint24 poolFee;
uint16 maxWalletBps;
uint16 maxTxBps;
uint32 restrictionSeconds; // anti-snipe window duration in SECONDS (real time)
}
struct TokenInfo {
address deployer;
string logo;
string description;
Socials socials;
}
}
contract LaunchToken is ERC20 {
error MaxWalletExceeded(address account, uint256 balanceAfter, uint256 maxWallet);
error MaxTxExceeded(address account, uint256 amount, uint256 maxTx);
LauncherTypes.TokenInfo private _tokenInfo;
mapping(address account => uint256 amount) private _originBought;
address public immutable launchFactory;
address public immutable pairToken;
address public immutable positionManager;
address public immutable dexFactory;
address public immutable locker; // FIX F-7 — excluded from anti-snipe so fee collection can't revert
uint24 public immutable poolFee;
uint16 public immutable maxWalletBps;
uint16 public immutable maxTxBps;
uint32 public immutable restrictionSeconds;
// NB: on Robinhood Chain the `block.number` opcode returns the L1 block number (~12s cadence),
// NOT an L2 per-block counter — far too coarse for any per-block logic — so this contract never
// uses block.number. ALL anti-snipe is wall-clock (block.timestamp) based.
uint256 public immutable launchTime; // block.timestamp at deploy (wall-clock, reliable)
uint256 public immutable restrictionEndTime; // launchTime + restrictionSeconds
uint256 public immutable maxWalletAmount;
uint256 public immutable maxTxAmount;
constructor(LauncherTypes.TokenConfig memory config, LauncherTypes.TokenInfo memory info)
ERC20(config.name, config.symbol)
{
launchFactory = msg.sender;
pairToken = config.pairToken;
positionManager = config.positionManager;
dexFactory = config.dexFactory;
locker = config.locker;
poolFee = config.poolFee;
maxWalletBps = config.maxWalletBps;
maxTxBps = config.maxTxBps;
restrictionSeconds = config.restrictionSeconds;
launchTime = block.timestamp;
restrictionEndTime = block.timestamp + config.restrictionSeconds;
maxWalletAmount = (config.supply * config.maxWalletBps) / 10_000;
maxTxAmount = (config.supply * config.maxTxBps) / 10_000;
_tokenInfo = info;
_mint(msg.sender, config.supply);
}
function liquidityPool() public view returns (address) {
return IUniswapV3Factory(dexFactory).getPool(address(this), pairToken, poolFee);
}
function maxWalletLimit() external view returns (uint256) {
return maxWalletAmount;
}
function maxTxLimit() external view returns (uint256) {
return maxTxAmount;
}
function getTokenInfo() external view returns (LauncherTypes.TokenInfo memory) {
return _tokenInfo;
}
function deployer() external view returns (address) {
return _tokenInfo.deployer;
}
function logo() external view returns (string memory) {
return _tokenInfo.logo;
}
function description() external view returns (string memory) {
return _tokenInfo.description;
}
function socials() external view returns (LauncherTypes.Socials memory) {
return _tokenInfo.socials;
}
function _update(address from, address to, uint256 value) internal override {
// Anti-snipe is wall-clock only (block.timestamp) and scoped to BUYS. The window is active
// from launch (t0) through restrictionEndTime. We only meter/limit tokens LEAVING the pool
// (from == pool) to a normal wallet, which means sells (to == pool), wallet-to-wallet
// transfers, and any router/aggregator that holds tokens mid-swap are NEVER restricted — the
// token can always be sold. block.number is deliberately not used (it is the L1 block number
// on this chain, ~12s cadence, and the old `== launchBlock` check blocked ALL buys for up to
// one full L1 block after launch, which honeypot scanners correctly flag as a transfer trap).
if (value > 0 && block.timestamp <= restrictionEndTime) {
address pool = liquidityPool();
// FIX F-7 — the fee-custody `locker` is excluded (collectFees transfers pool->locker
// during the window). FIX F-9 — the per-address buy meter keys on the RECIPIENT (`to`),
// the same entity the max-wallet cap tracks, which is correct under AA/bundlers/aggregators
// where tx.origin is a shared relayer.
if (
pool != address(0) &&
from == pool &&
to != launchFactory &&
to != _tokenInfo.deployer &&
to != locker
) {
// Per-address cumulative buy cap (maxTx, +10% headroom).
uint256 bought = _originBought[to] + value;
_originBought[to] = bought;
uint256 maxBuy = (maxTxAmount * 11_000) / 10_000;
if (maxBuy == 0 || bought > maxBuy) {
revert MaxTxExceeded(to, bought, maxBuy);
}
// Per-wallet holding cap.
uint256 balanceAfter = balanceOf(to) + value;
if (balanceAfter > maxWalletAmount) {
revert MaxWalletExceeded(to, balanceAfter, maxWalletAmount);
}
}
}
super._update(from, to, value);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "config",
"type": "tuple",
"components": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
},
{
"name": "supply",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "pairToken",
"type": "address",
"internalType": "address"
},
{
"name": "positionManager",
"type": "address",
"internalType": "address"
},
{
"name": "dexFactory",
"type": "address",
"internalType": "address"
},
{
"name": "locker",
"type": "address",
"internalType": "address"
},
{
"name": "poolFee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "maxWalletBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "maxTxBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "restrictionSeconds",
"type": "uint32",
"internalType": "uint32"
}
],
"internalType": "struct LauncherTypes.TokenConfig"
},
{
"name": "info",
"type": "tuple",
"components": [
{
"name": "deployer",
"type": "address",
"internalType": "address"
},
{
"name": "logo",
"type": "string",
"internalType": "string"
},
{
"name": "description",
"type": "string",
"internalType": "string"
},
{
"name": "socials",
"type": "tuple",
"components": [
{
"name": "telegram",
"type": "string",
"internalType": "string"
},
{
"name": "twitter",
"type": "string",
"internalType": "string"
},
{
"name": "discord",
"type": "string",
"internalType": "string"
},
{
"name": "website",
"type": "string",
"internalType": "string"
},
{
"name": "farcaster",
"type": "string",
"internalType": "string"
}
],
"internalType": "struct LauncherTypes.Socials"
}
],
"internalType": "struct LauncherTypes.TokenInfo"
}
],
"stateMutability": "nonpayable"
},
{
"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": "MaxTxExceeded",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxTx",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "MaxWalletExceeded",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "balanceAfter",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxWallet",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"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": "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": "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": "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": "dexFactory",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "getTokenInfo",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "tuple",
"components": [
{
"name": "deployer",
"type": "address",
"internalType": "address"
},
{
"name": "logo",
"type": "string",
"internalType": "string"
},
{
"name": "description",
"type": "string",
"internalType": "string"
},
{
"name": "socials",
"type": "tuple",
"components": [
{
"name": "telegram",
"type": "string",
"internalType": "string"
},
{
"name": "twitter",
"type": "string",
"internalType": "string"
},
{
"name": "discord",
"type": "string",
"internalType": "string"
},
{
"name": "website",
"type": "string",
"internalType": "string"
},
{
"name": "farcaster",
"type": "string",
"internalType": "string"
}
],
"internalType": "struct LauncherTypes.Socials"
}
],
"internalType": "struct LauncherTypes.TokenInfo"
}
],
"stateMutability": "view"
},
{
"name": "launchFactory",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "launchTime",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "liquidityPool",
"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": "maxTxAmount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "maxTxBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "maxTxLimit",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "maxWalletAmount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "maxWalletBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "maxWalletLimit",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "pairToken",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "poolFee",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint24",
"internalType": "uint24"
}
],
"stateMutability": "view"
},
{
"name": "positionManager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "restrictionEndTime",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "restrictionSeconds",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint32",
"internalType": "uint32"
}
],
"stateMutability": "view"
},
{
"name": "socials",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "tuple",
"components": [
{
"name": "telegram",
"type": "string",
"internalType": "string"
},
{
"name": "twitter",
"type": "string",
"internalType": "string"
},
{
"name": "discord",
"type": "string",
"internalType": "string"
},
{
"name": "website",
"type": "string",
"internalType": "string"
},
{
"name": "farcaster",
"type": "string",
"internalType": "string"
}
],
"internalType": "struct LauncherTypes.Socials"
}
],
"stateMutability": "view"
},
{
"name": "symbol",
"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"
}
]0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde0314610930578063089fe6aa146108f1578063095ea7b31461086f57806312f16a071461083157806318160ddd1461081457806323b872dd14610735578063313ce5671461071a5780633220fbda146106e05780633de35b791461069c578063536dac9b1461065857806353cd512a14610620578063665a11ca146105f457806366a88d96146103b557806370a08231146105bd5780637284e416146105a2578063790ca41314610568578063791b98bc146105245780638036d5901461051f5780638c0b5e221461051f5780638c70ba13146104df57806395d89b41146103eb578063a9059cbb146103ba578063aa4bde28146103b5578063abb1dc44146102d8578063b8d8fbb414610294578063d5f394881461026c578063d7b96d4e14610228578063dd62ed3e146101d8578063fb7f21eb146101a55763ff8ea3e514610163575f80fd5b346101a1575f3660031901126101a157602060405161ffff7f00000000000000000000000000000000000000000000000000000000000000c8168152f35b5f80fd5b346101a1575f3660031901126101a1576101d46101c0610c57565b6040519182916020835260208301906109eb565b0390f35b346101a15760403660031901126101a1576101f1610a0f565b6101f9610a25565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b346101a1575f3660031901126101a1576040517f0000000000000000000000009a6931e371b62048c7543c7002c99d83685bd44d6001600160a01b03168152602090f35b346101a1575f3660031901126101a1576005546040516001600160a01b039091168152602090f35b346101a1575f3660031901126101a1576040517f0000000000000000000000001f7d7550b1b028f7571e69a784071f0205fd2efa6001600160a01b03168152602090f35b346101a1575f3660031901126101a1576040516102f481610b1b565b5f81526060602082015260606040820152606061030f610db9565b91015260405161031e81610b1b565b6005546001600160a01b03168152610334610c57565b90602081019182526101d4610347610b89565b604083019081526103a2610359610de3565b916060850192835261038f6040519687966020885260018060a01b039051166020880152516080604088015260a08701906109eb565b9051858203601f190160608701526109eb565b9051838203601f19016080850152610a3b565b610aa7565b346101a15760403660031901126101a1576103e06103d6610a0f565b6024359033610f32565b602060405160018152f35b346101a1575f3660031901126101a1576040515f6004548060011c906001811680156104d5575b6020831081146104c15782855290811561049d575060011461043f575b6101d4836101c081850382610b67565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610483575090915081016020016101c061042f565b91926001816020925483858801015201910190929161046b565b60ff191660208086019190915291151560051b840190910191506101c0905061042f565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610412565b346101a1575f3660031901126101a157602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000e10168152f35b610ae1565b346101a1575f3660031901126101a1576040517f00000000000000000000000073991a25c818bf1f1128deaab1492d45638de0d36001600160a01b03168152602090f35b346101a1575f3660031901126101a15760206040517f000000000000000000000000000000000000000000000000000000006a60e9238152f35b346101a1575f3660031901126101a1576101d46101c0610b89565b346101a15760203660031901126101a1576001600160a01b036105de610a0f565b165f525f602052602060405f2054604051908152f35b346101a1575f3660031901126101a157602061060e610e3b565b6040516001600160a01b039091168152f35b346101a1575f3660031901126101a157610638610db9565b506101d4610644610de3565b604051918291602083526020830190610a3b565b346101a1575f3660031901126101a1576040517f000000000000000000000000dd84fddea1206115b37dbbc0ba5721530e1ba9c56001600160a01b03168152602090f35b346101a1575f3660031901126101a1576040517f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b03168152602090f35b346101a1575f3660031901126101a15760206040517f000000000000000000000000000000000000000000000000000000006a60f7338152f35b346101a1575f3660031901126101a157602060405160128152f35b346101a15760603660031901126101a15761074e610a0f565b610756610a25565b6001600160a01b0382165f818152600160209081526040808320338452909152902054909260443592915f198110610794575b506103e09350610f32565b8381106107f95784156107e65733156107d3576103e0945f52600160205260405f2060018060a01b0333165f526020528360405f209103905584610789565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b346101a1575f3660031901126101a1576020600254604051908152f35b346101a1575f3660031901126101a157602060405161ffff7f00000000000000000000000000000000000000000000000000000000000000c8168152f35b346101a15760403660031901126101a157610888610a0f565b6024359033156107e6576001600160a01b03169081156107d357335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346101a1575f3660031901126101a157602060405162ffffff7f0000000000000000000000000000000000000000000000000000000000002710168152f35b346101a1575f3660031901126101a1576040515f6003548060011c906001811680156109e1575b6020831081146104c15782855290811561049d5750600114610983576101d4836101c081850382610b67565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b8082106109c7575090915081016020016101c061042f565b9192600181602092548385880101520191019092916109af565b91607f1691610957565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036101a157565b602435906001600160a01b03821682036101a157565b610aa4916080610a93610a81610a6f610a5d865160a0875260a08701906109eb565b602087015186820360208801526109eb565b604086015185820360408701526109eb565b606085015184820360608601526109eb565b9201519060808184039101526109eb565b90565b346101a1575f3660031901126101a15760206040517f000000000000000000000000000000000000000000108b2a2c280290940000008152f35b346101a1575f3660031901126101a15760206040517f000000000000000000000000000000000000000000108b2a2c280290940000008152f35b6080810190811067ffffffffffffffff821117610b3757604052565b634e487b7160e01b5f52604160045260245ffd5b60a0810190811067ffffffffffffffff821117610b3757604052565b90601f8019910116810190811067ffffffffffffffff821117610b3757604052565b604051905f6007548060011c9160018216918215610c4d575b6020841083146104c1578386528592908115610c2e5750600114610bcf575b610bcd92500383610b67565b565b5060075f90815290917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b818310610c12575050906020610bcd92820101610bc1565b6020919350806001915483858901015201910190918492610bfa565b60209250610bcd94915060ff191682840152151560051b820101610bc1565b92607f1692610ba2565b604051905f6006548060011c9160018216918215610cf9575b6020841083146104c1578386528592908115610c2e5750600114610c9a57610bcd92500383610b67565b5060065f90815290917ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b818310610cdd575050906020610bcd92820101610bc1565b6020919350806001915483858901015201910190918492610cc5565b92607f1692610c70565b90604051915f8154908160011c9260018316928315610daf575b6020851084146104c1578487528693908115610d8d5750600114610d49575b50610bcd92500383610b67565b90505f9291925260205f20905f915b818310610d71575050906020610bcd928201015f610d3c565b6020919350806001915483858901015201910190918492610d58565b905060209250610bcd94915060ff191682840152151560051b8201015f610d3c565b93607f1693610d1d565b60405190610dc682610b4b565b606060808382815282602082015282604082015282808201520152565b60405190610df082610b4b565b81610dfb6008610d03565b8152610e076009610d03565b6020820152610e16600a610d03565b6040820152610e25600b610d03565b60608201526080610e36600c610d03565b910152565b604051630b4c774160e11b81523060048201526001600160a01b037f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad738116602483015262ffffff7f0000000000000000000000000000000000000000000000000000000000002710166044830152602090829060649082907f0000000000000000000000001f7d7550b1b028f7571e69a784071f0205fd2efa165afa908115610f27575f91610ee8575090565b90506020813d602011610f1f575b81610f0360209383610b67565b810103126101a157516001600160a01b03811681036101a15790565b3d9150610ef6565b6040513d5f823e3d90fd5b6001600160a01b03169081156111cf576001600160a01b03169182156111bc5780151580611192575b610fd7575b815f525f60205260405f2054818110610fbe57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b6001600160a01b03610fe7610e3b565b168015159081611188575b5080611155575b80611140575b8061110d575b15610f6057825f52600d6020526110208160405f20546111e2565b835f52600d6020528060405f20557f000000000000000000000000000000000000000000108b2a2c28029094000000612af8810290808204612af814901517156110f957612710900490811580156110f0575b6110d7575050825f525f60205261108e8160405f20546111e2565b7f000000000000000000000000000000000000000000108b2a2c28029094000000908181116110be575050610f60565b846304a43e8b60e51b5f5260045260245260445260645ffd5b846334e5f8b760e21b5f5260045260245260445260645ffd5b50818111611073565b634e487b7160e01b5f52601160045260245ffd5b507f0000000000000000000000009a6931e371b62048c7543c7002c99d83685bd44d6001600160a01b0316831415611005565b506005546001600160a01b0316831415610fff565b507f000000000000000000000000dd84fddea1206115b37dbbc0ba5721530e1ba9c56001600160a01b0316831415610ff9565b905082145f610ff2565b507f000000000000000000000000000000000000000000000000000000006a60f733421115610f5b565b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b919082018092116110f95756fea2646970667358221220bc75613260afcdcfcd877863044b4bff619cad8c29a391c60ab58e074364c77464736f6c634300081e0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| Global Dollar (USDG) | USDG | 6 | $1 | $6 |
| DIH | 2 | $0.0000102 | $0 | |
| Trump Accounts Fund (TA) | TA | 5 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x4ce83a…90f142 | 54 mins agoTue, 18 Aug 2026 06:46:04 UTC | Approval | [0] 0x000000000000…2bc98eaf [1] 0x000000000000…e1a4f53d data: 0x000000000000000000…00000000 |
| 0x3ef358…3855c0 | 54 mins agoTue, 18 Aug 2026 06:45:18 UTC | Approval | [0] 0x000000000000…2bc98eaf [1] 0x000000000000…e1a4f53d data: 0x000000000000000000…00000000 |
| 0x77230f…5077ac | 6 hrs agoTue, 18 Aug 2026 00:56:19 UTC | Transfer | [0] 0x000000000000…211389c7 [1] 0x000000000000…57f38fa2 data: 0x000000000000000000…de8f7587 |
| 0x77230f…5077ac | 6 hrs agoTue, 18 Aug 2026 00:56:19 UTC | Transfer | [0] 0x000000000000…aeb081ea [1] 0x000000000000…211389c7 data: 0x000000000000000000…de8f7587 |
| 0x61bc61…0fec05 | 9 hrs agoMon, 17 Aug 2026 21:49:48 UTC | Transfer | [0] 0x000000000000…62b7f572 [1] 0x000000000000…aeb081ea data: 0x000000000000000000…c604af43 |
| 0x50857b…058a76 | 9 hrs agoMon, 17 Aug 2026 21:49:48 UTC | Approval | [0] 0x000000000000…62b7f572 [1] 0x000000000000…262c40dc data: 0x000000000000000000…c604af43 |
| 0xa684c4…3819c0 | 11 hrs agoMon, 17 Aug 2026 20:23:29 UTC | Transfer | [0] 0x000000000000…aeb081ea [1] 0x000000000000…62b7f572 data: 0x000000000000000000…c604af43 |
| 0xa357af…f18fd7 | 11 hrs agoMon, 17 Aug 2026 20:12:34 UTC | Transfer | [0] 0x000000000000…aeb081ea [1] 0x000000000000…64683a03 data: 0x000000000000000000…147c7fa7 |
| 0xd2324e…5b85a6 | 11 hrs agoMon, 17 Aug 2026 20:11:48 UTC | Transfer | [0] 0x000000000000…aeb081ea [1] 0x000000000000…64683a03 data: 0x000000000000000000…ce76e390 |
| 0x9bad07…178e1f | 12 hrs agoMon, 17 Aug 2026 18:50:53 UTC | Transfer | [0] 0x000000000000…593102f1 [1] 0x000000000000…aeb081ea data: 0x000000000000000000…8ed00f89 |
| 0xb3531e…252e42 | 13 hrs agoMon, 17 Aug 2026 18:39:45 UTC | Approval | [0] 0x000000000000…429d089f [1] 0x000000000000…dc92cd7e data: 0x000000000000000000…00000000 |
| 0xb3531e…252e42 | 13 hrs agoMon, 17 Aug 2026 18:39:45 UTC | Approval | [0] 0x000000000000…dc92cd7e [1] 0x000000000000…959e5cb2 data: 0x000000000000000000…00000000 |
| 0xb3531e…252e42 | 13 hrs agoMon, 17 Aug 2026 18:39:45 UTC | Transfer | [0] 0x000000000000…dc92cd7e [1] 0x000000000000…aeb081ea data: 0x000000000000000000…347fd4de |
| 0xb3531e…252e42 | 13 hrs agoMon, 17 Aug 2026 18:39:45 UTC | Approval | [0] 0x000000000000…dc92cd7e [1] 0x000000000000…959e5cb2 data: 0x000000000000000000…347fd4de |
| 0xb3531e…252e42 | 13 hrs agoMon, 17 Aug 2026 18:39:45 UTC | Transfer | [0] 0x000000000000…429d089f [1] 0x000000000000…dc92cd7e data: 0x000000000000000000…347fd4de |
| 0xb3531e…252e42 | 13 hrs agoMon, 17 Aug 2026 18:39:45 UTC | Approval | [0] 0x000000000000…429d089f [1] 0x000000000000…dc92cd7e data: 0x000000000000000000…347fd4de |
| 0xb3531e…252e42 | 13 hrs agoMon, 17 Aug 2026 18:39:45 UTC | Transfer | [0] 0x000000000000…e57aacc8 [1] 0x000000000000…429d089f data: 0x000000000000000000…347fd4de |
| 0x986acd…b93126 | 13 hrs agoMon, 17 Aug 2026 18:39:44 UTC | Approval | [0] 0x000000000000…e57aacc8 [1] 0x000000000000…429d089f data: 0xffffffffffffffffff…ffffffff |
| 0x8483c6…f92a11 | 13 hrs agoMon, 17 Aug 2026 17:41:36 UTC | Transfer | [0] 0x000000000000…ec42f677 [1] 0x000000000000…aeb081ea data: 0x000000000000000000…ed1876b9 |
| 0x303a99…f50efa | 14 hrs agoMon, 17 Aug 2026 17:39:13 UTC | Transfer | [0] 0x000000000000…c8a7a60f [1] 0x000000000000…aeb081ea data: 0x000000000000000000…487de418 |
| 0x9543d0…814c1f | 14 hrs agoMon, 17 Aug 2026 17:39:13 UTC | Approval | [0] 0x000000000000…c8a7a60f [1] 0x000000000000…262c40dc data: 0x000000000000000000…487de418 |
| 0x436c1e…40fcbe | 14 hrs agoMon, 17 Aug 2026 17:37:17 UTC | Approval | [0] 0x000000000000…ec42f677 [1] 0x000000000000…3ac78ba3 data: 0x000000000000000000…e8000000 |
| 0x3687cd…cfe85e | 14 hrs agoMon, 17 Aug 2026 17:36:19 UTC | Approval | [0] 0x000000000000…593102f1 [1] 0x000000000000…72c22734 data: 0x000000000000000000…e8000000 |
| 0x9a429c…a76595 | 14 hrs agoMon, 17 Aug 2026 17:36:00 UTC | Transfer | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…593102f1 data: 0x000000000000000000…8ed00f89 |
| 0x9a429c…a76595 | 14 hrs agoMon, 17 Aug 2026 17:36:00 UTC | Transfer | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…24c8fce5 data: 0x000000000000000000…799eff65 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xaea54fe2…e55ac4 | Transfer | 20,955,951 | 21 days agoMon, 27 Jul 2026 18:44:32 UTC | 0x8c94…ec08 | IN | 0xec6d…4663 | 3 USDG | Global Dollar (USDG) | |
| 0xa4499b64…c5414d | Transfer | 20,955,835 | 21 days agoMon, 27 Jul 2026 18:44:20 UTC | 0x8c94…ec08 | IN | 0xec6d…4663 | 3 USDG | Global Dollar (USDG) | |
| 0xb4a3f5e1…c57551 | Transfer | 20,075,082 | 22 days agoSun, 26 Jul 2026 18:09:47 UTC | 0xc7a7…cec7 | IN | 0xec6d…4663 | 5 TA | Trump Accounts Fund (TA) | |
| 0xd571c8b2…c8b357 | Transfer | 17,354,606 | 25 days agoThu, 23 Jul 2026 14:20:40 UTC | 0xcaf7…5d11 | IN | 0xec6d…4663 | $0.001 DIH | ||
| 0x6348f197…32dd5a | Transfer | 17,297,158 | 25 days agoThu, 23 Jul 2026 12:44:43 UTC | 0xcaf7…5d11 | IN | 0xec6d…4663 | $0.001 DIH |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x4ce83a…90f142 | Approve | 39,493,526 | 54 mins agoTue, 18 Aug 2026 06:46:04 UTC | 0x069f…8eaf | IN | Stud | $0.000 ETH | 0.00000052 | |
| 0x3ef358…3855c0 | Approve | 39,493,074 | 54 mins agoTue, 18 Aug 2026 06:45:18 UTC | 0x069f…8eaf | IN | Stud | $0.000 ETH | 0.00000048 | |
| 0x50857b…058a76 | Approve | 39,172,679 | 9 hrs agoMon, 17 Aug 2026 21:49:48 UTC | 0xb519…f572 | IN | Stud | $0.000 ETH | 0.00000092 | |
| 0x986acd…b93126 | Approve | 39,058,993 | 13 hrs agoMon, 17 Aug 2026 18:39:44 UTC | 0x00d1…acc8 | IN | Stud | $0.000 ETH | 0.00000093 | |
| 0x9543d0…814c1f | Approve | 39,022,777 | 14 hrs agoMon, 17 Aug 2026 17:39:13 UTC | 0xf971…a60f | IN | Stud | $0.000 ETH | 0.00000092 | |
| 0x436c1e…40fcbe | Approve | 39,021,624 | 14 hrs agoMon, 17 Aug 2026 17:37:17 UTC | 0xcdfd…f677 | IN | Stud | $0.000 ETH | 0.00000095 | |
| 0x3687cd…cfe85e | Approve | 39,021,051 | 14 hrs agoMon, 17 Aug 2026 17:36:19 UTC | 0xab81…02f1 | IN | Stud | $0.000 ETH | 0.00000092 | |
| 0x863736…a9cff3 | Approve | 38,567,011 | 1 day agoMon, 17 Aug 2026 04:57:21 UTC | 0x8784…c0c6 | IN | Stud | $0.000 ETH | 0.00000048 | |
| 0xdcd3db…f54aaf | Approve | 38,444,312 | 1 day agoMon, 17 Aug 2026 01:32:03 UTC | 0x2aa6…97c6 | IN | Stud | $0.000 ETH | 0.00000048 | |
| 0x6682d0…fe83d6 | Approve | 37,047,482 | 2 days agoSat, 15 Aug 2026 10:36:12 UTC | 0x00d2…b807 | IN | Stud | $0.000 ETH | 0.00000078 | |
| 0xc1aded…53c7b5 | Approve | 36,321,956 | 3 days agoFri, 14 Aug 2026 14:24:03 UTC | 0xee3a…4675 | IN | Stud | $0.000 ETH | 0.00000191 | |
| 0xa4417a…58f343 | Approve | 35,746,249 | 4 days agoThu, 13 Aug 2026 22:22:41 UTC | 0xa0ef…dbe5 | IN | Stud | $0.000 ETH | 0.00000107 | |
| 0xd017cf…fed76b | Approve | 35,297,346 | 4 days agoThu, 13 Aug 2026 09:52:42 UTC | 0xcb8a…5b81 | IN | Stud | $0.000 ETH | 0.00000113 | |
| 0x5379f3…813f24 | Approve | 34,812,002 | 5 days agoWed, 12 Aug 2026 20:21:36 UTC | 0xedc6…e2e4 | IN | Stud | $0.000 ETH | 0.00000232 | |
| 0x083d52…1b55a5 | Approve | 34,456,203 | 5 days agoWed, 12 Aug 2026 10:28:47 UTC | 0xbe7c…f6ec | IN | Stud | $0.000 ETH | 0.00000218 | |
| 0x7515a3…eaf84d | Approve | 34,221,953 | 6 days agoWed, 12 Aug 2026 03:59:18 UTC | 0xf95a…21ba | IN | Stud | $0.000 ETH | 0.00000194 | |
| 0x0bac28…547ebc | Approve | 34,175,142 | 6 days agoWed, 12 Aug 2026 02:41:37 UTC | 0x1ec9…5407 | IN | Stud | $0.000 ETH | 0.00000098 | |
| 0x82d150…a174a9 | Approve | 33,403,314 | 7 days agoTue, 11 Aug 2026 05:17:23 UTC | 0x7ac1…a138 | IN | Stud | $0.000 ETH | 0.00000128 | |
| 0x65230d…8c5c9e | Approve | 33,258,552 | 7 days agoTue, 11 Aug 2026 01:15:57 UTC | 0x5f09…6139 | IN | Stud | $0.000 ETH | 0.00000066 | |
| 0xd79406…c90113 | Approve | 33,258,440 | 7 days agoTue, 11 Aug 2026 01:15:46 UTC | 0x5f09…6139 | IN | Stud | $0.000 ETH | 0.00000068 | |
| 0x260b49…c8843d | Approve | 32,663,278 | 7 days agoMon, 10 Aug 2026 08:42:38 UTC | 0x8496…fe84 | IN | Stud | $0.000 ETH | 0.00000125 | |
| 0xa0ce68…0a683b | Approve | 32,132,786 | 8 days agoSun, 09 Aug 2026 17:57:09 UTC | 0x5421…4d18 | IN | Stud | $0.000 ETH | 0.00000124 | |
| 0xafb9ff…af3239 | Approve | 31,867,629 | 8 days agoSun, 09 Aug 2026 10:34:23 UTC | 0xa462…c8b1 | IN | Stud | $0.000 ETH | 0.00000127 | |
| 0xf4af0d…2d2782 | Approve | 31,846,549 | 8 days agoSun, 09 Aug 2026 09:59:14 UTC | 0x3c46…4be2 | IN | Stud | $0.000 ETH | 0.00000067 | |
| 0x267d6b…ca73fe | Approve | 31,846,505 | 8 days agoSun, 09 Aug 2026 09:59:10 UTC | 0x3c46…4be2 | IN | Stud | $0.000 ETH | 0.00000067 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 16,552,437 | 26 days agoWed, 22 Jul 2026 16:00:35 UTC | 0xe838ab…1ba9cb | CREATE2 | 0x3cb4c22d | 0xdd84…a9c5 | IN | 0xec6d…4663 | 0 ETH |