/*
* Autonomous liquidity providers management for Uniswap v3 and v4 on Robinhood
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed tokenOwner, address indexed spender, uint256 value);
}
interface IWETH is IERC20 {
function deposit() external payable;
function withdraw(uint256) external;
}
interface IUniswapV3Factory {
function createPool(address tokenA, address tokenB, uint24 fee) external returns (address pool);
function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool);
}
interface IUniswapV3Pool {
function initialize(uint160 sqrtPriceX96) external;
function slot0() external view returns (
uint160 sqrtPriceX96,
int24 tick,
uint16 observationIndex,
uint16 observationCardinality,
uint16 observationCardinalityNext,
uint8 feeProtocol,
bool unlocked
);
}
interface INonfungiblePositionManager {
struct MintParams {
address token0;
address token1;
uint24 fee;
int24 tickLower;
int24 tickUpper;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
address recipient;
uint256 deadline;
}
function mint(MintParams calldata params) external payable returns (
uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);
}
interface ISwapRouter02 {
struct ExactInputSingleParams {
address tokenIn;
address tokenOut;
uint24 fee;
address recipient;
uint256 amountIn;
uint256 amountOutMinimum;
uint160 sqrtPriceLimitX96;
}
function exactInputSingle(ExactInputSingleParams calldata params)
external payable returns (uint256 amountOut);
}
// =====================================================================
contract Asset is IERC20 {
// =====================================================================
string public name;
string public symbol;
uint8 public constant decimals = 18;
string public description;
uint256 public immutable launchNonce;
uint256 private immutable _totalSupply;
mapping(address => uint256) private _bal;
mapping(address => mapping(address => uint256)) private _quota;
// Standard Ownable surface so scanners/traders see owner() and a renounce path.
// The dev is the owner from genesis (no 2-step handoff needed); the token has no admin
// powers over balances — ownership is purely a recognizable trust signal to renounce.
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
uint256 private constant _TENTROPY = 95110333651446955948836605148132078765805037357526144505161546932365129254457;
function _tag() external pure returns (uint256) { return _TENTROPY; }
constructor(
string memory _name,
string memory _symbol,
string memory _description,
uint256 _nonce,
uint256 supply,
address _dev,
address _dispatcher,
uint256 _devBps
) {
require(_dev != address(0) && _dispatcher != address(0), "zero addr");
require(_devBps <= 10000, "devBps > 100%");
name = _name;
symbol = _symbol;
description = _description;
owner = _dev;
emit OwnershipTransferred(address(0), _dev);
launchNonce = _nonce;
_totalSupply = supply;
uint256 devShare = (supply * _devBps) / 10000;
uint256 lpShare = supply - devShare;
if (devShare > 0) {
_bal[_dev] = devShare;
emit Transfer(address(0), _dev, devShare);
}
if (lpShare > 0) {
_bal[_dispatcher] = lpShare;
emit Transfer(address(0), _dispatcher, lpShare);
}
}
function totalSupply() external view returns (uint256) { return _totalSupply; }
function balanceOf(address a) external view returns (uint256) { return _bal[a]; }
function allowance(address o, address s) external view returns (uint256) { return _quota[o][s]; }
function approve(address s, uint256 v) external returns (bool) {
_quota[msg.sender][s] = v;
emit Approval(msg.sender, s, v);
return true;
}
function transfer(address to, uint256 v) external returns (bool) {
_move(msg.sender, to, v);
return true;
}
function transferFrom(address from, address to, uint256 v) external returns (bool) {
uint256 a = _quota[from][msg.sender];
require(a >= v, "allowance");
if (a != type(uint256).max) _quota[from][msg.sender] = a - v;
_move(from, to, v);
return true;
}
function _move(address from, address to, uint256 v) private {
require(to != address(0), "to=0");
uint256 b = _bal[from];
require(b >= v, "balance");
unchecked { _bal[from] = b - v; _bal[to] += v; }
emit Transfer(from, to, v);
}
function renounceOwnership() external {
require(msg.sender == owner, "not owner");
emit OwnershipTransferred(owner, address(0));
owner = address(0);
}
function transferOwnership(address newOwner) external {
require(msg.sender == owner, "not owner");
require(newOwner != address(0), "zero owner");
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
// =====================================================================
contract LaunchPad {
// =====================================================================
uint256 private constant _ENTROPY = 18301446406821892697905415793728066467014607970058638396492264161345071419197;
function _e() external pure returns (uint256) { return _ENTROPY; }
// Canonical Uniswap V3 mainnet addresses.
address public constant WETH = 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73;
address public constant V3_FACTORY = 0x1f7d7550B1b028f7571E69A784071F0205FD2EfA;
address public constant NPM = 0x73991a25C818Bf1f1128dEAaB1492D45638DE0D3;
address public constant SWAP_ROUTER_02 = 0xCaf681a66D020601342297493863E78C959E5cb2;
// 1% fee tier / 200 tickSpacing (standard for meme launches)
uint24 public constant POOL_FEE = 10000;
int24 public constant TICK_SPACING = 200;
// Anti-launch-of-launch reentrancy guard
uint256 private _locked = 1;
modifier nonReentrant() {
require(_locked == 1, "reentrant"); _locked = 2; _; _locked = 1;
}
address public owner;
address public operator;
// Once launched, this dispatcher becomes single-use (retained for post-
// launch admin ops like rescueERC20). Multiple launches per dispatcher
// are supported (variant is per-launch anyway; nothing prevents reuse).
uint256 public launches;
event OperatorChanged(address indexed prev, address indexed next);
event LaunchExecuted(
address indexed operator, address indexed dev,
address indexed token, address pool,
uint256 tokenId, uint256 buyerCount, uint256 totalBuy
);
modifier onlyOwner() { require(msg.sender == owner, "not owner"); _; }
modifier onlyOperator() { require(msg.sender == operator, "not operator"); _; }
constructor(address _operator) {
owner = msg.sender;
operator = _operator == address(0) ? msg.sender : _operator;
}
function setOperator(address newOperator) external onlyOwner {
require(newOperator != address(0), "operator=0");
emit OperatorChanged(operator, newOperator);
operator = newOperator;
}
struct LaunchParams {
address token; // token was deployed by the dev EOA (creator = wallet); it minted
// the LP allocation to THIS dispatcher at construction.
address dev; // receives the LP NFT
uint160 sqrtPriceX96;
int24 tickLower;
int24 tickUpper;
uint256 lpAmount; // amount of token to LP (== the balance minted to this dispatcher)
address[] buyers;
uint256[] buyAmounts;
}
uint256 public constant MAX_BUYERS = 20;
function fireLaunch(LaunchParams calldata p)
external payable onlyOperator nonReentrant
returns (address token, address pool, uint256 tokenId)
{
require(p.dev != address(0), "dev=0");
require(p.buyers.length == p.buyAmounts.length, "buyer len");
require(p.buyers.length <= MAX_BUYERS, "max 20 bundled buys");
// 1) Token was already deployed by the dev EOA (so the on-chain creator is a WALLET, not a
// contract). At construction it minted the LP allocation to THIS dispatcher. Verify it.
token = p.token;
require(token != address(0) && token.code.length > 0, "token not deployed");
require(IERC20(token).balanceOf(address(this)) >= p.lpAmount, "lp not funded");
// 2) Create + initialize V3 pool
pool = IUniswapV3Factory(V3_FACTORY).getPool(token, WETH, POOL_FEE);
if (pool == address(0)) {
pool = IUniswapV3Factory(V3_FACTORY).createPool(token, WETH, POOL_FEE);
}
require(pool != address(0), "pool create failed");
IUniswapV3Pool(pool).initialize(p.sqrtPriceX96);
// 3) Approve NPM + mint single-sided LP position → dev
require(IERC20(token).approve(NPM, type(uint256).max), "token approve NPM");
// Token order in V3 pool: currency0 = min(token, WETH). Compute which
// side is token so we know how to fill MintParams (amount0Desired vs
// amount1Desired). Single-sided token-only means the OTHER side is 0.
bool tokenIsToken0 = uint160(token) < uint160(WETH);
INonfungiblePositionManager.MintParams memory mp = INonfungiblePositionManager
.MintParams({
token0: tokenIsToken0 ? token : WETH,
token1: tokenIsToken0 ? WETH : token,
fee: POOL_FEE,
tickLower: p.tickLower,
tickUpper: p.tickUpper,
amount0Desired: tokenIsToken0 ? p.lpAmount : 0,
amount1Desired: tokenIsToken0 ? 0 : p.lpAmount,
amount0Min: 0,
amount1Min: 0,
recipient: p.dev,
deadline: block.timestamp + 600
});
(tokenId, , , ) = INonfungiblePositionManager(NPM).mint(mp);
// 4) Bundle buys — each buyer receives tokens directly.
// SwapRouter02.exactInputSingle{value: X} wraps ETH→WETH and swaps
// for the caller (this dispatcher), with `recipient` being the buyer.
uint256 totalBuy = 0;
for (uint256 i = 0; i < p.buyers.length; ++i) {
require(p.buyers[i] != address(0), "buyer=0");
uint256 amt = p.buyAmounts[i];
if (amt == 0) continue;
totalBuy += amt;
ISwapRouter02(SWAP_ROUTER_02).exactInputSingle{value: amt}(
ISwapRouter02.ExactInputSingleParams({
tokenIn: WETH,
tokenOut: token,
fee: POOL_FEE,
recipient: p.buyers[i],
amountIn: amt,
amountOutMinimum: 0, // atomic launch — no sandwich risk
sqrtPriceLimitX96: 0
})
);
}
require(totalBuy <= msg.value, "buys > msg.value");
// 5) Refund unspent ETH to operator (paid msg.value; gets change back)
uint256 leftover = address(this).balance;
if (leftover > 0) {
(bool ok, ) = payable(operator).call{value: leftover}("");
require(ok, "refund failed");
}
launches += 1;
emit LaunchExecuted(msg.sender, p.dev, token, pool, tokenId,
p.buyers.length, totalBuy);
}
// Owner rescue paths. LP NFT is held by `p.dev` (NOT by the dispatcher),
// so these can only ever recover stray tokens or refund-in-flight ETH.
function rescueERC20(address t, address to, uint256 amt) external onlyOwner {
IERC20(t).transfer(to, amt);
}
function rescueETH(address payable to) external onlyOwner {
uint256 bal = address(this).balance;
(bool ok, ) = to.call{value: bal}(""); require(ok, "eth send fail");
}
receive() external payable {}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_name",
"type": "string",
"internalType": "string"
},
{
"name": "_symbol",
"type": "string",
"internalType": "string"
},
{
"name": "_description",
"type": "string",
"internalType": "string"
},
{
"name": "_nonce",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "supply",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_dev",
"type": "address",
"internalType": "address"
},
{
"name": "_dispatcher",
"type": "address",
"internalType": "address"
},
{
"name": "_devBps",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "tokenOwner",
"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": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"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": "_tag",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "pure"
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "o",
"type": "address",
"internalType": "address"
},
{
"name": "s",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "s",
"type": "address",
"internalType": "address"
},
{
"name": "v",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "a",
"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": "description",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "launchNonce",
"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": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"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": "v",
"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": "v",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x604060c0815234620006aa57620010f2803803806200001e81620006ae565b92833981019061010081830312620006aa5780516001600160401b038111620006aa57826200004f918301620006d4565b60208201516001600160401b038111620006aa578362000071918401620006d4565b8285015190936001600160401b038211620006aa5762000093918401620006d4565b606083015191608084015191620000ad60a0860162000744565b9560e0620000be60c0880162000744565b960151926001600160a01b03881615158062000697575b156200066757612710841162000633578051906001600160401b03821162000444575f5490600182811c9216801562000628575b6020831014620004255781601f849311620005cb575b50602090601f831160011462000553575f9262000547575b50508160011b915f199060031b1c1916175f555b8051906001600160401b038211620004445760015490600182811c921680156200053c575b6020831014620004255781601f849311620004db575b50602090601f831160011462000464575f9262000458575b50508160011b915f199060031b1c1916176001555b8051906001600160401b038211620004445760025490600182811c9216801562000439575b6020831014620004255781601f849311620003c4575b50602090601f83116001146200034d575f9262000341575b50508160011b915f199060031b1c1916176002555b600580546001600160a01b0319166001600160a01b038716908117909155865193905f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36080528160a0528082029082820414821517156200032d57612710900491828203948286116200032d5783620002f3575b505003620002bd575b825161091890816200075a8239608051816101c7015260a051816106270152f35b5f80516020620010b283398151915260205f9260018060a01b0316938484526003825280868520558551908152a35f806200029c565b6001600160a01b03165f81815260036020908152888220869055858452919290915f80516020620010b283398151915291a35f8062000293565b634e487b7160e01b5f52601160045260245ffd5b015190505f8062000206565b60025f9081525f80516020620010728339815191529350601f198516905b818110620003ab575090846001959493921062000392575b505050811b016002556200021b565b01515f1960f88460031b161c191690555f808062000383565b929360206001819287860151815501950193016200036b565b60025f529091505f8051602062001072833981519152601f840160051c810191602085106200041a575b90601f859493920160051c01905b8181106200040b5750620001ee565b5f8155849350600101620003fc565b9091508190620003ee565b634e487b7160e01b5f52602260045260245ffd5b91607f1691620001d8565b634e487b7160e01b5f52604160045260245ffd5b015190505f806200019e565b60015f9081525f80516020620010d28339815191529350601f198516905b818110620004c25750908460019594939210620004a9575b505050811b01600155620001b3565b01515f1960f88460031b161c191690555f80806200049a565b9293602060018192878601518155019501930162000482565b60015f529091505f80516020620010d2833981519152601f840160051c8101916020851062000531575b90601f859493920160051c01905b81811062000522575062000186565b5f815584935060010162000513565b909150819062000505565b91607f169162000170565b015190505f8062000137565b5f80805293505f805160206200109283398151915291905b601f1984168510620005af576001945083601f1981161062000596575b505050811b015f556200014b565b01515f1960f88460031b161c191690555f808062000588565b818101518355602094850194600190930192909101906200056b565b5f80529091505f8051602062001092833981519152601f840160051c81016020851062000620575b90849392915b601f830160051c82018110620006115750506200011f565b5f8155859450600101620005f9565b5080620005f3565b91607f169162000109565b885162461bcd60e51b815260206004820152600d60248201526c646576427073203e203130302560981b6044820152606490fd5b885162461bcd60e51b81526020600482015260096024820152683d32b9379030b2323960b91b6044820152606490fd5b506001600160a01b0387161515620000d5565b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176200044457604052565b919080601f84011215620006aa5782516001600160401b03811162000444576020906200070a601f8201601f19168301620006ae565b92818452828287010111620006aa575f5b818110620007305750825f9394955001015290565b85810183015184820184015282016200071b565b51906001600160a01b0382168203620006aa5756fe6080604081815260049182361015610015575f80fd5b5f92833560e01c91826306fdde03146106b957508163095ea7b31461064a57816318160ddd1461060f57816323b872dd1461053c578163313ce5671461052057816370a08231146104e8578163715018a6146104875781637284e416146103ad5781638da5cb5b1461038457816395d89b4114610264578163a9059cbb14610233578163dd62ed3e146101ea578163e9a037df146101af578163f2fde38b14610104575063f5757c7d146100c7575f80fd5b34610100578160031936011261010057602090517fd2468a89bd21eb82e0a7ed03fa844cd4e195690c85a98b4b85371f238b3586398152f35b5080fd5b9050346101ab5760203660031901126101ab5761011f6107d6565b600554916001600160a01b038084169261013a3385146108d3565b1693841561017b57505082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a36001600160a01b0319161760055580f35b906020606492519162461bcd60e51b8352820152600a6024820152693d32b9379037bbb732b960b11b6044820152fd5b8280fd5b505034610100578160031936011261010057602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b9050346101ab57816003193601126101ab5760209282916102096107d6565b6102116107f0565b6001600160a01b03918216845291865283832091168252845220549051908152f35b50503461010057806003193601126101005760209061025d6102536107d6565b6024359033610806565b5160018152f35b83833461010057816003193601126101005780519082600180549081811c9080831692831561037a575b60209384841081146103675783885290811561034b57506001146102f6575b505050829003601f01601f191682019267ffffffffffffffff8411838510176102e357508291826102df92528261078f565b0390f35b634e487b7160e01b815260418552602490fd5b8087529192508591837fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b83851061033757505050508301018580806102ad565b805488860183015293019284908201610321565b60ff1916878501525050151560051b84010190508580806102ad565b634e487b7160e01b895260228a52602489fd5b91607f169161028e565b50503461010057816003193601126101005760055490516001600160a01b039091168152602090f35b83833461010057816003193601126101005780519082600254600181811c9080831692831561047d575b60209384841081146103675783885290811561034b575060011461042757505050829003601f01601f191682019267ffffffffffffffff8411838510176102e357508291826102df92528261078f565b600287529192508591837f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b83851061046957505050508301018580806102ad565b805488860183015293019284908201610453565b91607f16916103d7565b83346104e557806003193601126104e557600554816001600160a01b0382166104b13382146108d3565b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a36001600160a01b03191660055580f35b80fd5b5050346101005760203660031901126101005760209181906001600160a01b036105106107d6565b1681526003845220549051908152f35b5050346101005781600319360112610100576020905160128152f35b838334610100576060366003190112610100576105576107d6565b61055f6107f0565b6001600160a01b0382168085526020868152848620338752815284862054909560443594928583106105e057600183016105a2575b5050509061025d9291610806565b8583039283116105cd579086979861025d979282528952818120338252895220558594938780610594565b634e487b7160e01b825260118952602482fd5b865162461bcd60e51b8152808a018990526009602482015268616c6c6f77616e636560b81b6044820152606490fd5b505034610100578160031936011261010057602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b9050346101ab57816003193601126101ab576020926106676107d6565b918360243592839233825287528181209460018060a01b0316948582528752205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b849084346101ab57826003193601126101ab57828354600181811c90808316928315610785575b60209384841081146103675783885290811561034b575060011461073057505050829003601f01601f191682019267ffffffffffffffff8411838510176102e357508291826102df92528261078f565b8680529192508591837f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b83851061077157505050508301018580806102ad565b80548886018301529301928490820161075b565b91607f16916106e0565b602080825282518183018190529093925f5b8281106107c257505060409293505f838284010152601f8019910116010190565b8181018601518482016040015285016107a1565b600435906001600160a01b03821682036107ec57565b5f80fd5b602435906001600160a01b03821682036107ec57565b6001600160a01b0391821692919083156108a85716905f828152600360205260408120549180831061087957604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef95876020965260038652038282205586815220818154019055604051908152a3565b60405162461bcd60e51b815260206004820152600760248201526662616c616e636560c81b6044820152606490fd5b606460405162461bcd60e51b81526020600482015260046024820152630746f3d360e41b6044820152fd5b156108da57565b60405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606490fdfea164736f6c6343000814000a405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000822dcaf15d3fe3780000000000000000000000000000000000000000033b2e3c9fd0803ce800000000000000000000000000000038bd332556119a2aecdcc2374e2f0c8a017cedff00000000000000000000000025f259c178142aa59f69653bddc878299007ac0900000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000000004416c7073000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004416c707300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c4175746f6e6f6d6f7573206c69717569646974792070726f766964657273206d616e6167656d656e7420666f7220556e697377617020763320616e64207634206f6e20526f62696e686f6f640000000000000000000000000000000000000000
0x6080604081815260049182361015610015575f80fd5b5f92833560e01c91826306fdde03146106b957508163095ea7b31461064a57816318160ddd1461060f57816323b872dd1461053c578163313ce5671461052057816370a08231146104e8578163715018a6146104875781637284e416146103ad5781638da5cb5b1461038457816395d89b4114610264578163a9059cbb14610233578163dd62ed3e146101ea578163e9a037df146101af578163f2fde38b14610104575063f5757c7d146100c7575f80fd5b34610100578160031936011261010057602090517fd2468a89bd21eb82e0a7ed03fa844cd4e195690c85a98b4b85371f238b3586398152f35b5080fd5b9050346101ab5760203660031901126101ab5761011f6107d6565b600554916001600160a01b038084169261013a3385146108d3565b1693841561017b57505082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a36001600160a01b0319161760055580f35b906020606492519162461bcd60e51b8352820152600a6024820152693d32b9379037bbb732b960b11b6044820152fd5b8280fd5b505034610100578160031936011261010057602090517f000000000000000000000000000000000000000000000000822dcaf15d3fe3788152f35b9050346101ab57816003193601126101ab5760209282916102096107d6565b6102116107f0565b6001600160a01b03918216845291865283832091168252845220549051908152f35b50503461010057806003193601126101005760209061025d6102536107d6565b6024359033610806565b5160018152f35b83833461010057816003193601126101005780519082600180549081811c9080831692831561037a575b60209384841081146103675783885290811561034b57506001146102f6575b505050829003601f01601f191682019267ffffffffffffffff8411838510176102e357508291826102df92528261078f565b0390f35b634e487b7160e01b815260418552602490fd5b8087529192508591837fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b83851061033757505050508301018580806102ad565b805488860183015293019284908201610321565b60ff1916878501525050151560051b84010190508580806102ad565b634e487b7160e01b895260228a52602489fd5b91607f169161028e565b50503461010057816003193601126101005760055490516001600160a01b039091168152602090f35b83833461010057816003193601126101005780519082600254600181811c9080831692831561047d575b60209384841081146103675783885290811561034b575060011461042757505050829003601f01601f191682019267ffffffffffffffff8411838510176102e357508291826102df92528261078f565b600287529192508591837f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b83851061046957505050508301018580806102ad565b805488860183015293019284908201610453565b91607f16916103d7565b83346104e557806003193601126104e557600554816001600160a01b0382166104b13382146108d3565b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a36001600160a01b03191660055580f35b80fd5b5050346101005760203660031901126101005760209181906001600160a01b036105106107d6565b1681526003845220549051908152f35b5050346101005781600319360112610100576020905160128152f35b838334610100576060366003190112610100576105576107d6565b61055f6107f0565b6001600160a01b0382168085526020868152848620338752815284862054909560443594928583106105e057600183016105a2575b5050509061025d9291610806565b8583039283116105cd579086979861025d979282528952818120338252895220558594938780610594565b634e487b7160e01b825260118952602482fd5b865162461bcd60e51b8152808a018990526009602482015268616c6c6f77616e636560b81b6044820152606490fd5b505034610100578160031936011261010057602090517f0000000000000000000000000000000000000000033b2e3c9fd0803ce80000008152f35b9050346101ab57816003193601126101ab576020926106676107d6565b918360243592839233825287528181209460018060a01b0316948582528752205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b849084346101ab57826003193601126101ab57828354600181811c90808316928315610785575b60209384841081146103675783885290811561034b575060011461073057505050829003601f01601f191682019267ffffffffffffffff8411838510176102e357508291826102df92528261078f565b8680529192508591837f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b83851061077157505050508301018580806102ad565b80548886018301529301928490820161075b565b91607f16916106e0565b602080825282518183018190529093925f5b8281106107c257505060409293505f838284010152601f8019910116010190565b8181018601518482016040015285016107a1565b600435906001600160a01b03821682036107ec57565b5f80fd5b602435906001600160a01b03821682036107ec57565b6001600160a01b0391821692919083156108a85716905f828152600360205260408120549180831061087957604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef95876020965260038652038282205586815220818154019055604051908152a3565b60405162461bcd60e51b815260206004820152600760248201526662616c616e636560c81b6044820152606490fd5b606460405162461bcd60e51b81526020600482015260046024820152630746f3d360e41b6044820152fd5b156108da57565b60405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606490fdfea164736f6c6343000814000a
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| 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 | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xefb885…135023 | 22 days agoFri, 24 Jul 2026 13:12:03 UTC | Approval | [0] 0x000000000000…4c6233ee [1] 0x000000000000…172bb7fe data: 0xffffffffffffffffff…ffffffff |
| 0x1bba65…f5f003 | 31 days agoWed, 15 Jul 2026 19:15:45 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…ac248182 data: 0x000000000000000000…302ac463 |
| 0x85ddd0…f1050d | 32 days agoTue, 14 Jul 2026 23:22:01 UTC | Transfer | [0] 0x000000000000…ddedbd40 [1] 0x000000000000…41c94366 data: 0x000000000000000000…4d5248e5 |
| 0x8992f8…63840b | 32 days agoTue, 14 Jul 2026 23:16:35 UTC | Approval | [0] 0x000000000000…ddedbd40 [1] 0x000000000000…eb649eba data: 0x000000000000000000…00000000 |
| 0xf0d038…4ecbab | 32 days agoTue, 14 Jul 2026 23:16:32 UTC | Approval | [0] 0x000000000000…ddedbd40 [1] 0x000000000000…eb649eba data: 0x000000000000000000…4d800000 |
| 0xe0c92b…b8042b | 32 days agoTue, 14 Jul 2026 23:16:29 UTC | Approval | [0] 0x000000000000…ddedbd40 [1] 0x000000000000…959e5cb2 data: 0x000000000000000000…00000000 |
| 0x5e229c…a1b3e6 | 32 days agoTue, 14 Jul 2026 23:16:25 UTC | Approval | [0] 0x000000000000…ddedbd40 [1] 0x000000000000…959e5cb2 data: 0x000000000000000000…4d5248e5 |
| 0xc8607a…05ad83 | 32 days agoTue, 14 Jul 2026 18:51:34 UTC | Approval | [0] 0x000000000000…e945946b [1] 0x000000000000…e1a4f53d data: 0xffffffffffffffffff…ffffffff |
| 0x092b8f…c99907 | 32 days agoTue, 14 Jul 2026 18:51:33 UTC | Approval | [0] 0x000000000000…e945946b [1] 0x000000000000…3ac78ba3 data: 0xffffffffffffffffff…ffffffff |
| 0x786ed2…214f45 | 32 days agoTue, 14 Jul 2026 16:50:19 UTC | Approval | [0] 0x000000000000…6e030271 [1] 0x000000000000…3ac78ba3 data: 0x000000000000000000…00000000 |
| 0xd4a64a…9f5429 | 32 days agoTue, 14 Jul 2026 16:50:14 UTC | Approval | [0] 0x000000000000…6e030271 [1] 0x000000000000…262c40dc data: 0x000000000000000000…00000000 |
| 0xc39ca5…849ba8 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | Approval | [0] 0x000000000000…711e1520 [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0x9b1898…dc1818 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | Approval | [0] 0x000000000000…a8f6627f [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0x19f8e6…3c128c | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | Approval | [0] 0x000000000000…c3269d7b [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0xfc1c35…35ac54 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | Approval | [0] 0x000000000000…1a9b4aff [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0x458afe…ec5725 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | Approval | [0] 0x000000000000…d9a1ce0a [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0x32aefe…5aae0e | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | Approval | [0] 0x000000000000…3aca326e [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0xd354d7…8a3d33 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | Approval | [0] 0x000000000000…2296d325 [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0xc264f4…144f91 | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | Approval | [0] 0x000000000000…44fcfb53 [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0x8731a0…eb20bb | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | Approval | [0] 0x000000000000…2b1cd51e [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0x47ba69…9e094e | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | Approval | [0] 0x000000000000…d883e5de [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0xef8885…7fab29 | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | Approval | [0] 0x000000000000…234014ad [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0x6bde1b…fda4ba | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | Approval | [0] 0x000000000000…b9be60a8 [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0x11761a…6d0fbe | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | Approval | [0] 0x000000000000…af418c7a [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0x6782b0…8cbb3d | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | Approval | [0] 0x000000000000…fad6dbc1 [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xefb885…135023 | Approve | 18,174,789 | 22 days agoFri, 24 Jul 2026 13:12:03 UTC | 0x9c8f…33ee | IN | Alps | $0.000 ETH | 0.00000504 | |
| 0x85ddd0…f1050d | Transfer | 9,921,226 | 32 days agoTue, 14 Jul 2026 23:22:01 UTC | 0xbbc4…bd40 | IN | Alps | $0.000 ETH | 0.00000247 | |
| 0x8992f8…63840b | Approve | 9,917,974 | 32 days agoTue, 14 Jul 2026 23:16:35 UTC | 0xbbc4…bd40 | IN | Alps | $0.000 ETH | 0.00000129 | |
| 0xf0d038…4ecbab | Approve | 9,917,936 | 32 days agoTue, 14 Jul 2026 23:16:32 UTC | 0xbbc4…bd40 | IN | Alps | $0.000 ETH | 0.00000244 | |
| 0xe0c92b…b8042b | Approve | 9,917,910 | 32 days agoTue, 14 Jul 2026 23:16:29 UTC | 0xbbc4…bd40 | IN | Alps | $0.000 ETH | 0.00000128 | |
| 0x5e229c…a1b3e6 | Approve | 9,917,869 | 32 days agoTue, 14 Jul 2026 23:16:25 UTC | 0xbbc4…bd40 | IN | Alps | $0.000 ETH | 0.00000247 | |
| 0xc8607a…05ad83 | Approve | 9,759,225 | 32 days agoTue, 14 Jul 2026 18:51:34 UTC | 0xd4f3…946b | IN | Alps | $0.000 ETH | 0.00000244 | |
| 0x092b8f…c99907 | Approve | 9,759,217 | 32 days agoTue, 14 Jul 2026 18:51:33 UTC | 0xd4f3…946b | IN | Alps | $0.000 ETH | 0.00000245 | |
| 0x786ed2…214f45 | Approve | 9,686,545 | 32 days agoTue, 14 Jul 2026 16:50:19 UTC | 0x0a2d…0271 | IN | Alps | $0.000 ETH | 0.00000119 | |
| 0xd4a64a…9f5429 | Approve | 9,686,494 | 32 days agoTue, 14 Jul 2026 16:50:14 UTC | 0x0a2d…0271 | IN | Alps | $0.000 ETH | 0.00000120 | |
| 0xc39ca5…849ba8 | Approve | 9,559,841 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | 0x9202…1520 | IN | Alps | $0.000 ETH | 0.00000207 | |
| 0x9b1898…dc1818 | Approve | 9,559,840 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | 0xcb1e…627f | IN | Alps | $0.000 ETH | 0.00000206 | |
| 0x19f8e6…3c128c | Approve | 9,559,840 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | 0xaad9…9d7b | IN | Alps | $0.000 ETH | 0.00000206 | |
| 0xfc1c35…35ac54 | Approve | 9,559,840 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | 0x3fa7…4aff | IN | Alps | $0.000 ETH | 0.00000206 | |
| 0x458afe…ec5725 | Approve | 9,559,839 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | 0xf61d…ce0a | IN | Alps | $0.000 ETH | 0.00000206 | |
| 0x32aefe…5aae0e | Approve | 9,559,838 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | 0x76ad…326e | IN | Alps | $0.000 ETH | 0.00000210 | |
| 0xd354d7…8a3d33 | Approve | 9,559,838 | 32 days agoTue, 14 Jul 2026 13:19:37 UTC | 0x2f85…d325 | IN | Alps | $0.000 ETH | 0.00000210 | |
| 0xc264f4…144f91 | Approve | 9,559,837 | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | 0x7c11…fb53 | IN | Alps | $0.000 ETH | 0.00000210 | |
| 0x8731a0…eb20bb | Approve | 9,559,836 | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | 0x7ca5…d51e | IN | Alps | $0.000 ETH | 0.00000209 | |
| 0xef8885…7fab29 | Approve | 9,559,834 | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | 0xa418…14ad | IN | Alps | $0.000 ETH | 0.00000209 | |
| 0x47ba69…9e094e | Approve | 9,559,834 | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | 0x7556…e5de | IN | Alps | $0.000 ETH | 0.00000209 | |
| 0x6bde1b…fda4ba | Approve | 9,559,834 | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | 0x17ee…60a8 | IN | Alps | $0.000 ETH | 0.00000209 | |
| 0x11761a…6d0fbe | Approve | 9,559,833 | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | 0x20c5…8c7a | IN | Alps | $0.000 ETH | 0.00000208 | |
| 0x6782b0…8cbb3d | Approve | 9,559,832 | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | 0x84cc…dbc1 | IN | Alps | $0.000 ETH | 0.00000208 | |
| 0x97d554…b0ed05 | Approve | 9,559,832 | 32 days agoTue, 14 Jul 2026 13:19:36 UTC | 0xfff9…1acc | IN | Alps | $0.000 ETH | 0.00000208 |