// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {INonfungiblePositionManager} from "./interfaces/IUniswapV3.sol";
/// Permanent LP lock + fee splitter (UPDATE-05 §2).
///
/// The locker holds every launch's Uniswap V3 position NFT forever. There is
/// deliberately NO withdrawal, transfer, or admin path for positions — the
/// lock is the absence of code. The only money that ever leaves is trading
/// fees, split creator/protocol per the ratio snapshotted at launch.
///
/// `collect(token)` is permissionless: the keeper CLAIMER cranks it, but
/// anyone may trigger a collection (funds always go to the recorded creator
/// and the protocol treasury, never to the caller).
///
/// `FeesCollected` is the keeper ledger's ingestion source for claimed fees
/// (replaces Meteora DBC partner-fee claims). The keeper splits the protocol
/// share 4-way off-chain (pool/progressive/treasury/buyback), as before.
contract FeeLocker is IERC721Receiver {
using SafeERC20 for IERC20;
struct Lock {
uint256 positionId;
address pool;
address creator;
uint16 creatorBps; // snapshotted at launch, immutable afterwards
address token0;
address token1;
}
INonfungiblePositionManager public immutable positionManager;
address public immutable factory;
/// Protocol treasury (keeper BANK). Immutable: changing it is a redeploy.
address public immutable protocolTreasury;
/// launch token address => lock record
mapping(address => Lock) public locks;
/// Creator fees ACCRUED but not yet claimed, per launch token, per pool
/// currency (UPDATE-08 claim-gating). `collect()` adds to these instead of
/// pushing to the creator; `claimCreatorFees()` (creator-only) withdraws.
mapping(address => uint256) public creatorOwed0;
mapping(address => uint256) public creatorOwed1;
event PositionLocked(
address indexed token, uint256 indexed positionId, address creator, uint16 creatorBps
);
event FeesCollected(
address indexed token,
uint256 creatorAmount0,
uint256 creatorAmount1,
uint256 protocolAmount0,
uint256 protocolAmount1
);
event CreatorFeesClaimed(
address indexed token, address indexed creator, uint256 amount0, uint256 amount1
);
error OnlyPositionManager();
error OnlyFactoryDeposit();
error UnknownToken();
error BadDeposit();
error NotCreator();
constructor(INonfungiblePositionManager positionManager_, address factory_, address treasury_) {
positionManager = positionManager_;
factory = factory_;
protocolTreasury = treasury_;
}
/// Receives the position NFT from the factory in the launch tx.
/// `data` = abi.encode(launchToken, pool, creator, creatorBps).
function onERC721Received(address operator, address, uint256 tokenId, bytes calldata data)
external
override
returns (bytes4)
{
if (msg.sender != address(positionManager)) revert OnlyPositionManager();
if (operator != factory) revert OnlyFactoryDeposit();
(address token, address pool, address creator, uint16 creatorBps) =
abi.decode(data, (address, address, address, uint16));
// Defense-in-depth (security review 2026-07-21): the `data` fields are
// set by the depositor. Today only the factory can deposit and CREATE2
// makes each token unique, so these can't be abused — but validating
// them here removes the reliance on that single `operator == factory`
// invariant if the factory ever gains another safeTransferFrom path.
if (tokenId == 0) revert BadDeposit(); // NPM ids start at 1
if (creatorBps > 10_000) revert BadDeposit(); // else collect() underflows
if (locks[token].positionId != 0) revert BadDeposit(); // no overwrite
(,, address token0, address token1,,,,,,,,) = positionManager.positions(tokenId);
locks[token] = Lock({
positionId: tokenId,
pool: pool,
creator: creator,
creatorBps: creatorBps,
token0: token0,
token1: token1
});
emit PositionLocked(token, tokenId, creator, creatorBps);
return IERC721Receiver.onERC721Received.selector;
}
/// Collect accrued trading fees for a launch and split creator/protocol.
/// Fees accrue in BOTH pool currencies (launch token + WETH); both are
/// split by the same snapshotted ratio. Permissionless.
function collect(address token)
external
returns (uint256 amount0, uint256 amount1)
{
Lock memory lock = locks[token];
if (lock.positionId == 0) revert UnknownToken();
(amount0, amount1) = positionManager.collect(
INonfungiblePositionManager.CollectParams({
tokenId: lock.positionId,
recipient: address(this),
amount0Max: type(uint128).max,
amount1Max: type(uint128).max
})
);
uint256 creator0 = (amount0 * lock.creatorBps) / 10_000;
uint256 creator1 = (amount1 * lock.creatorBps) / 10_000;
// Creator share ACCRUES in the locker (UPDATE-08): the keeper's collect
// crank harvests the protocol share for pots/revenue without pushing the
// creator's cut to their wallet. The creator withdraws it themselves via
// claimCreatorFees(). Protocol share still forwards immediately.
if (creator0 > 0) creatorOwed0[token] += creator0;
if (creator1 > 0) creatorOwed1[token] += creator1;
if (amount0 - creator0 > 0) {
IERC20(lock.token0).safeTransfer(protocolTreasury, amount0 - creator0);
}
if (amount1 - creator1 > 0) {
IERC20(lock.token1).safeTransfer(protocolTreasury, amount1 - creator1);
}
emit FeesCollected(token, creator0, creator1, amount0 - creator0, amount1 - creator1);
}
/// Withdraw the caller's accrued creator fees for `token`. Gated to the
/// recorded creator: no one else can trigger the transfer, so fees can never
/// be pushed to the creator's wallet — they claim on the site (creator-signed
/// tx). Pays both pool currencies. Zero-safe (a claim with nothing owed is a
/// no-op emit). Effects-before-interactions: owed is zeroed before transfer.
function claimCreatorFees(address token)
external
returns (uint256 owed0, uint256 owed1)
{
Lock memory lock = locks[token];
if (lock.positionId == 0) revert UnknownToken();
if (msg.sender != lock.creator) revert NotCreator();
owed0 = creatorOwed0[token];
owed1 = creatorOwed1[token];
creatorOwed0[token] = 0;
creatorOwed1[token] = 0;
if (owed0 > 0) IERC20(lock.token0).safeTransfer(lock.creator, owed0);
if (owed1 > 0) IERC20(lock.token1).safeTransfer(lock.creator, owed1);
emit CreatorFeesClaimed(token, lock.creator, owed0, owed1);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "positionManager_",
"type": "address",
"internalType": "contract INonfungiblePositionManager"
},
{
"name": "factory_",
"type": "address",
"internalType": "address"
},
{
"name": "treasury_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "BadDeposit",
"type": "error",
"inputs": []
},
{
"name": "NotCreator",
"type": "error",
"inputs": []
},
{
"name": "OnlyFactoryDeposit",
"type": "error",
"inputs": []
},
{
"name": "OnlyPositionManager",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "UnknownToken",
"type": "error",
"inputs": []
},
{
"name": "CreatorFeesClaimed",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "creator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount0",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "amount1",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "FeesCollected",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "creatorAmount0",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "creatorAmount1",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "protocolAmount0",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "protocolAmount1",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "PositionLocked",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "positionId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "creator",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "creatorBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
}
],
"anonymous": false
},
{
"name": "claimCreatorFees",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "owed0",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "owed1",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "collect",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "amount0",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount1",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "creatorOwed0",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "creatorOwed1",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "factory",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "locks",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "positionId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "pool",
"type": "address",
"internalType": "address"
},
{
"name": "creator",
"type": "address",
"internalType": "address"
},
{
"name": "creatorBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "token0",
"type": "address",
"internalType": "address"
},
{
"name": "token1",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "onERC721Received",
"type": "function",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
}
],
"stateMutability": "nonpayable"
},
{
"name": "positionManager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract INonfungiblePositionManager"
}
],
"stateMutability": "view"
},
{
"name": "protocolTreasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
}
]0x60e0346100b957601f610e7d38819003918201601f19168301916001600160401b038311848410176100bd578084926060946040528339810103126100b9578051906001600160a01b03821682036100b9576100696040610062602084016100d1565b92016100d1565b9160805260a05260c052604051610d9790816100e682396080518181816103110152818161046801526109c6015260a051818181610253015261049b015260c0518181816102ce0152610ac00152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100b95756fe6080806040526004361015610012575f80fd5b5f3560e01c90816306ec16f81461088457508063150b7a02146103fa57806352f411f7146103c25780635de9a13714610335578063791b98bc146102f2578063803db96d146102af578063bd41db0c14610277578063c45a0155146102345763d6ae6e441461007f575f80fd5b34610230576020366003190112610230576001600160a01b036100a0610bb3565b16805f525f60205260405f20604051906100b982610bdf565b8054928383526001600160a01b03600183015416602084015260028201549361ffff60408501956001600160a01b038116875260a01c16606085015260a06001600160a01b036004816003870154169560808801968752015416940193845215610208576001600160a01b0384511633036101e0575f818152600160209081526040808320805460029093528184208054918590559390935595909491936001600160a01b03929086806101c8575b505084806101b0575b50505116907fb09c03188c25eacb7a7bd579b1f9880329bc5336a7b2acaad2f6624ef107bd1e858051868152856020820152a382519182526020820152f35b836101c19251168484511690610cb1565b5f84610171565b846101d99251168585511690610cb1565b5f86610168565b7f93687c0b000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8698bf37000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b34610230575f3660031901126102305760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610230576020366003190112610230576001600160a01b03610298610bb3565b165f526001602052602060405f2054604051908152f35b34610230575f3660031901126102305760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610230575f3660031901126102305760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610230576020366003190112610230576001600160a01b03610356610bb3565b165f525f60205260c060405f208054906001600160a01b036001820154169061ffff60028201546001600160a01b03600481600386015416940154169360405195865260208601526001600160a01b038116604086015260a01c166060840152608083015260a0820152f35b34610230576020366003190112610230576001600160a01b036103e3610bb3565b165f526002602052602060405f2054604051908152f35b3461023057608036600319011261023057610413610bb3565b61041b610bc9565b50604435906064359067ffffffffffffffff8211610230573660238301121561023057816004013567ffffffffffffffff8111610230578201366024820111610230576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169182330361085c576001600160a01b03807f0000000000000000000000000000000000000000000000000000000000000000169116036108345760809083900312610230576104d960248301610c5e565b6104e560448401610c5e565b9060846104f460648601610c5e565b9401359061ffff8216809203610230576001600160a01b03809116941691851561080c57612710821161080c57845f525f60205260405f205461080c57610180602494604051958680927f99fbab880000000000000000000000000000000000000000000000000000000082528a60048301525afa938415610801575f905f95610702575b50906001600160a01b036004817fd71421a61083006eb0783d30f03249425ff6a096a9450b5a2082bbabd58a1019978160409897968951966105ba88610bdf565b8d88528260208901911681528c838c8a01928c845260608b01928c84528260808d01961686528260a08d01981688525f525f6020528d5f209a518b5551168460018b01911673ffffffffffffffffffffffffffffffffffffffff19825416179055838060028b019351161673ffffffffffffffffffffffffffffffffffffffff19835416178255517fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff000000000000000000000000000000000000000083549260a01b16911617905551168260038701911673ffffffffffffffffffffffffffffffffffffffff1982541617905551169201911673ffffffffffffffffffffffffffffffffffffffff1982541617905582519182526020820152a360206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b9450509190610180843d82116107f9575b816107216101809383610bfb565b810103126102305783516bffffffffffffffffffffffff8116036102305761074b60208501610c72565b5061075860408501610c72565b9261076560608601610c72565b608086015162ffffff8116036102305760046001600160a01b038092816040986107e86101608c6107b960a07fd71421a61083006eb0783d30f03249425ff6a096a9450b5a2082bbabd58a10199f01610c86565b506107c660c08201610c86565b506107d360e08201610c94565b506107e16101408201610c94565b5001610c94565b509199505093949596505050610579565b3d9150610713565b6040513d5f823e3d90fd5b7f5f313319000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6bd24e6a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f7b7524c9000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610230576020366003190112610230576001600160a01b036108a5610bb3565b1690815f525f60205260405f20916108bc82610bdf565b8254908183526001600160a01b0360018501541660208401526002840154926001600160a01b038416604082015261ffff606082019460a01c1684526001600160a01b0360048160038801541696608084019788520154169260a0820193845215610208575192604051936080850185811067ffffffffffffffff821117610b9f5760405284526fffffffffffffffffffffffffffffffff6020850130815281604087018181526001600160a01b036060890193838552604051997ffc6f7865000000000000000000000000000000000000000000000000000000008b525160048b01525116602489015251166044870152511660648501526040846084815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1928315610801575f945f94610b43575b5081604096608092612710610a4261ffff82610a38827f7169048ac0fa5092b61a37205ccfd5269382afea33491901921d313ebb0d6b8c9a51168d610c1d565b0495511689610c1d565b049183610b26575b82610b09575b610a5a848a610c51565b610aeb575b50610a6a8288610c51565b610aa5575b50610a7a8288610c51565b610a848288610c51565b9189519384526020840152888301526060820152a282519182526020820152f35b6001600160a01b03610ae5915116610abd8389610c51565b907f000000000000000000000000000000000000000000000000000000000000000090610cb1565b88610a6f565b6001600160a01b03610b03915116610abd858b610c51565b89610a5f565b865f526002602052895f20610b1f848254610c44565b9055610a50565b865f526001602052895f20610b3c858254610c44565b9055610a4a565b945092506040843d604011610b97575b81610b6060409383610bfb565b81010312610230578351602090940151927f7169048ac0fa5092b61a37205ccfd5269382afea33491901921d313ebb0d6b8c6109f8565b3d9150610b53565b634e487b7160e01b5f52604160045260245ffd5b600435906001600160a01b038216820361023057565b602435906001600160a01b038216820361023057565b60c0810190811067ffffffffffffffff821117610b9f57604052565b90601f8019910116810190811067ffffffffffffffff821117610b9f57604052565b81810292918115918404141715610c3057565b634e487b7160e01b5f52601160045260245ffd5b91908201809211610c3057565b91908203918211610c3057565b35906001600160a01b038216820361023057565b51906001600160a01b038216820361023057565b51908160020b820361023057565b51906fffffffffffffffffffffffffffffffff8216820361023057565b916001600160a01b03604051927fa9059cbb000000000000000000000000000000000000000000000000000000005f521660045260245260205f60448180865af19060015f5114821615610d40575b60405215610d0b5750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b906001811516610d5857823b15153d15161690610d00565b503d5f823e3d90fdfea2646970667358221220d1e5d0279abb44510c8f03d69a16939f83345a068c1889d6b294e4565f864b4264736f6c634300081a003300000000000000000000000073991a25c818bf1f1128deaab1492d45638de0d300000000000000000000000083dc39457e29801581d5e1611fb505cd707f725700000000000000000000000078e9485d171f7802377b85113513afeba4b03119
0x6080806040526004361015610012575f80fd5b5f3560e01c90816306ec16f81461088457508063150b7a02146103fa57806352f411f7146103c25780635de9a13714610335578063791b98bc146102f2578063803db96d146102af578063bd41db0c14610277578063c45a0155146102345763d6ae6e441461007f575f80fd5b34610230576020366003190112610230576001600160a01b036100a0610bb3565b16805f525f60205260405f20604051906100b982610bdf565b8054928383526001600160a01b03600183015416602084015260028201549361ffff60408501956001600160a01b038116875260a01c16606085015260a06001600160a01b036004816003870154169560808801968752015416940193845215610208576001600160a01b0384511633036101e0575f818152600160209081526040808320805460029093528184208054918590559390935595909491936001600160a01b03929086806101c8575b505084806101b0575b50505116907fb09c03188c25eacb7a7bd579b1f9880329bc5336a7b2acaad2f6624ef107bd1e858051868152856020820152a382519182526020820152f35b836101c19251168484511690610cb1565b5f84610171565b846101d99251168585511690610cb1565b5f86610168565b7f93687c0b000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8698bf37000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b34610230575f3660031901126102305760206040516001600160a01b037f00000000000000000000000083dc39457e29801581d5e1611fb505cd707f7257168152f35b34610230576020366003190112610230576001600160a01b03610298610bb3565b165f526001602052602060405f2054604051908152f35b34610230575f3660031901126102305760206040516001600160a01b037f00000000000000000000000078e9485d171f7802377b85113513afeba4b03119168152f35b34610230575f3660031901126102305760206040516001600160a01b037f00000000000000000000000073991a25c818bf1f1128deaab1492d45638de0d3168152f35b34610230576020366003190112610230576001600160a01b03610356610bb3565b165f525f60205260c060405f208054906001600160a01b036001820154169061ffff60028201546001600160a01b03600481600386015416940154169360405195865260208601526001600160a01b038116604086015260a01c166060840152608083015260a0820152f35b34610230576020366003190112610230576001600160a01b036103e3610bb3565b165f526002602052602060405f2054604051908152f35b3461023057608036600319011261023057610413610bb3565b61041b610bc9565b50604435906064359067ffffffffffffffff8211610230573660238301121561023057816004013567ffffffffffffffff8111610230578201366024820111610230576001600160a01b037f00000000000000000000000073991a25c818bf1f1128deaab1492d45638de0d3169182330361085c576001600160a01b03807f00000000000000000000000083dc39457e29801581d5e1611fb505cd707f7257169116036108345760809083900312610230576104d960248301610c5e565b6104e560448401610c5e565b9060846104f460648601610c5e565b9401359061ffff8216809203610230576001600160a01b03809116941691851561080c57612710821161080c57845f525f60205260405f205461080c57610180602494604051958680927f99fbab880000000000000000000000000000000000000000000000000000000082528a60048301525afa938415610801575f905f95610702575b50906001600160a01b036004817fd71421a61083006eb0783d30f03249425ff6a096a9450b5a2082bbabd58a1019978160409897968951966105ba88610bdf565b8d88528260208901911681528c838c8a01928c845260608b01928c84528260808d01961686528260a08d01981688525f525f6020528d5f209a518b5551168460018b01911673ffffffffffffffffffffffffffffffffffffffff19825416179055838060028b019351161673ffffffffffffffffffffffffffffffffffffffff19835416178255517fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff000000000000000000000000000000000000000083549260a01b16911617905551168260038701911673ffffffffffffffffffffffffffffffffffffffff1982541617905551169201911673ffffffffffffffffffffffffffffffffffffffff1982541617905582519182526020820152a360206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b9450509190610180843d82116107f9575b816107216101809383610bfb565b810103126102305783516bffffffffffffffffffffffff8116036102305761074b60208501610c72565b5061075860408501610c72565b9261076560608601610c72565b608086015162ffffff8116036102305760046001600160a01b038092816040986107e86101608c6107b960a07fd71421a61083006eb0783d30f03249425ff6a096a9450b5a2082bbabd58a10199f01610c86565b506107c660c08201610c86565b506107d360e08201610c94565b506107e16101408201610c94565b5001610c94565b509199505093949596505050610579565b3d9150610713565b6040513d5f823e3d90fd5b7f5f313319000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6bd24e6a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f7b7524c9000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610230576020366003190112610230576001600160a01b036108a5610bb3565b1690815f525f60205260405f20916108bc82610bdf565b8254908183526001600160a01b0360018501541660208401526002840154926001600160a01b038416604082015261ffff606082019460a01c1684526001600160a01b0360048160038801541696608084019788520154169260a0820193845215610208575192604051936080850185811067ffffffffffffffff821117610b9f5760405284526fffffffffffffffffffffffffffffffff6020850130815281604087018181526001600160a01b036060890193838552604051997ffc6f7865000000000000000000000000000000000000000000000000000000008b525160048b01525116602489015251166044870152511660648501526040846084815f6001600160a01b037f00000000000000000000000073991a25c818bf1f1128deaab1492d45638de0d3165af1928315610801575f945f94610b43575b5081604096608092612710610a4261ffff82610a38827f7169048ac0fa5092b61a37205ccfd5269382afea33491901921d313ebb0d6b8c9a51168d610c1d565b0495511689610c1d565b049183610b26575b82610b09575b610a5a848a610c51565b610aeb575b50610a6a8288610c51565b610aa5575b50610a7a8288610c51565b610a848288610c51565b9189519384526020840152888301526060820152a282519182526020820152f35b6001600160a01b03610ae5915116610abd8389610c51565b907f00000000000000000000000078e9485d171f7802377b85113513afeba4b0311990610cb1565b88610a6f565b6001600160a01b03610b03915116610abd858b610c51565b89610a5f565b865f526002602052895f20610b1f848254610c44565b9055610a50565b865f526001602052895f20610b3c858254610c44565b9055610a4a565b945092506040843d604011610b97575b81610b6060409383610bfb565b81010312610230578351602090940151927f7169048ac0fa5092b61a37205ccfd5269382afea33491901921d313ebb0d6b8c6109f8565b3d9150610b53565b634e487b7160e01b5f52604160045260245ffd5b600435906001600160a01b038216820361023057565b602435906001600160a01b038216820361023057565b60c0810190811067ffffffffffffffff821117610b9f57604052565b90601f8019910116810190811067ffffffffffffffff821117610b9f57604052565b81810292918115918404141715610c3057565b634e487b7160e01b5f52601160045260245ffd5b91908201809211610c3057565b91908203918211610c3057565b35906001600160a01b038216820361023057565b51906001600160a01b038216820361023057565b51908160020b820361023057565b51906fffffffffffffffffffffffffffffffff8216820361023057565b916001600160a01b03604051927fa9059cbb000000000000000000000000000000000000000000000000000000005f521660045260245260205f60448180865af19060015f5114821615610d40575b60405215610d0b5750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b906001811516610d5857823b15153d15161690610d00565b503d5f823e3d90fdfea2646970667358221220d1e5d0279abb44510c8f03d69a16939f83345a068c1889d6b294e4565f864b4264736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| GYATTINGHAM (GYATT) | GYATT | 341.408404 | — | — |
| Uniswap V3 Positions NFT-V1 (UNI-V3-POS) | UNI-V3-POS | 3 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xe04ecf…eca500 | 18 days agoThu, 30 Jul 2026 01:05:17 UTC | 0xb09c03…bd1e | [0] 0x000000000000…2fd6df18 [1] 0x000000000000…5e97cd3d data: 0x000000000000000000…7c475703 |
| 0x5a8ea2…8ba684 | 18 days agoThu, 30 Jul 2026 01:05:15 UTC | 0xb09c03…bd1e | [0] 0x000000000000…7f9946e9 [1] 0x000000000000…5e97cd3d data: 0x000000000000000000…00000000 |
| 0x90ab21…3e867c | 23 days agoFri, 24 Jul 2026 20:25:00 UTC | 0x716904…6b8c | [0] 0x000000000000…933987c5 data: 0x000000000000000000…81d984b3 |
| 0xc2ac87…19f2dc | 24 days agoFri, 24 Jul 2026 05:01:15 UTC | 0xb09c03…bd1e | [0] 0x000000000000…933987c5 [1] 0x000000000000…b2a54931 data: 0x000000000000000000…51620ca7 |
| 0x9d7e54…34697b | 24 days agoFri, 24 Jul 2026 05:00:00 UTC | 0x716904…6b8c | [0] 0x000000000000…933987c5 data: 0x000000000000000000…688f72db |
| 0x4df61c…10ed25 | 24 days agoFri, 24 Jul 2026 04:55:00 UTC | 0x716904…6b8c | [0] 0x000000000000…933987c5 data: 0x000000000000000000…00000000 |
| 0xcc62ca…747e5a | 24 days agoFri, 24 Jul 2026 04:54:36 UTC | 0xd71421…1019 | [0] 0x000000000000…933987c5 [1] 0x000000000000…00056dab data: 0x000000000000000000…00000bb8 |
| 0x665d25…1dac6d | 24 days agoThu, 23 Jul 2026 23:15:02 UTC | 0x716904…6b8c | [0] 0x000000000000…7f9946e9 data: 0x000000000000000000…00000000 |
| 0x59cb9f…7790d1 | 24 days agoThu, 23 Jul 2026 23:15:00 UTC | 0x716904…6b8c | [0] 0x000000000000…2fd6df18 data: 0x000000000000000000…7751205e |
| 0xcaef9d…4cf8e6 | 24 days agoThu, 23 Jul 2026 23:10:00 UTC | 0x716904…6b8c | [0] 0x000000000000…2fd6df18 data: 0x000000000000000000…00000000 |
| 0x8d83a0…1e9e5b | 24 days agoThu, 23 Jul 2026 23:09:51 UTC | 0xd71421…1019 | [0] 0x000000000000…7f9946e9 [1] 0x000000000000…00055ae9 data: 0x000000000000000000…00000bb8 |
| 0xdf0b7f…aef9df | 24 days agoThu, 23 Jul 2026 23:08:16 UTC | 0xd71421…1019 | [0] 0x000000000000…2fd6df18 [1] 0x000000000000…00055ada data: 0x000000000000000000…00000bb8 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xe04ecf…eca500 | claimCreatorFees | 22,906,880 | 18 days agoThu, 30 Jul 2026 01:05:17 UTC | 0x4a9c…cd3d | IN | FeeLocker | $0.000 ETH | 0.00000145 | |
| 0x5a8ea2…8ba684 | claimCreatorFees | 22,906,856 | 18 days agoThu, 30 Jul 2026 01:05:15 UTC | 0x4a9c…cd3d | IN | FeeLocker | $0.000 ETH | 0.00000164 | |
| 0x90ab21…3e867c | collect | 18,434,202 | 23 days agoFri, 24 Jul 2026 20:25:00 UTC | 0x4499…e699 | IN | FeeLocker | $0.000 ETH | 0.00001955 | |
| 0xc2ac87…19f2dc | claimCreatorFees | 17,881,556 | 24 days agoFri, 24 Jul 2026 05:01:15 UTC | 0x527e…4931 | IN | FeeLocker | $0.000 ETH | 0.00001266 | |
| 0x9d7e54…34697b | collect | 17,880,808 | 24 days agoFri, 24 Jul 2026 05:00:00 UTC | 0x4499…e699 | IN | FeeLocker | $0.000 ETH | 0.00002765 | |
| 0x4df61c…10ed25 | collect | 17,877,831 | 24 days agoFri, 24 Jul 2026 04:55:00 UTC | 0x4499…e699 | IN | FeeLocker | $0.000 ETH | 0.00002598 | |
| 0x665d25…1dac6d | collect | 17,674,554 | 24 days agoThu, 23 Jul 2026 23:15:02 UTC | 0x4499…e699 | IN | FeeLocker | $0.000 ETH | 0.00002686 | |
| 0x59cb9f…7790d1 | collect | 17,674,530 | 24 days agoThu, 23 Jul 2026 23:15:00 UTC | 0x4499…e699 | IN | FeeLocker | $0.000 ETH | 0.00002842 | |
| 0xcaef9d…4cf8e6 | collect | 17,671,538 | 24 days agoThu, 23 Jul 2026 23:10:00 UTC | 0x4499…e699 | IN | FeeLocker | $0.000 ETH | 0.00002885 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xe04ecfcc…eca500 | Transfer | 22,906,880 | 18 days agoThu, 30 Jul 2026 01:05:17 UTC | 0xcd19…fca3 | OUT | 0x4a9c…cd3d | 8,740.182595 GUH | GUH (GUH) | |
| 0xe04ecfcc…eca500 | Transfer | 22,906,880 | 18 days agoThu, 30 Jul 2026 01:05:17 UTC | 0xcd19…fca3 | OUT | 0x4a9c…cd3d | 0.000011 WETH | WETH (WETH) | |
| 0x5a8ea26f…8ba684 | Transfer | 22,906,856 | 18 days agoThu, 30 Jul 2026 01:05:15 UTC | 0xcd19…fca3 | OUT | 0x4a9c…cd3d | 0.000002 WETH | WETH (WETH) | |
| 0x90ab215b…3e867c | Transfer | 18,434,202 | 23 days agoFri, 24 Jul 2026 20:25:00 UTC | 0xcd19…fca3 | OUT | 0x78e9…3119 | 796.619609 GYATT | GYATTINGHAM (GYATT) | |
| 0x90ab215b…3e867c | Transfer | 18,434,202 | 23 days agoFri, 24 Jul 2026 20:25:00 UTC | 0x8103…9708 | IN | 0xcd19…fca3 | 1,138.028013 GYATT | GYATTINGHAM (GYATT) | |
| 0xc2ac8761…19f2dc | Transfer | 17,881,556 | 24 days agoFri, 24 Jul 2026 05:01:15 UTC | 0xcd19…fca3 | OUT | 0x527e…4931 | 113,802.801346 GYATT | GYATTINGHAM (GYATT) | |
| 0xc2ac8761…19f2dc | Transfer | 17,881,556 | 24 days agoFri, 24 Jul 2026 05:01:15 UTC | 0xcd19…fca3 | OUT | 0x527e…4931 | 0.000119 WETH | WETH (WETH) | |
| 0x9d7e54dd…34697b | Transfer | 17,880,808 | 24 days agoFri, 24 Jul 2026 05:00:00 UTC | 0xcd19…fca3 | OUT | 0x78e9…3119 | 265,539.869809 GYATT | GYATTINGHAM (GYATT) | |
| 0x9d7e54dd…34697b | Transfer | 17,880,808 | 24 days agoFri, 24 Jul 2026 05:00:00 UTC | 0x8103…9708 | IN | 0xcd19…fca3 | 379,342.671156 GYATT | GYATTINGHAM (GYATT) | |
| 0x4df61c6e…10ed25 | Transfer | 17,877,831 | 24 days agoFri, 24 Jul 2026 04:55:00 UTC | 0xcd19…fca3 | OUT | 0x78e9…3119 | 0.00028 WETH | WETH (WETH) | |
| 0x4df61c6e…10ed25 | Transfer | 17,877,831 | 24 days agoFri, 24 Jul 2026 04:55:00 UTC | 0x8103…9708 | IN | 0xcd19…fca3 | 0.000399 WETH | WETH (WETH) | |
| 0x665d25ba…1dac6d | Transfer | 17,674,554 | 24 days agoThu, 23 Jul 2026 23:15:02 UTC | 0xcd19…fca3 | OUT | 0x78e9…3119 | 0.000007 WETH | WETH (WETH) | |
| 0x665d25ba…1dac6d | Transfer | 17,674,554 | 24 days agoThu, 23 Jul 2026 23:15:02 UTC | 0x4f43…42c9 | IN | 0xcd19…fca3 | 0.000009 WETH | WETH (WETH) | |
| 0x59cb9fcc…7790d1 | Transfer | 17,674,530 | 24 days agoThu, 23 Jul 2026 23:15:00 UTC | 0xcd19…fca3 | OUT | 0x78e9…3119 | 20,393.759388 GUH | GUH (GUH) | |
| 0x59cb9fcc…7790d1 | Transfer | 17,674,530 | 24 days agoThu, 23 Jul 2026 23:15:00 UTC | 0xcbba…f024 | IN | 0xcd19…fca3 | 29,133.941984 GUH | GUH (GUH) | |
| 0xcaef9d63…4cf8e6 | Transfer | 17,671,538 | 24 days agoThu, 23 Jul 2026 23:10:00 UTC | 0xcd19…fca3 | OUT | 0x78e9…3119 | 0.000027 WETH | WETH (WETH) | |
| 0xcaef9d63…4cf8e6 | Transfer | 17,671,538 | 24 days agoThu, 23 Jul 2026 23:10:00 UTC | 0xcbba…f024 | IN | 0xcd19…fca3 | 0.000039 WETH | WETH (WETH) |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xcc62cadf…747e5a | Transfer | 17,877,596 | 24 days agoFri, 24 Jul 2026 04:54:36 UTC | 0x83dc…7257 | IN | 0xcd19…fca3 | Transfer | Uniswap V3 Positions NFT-V1 (UNI-V3-POS) #355755 | |
| 0x8d83a036…1e9e5b | Transfer | 17,671,451 | 24 days agoThu, 23 Jul 2026 23:09:51 UTC | 0x83dc…7257 | IN | 0xcd19…fca3 | Transfer | Uniswap V3 Positions NFT-V1 (UNI-V3-POS) #350953 | |
| 0xdf0b7f54…aef9df | Transfer | 17,670,506 | 24 days agoThu, 23 Jul 2026 23:08:16 UTC | 0x83dc…7257 | IN | 0xcd19…fca3 | Transfer | Uniswap V3 Positions NFT-V1 (UNI-V3-POS) #350938 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||