// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import * as Uni from "./uni/Interfaces.sol";
import "./uni/libraries/TickMath.sol";
interface IRewardsFlat {
function recipientsFlat(address token)
external view
returns (address cWallet, uint16 cBips, address pWallet, uint16 pBips);
function platformAdmin() external view returns (address);
}
interface IERC20Like {
function balanceOf(address) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
}
interface IUniV3PoolSwap {
function swap(
address recipient,
bool zeroForOne,
int256 amountSpecified,
uint160 sqrtPriceLimitX96,
bytes calldata data
) external returns (int256 amount0, int256 amount1);
}
interface IERC721Receiver {
function onERC721Received(address, address, uint256, bytes calldata) external returns (bytes4);
}
contract FeeLockerV3 is IERC721Receiver {
Uni.INonfungiblePositionManager public immutable pm;
Uni.IWETH public immutable WETH;
// ✅ CHANGED: not immutable anymore (so we can set after deploy, once)
address public factory;
address public immutable registry;
uint24 public constant FEE_TIER = 10_000; // 1%
// token => Uniswap V3 position NFT id
mapping(address => uint256) public tokenIdOf;
// Per-token lifetime accounting (optional but useful for your UI)
mapping(address => uint256) public totalClaimedETH;
mapping(address => uint256) public totalToCreator;
mapping(address => uint256) public totalToPlatform;
event FactorySet(address indexed factory);
event PositionRegistered(address indexed token, uint256 indexed tokenId);
event Claimed(
address indexed token,
uint256 toCreator,
uint256 toPlatform,
uint256 totalEth,
uint256 tokensSold,
uint256 wethUnwrapped
);
error NotFactory();
error AlreadySet();
error NoPool();
error NoPosition();
// ✅ NEW
error FactoryNotSet();
error NotAdmin();
error FactoryAlreadySet();
constructor(
address _pm,
address /* _routerIgnored */, // kept for ctor parity with your factory
address _weth,
address _registry,
address _factory,
address /* _tokenIgnored */ // kept for ctor parity (pass address(0))
) {
pm = Uni.INonfungiblePositionManager(_pm);
WETH = Uni.IWETH(_weth);
registry = _registry;
// ✅ allow 0 here; we’ll set it once later
factory = _factory;
}
/// @notice Set the factory once (to break deploy circular dependency).
function setFactoryOnce(address f) external {
if (msg.sender != IRewardsFlat(registry).platformAdmin()) revert NotAdmin();
if (factory != address(0)) revert FactoryAlreadySet();
if (f == address(0)) revert FactoryNotSet();
factory = f;
emit FactorySet(f);
}
/// @notice Factory registers token -> tokenId (write-once).
function setPositionFor(address token, uint256 _tokenId) external {
address f = factory;
if (f == address(0)) revert FactoryNotSet();
if (msg.sender != f) revert NotFactory();
if (tokenIdOf[token] != 0) revert AlreadySet();
tokenIdOf[token] = _tokenId;
emit PositionRegistered(token, _tokenId);
}
/// @notice Collect fees for `token`, convert to ETH, and split per registry bips.
function claimToETH(address token) external {
uint256 tokenId = tokenIdOf[token];
if (tokenId == 0) revert NoPosition();
// 1) Collect all fees to this locker
pm.collect(
Uni.INonfungiblePositionManager.CollectParams({
tokenId: tokenId,
recipient: address(this),
amount0Max: type(uint128).max,
amount1Max: type(uint128).max
})
);
// 2) Swap *this token’s* balance to WETH (router-free)
uint256 tokenBal = IERC20Like(token).balanceOf(address(this));
if (tokenBal > 0) {
_swapTokenToWETHExactIn(token, tokenBal);
}
// 3) Unwrap WETH to ETH
uint256 wethBal = WETH.balanceOf(address(this));
if (wethBal > 0) {
WETH.withdraw(wethBal);
}
// 4) Split per registry (same as today)
uint256 ethBal = address(this).balance;
if (ethBal == 0) return;
(address cWallet, uint16 cBips, address pWallet, ) =
IRewardsFlat(registry).recipientsFlat(token);
uint256 toCreator = (ethBal * cBips) / 10_000;
uint256 toPlatform = ethBal - toCreator;
totalToCreator[token] += toCreator;
totalToPlatform[token] += toPlatform;
totalClaimedETH[token] += (toCreator + toPlatform);
emit Claimed(token, toCreator, toPlatform, toCreator + toPlatform, tokenBal, wethBal);
(bool s1, ) = payable(cWallet).call{value: toCreator}("");
(bool s2, ) = payable(pWallet).call{value: toPlatform}("");
require(s1 && s2, "payout");
}
// ───────────────────────── Internals ─────────────────────────
function _v3Factory() internal view returns (Uni.IUniswapV3Factory f) {
f = Uni.IUniswapV3Factory(pm.factory());
}
function _swapTokenToWETHExactIn(address token, uint256 amountIn) internal {
(address token0, address token1) =
token < address(WETH) ? (token, address(WETH)) : (address(WETH), token);
address pool = _v3Factory().getPool(token0, token1, FEE_TIER);
if (pool == address(0)) revert NoPool();
bool zeroForOne = (token == token0);
uint160 sqrtPriceLimitX96 =
zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1;
IUniV3PoolSwap(pool).swap(
address(this),
zeroForOne,
int256(amountIn),
sqrtPriceLimitX96,
abi.encode(token)
);
}
function uniswapV3SwapCallback(
int256 amount0Delta,
int256 amount1Delta,
bytes calldata data
) external {
address launchedToken = abi.decode(data, (address));
(address token0, address token1) =
launchedToken < address(WETH)
? (launchedToken, address(WETH))
: (address(WETH), launchedToken);
address expectedPool = _v3Factory().getPool(token0, token1, FEE_TIER);
require(msg.sender == expectedPool, "bad pool");
if (amount0Delta > 0) {
require(IERC20Like(token0).transfer(msg.sender, uint256(amount0Delta)), "pay0");
}
if (amount1Delta > 0) {
require(IERC20Like(token1).transfer(msg.sender, uint256(amount1Delta)), "pay1");
}
}
function onERC721Received(address, address, uint256, bytes calldata)
external
pure
returns (bytes4)
{
return IERC721Receiver.onERC721Received.selector;
}
receive() external payable {}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_pm",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "_weth",
"type": "address",
"internalType": "address"
},
{
"name": "_registry",
"type": "address",
"internalType": "address"
},
{
"name": "_factory",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadySet",
"type": "error",
"inputs": []
},
{
"name": "FactoryAlreadySet",
"type": "error",
"inputs": []
},
{
"name": "FactoryNotSet",
"type": "error",
"inputs": []
},
{
"name": "NoPool",
"type": "error",
"inputs": []
},
{
"name": "NoPosition",
"type": "error",
"inputs": []
},
{
"name": "NotAdmin",
"type": "error",
"inputs": []
},
{
"name": "NotFactory",
"type": "error",
"inputs": []
},
{
"name": "Claimed",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "toCreator",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "toPlatform",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "totalEth",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "tokensSold",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "wethUnwrapped",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "FactorySet",
"type": "event",
"inputs": [
{
"name": "factory",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "PositionRegistered",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "FEE_TIER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint24",
"internalType": "uint24"
}
],
"stateMutability": "view"
},
{
"name": "WETH",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IWETH"
}
],
"stateMutability": "view"
},
{
"name": "claimToETH",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "factory",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "onERC721Received",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
}
],
"stateMutability": "pure"
},
{
"name": "pm",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract INonfungiblePositionManager"
}
],
"stateMutability": "view"
},
{
"name": "registry",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "setFactoryOnce",
"type": "function",
"inputs": [
{
"name": "f",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setPositionFor",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "_tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "tokenIdOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalClaimedETH",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalToCreator",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalToPlatform",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "uniswapV3SwapCallback",
"type": "function",
"inputs": [
{
"name": "amount0Delta",
"type": "int256",
"internalType": "int256"
},
{
"name": "amount1Delta",
"type": "int256",
"internalType": "int256"
},
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x60e03461011257601f61115a38819003918201601f19168301916001600160401b038311848410176101165780849260c094604052833981010312610112576100478161012a565b6100536020830161012a565b506100606040830161012a565b61006c6060840161012a565b9161008560a061007e6080870161012a565b950161012a565b506001600160a01b0390811660805290811660a05260c0919091525f80546001600160a01b0319169290911691909117905560405161101b908161013f823960805181818161058f0152818161097a0152610f66015260a05181818161011d015281816104f2015281816109f00152610ce4015260c0518181816103b0015281816105d30152610a5c0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101125756fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c908163150b7a02146107685750806316cc6b6c14610730578063451d0acd1461068e5780634c69a6c9146106725780635ae765f91461063a578063773c02d4146106025780637b103999146105be5780638970cdff1461057a578063a295598e14610542578063a80158a414610521578063ad5c4648146104dd578063c45a0155146104b6578063d45f23f3146103825763fa461e33146100c2575f61000f565b346103705760603660031901126103705760243560043560443567ffffffffffffffff8111610370576100fb60209136906004016107e8565b908092918101031261037057356001600160a01b0381169190829003610370577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316918281101561037c575b6001600160a01b0361015f610f51565b604051630b4c774160e11b81526001600160a01b0384811660048301528616602482015261271060448201529160209183916064918391165afa90811561026c575f9161033e575b506001600160a01b0316330361030e575f8213610277575b50505f82136101ca57005b60405163a9059cbb60e01b81523360048201526024810192909252602090829060449082905f906001600160a01b03165af190811561026c575f9161023d575b501561021257005b606460405162461bcd60e51b81526020600482015260046024820152637061793160e01b6044820152fd5b61025f915060203d602011610265575b6102578183610816565b810190610f39565b5f61020a565b503d61024d565b6040513d5f823e3d90fd5b60405163a9059cbb60e01b81523360048201526024810192909252602090829060449082905f906001600160a01b03165af190811561026c575f916102ef575b50156102c4575f806101bf565b606460405162461bcd60e51b81526020600482015260046024820152630706179360e41b6044820152fd5b610308915060203d602011610265576102578183610816565b5f6102b7565b60405162461bcd60e51b8152602060048201526008602482015267189859081c1bdbdb60c21b6044820152606490fd5b90506020813d602011610374575b8161035960209383610816565b810103126103705761036a9061084c565b5f6101a7565b5f80fd5b3d915061034c565b9161014f565b346103705760203660031901126103705761039b6107bc565b60405163cdcd7fb560e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561026c575f9161047c575b506001600160a01b0316330361046d575f54906001600160a01b03821661045e576001600160a01b031690811561044f576001600160a01b03191681175f9081557f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b19080a2005b6329f7dfeb60e21b5f5260045ffd5b6302a98a3760e31b5f5260045ffd5b637bfa4b9f60e01b5f5260045ffd5b90506020813d6020116104ae575b8161049760209383610816565b81010312610370576104a89061084c565b826103e8565b3d915061048a565b34610370575f366003190112610370575f546040516001600160a01b039091168152602090f35b34610370575f366003190112610370576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346103705760203660031901126103705761001a61053d6107bc565b6108cf565b34610370576020366003190112610370576001600160a01b036105636107bc565b165f526002602052602060405f2054604051908152f35b34610370575f366003190112610370576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610370575f366003190112610370576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610370576020366003190112610370576001600160a01b036106236107bc565b165f526001602052602060405f2054604051908152f35b34610370576020366003190112610370576001600160a01b0361065b6107bc565b165f526004602052602060405f2054604051908152f35b34610370575f3660031901126103705760206040516127108152f35b34610370576040366003190112610370576106a76107bc565b5f5460243591906001600160a01b0316801561044f573303610721576001600160a01b03165f8181526001602052604090205461071257805f5260016020528160405f20557f4c26163fff30d6f0f7a7dad088c54a22d8fa2841f0cbd64ffd0c8b38afae37335f80a3005b63a741a04560e01b5f5260045ffd5b631966391b60e11b5f5260045ffd5b34610370576020366003190112610370576001600160a01b036107516107bc565b165f526003602052602060405f2054604051908152f35b34610370576080366003190112610370576107816107bc565b5061078a6107d2565b506064359067ffffffffffffffff8211610370576107ae60209236906004016107e8565b5050630a85bd0160e11b8152f35b600435906001600160a01b038216820361037057565b602435906001600160a01b038216820361037057565b9181601f840112156103705782359167ffffffffffffffff8311610370576020838186019501011161037057565b90601f8019910116810190811067ffffffffffffffff82111761083857604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361037057565b519061ffff8216820361037057565b9190820180921161087c57565b634e487b7160e01b5f52601160045260245ffd5b3d156108ca573d9067ffffffffffffffff821161083857604051916108bf601f8201601f191660200184610816565b82523d5f602084013e565b606090565b6001600160a01b0381165f818152600160205260408120549091908015610f2a57604051906080820182811067ffffffffffffffff82111761083857604090815290825230602083019081526fffffffffffffffffffffffffffffffff83830181815260608501828152845163fc6f786560e01b81529551600487015292516001600160a01b0390811660248701529051821660448601529151166064840152829060849082905f907f0000000000000000000000000000000000000000000000000000000000000000165af1801561026c57610eff575b506040516370a0823160e01b815230600482015292602084602481855afa93841561026c575f94610ecb575b5083610ce2575b506040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602082602481845afa91821561026c575f92610cae575b5081610c69575b5047918215610c625760405163c7f25cb160e01b815260048101829052906080826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa958615610c5757859286908798610beb575b5061ffff168086029086820403610bd757612710900493848603958611610bd757868080979496819796877f68f63ec46cb9860416fca2d4e91e8556ee9bebfbebd14b92a5d113019063922060a0859a9886999887998852600360205260408820610b0488825461086f565b9055848852600460205260408820610b1d8d825461086f565b9055610b298c8861086f565b8589526002602052610b4060408a2091825461086f565b9055610b4c8c8861086f565b91604051928884528d6020850152604084015260608301526080820152a26001600160a01b03165af195610b7e610890565b506001600160a01b03165af1610b92610890565b5081610bcf575b5015610ba157565b60405162461bcd60e51b81526020600482015260066024820152651c185e5bdd5d60d21b6044820152606490fd5b90505f610b99565b634e487b7160e01b87526011600452602487fd5b97505091506080863d608011610c4f575b81610c0960809383610816565b81010312610c4b57610c1a8661084c565b9161ffff610c2a60208901610860565b93610c436060610c3c60408c0161084c565b9a01610860565b509390610a98565b8480fd5b3d9150610bfc565b6040513d87823e3d90fd5b5050505050565b803b15610370575f8091602460405180948193632e1a7d4d60e01b83528760048401525af1801561026c5715610a3657610ca69193505f90610816565b5f915f610a36565b9091506020813d602011610cda575b81610cca60209383610816565b810103126103705751905f610a2f565b3d9150610cbd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169081831015610ebf576020610d6e91925b6001600160a01b03610d2d610f51565b604051630b4c774160e11b81526001600160a01b03808816600483015290931660248401526127106044840152919384929190911690829081906064820190565b03915afa90811561026c575f91610e85575b506001600160a01b0316908115610e76576001600160a01b03168214906040908215610e5b576401000276a4905b8251915f60c4602085019688885260208652610dca8787610816565b865197889687958693630251596160e31b855230600486015260248501528d604485015260018060a01b0316606484015260a060848401525180918160a48501528484015e8181018301849052601f01601f191681010301925af1801561026c57156109da57604090813d8311610e54575b610e468183610816565b81010312610370575f6109da565b503d610e3c565b73fffd8963efd1fc6a506488495d951d5263988d2590610dae565b63f591b27760e01b5f5260045ffd5b90506020813d602011610eb7575b81610ea060209383610816565b8101031261037057610eb19061084c565b5f610d80565b3d9150610e93565b610d6e90602090610d1d565b9093506020813d602011610ef7575b81610ee760209383610816565b810103126103705751925f6109d3565b3d9150610eda565b604090813d8311610f23575b610f158183610816565b81010312610370575f6109a7565b503d610f0b565b632afc3c0d60e21b5f5260045ffd5b90816020910312610370575180151581036103705790565b60405163c45a015560e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561026c575f91610fab575b506001600160a01b031690565b90506020813d602011610fdd575b81610fc660209383610816565b8101031261037057610fd79061084c565b5f610f9e565b3d9150610fb956fea2646970667358221220293da6b671e2a3e0e4a43be8d7ae536b2e630527db73fda170799f0e9841e7f864736f6c6343000822003300000000000000000000000073991a25c818bf1f1128deaab1492d45638de0d3000000000000000000000000caf681a66d020601342297493863e78c959e5cb20000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad730000000000000000000000006e3482c66dcf5075eb85725d9a4d540c1d6ecea400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0x608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c908163150b7a02146107685750806316cc6b6c14610730578063451d0acd1461068e5780634c69a6c9146106725780635ae765f91461063a578063773c02d4146106025780637b103999146105be5780638970cdff1461057a578063a295598e14610542578063a80158a414610521578063ad5c4648146104dd578063c45a0155146104b6578063d45f23f3146103825763fa461e33146100c2575f61000f565b346103705760603660031901126103705760243560043560443567ffffffffffffffff8111610370576100fb60209136906004016107e8565b908092918101031261037057356001600160a01b0381169190829003610370577f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b0316918281101561037c575b6001600160a01b0361015f610f51565b604051630b4c774160e11b81526001600160a01b0384811660048301528616602482015261271060448201529160209183916064918391165afa90811561026c575f9161033e575b506001600160a01b0316330361030e575f8213610277575b50505f82136101ca57005b60405163a9059cbb60e01b81523360048201526024810192909252602090829060449082905f906001600160a01b03165af190811561026c575f9161023d575b501561021257005b606460405162461bcd60e51b81526020600482015260046024820152637061793160e01b6044820152fd5b61025f915060203d602011610265575b6102578183610816565b810190610f39565b5f61020a565b503d61024d565b6040513d5f823e3d90fd5b60405163a9059cbb60e01b81523360048201526024810192909252602090829060449082905f906001600160a01b03165af190811561026c575f916102ef575b50156102c4575f806101bf565b606460405162461bcd60e51b81526020600482015260046024820152630706179360e41b6044820152fd5b610308915060203d602011610265576102578183610816565b5f6102b7565b60405162461bcd60e51b8152602060048201526008602482015267189859081c1bdbdb60c21b6044820152606490fd5b90506020813d602011610374575b8161035960209383610816565b810103126103705761036a9061084c565b5f6101a7565b5f80fd5b3d915061034c565b9161014f565b346103705760203660031901126103705761039b6107bc565b60405163cdcd7fb560e01b81526020816004817f0000000000000000000000006e3482c66dcf5075eb85725d9a4d540c1d6ecea46001600160a01b03165afa90811561026c575f9161047c575b506001600160a01b0316330361046d575f54906001600160a01b03821661045e576001600160a01b031690811561044f576001600160a01b03191681175f9081557f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b19080a2005b6329f7dfeb60e21b5f5260045ffd5b6302a98a3760e31b5f5260045ffd5b637bfa4b9f60e01b5f5260045ffd5b90506020813d6020116104ae575b8161049760209383610816565b81010312610370576104a89061084c565b826103e8565b3d915061048a565b34610370575f366003190112610370575f546040516001600160a01b039091168152602090f35b34610370575f366003190112610370576040517f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b03168152602090f35b346103705760203660031901126103705761001a61053d6107bc565b6108cf565b34610370576020366003190112610370576001600160a01b036105636107bc565b165f526002602052602060405f2054604051908152f35b34610370575f366003190112610370576040517f00000000000000000000000073991a25c818bf1f1128deaab1492d45638de0d36001600160a01b03168152602090f35b34610370575f366003190112610370576040517f0000000000000000000000006e3482c66dcf5075eb85725d9a4d540c1d6ecea46001600160a01b03168152602090f35b34610370576020366003190112610370576001600160a01b036106236107bc565b165f526001602052602060405f2054604051908152f35b34610370576020366003190112610370576001600160a01b0361065b6107bc565b165f526004602052602060405f2054604051908152f35b34610370575f3660031901126103705760206040516127108152f35b34610370576040366003190112610370576106a76107bc565b5f5460243591906001600160a01b0316801561044f573303610721576001600160a01b03165f8181526001602052604090205461071257805f5260016020528160405f20557f4c26163fff30d6f0f7a7dad088c54a22d8fa2841f0cbd64ffd0c8b38afae37335f80a3005b63a741a04560e01b5f5260045ffd5b631966391b60e11b5f5260045ffd5b34610370576020366003190112610370576001600160a01b036107516107bc565b165f526003602052602060405f2054604051908152f35b34610370576080366003190112610370576107816107bc565b5061078a6107d2565b506064359067ffffffffffffffff8211610370576107ae60209236906004016107e8565b5050630a85bd0160e11b8152f35b600435906001600160a01b038216820361037057565b602435906001600160a01b038216820361037057565b9181601f840112156103705782359167ffffffffffffffff8311610370576020838186019501011161037057565b90601f8019910116810190811067ffffffffffffffff82111761083857604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361037057565b519061ffff8216820361037057565b9190820180921161087c57565b634e487b7160e01b5f52601160045260245ffd5b3d156108ca573d9067ffffffffffffffff821161083857604051916108bf601f8201601f191660200184610816565b82523d5f602084013e565b606090565b6001600160a01b0381165f818152600160205260408120549091908015610f2a57604051906080820182811067ffffffffffffffff82111761083857604090815290825230602083019081526fffffffffffffffffffffffffffffffff83830181815260608501828152845163fc6f786560e01b81529551600487015292516001600160a01b0390811660248701529051821660448601529151166064840152829060849082905f907f00000000000000000000000073991a25c818bf1f1128deaab1492d45638de0d3165af1801561026c57610eff575b506040516370a0823160e01b815230600482015292602084602481855afa93841561026c575f94610ecb575b5083610ce2575b506040516370a0823160e01b81523060048201527f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b0316602082602481845afa91821561026c575f92610cae575b5081610c69575b5047918215610c625760405163c7f25cb160e01b815260048101829052906080826024817f0000000000000000000000006e3482c66dcf5075eb85725d9a4d540c1d6ecea46001600160a01b03165afa958615610c5757859286908798610beb575b5061ffff168086029086820403610bd757612710900493848603958611610bd757868080979496819796877f68f63ec46cb9860416fca2d4e91e8556ee9bebfbebd14b92a5d113019063922060a0859a9886999887998852600360205260408820610b0488825461086f565b9055848852600460205260408820610b1d8d825461086f565b9055610b298c8861086f565b8589526002602052610b4060408a2091825461086f565b9055610b4c8c8861086f565b91604051928884528d6020850152604084015260608301526080820152a26001600160a01b03165af195610b7e610890565b506001600160a01b03165af1610b92610890565b5081610bcf575b5015610ba157565b60405162461bcd60e51b81526020600482015260066024820152651c185e5bdd5d60d21b6044820152606490fd5b90505f610b99565b634e487b7160e01b87526011600452602487fd5b97505091506080863d608011610c4f575b81610c0960809383610816565b81010312610c4b57610c1a8661084c565b9161ffff610c2a60208901610860565b93610c436060610c3c60408c0161084c565b9a01610860565b509390610a98565b8480fd5b3d9150610bfc565b6040513d87823e3d90fd5b5050505050565b803b15610370575f8091602460405180948193632e1a7d4d60e01b83528760048401525af1801561026c5715610a3657610ca69193505f90610816565b5f915f610a36565b9091506020813d602011610cda575b81610cca60209383610816565b810103126103705751905f610a2f565b3d9150610cbd565b7f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b03169081831015610ebf576020610d6e91925b6001600160a01b03610d2d610f51565b604051630b4c774160e11b81526001600160a01b03808816600483015290931660248401526127106044840152919384929190911690829081906064820190565b03915afa90811561026c575f91610e85575b506001600160a01b0316908115610e76576001600160a01b03168214906040908215610e5b576401000276a4905b8251915f60c4602085019688885260208652610dca8787610816565b865197889687958693630251596160e31b855230600486015260248501528d604485015260018060a01b0316606484015260a060848401525180918160a48501528484015e8181018301849052601f01601f191681010301925af1801561026c57156109da57604090813d8311610e54575b610e468183610816565b81010312610370575f6109da565b503d610e3c565b73fffd8963efd1fc6a506488495d951d5263988d2590610dae565b63f591b27760e01b5f5260045ffd5b90506020813d602011610eb7575b81610ea060209383610816565b8101031261037057610eb19061084c565b5f610d80565b3d9150610e93565b610d6e90602090610d1d565b9093506020813d602011610ef7575b81610ee760209383610816565b810103126103705751925f6109d3565b3d9150610eda565b604090813d8311610f23575b610f158183610816565b81010312610370575f6109a7565b503d610f0b565b632afc3c0d60e21b5f5260045ffd5b90816020910312610370575180151581036103705790565b60405163c45a015560e01b81526020816004817f00000000000000000000000073991a25c818bf1f1128deaab1492d45638de0d36001600160a01b03165afa90811561026c575f91610fab575b506001600160a01b031690565b90506020813d602011610fdd575b81610fc660209383610816565b8101031261037057610fd79061084c565b5f610f9e565b3d9150610fb956fea2646970667358221220293da6b671e2a3e0e4a43be8d7ae536b2e630527db73fda170799f0e9841e7f864736f6c63430008220033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| Uniswap V3 Positions NFT-V1 (UNI-V3-POS) | UNI-V3-POS | 1 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xd92f32…49dce0 | 26 days agoTue, 21 Jul 2026 23:09:59 UTC | 0x68f63e…9220 | [0] 0x000000000000…94d44654 data: 0x000000000000000000…bb81fcaa |
| 0xa71584…3ab1eb | 26 days agoTue, 21 Jul 2026 23:09:44 UTC | 0x68f63e…9220 | [0] 0x000000000000…94d44654 data: 0x000000000000000000…20f89d6a |
| 0xe68870…e920a1 | 26 days agoTue, 21 Jul 2026 23:05:16 UTC | 0x4c2616…3733 | [0] 0x000000000000…94d44654 [1] 0x000000000000…00047b5b |
| 0xdb07ba…911467 | 26 days agoTue, 21 Jul 2026 23:00:15 UTC | 0x1edf3a…41b1 | [0] 0x000000000000…39ed2e8f |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xd92f32…49dce0 | claimToETH | 15,947,445 | 26 days agoTue, 21 Jul 2026 23:09:59 UTC | 0xcf35…1dbc | IN | FeeLockerV3 | $0.000 ETH | 0.00001871 | |
| 0xa71584…3ab1eb | claimToETH | 15,947,294 | 26 days agoTue, 21 Jul 2026 23:09:44 UTC | 0xcf35…1dbc | IN | FeeLockerV3 | $0.000 ETH | 0.00002832 | |
| 0xdb07ba…911467 | setFactoryOnce | 15,941,623 | 26 days agoTue, 21 Jul 2026 23:00:15 UTC | 0xcf35…1dbc | IN | FeeLockerV3 | $0.000 ETH | 0.00000377 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xe68870ab…e920a1 | Transfer | 15,944,608 | 26 days agoTue, 21 Jul 2026 23:05:16 UTC | 0x9355…2e8f | IN | 0x6383…b4c5 | Transfer | Uniswap V3 Positions NFT-V1 (UNI-V3-POS) #293723 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xd92f320f…49dce0 | Transfer | 15,947,445 | 26 days agoTue, 21 Jul 2026 23:09:59 UTC | 0x6383…b4c5 | OUT | 0x0000…0000 | 0.000003 WETH | WETH (WETH) | |
| 0xd92f320f…49dce0 | Transfer | 15,947,445 | 26 days agoTue, 21 Jul 2026 23:09:59 UTC | 0x6383…b4c5 | OUT | 0x4d68…d384 | 3,847.367374 YETEP | Yetep (YETEP) | |
| 0xd92f320f…49dce0 | Transfer | 15,947,445 | 26 days agoTue, 21 Jul 2026 23:09:59 UTC | 0x4d68…d384 | IN | 0x6383…b4c5 | 0.000003 WETH | WETH (WETH) | |
| 0xd92f320f…49dce0 | Transfer | 15,947,445 | 26 days agoTue, 21 Jul 2026 23:09:59 UTC | 0x4d68…d384 | IN | 0x6383…b4c5 | 3,847.367374 YETEP | Yetep (YETEP) | |
| 0xa71584c3…3ab1eb | Transfer | 15,947,294 | 26 days agoTue, 21 Jul 2026 23:09:44 UTC | 0x6383…b4c5 | OUT | 0x0000…0000 | 0.000757 WETH | WETH (WETH) | |
| 0xa71584c3…3ab1eb | Transfer | 15,947,294 | 26 days agoTue, 21 Jul 2026 23:09:44 UTC | 0x6383…b4c5 | OUT | 0x4d68…d384 | 384,736.737492 YETEP | Yetep (YETEP) | |
| 0xa71584c3…3ab1eb | Transfer | 15,947,294 | 26 days agoTue, 21 Jul 2026 23:09:44 UTC | 0x4d68…d384 | IN | 0x6383…b4c5 | 0.000367 WETH | WETH (WETH) | |
| 0xa71584c3…3ab1eb | Transfer | 15,947,294 | 26 days agoTue, 21 Jul 2026 23:09:44 UTC | 0x4d68…d384 | IN | 0x6383…b4c5 | 384,736.737492 YETEP | Yetep (YETEP) | |
| 0xa71584c3…3ab1eb | Transfer | 15,947,294 | 26 days agoTue, 21 Jul 2026 23:09:44 UTC | 0x4d68…d384 | IN | 0x6383…b4c5 | 0.000389 WETH | WETH (WETH) |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 15,947,445 | 26 days agoTue, 21 Jul 2026 23:09:59 UTC | 0xd92f32…49dce0 | CALL | claimToETH | 0x6383…b4c5 | OUT | 0x2a3f…6d41 | 0.00000 ETH |
| 15,947,445 | 26 days agoTue, 21 Jul 2026 23:09:59 UTC | 0xd92f32…49dce0 | CALL | claimToETH | 0x6383…b4c5 | OUT | 0xcf35…1dbc | 0.00000 ETH |
| 15,947,445 | 26 days agoTue, 21 Jul 2026 23:09:59 UTC | 0xd92f32…49dce0 | CALL | claimToETH | 0x0bd7…ad73 | IN | 0x6383…b4c5 | 0.00000 ETH |
| 15,947,294 | 26 days agoTue, 21 Jul 2026 23:09:44 UTC | 0xa71584…3ab1eb | CALL | claimToETH | 0x6383…b4c5 | OUT | 0x2a3f…6d41 | 0.00015 ETH |
| 15,947,294 | 26 days agoTue, 21 Jul 2026 23:09:44 UTC | 0xa71584…3ab1eb | CALL | claimToETH | 0x6383…b4c5 | OUT | 0xcf35…1dbc | 0.00060 ETH |
| 15,947,294 | 26 days agoTue, 21 Jul 2026 23:09:44 UTC | 0xa71584…3ab1eb | CALL | claimToETH | 0x0bd7…ad73 | IN | 0x6383…b4c5 | 0.00075 ETH |