// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
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 { FeeMath } from "./libraries/FeeMath.sol";
interface IFeeSettlementHook {
function settleFees(address asset, uint256 amount) external;
}
/// @notice Per-launch multi-asset fee ledger with immutable beneficiaries and beneficiary-controlled payouts.
contract FeeVault is ReentrancyGuard {
using SafeERC20 for IERC20;
address public immutable hook;
address public immutable creatorBeneficiary;
address public immutable platformBeneficiary;
address public creatorPayout;
address public platformPayout;
address[] private _assets;
mapping(address asset => bool) public isTrackedAsset;
mapping(address asset => uint256) public creatorClaimable;
mapping(address asset => uint256) public platformClaimable;
mapping(address asset => uint256) public lifetimeCreatorFees;
mapping(address asset => uint256) public lifetimePlatformFees;
mapping(address asset => uint256) public totalAccounted;
mapping(address asset => uint256) public settledBalance;
error OnlyHook();
error OnlyCreatorBeneficiary();
error OnlyPlatformBeneficiary();
error ZeroAddress();
error InvalidAccrual();
error NothingToClaim();
error NativeTransferFailed();
event Accrued(address indexed asset, uint256 creatorAmount, uint256 platformAmount);
event CreatorClaimed(address indexed asset, address indexed payout, uint256 amount);
event PlatformClaimed(address indexed asset, address indexed payout, uint256 amount);
event CreatorPayoutUpdated(address indexed previousPayout, address indexed newPayout);
event PlatformPayoutUpdated(address indexed previousPayout, address indexed newPayout);
modifier onlyHook() {
if (msg.sender != hook) revert OnlyHook();
_;
}
constructor(
address hook_,
address creatorBeneficiary_,
address platformBeneficiary_,
address creatorPayout_,
address platformPayout_
) {
if (
hook_ == address(0) || creatorBeneficiary_ == address(0) || platformBeneficiary_ == address(0)
|| creatorPayout_ == address(0) || platformPayout_ == address(0)
) revert ZeroAddress();
hook = hook_;
creatorBeneficiary = creatorBeneficiary_;
platformBeneficiary = platformBeneficiary_;
creatorPayout = creatorPayout_;
platformPayout = platformPayout_;
}
receive() external payable { }
function assetCount() external view returns (uint256) {
return _assets.length;
}
function assetAt(uint256 index) external view returns (address) {
return _assets[index];
}
/// @notice Credits a fee represented by an ERC-6909 PoolManager claim held by the Hook.
function accrue(address asset, uint256 amount) external payable onlyHook {
if (amount == 0) revert InvalidAccrual();
if (msg.value != 0) revert InvalidAccrual();
if (!isTrackedAsset[asset]) {
isTrackedAsset[asset] = true;
_assets.push(asset);
}
(uint256 creatorAmount, uint256 platformAmount) = FeeMath.split(amount);
creatorClaimable[asset] += creatorAmount;
platformClaimable[asset] += platformAmount;
lifetimeCreatorFees[asset] += creatorAmount;
lifetimePlatformFees[asset] += platformAmount;
totalAccounted[asset] += amount;
emit Accrued(asset, creatorAmount, platformAmount);
}
/// @notice Claims creator entitlement and automatically flushes all current platform entitlement too.
function claimCreator() external nonReentrant {
if (msg.sender != creatorBeneficiary) revert OnlyCreatorBeneficiary();
bool paid;
for (uint256 i; i < _assets.length; ++i) {
address asset = _assets[i];
_settleOutstanding(asset);
uint256 creatorAmount = creatorClaimable[asset];
uint256 platformAmount = platformClaimable[asset];
if (creatorAmount != 0) {
paid = true;
creatorClaimable[asset] = 0;
totalAccounted[asset] -= creatorAmount;
settledBalance[asset] -= creatorAmount;
_transfer(asset, creatorPayout, creatorAmount);
emit CreatorClaimed(asset, creatorPayout, creatorAmount);
}
if (platformAmount != 0) {
paid = true;
platformClaimable[asset] = 0;
totalAccounted[asset] -= platformAmount;
settledBalance[asset] -= platformAmount;
_transfer(asset, platformPayout, platformAmount);
emit PlatformClaimed(asset, platformPayout, platformAmount);
}
}
if (!paid) revert NothingToClaim();
}
function claimPlatform() external nonReentrant {
if (msg.sender != platformBeneficiary) revert OnlyPlatformBeneficiary();
bool paid;
for (uint256 i; i < _assets.length; ++i) {
address asset = _assets[i];
_settleOutstanding(asset);
uint256 amount = platformClaimable[asset];
if (amount == 0) continue;
paid = true;
platformClaimable[asset] = 0;
totalAccounted[asset] -= amount;
settledBalance[asset] -= amount;
_transfer(asset, platformPayout, amount);
emit PlatformClaimed(asset, platformPayout, amount);
}
if (!paid) revert NothingToClaim();
}
function setCreatorPayout(address newPayout) external {
if (msg.sender != creatorBeneficiary) revert OnlyCreatorBeneficiary();
if (newPayout == address(0)) revert ZeroAddress();
address previous = creatorPayout;
creatorPayout = newPayout;
emit CreatorPayoutUpdated(previous, newPayout);
}
function setPlatformPayout(address newPayout) external {
if (msg.sender != platformBeneficiary) revert OnlyPlatformBeneficiary();
if (newPayout == address(0)) revert ZeroAddress();
address previous = platformPayout;
platformPayout = newPayout;
emit PlatformPayoutUpdated(previous, newPayout);
}
function _transfer(address asset, address payout, uint256 amount) private {
if (asset == address(0)) {
(bool success,) = payout.call{ value: amount }("");
if (!success) revert NativeTransferFailed();
} else {
IERC20(asset).safeTransfer(payout, amount);
}
}
function _settleOutstanding(address asset) private {
uint256 outstanding = totalAccounted[asset] - settledBalance[asset];
if (outstanding == 0) return;
IFeeSettlementHook(hook).settleFees(asset, outstanding);
settledBalance[asset] += outstanding;
if (asset == address(0)) {
if (address(this).balance < settledBalance[asset]) revert InvalidAccrual();
} else if (IERC20(asset).balanceOf(address(this)) < settledBalance[asset]) {
revert InvalidAccrual();
}
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "hook_",
"type": "address",
"internalType": "address"
},
{
"name": "creatorBeneficiary_",
"type": "address",
"internalType": "address"
},
{
"name": "platformBeneficiary_",
"type": "address",
"internalType": "address"
},
{
"name": "creatorPayout_",
"type": "address",
"internalType": "address"
},
{
"name": "platformPayout_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "InvalidAccrual",
"type": "error",
"inputs": []
},
{
"name": "NativeTransferFailed",
"type": "error",
"inputs": []
},
{
"name": "NothingToClaim",
"type": "error",
"inputs": []
},
{
"name": "OnlyCreatorBeneficiary",
"type": "error",
"inputs": []
},
{
"name": "OnlyHook",
"type": "error",
"inputs": []
},
{
"name": "OnlyPlatformBeneficiary",
"type": "error",
"inputs": []
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "Accrued",
"type": "event",
"inputs": [
{
"name": "asset",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "creatorAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "platformAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "CreatorClaimed",
"type": "event",
"inputs": [
{
"name": "asset",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "payout",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "CreatorPayoutUpdated",
"type": "event",
"inputs": [
{
"name": "previousPayout",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newPayout",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "PlatformClaimed",
"type": "event",
"inputs": [
{
"name": "asset",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "payout",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "PlatformPayoutUpdated",
"type": "event",
"inputs": [
{
"name": "previousPayout",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newPayout",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "accrue",
"type": "function",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "assetAt",
"type": "function",
"inputs": [
{
"name": "index",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "assetCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "claimCreator",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "claimPlatform",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "creatorBeneficiary",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "creatorClaimable",
"type": "function",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "creatorPayout",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "hook",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "isTrackedAsset",
"type": "function",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "lifetimeCreatorFees",
"type": "function",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "lifetimePlatformFees",
"type": "function",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "platformBeneficiary",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "platformClaimable",
"type": "function",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "platformPayout",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "setCreatorPayout",
"type": "function",
"inputs": [
{
"name": "newPayout",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setPlatformPayout",
"type": "function",
"inputs": [
{
"name": "newPayout",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "settledBalance",
"type": "function",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalAccounted",
"type": "function",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x608060405260043610610140575f3560e01c806369d90b20116100bb578063937bba0c11610071578063c6e4416e11610057578063c6e4416e146103e8578063eafe7a7414610407578063f4d9196e1461041b575f80fd5b8063937bba0c146103b6578063aa9239f5146103c9575f80fd5b80637f5a7c7b116100a15780637f5a7c7b146103255780638265de431461035857806385fe18b014610383575f80fd5b806369d90b20146102c9578063797ed339146102e7575f80fd5b806324432007116101105780633f3dbe45116100f65780633f3dbe4514610254578063636c26561461027357806365373cdd1461029e575f80fd5b806324432007146101de5780632e16882314610209575f80fd5b806304a7dbd91461014b5780630595ad0e146101895780631150e874146101b4578063232adc65146101ca575f80fd5b3661014757005b5f80fd5b348015610156575f80fd5b50610176610165366004611328565b60056020525f908152604090205481565b6040519081526020015b60405180910390f35b348015610194575f80fd5b506101766101a3366004611328565b60086020525f908152604090205481565b3480156101bf575f80fd5b506101c861043a565b005b3480156101d5575f80fd5b506101c8610640565b3480156101e9575f80fd5b506101766101f8366004611328565b60066020525f908152604090205481565b348015610214575f80fd5b5061023c7f00000000000000000000000022485827465a8adee917e6fd612ec4e3e86dc64e81565b6040516001600160a01b039091168152602001610180565b34801561025f575f80fd5b506101c861026e366004611328565b6108b4565b34801561027e575f80fd5b5061017661028d366004611328565b60046020525f908152604090205481565b3480156102a9575f80fd5b506101766102b8366004611328565b60076020525f908152604090205481565b3480156102d4575f80fd5b505f5461023c906001600160a01b031681565b3480156102f2575f80fd5b50610315610301366004611328565b60036020525f908152604090205460ff1681565b6040519015158152602001610180565b348015610330575f80fd5b5061023c7f00000000000000000000000092dd9bf91d6ff1de817782270f25ee2179d2204481565b348015610363575f80fd5b50610176610372366004611328565b60096020525f908152604090205481565b34801561038e575f80fd5b5061023c7f000000000000000000000000b87a09ecd7f8b3d67356a77c864a7b3c30c4337581565b6101c86103c4366004611341565b6109bd565b3480156103d4575f80fd5b5061023c6103e3366004611369565b610c80565b3480156103f3575f80fd5b5060015461023c906001600160a01b031681565b348015610412575f80fd5b50600254610176565b348015610426575f80fd5b506101c8610435366004611328565b610cae565b610442610db9565b336001600160a01b037f00000000000000000000000022485827465a8adee917e6fd612ec4e3e86dc64e16146104a4576040517f5a6045c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805b6002548110156105dc575f600282815481106104c5576104c5611380565b5f918252602090912001546001600160a01b031690506104e481610de7565b6001600160a01b0381165f908152600560205260408120549081900361050b5750506105d4565b6001600160a01b0382165f908152600560209081526040808320839055600890915281208054600196508392906105439084906113da565b90915550506001600160a01b0382165f908152600960205260408120805483929061056f9084906113da565b909155505060015461058c9083906001600160a01b03168361100e565b6001546040518281526001600160a01b03918216918416907f2a2e8d584499d8a967e0781fe7159f316c0f9d2dcc66e6935fc3a152b6ed757c9060200160405180910390a350505b6001016104a7565b5080610614576040517f969bf72800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5061063e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b610648610db9565b336001600160a01b037f000000000000000000000000b87a09ecd7f8b3d67356a77c864a7b3c30c4337516146106aa576040517f5c0adde800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805b6002548110156105dc575f600282815481106106cb576106cb611380565b5f918252602090912001546001600160a01b031690506106ea81610de7565b6001600160a01b0381165f9081526004602090815260408083205460059092529091205481156107d9576001600160a01b0383165f9081526004602090815260408083208390556008909152812080546001975084929061074c9084906113da565b90915550506001600160a01b0383165f90815260096020526040812080548492906107789084906113da565b90915550505f546107949084906001600160a01b03168461100e565b5f546040518381526001600160a01b03918216918516907f616fabaea8d0ae75f05cb4b3ef0b33a2a9899c9799693afa42f95307f75c0b139060200160405180910390a35b80156108a6576001600160a01b0383165f908152600560209081526040808320839055600890915281208054600197508392906108179084906113da565b90915550506001600160a01b0383165f90815260096020526040812080548392906108439084906113da565b90915550506001546108609084906001600160a01b03168361100e565b6001546040518281526001600160a01b03918216918516907f2a2e8d584499d8a967e0781fe7159f316c0f9d2dcc66e6935fc3a152b6ed757c9060200160405180910390a35b5050508060010190506106ad565b336001600160a01b037f000000000000000000000000b87a09ecd7f8b3d67356a77c864a7b3c30c433751614610916576040517f5c0adde800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116610956576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f59a55d47f0bd672a0234737cf98dfb0d6e478cddbdd39d00c298d766897f5a7b9190a35050565b336001600160a01b037f00000000000000000000000092dd9bf91d6ff1de817782270f25ee2179d220441614610a1f576040517f5a91834f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03610a58576040517f05d1dfbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415610a90576040517f05d1dfbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526003602052604090205460ff16610b4a576001600160a01b0382165f81815260036020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b5f80610b55836110c4565b6001600160a01b0386165f90815260046020526040812080549395509193508492610b819084906113f3565b90915550506001600160a01b0384165f9081526005602052604081208054839290610bad9084906113f3565b90915550506001600160a01b0384165f9081526006602052604081208054849290610bd99084906113f3565b90915550506001600160a01b0384165f9081526007602052604081208054839290610c059084906113f3565b90915550506001600160a01b0384165f9081526008602052604081208054859290610c319084906113f3565b909155505060408051838152602081018390526001600160a01b038616917f8246f57fda08afecb1703ff01d9ce830d13a25d5797240a47622494fa483c087910160405180910390a250505050565b5f60028281548110610c9457610c94611380565b5f918252602090912001546001600160a01b031692915050565b336001600160a01b037f00000000000000000000000022485827465a8adee917e6fd612ec4e3e86dc64e1614610d10576040517f5a6045c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116610d50576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f53c87414bb2629afcbf92bc74d932cbdbed7db5e015ed3a3be79d8039ddd99cb905f90a35050565b610dc16110e8565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381165f908152600960209081526040808320546008909252822054610e1491906113da565b9050805f03610e21575050565b6040517f01b063b40000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f00000000000000000000000092dd9bf91d6ff1de817782270f25ee2179d2204416906301b063b4906044015f604051808303815f87803b158015610ea1575f80fd5b505af1158015610eb3573d5f803e3d5ffd5b505050506001600160a01b0382165f9081526009602052604081208054839290610ede9084906113f3565b90915550506001600160a01b038216610f46576001600160a01b0382165f90815260096020526040902054471015610f42576040517f05d1dfbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b6001600160a01b0382165f81815260096020526040908190205490517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091906370a0823190602401602060405180830381865afa158015610fb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd69190611406565b1015610f42576040517f05d1dfbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383166110ab575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611065576040519150601f19603f3d011682016040523d82523d5f602084013e61106a565b606091505b50509050806110a5576040517ff4b3b1bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6110bf6001600160a01b0384168383611143565b505050565b5f806110d5836103e8612710611195565b90506110e181846113da565b9150915091565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005460020361063e576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111508383836001611246565b6110bf576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240160405180910390fd5b5f805f6111a286866112c1565b91509150815f036111c6578381816111bc576111bc61141d565b049250505061123f565b8184116111dd576111dd60038515026011186112fc565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f511483166112b55783831516156112a9573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b80356001600160a01b0381168114611323575f80fd5b919050565b5f60208284031215611338575f80fd5b61123f8261130d565b5f8060408385031215611352575f80fd5b61135b8361130d565b946020939093013593505050565b5f60208284031215611379575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156113ed576113ed6113ad565b92915050565b808201808211156113ed576113ed6113ad565b5f60208284031215611416575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x8caea7…ec3414 | 6 days agoTue, 11 Aug 2026 15:25:02 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…684ff00f |
| 0x7c63ec…e93678 | 6 days agoTue, 11 Aug 2026 06:13:42 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…f66917ce |
| 0xe707e8…c5366f | 7 days agoMon, 10 Aug 2026 17:01:38 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…aec04b9f |
| 0x635c3d…875862 | 7 days agoMon, 10 Aug 2026 15:56:06 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…e0dc9f33 |
| 0x2f7e32…daa244 | 7 days agoMon, 10 Aug 2026 15:53:37 UTC | 0x2a2e8d…757c | [0] 0x000000000000…00000000 [1] 0x000000000000…e86dc64e data: 0x000000000000000000…a01ebb05 |
| 0x2f7e32…daa244 | 7 days agoMon, 10 Aug 2026 15:53:37 UTC | 0x616fab…0b13 | [0] 0x000000000000…00000000 [1] 0x000000000000…30c43375 data: 0x000000000000000000…a1149335 |
| 0x2a1947…f8b9a6 | 7 days agoMon, 10 Aug 2026 15:43:30 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…69ca6a5e |
| 0x74b4d9…02740a | 7 days agoMon, 10 Aug 2026 15:34:35 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…365450a7 |
| 0x601b83…3a788f | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0x2a2e8d…757c | [0] 0x000000000000…a3248e85 [1] 0x000000000000…e86dc64e data: 0x000000000000000000…cdece82e |
| 0x601b83…3a788f | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0x616fab…0b13 | [0] 0x000000000000…a3248e85 [1] 0x000000000000…30c43375 data: 0x000000000000000000…3d542b7c |
| 0x601b83…3a788f | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0x2a2e8d…757c | [0] 0x000000000000…00000000 [1] 0x000000000000…e86dc64e data: 0x000000000000000000…0c348044 |
| 0x601b83…3a788f | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0x616fab…0b13 | [0] 0x000000000000…00000000 [1] 0x000000000000…30c43375 data: 0x000000000000000000…6dd88434 |
| 0x63f56c…584f0b | 7 days agoMon, 10 Aug 2026 15:29:25 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…ffd33ead |
| 0x9f059a…4e0d7a | 7 days agoMon, 10 Aug 2026 15:22:45 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…2f45222a |
| 0x04d249…f15dc5 | 7 days agoMon, 10 Aug 2026 15:22:45 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…aca91130 |
| 0x1d89d2…eae1a0 | 7 days agoMon, 10 Aug 2026 15:22:45 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…dfd1fa34 |
| 0xad0ec9…74f727 | 7 days agoMon, 10 Aug 2026 15:19:44 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…8c7de572 |
| 0x914d77…3d84da | 7 days agoMon, 10 Aug 2026 15:19:23 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…da6c9cdb |
| 0x94752f…cb30b0 | 7 days agoMon, 10 Aug 2026 15:18:23 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…caead2e8 |
| 0x39d944…ccd658 | 7 days agoMon, 10 Aug 2026 15:18:21 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…5c37cdc3 |
| 0x5bb562…1d0f09 | 7 days agoMon, 10 Aug 2026 15:18:20 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…b831258c |
| 0x92d5b9…9a5ad5 | 7 days agoMon, 10 Aug 2026 15:18:03 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…bf741694 |
| 0xdaf064…7f3f87 | 7 days agoMon, 10 Aug 2026 15:17:38 UTC | 0x8246f5…c087 | [0] 0x000000000000…a3248e85 data: 0x000000000000000000…82511db7 |
| 0x9673e3…fdff2d | 7 days agoMon, 10 Aug 2026 15:17:35 UTC | 0x8246f5…c087 | [0] 0x000000000000…00000000 data: 0x000000000000000000…8ebc67d9 |
| 0x0d4973…f69af3 | 7 days agoMon, 10 Aug 2026 15:17:34 UTC | 0x8246f5…c087 | [0] 0x000000000000…a3248e85 data: 0x000000000000000000…86ef5b23 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x2f7e32…daa244 | claimCreator | 32,921,381 | 7 days agoMon, 10 Aug 2026 15:53:37 UTC | 0xb87a…3375 | IN | FeeVault | $0.000 ETH | 0.00000333 | |
| 0x601b83…3a788f | claimCreator | 32,909,785 | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0xb87a…3375 | IN | FeeVault | $0.000 ETH | 0.00000625 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x601b83da…3a788f | Transfer | 32,909,785 | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0x29c9…3b42 | OUT | 0x2248…c64e | 1,505,084.481293 RBNY | Robinity (RBNY) | |
| 0x601b83da…3a788f | Transfer | 32,909,785 | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0x29c9…3b42 | OUT | 0xb87a…3375 | 13,545,760.331639 RBNY | Robinity (RBNY) | |
| 0x601b83da…3a788f | Transfer | 32,909,785 | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0x8366…0951 | IN | 0x29c9…3b42 | 15,050,844.812932 RBNY | Robinity (RBNY) |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 32,921,381 | 7 days agoMon, 10 Aug 2026 15:53:37 UTC | 0x2f7e32…daa244 | CALL | claimCreator | 0x29c9…3b42 | OUT | 0x2248…c64e | 0.00014 ETH |
| 32,921,381 | 7 days agoMon, 10 Aug 2026 15:53:37 UTC | 0x2f7e32…daa244 | CALL | claimCreator | 0x29c9…3b42 | OUT | 0xb87a…3375 | 0.00128 ETH |
| 32,921,381 | 7 days agoMon, 10 Aug 2026 15:53:37 UTC | 0x2f7e32…daa244 | CALL | claimCreator | 0x8366…0951 | IN | 0x29c9…3b42 | 0.00143 ETH |
| 32,909,785 | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0x601b83…3a788f | CALL | claimCreator | 0x29c9…3b42 | OUT | 0x2248…c64e | 0.00426 ETH |
| 32,909,785 | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0x601b83…3a788f | CALL | claimCreator | 0x29c9…3b42 | OUT | 0xb87a…3375 | 0.03842 ETH |
| 32,909,785 | 7 days agoMon, 10 Aug 2026 15:34:15 UTC | 0x601b83…3a788f | CALL | claimCreator | 0x8366…0951 | IN | 0x29c9…3b42 | 0.04269 ETH |
| 32,896,911 | 7 days agoMon, 10 Aug 2026 15:12:45 UTC | 0x787c9c…41793a | CREATE2 | launch | 0x499a…d41c | IN | 0x29c9…3b42 | 0 ETH |