// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol";
import {ReentrancyGuard} from "openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol";
import {IProtocolFeeRouter} from "./interfaces/IProtocolFeeRouter.sol";
interface IPositionManagerCollect {
function modifyLiquidities(bytes calldata unlockData, uint256 deadline) external payable;
}
/// @notice Permanently owns Loom LP NFTs and only extracts their trading fees.
contract FeeCollectorVault is ReentrancyGuard {
using SafeERC20 for IERC20;
address public immutable factory;
address public immutable feeRouter;
address public immutable positionManager;
address public registrar;
uint8 private constant ACTION_DECREASE_LIQUIDITY = 0x01;
uint8 private constant ACTION_TAKE_PAIR = 0x11;
struct Position {
uint256 originId;
uint256 tokenId;
address currency0;
address currency1;
bool registered;
}
mapping(address => Position) public positions;
mapping(uint256 => mapping(address => uint256)) public feesCollected;
event Registered(uint256 indexed originId, address indexed token, uint256 indexed tokenId);
event RegistrarSet(address indexed registrar);
event LPFeesCollected(
uint256 indexed originId,
address indexed token,
address currency0,
uint256 amount0,
address currency1,
uint256 amount1,
uint256 timestamp
);
error NotFactory();
error NotRegistrar();
error AlreadySet();
error AlreadyRegistered();
error NotRegistered();
error InvalidAddress();
constructor(address feeRouter_, address positionManager_) {
if (feeRouter_ == address(0) || positionManager_ == address(0)) revert InvalidAddress();
factory = msg.sender;
feeRouter = feeRouter_;
positionManager = positionManager_;
}
function setRegistrar(address registrar_) external {
if (msg.sender != factory) revert NotFactory();
if (registrar != address(0)) revert AlreadySet();
if (registrar_ == address(0)) revert InvalidAddress();
registrar = registrar_;
emit RegistrarSet(registrar_);
}
function register(uint256 originId, address token, uint256 tokenId, address currency0, address currency1)
external
{
if (msg.sender != registrar) revert NotRegistrar();
if (originId == 0 || token == address(0) || currency0 == address(0) || currency1 == address(0)) {
revert InvalidAddress();
}
if (positions[token].registered) revert AlreadyRegistered();
positions[token] = Position(originId, tokenId, currency0, currency1, true);
emit Registered(originId, token, tokenId);
}
/// @notice Permissionless fee extraction. The zero liquidity delta cannot withdraw principal.
function collectFees(address token) external nonReentrant {
Position memory p = positions[token];
if (!p.registered) revert NotRegistered();
uint256 balance0Before = IERC20(p.currency0).balanceOf(address(this));
uint256 balance1Before = IERC20(p.currency1).balanceOf(address(this));
bytes memory actions = abi.encodePacked(ACTION_DECREASE_LIQUIDITY, ACTION_TAKE_PAIR);
bytes[] memory params = new bytes[](2);
params[0] = abi.encode(p.tokenId, uint256(0), uint128(0), uint128(0), bytes(""));
params[1] = abi.encode(p.currency0, p.currency1, address(this));
IPositionManagerCollect(positionManager).modifyLiquidities(abi.encode(actions, params), block.timestamp);
uint256 amount0 = IERC20(p.currency0).balanceOf(address(this)) - balance0Before;
uint256 amount1 = IERC20(p.currency1).balanceOf(address(this)) - balance1Before;
feesCollected[p.originId][p.currency0] += amount0;
feesCollected[p.originId][p.currency1] += amount1;
_route(p.originId, p.currency0, amount0);
_route(p.originId, p.currency1, amount1);
emit LPFeesCollected(p.originId, token, p.currency0, amount0, p.currency1, amount1, block.timestamp);
}
function _route(uint256 originId, address currency, uint256 amount) private {
if (amount == 0) return;
IERC20(currency).forceApprove(feeRouter, amount);
IProtocolFeeRouter(feeRouter).route(originId, IProtocolFeeRouter.RevenueKind.LP, currency, amount);
IERC20(currency).forceApprove(feeRouter, 0);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "feeRouter_",
"type": "address",
"internalType": "address"
},
{
"name": "positionManager_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadyRegistered",
"type": "error",
"inputs": []
},
{
"name": "AlreadySet",
"type": "error",
"inputs": []
},
{
"name": "InvalidAddress",
"type": "error",
"inputs": []
},
{
"name": "NotFactory",
"type": "error",
"inputs": []
},
{
"name": "NotRegistered",
"type": "error",
"inputs": []
},
{
"name": "NotRegistrar",
"type": "error",
"inputs": []
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "LPFeesCollected",
"type": "event",
"inputs": [
{
"name": "originId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "currency0",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "amount0",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "currency1",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "amount1",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "timestamp",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Registered",
"type": "event",
"inputs": [
{
"name": "originId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RegistrarSet",
"type": "event",
"inputs": [
{
"name": "registrar",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "collectFees",
"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": "feeRouter",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "feesCollected",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "positionManager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "positions",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "originId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "currency0",
"type": "address",
"internalType": "address"
},
{
"name": "currency1",
"type": "address",
"internalType": "address"
},
{
"name": "registered",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "register",
"type": "function",
"inputs": [
{
"name": "originId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "currency0",
"type": "address",
"internalType": "address"
},
{
"name": "currency1",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "registrar",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "setRegistrar",
"type": "function",
"inputs": [
{
"name": "registrar_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60e0346100f557601f610f5738819003918201601f19168301916001600160401b038311848410176100f95780849260409485528339810103126100f557610052602061004b8361010d565b920161010d565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055906001600160a01b0381161580156100e4575b6100d5573360805260a05260c052604051610e3590816101228239608051818181609c01526101ab015260a0518181816101660152610be2015260c0518181816105e801526109d70152f35b63e6c4247b60e01b5f5260045ffd5b506001600160a01b03821615610089565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100f55756fe6080806040526004361015610012575f80fd5b5f905f3560e01c9081632b20e39714610abf5750806355f5751014610a4a5780635d5fbdbf14610a06578063791b98bc146109c2578063a480ca7914610383578063bf256af7146101da578063c45a015514610195578063f29ebf61146101505763faab9d3914610081575f80fd5b3461014d57602036600319011261014d5761009a610ae1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361013e578154906001600160a01b03821661012f576001600160a01b0316908115610120576001600160a01b031916811782557f6263309d5d4d1cfececd45a387cda7f14dccde21cf7a1bee1be6561075e610148280a280f35b63e6c4247b60e01b8352600483fd5b63a741a04560e01b8352600483fd5b631966391b60e11b8252600482fd5b80fd5b503461014d578060031936011261014d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461014d578060031936011261014d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461014d5760a036600319011261014d576004356101f7610af7565b604435916064356001600160a01b038116929083900361037f576084356001600160a01b038116919082900361037b5785546001600160a01b0316330361036c578215801561035b575b8015610353575b801561034b575b61033c576001600160a01b03168086526001602052604086206003015490939060a01c60ff1661032d57600360405161028781610b0d565b84815260208082018881526040808401958652606084019687526001608085018181528a8d5293819052908b209351845590519083015592516002820180546001600160a01b0319166001600160a01b0392831617905593519101805492516001600160a81b0319909316919093161790151560a01b60ff60a01b161790557f39dd062cc095bf933d83338d8e4591b7eb119264d876f173cacb1cfdf2c9737f8480a480f35b630ea075bf60e21b8652600486fd5b63e6c4247b60e01b8652600486fd5b50811561024f565b508315610248565b506001600160a01b03811615610241565b632ad9535160e01b8652600486fd5b8580fd5b8480fd5b503461087f57602036600319011261087f5761039d610ae1565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054146109b35760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03165f8181526001602052604090819020905161040d81610b0d565b8154815260018201549060208101918252600360018060a01b03600285015416936040830194855201549060ff606082019260018060a01b038116845260a01c1615801560808301526109a45783516040516370a0823160e01b81523060048201529390602090859060249082906001600160a01b03165afa9384156108de575f94610970575b5082516040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa9081156108de575f9161093e575b50604051600160f81b6020820152601160f81b6021820152600281526104f5602282610b29565b6040516060936105058583610b29565b60028252601f1985015f5b81811061092e5750505160405190602082019082821067ffffffffffffffff83111761091a576105849061061f959493926040525f835261057660405193849260208401525f60408401525f8a8401525f608084015260a08084015260c0830190610b4b565b03601f198101835282610b29565b61058d82610b6f565b5261059781610b6f565b5088518751604080516001600160a01b039384166020820152929091169082015230868201528581526105cb608082610b29565b6105d482610b90565b526105de81610b90565b5060018060a01b037f000000000000000000000000000000000000000000000000000000000000000016916040519384916040602084015287830190610b4b565b91601f19828403016040830152805180845260208401936020808360051b8301019301945f915b8383106108e95750505050610664925003601f198101845283610b29565b803b1561087f576106975f9291839260405194858094819363dd46508f60e01b8352604060048401526044830190610b4b565b42602483015203925af180156108de576108c9575b5085516040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa90811561088b578991610896575b506024956106f391610ba0565b84516040516370a0823160e01b81523060048201529691929160209188919082906001600160a01b03165afa95861561088b578996610847575b509061075f60a0959493927fe21d25cb9b4ff4e26a96def5ae08e51678b85c033f8252a9952b2b958be6ec0197610ba0565b9280518a52600260205260408a20600180881b03895116600180891b03165f5260205260405f20610791838254610bc1565b905580518a52600260205260408a20600180881b03865116600180891b03165f5260205260405f206107c4858254610bc1565b90556107db8282516001808a1b038b511690610bce565b6107f08482516001808a1b0388511690610bce565b5196600180871b0390511693600180871b039051169060405194855260208501526040840152820152426080820152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b9550939291906020863d602011610883575b8161086660209383610b29565b8101031261087f5794519492939192909161075f61072d565b5f80fd5b3d9150610859565b6040513d8b823e3d90fd5b90506020813d6020116108c1575b816108b160209383610b29565b8101031261087f575160246106e6565b3d91506108a4565b6108d69198505f90610b29565b5f965f6106ac565b6040513d5f823e3d90fd5b919360019193955060206109088192601f198682030187528951610b4b565b97019301930190928794929593610646565b634e487b7160e01b5f52604160045260245ffd5b8087602080938701015201610510565b90506020813d602011610968575b8161095960209383610b29565b8101031261087f57515f6104ce565b3d915061094c565b9093506020813d60201161099c575b8161098c60209383610b29565b8101031261087f5751925f610494565b3d915061097f565b63aba4733960e01b5f5260045ffd5b633ee5aeb560e01b5f5260045ffd5b3461087f575f36600319011261087f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461087f57604036600319011261087f57610a1f610af7565b6004355f52600260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461087f57602036600319011261087f576001600160a01b03610a6b610ae1565b165f52600160205260a060405f2060ff8154916001810154906003600180871b036002830154169101549160405194855260208501526040840152600180851b0381166060840152831c1615156080820152f35b3461087f575f36600319011261087f575f546001600160a01b03168152602090f35b600435906001600160a01b038216820361087f57565b602435906001600160a01b038216820361087f57565b60a0810190811067ffffffffffffffff82111761091a57604052565b90601f8019910116810190811067ffffffffffffffff82111761091a57604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b805115610b7c5760200190565b634e487b7160e01b5f52603260045260245ffd5b805160011015610b7c5760400190565b91908203918211610bad57565b634e487b7160e01b5f52601160045260245ffd5b91908201809211610bad57565b91908115610d0e576001600160a01b0316917f000000000000000000000000000000000000000000000000000000000000000091610c0d818486610d13565b15610cdc575b60405191630e351c6560e01b835260048301526001602483015283604483015260648201526040816084815f60018060a01b0387165af180156108de57610cb1575b50610c615f8284610d13565b15610c6a575050565b610c748183610d60565b15610c9e575f610c849183610dc4565b15610c8c5750565b635274afe760e01b5f5260045260245ffd5b50635274afe760e01b5f5260045260245ffd5b604090813d8311610cd5575b610cc78183610b29565b8101031261087f575f610c55565b503d610cbd565b610ce68385610d60565b15610cfb57610cf6818486610dc4565b610c13575b83635274afe760e01b5f5260045260245ffd5b505050565b92916040519163095ea7b360e01b5f5260018060a01b031660045260245260205f60448180875af19260015f5114841615610d4f575b50604052565b3d15903b151516909216915f610d49565b60405163095ea7b360e01b5f9081526001600160a01b03909316600452602483905290929160209060448180875af19260015f5114841615610da25750604052565b60018492941516610dbb573b15153d151616915f610d49565b833d5f823e3d90fd5b92916040519163095ea7b360e01b5f5260018060a01b031660045260245260205f60448180875af19260015f5114841615610da2575060405256fea2646970667358221220b962a0b046b79dedfb30429a1d46c5f86aa618ae86280dc40de3a688f0a6465364736f6c634300081a0033000000000000000000000000bfc426fcc11afae406080bb60788b97635020d1c00000000000000000000000058daec3116aae6d93017baaea7749052e8a04fa7
0x6080806040526004361015610012575f80fd5b5f905f3560e01c9081632b20e39714610abf5750806355f5751014610a4a5780635d5fbdbf14610a06578063791b98bc146109c2578063a480ca7914610383578063bf256af7146101da578063c45a015514610195578063f29ebf61146101505763faab9d3914610081575f80fd5b3461014d57602036600319011261014d5761009a610ae1565b7f0000000000000000000000002758feff0260ea11340d96e34530a5c6d676ca856001600160a01b0316330361013e578154906001600160a01b03821661012f576001600160a01b0316908115610120576001600160a01b031916811782557f6263309d5d4d1cfececd45a387cda7f14dccde21cf7a1bee1be6561075e610148280a280f35b63e6c4247b60e01b8352600483fd5b63a741a04560e01b8352600483fd5b631966391b60e11b8252600482fd5b80fd5b503461014d578060031936011261014d576040517f000000000000000000000000bfc426fcc11afae406080bb60788b97635020d1c6001600160a01b03168152602090f35b503461014d578060031936011261014d576040517f0000000000000000000000002758feff0260ea11340d96e34530a5c6d676ca856001600160a01b03168152602090f35b503461014d5760a036600319011261014d576004356101f7610af7565b604435916064356001600160a01b038116929083900361037f576084356001600160a01b038116919082900361037b5785546001600160a01b0316330361036c578215801561035b575b8015610353575b801561034b575b61033c576001600160a01b03168086526001602052604086206003015490939060a01c60ff1661032d57600360405161028781610b0d565b84815260208082018881526040808401958652606084019687526001608085018181528a8d5293819052908b209351845590519083015592516002820180546001600160a01b0319166001600160a01b0392831617905593519101805492516001600160a81b0319909316919093161790151560a01b60ff60a01b161790557f39dd062cc095bf933d83338d8e4591b7eb119264d876f173cacb1cfdf2c9737f8480a480f35b630ea075bf60e21b8652600486fd5b63e6c4247b60e01b8652600486fd5b50811561024f565b508315610248565b506001600160a01b03811615610241565b632ad9535160e01b8652600486fd5b8580fd5b8480fd5b503461087f57602036600319011261087f5761039d610ae1565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054146109b35760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b03165f8181526001602052604090819020905161040d81610b0d565b8154815260018201549060208101918252600360018060a01b03600285015416936040830194855201549060ff606082019260018060a01b038116845260a01c1615801560808301526109a45783516040516370a0823160e01b81523060048201529390602090859060249082906001600160a01b03165afa9384156108de575f94610970575b5082516040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa9081156108de575f9161093e575b50604051600160f81b6020820152601160f81b6021820152600281526104f5602282610b29565b6040516060936105058583610b29565b60028252601f1985015f5b81811061092e5750505160405190602082019082821067ffffffffffffffff83111761091a576105849061061f959493926040525f835261057660405193849260208401525f60408401525f8a8401525f608084015260a08084015260c0830190610b4b565b03601f198101835282610b29565b61058d82610b6f565b5261059781610b6f565b5088518751604080516001600160a01b039384166020820152929091169082015230868201528581526105cb608082610b29565b6105d482610b90565b526105de81610b90565b5060018060a01b037f00000000000000000000000058daec3116aae6d93017baaea7749052e8a04fa716916040519384916040602084015287830190610b4b565b91601f19828403016040830152805180845260208401936020808360051b8301019301945f915b8383106108e95750505050610664925003601f198101845283610b29565b803b1561087f576106975f9291839260405194858094819363dd46508f60e01b8352604060048401526044830190610b4b565b42602483015203925af180156108de576108c9575b5085516040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa90811561088b578991610896575b506024956106f391610ba0565b84516040516370a0823160e01b81523060048201529691929160209188919082906001600160a01b03165afa95861561088b578996610847575b509061075f60a0959493927fe21d25cb9b4ff4e26a96def5ae08e51678b85c033f8252a9952b2b958be6ec0197610ba0565b9280518a52600260205260408a20600180881b03895116600180891b03165f5260205260405f20610791838254610bc1565b905580518a52600260205260408a20600180881b03865116600180891b03165f5260205260405f206107c4858254610bc1565b90556107db8282516001808a1b038b511690610bce565b6107f08482516001808a1b0388511690610bce565b5196600180871b0390511693600180871b039051169060405194855260208501526040840152820152426080820152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b9550939291906020863d602011610883575b8161086660209383610b29565b8101031261087f5794519492939192909161075f61072d565b5f80fd5b3d9150610859565b6040513d8b823e3d90fd5b90506020813d6020116108c1575b816108b160209383610b29565b8101031261087f575160246106e6565b3d91506108a4565b6108d69198505f90610b29565b5f965f6106ac565b6040513d5f823e3d90fd5b919360019193955060206109088192601f198682030187528951610b4b565b97019301930190928794929593610646565b634e487b7160e01b5f52604160045260245ffd5b8087602080938701015201610510565b90506020813d602011610968575b8161095960209383610b29565b8101031261087f57515f6104ce565b3d915061094c565b9093506020813d60201161099c575b8161098c60209383610b29565b8101031261087f5751925f610494565b3d915061097f565b63aba4733960e01b5f5260045ffd5b633ee5aeb560e01b5f5260045ffd5b3461087f575f36600319011261087f576040517f00000000000000000000000058daec3116aae6d93017baaea7749052e8a04fa76001600160a01b03168152602090f35b3461087f57604036600319011261087f57610a1f610af7565b6004355f52600260205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b3461087f57602036600319011261087f576001600160a01b03610a6b610ae1565b165f52600160205260a060405f2060ff8154916001810154906003600180871b036002830154169101549160405194855260208501526040840152600180851b0381166060840152831c1615156080820152f35b3461087f575f36600319011261087f575f546001600160a01b03168152602090f35b600435906001600160a01b038216820361087f57565b602435906001600160a01b038216820361087f57565b60a0810190811067ffffffffffffffff82111761091a57604052565b90601f8019910116810190811067ffffffffffffffff82111761091a57604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b805115610b7c5760200190565b634e487b7160e01b5f52603260045260245ffd5b805160011015610b7c5760400190565b91908203918211610bad57565b634e487b7160e01b5f52601160045260245ffd5b91908201809211610bad57565b91908115610d0e576001600160a01b0316917f000000000000000000000000bfc426fcc11afae406080bb60788b97635020d1c91610c0d818486610d13565b15610cdc575b60405191630e351c6560e01b835260048301526001602483015283604483015260648201526040816084815f60018060a01b0387165af180156108de57610cb1575b50610c615f8284610d13565b15610c6a575050565b610c748183610d60565b15610c9e575f610c849183610dc4565b15610c8c5750565b635274afe760e01b5f5260045260245ffd5b50635274afe760e01b5f5260045260245ffd5b604090813d8311610cd5575b610cc78183610b29565b8101031261087f575f610c55565b503d610cbd565b610ce68385610d60565b15610cfb57610cf6818486610dc4565b610c13575b83635274afe760e01b5f5260045260245ffd5b505050565b92916040519163095ea7b360e01b5f5260018060a01b031660045260245260205f60448180875af19260015f5114841615610d4f575b50604052565b3d15903b151516909216915f610d49565b60405163095ea7b360e01b5f9081526001600160a01b03909316600452602483905290929160209060448180875af19260015f5114841615610da25750604052565b60018492941516610dbb573b15153d151616915f610d49565b833d5f823e3d90fd5b92916040519163095ea7b360e01b5f5260018060a01b031660045260245260205f60448180875af19260015f5114841615610da2575060405256fea2646970667358221220b962a0b046b79dedfb30429a1d46c5f86aa618ae86280dc40de3a688f0a6465364736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xc2b741…f124cf | 20 days agoTue, 28 Jul 2026 19:22:28 UTC | 0x626330…1014 | [0] 0x000000000000…49abcb95 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token 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) | ||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xc2b741…f124cf | setRegistrar | 21,839,730 | 20 days agoTue, 28 Jul 2026 19:22:28 UTC | 0x2758…ca85 | IN | FeeCollectorVault | $0.000 ETH | 0.00000127 |