// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
/// @title RhmiDistributor
/// @notice Multi-asset magnified-dividend distributor, forked from the audited
/// single-asset PlebDistributor. One share registry (RHMI balances), N reward
/// assets, each with its own independent dividend accounting:
/// `magnifiedRewardPerShare`, corrections and claimed amounts are all per
/// asset, so adding an asset can never corrupt the accounting of another.
///
/// Security posture:
/// - Assets are APPEND-ONLY and hard-capped at MAX_ASSETS (8). Every share
/// change updates corrections for each asset that has ever distributed, so
/// an unbounded asset list would be a transfer-gas DoS; the cap keeps the
/// worst-case loop small and predictable forever. Deactivation happens at
/// the treasury (no new buys); already-distributed rewards remain claimable
/// here FOREVER — removing a rugged memecoin never confiscates holders'
/// earned balances.
/// - Only the treasury (set once via the token, owner-gated pre-renounce) can
/// register assets and credit distributions. Only the token drives shares
/// and claims. No other account can execute anything state-changing.
/// - Carried over from the audited base: pull/batch accounting, gas-limited
/// round-robin, strict manual claims, fault-isolated automatic claims (a
/// freezing reward token skips that holder+asset, never bricks the batch),
/// effects-before-interaction on every payout.
///
/// Site/indexer surface: every aggregate a leaderboard needs is a view —
/// per-asset totals, per-account withdrawable/claimed arrays, paginated
/// holder+share slices — plus granular events for history.
contract RhmiDistributor is ReentrancyGuard {
using SafeERC20 for IERC20;
uint256 private constant MAGNITUDE = 2 ** 128;
uint256 public constant MAX_ASSETS = 8;
uint256 public constant MAX_CLAIM_WAIT = 7 days;
address public immutable token;
address public treasury;
struct Asset {
IERC20 rewardToken;
uint256 magnifiedRewardPerShare;
uint256 totalDistributed;
uint256 totalClaimed;
}
Asset[] private _assets;
mapping(address => uint256) private _assetIdPlusOne; // rewardToken -> id+1
// Per asset (outer key: asset id), per account.
mapping(uint256 => mapping(address => int256)) private _corrections;
mapping(uint256 => mapping(address => uint256)) public claimedRewards;
uint256 public minimumTokenBalanceForRewards;
uint256 public claimWait;
uint256 public totalShares;
uint256 public lastProcessedIndex;
mapping(address => uint256) public shares;
mapping(address => uint256) public lastClaimTimes;
mapping(address => bool) public excludedFromRewards;
address[] private holders;
mapping(address => uint256) private holderIndexPlusOne;
event TreasurySet(address indexed treasury);
event AssetRegistered(uint256 indexed assetId, address indexed rewardToken);
event RewardDistributed(uint256 indexed assetId, uint256 amount);
event Claim(address indexed account, uint256 indexed assetId, uint256 amount, bool automatic);
event ClaimFailed(address indexed account, uint256 indexed assetId, uint256 amount);
event ShareUpdated(address indexed account, uint256 previousShare, uint256 newShare);
event ExcludedFromRewards(address indexed account, bool excluded);
event CriteriaUpdated(uint256 minimumTokenBalanceForRewards, uint256 claimWait);
event Processed(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, uint256 gas, address indexed processor);
error OnlyToken();
error OnlyTreasury();
error OnlySelf();
error ZeroAddress();
error TreasuryAlreadySet();
error TooManyAssets();
error UnknownAsset();
error ZeroAmount();
error NoShares();
error ClaimWaitTooHigh();
modifier onlyToken() {
if (msg.sender != token) revert OnlyToken();
_;
}
modifier onlyTreasury() {
if (msg.sender != treasury) revert OnlyTreasury();
_;
}
constructor(uint256 minimumTokenBalanceForRewards_, uint256 claimWait_) {
if (claimWait_ > MAX_CLAIM_WAIT) revert ClaimWaitTooHigh();
token = msg.sender;
minimumTokenBalanceForRewards = minimumTokenBalanceForRewards_;
claimWait = claimWait_;
}
// ---- one-time wiring ----
/// @notice Set the treasury exactly once. Called by the token, which gates
/// it behind its owner pre-renounce; once set it can never change.
function setTreasury(address treasury_) external onlyToken {
if (treasury_ == address(0)) revert ZeroAddress();
if (treasury != address(0)) revert TreasuryAlreadySet();
treasury = treasury_;
emit TreasurySet(treasury_);
}
/// @notice Register a reward asset (idempotent: returns the existing id if
/// the token was registered before — re-adding after a deactivation reuses
/// the same accounting slot, never a new one).
function registerAsset(address rewardToken_) external onlyTreasury returns (uint256 assetId) {
if (rewardToken_ == address(0)) revert ZeroAddress();
uint256 idPlusOne = _assetIdPlusOne[rewardToken_];
if (idPlusOne != 0) return idPlusOne - 1;
if (_assets.length >= MAX_ASSETS) revert TooManyAssets();
_assets.push(Asset({rewardToken: IERC20(rewardToken_), magnifiedRewardPerShare: 0, totalDistributed: 0, totalClaimed: 0}));
assetId = _assets.length - 1;
_assetIdPlusOne[rewardToken_] = assetId + 1;
emit AssetRegistered(assetId, rewardToken_);
}
// ---- views (contract-native site/indexer surface) ----
function assetCount() external view returns (uint256) {
return _assets.length;
}
function assetAt(uint256 assetId)
external
view
returns (address rewardToken, uint256 totalDistributed, uint256 totalClaimed)
{
Asset storage a = _assets[assetId];
return (address(a.rewardToken), a.totalDistributed, a.totalClaimed);
}
/// @notice All per-asset aggregates in one call (site "protocol stats").
function totalsAll()
external
view
returns (address[] memory tokens, uint256[] memory distributed, uint256[] memory claimed)
{
uint256 n = _assets.length;
tokens = new address[](n);
distributed = new uint256[](n);
claimed = new uint256[](n);
for (uint256 i = 0; i < n; i++) {
tokens[i] = address(_assets[i].rewardToken);
distributed[i] = _assets[i].totalDistributed;
claimed[i] = _assets[i].totalClaimed;
}
}
/// @notice Per-account snapshot across all assets (site "my rewards").
function accountInfo(address account)
external
view
returns (uint256 share, uint256[] memory withdrawable, uint256[] memory claimed)
{
uint256 n = _assets.length;
share = shares[account];
withdrawable = new uint256[](n);
claimed = new uint256[](n);
for (uint256 i = 0; i < n; i++) {
withdrawable[i] = withdrawableRewardOf(i, account);
claimed[i] = claimedRewards[i][account];
}
}
function holderCount() external view returns (uint256) {
return holders.length;
}
function holderAt(uint256 index) external view returns (address) {
return holders[index];
}
/// @notice Paginated holder registry with shares — one eth_call per page
/// builds the whole leaderboard JSON without event scans.
function holdersSlice(uint256 start, uint256 count)
external
view
returns (address[] memory accounts, uint256[] memory shareAmounts)
{
uint256 n = holders.length;
if (start >= n) return (new address[](0), new uint256[](0));
uint256 end = start + count;
if (end > n) end = n;
accounts = new address[](end - start);
shareAmounts = new uint256[](end - start);
for (uint256 i = start; i < end; i++) {
accounts[i - start] = holders[i];
shareAmounts[i - start] = shares[holders[i]];
}
}
function withdrawableRewardOf(uint256 assetId, address account) public view returns (uint256) {
uint256 accumulative = accumulativeRewardOf(assetId, account);
uint256 claimed = claimedRewards[assetId][account];
if (accumulative <= claimed) return 0;
return accumulative - claimed;
}
function accumulativeRewardOf(uint256 assetId, address account) public view returns (uint256) {
int256 corrected =
int256(_assets[assetId].magnifiedRewardPerShare * shares[account]) + _corrections[assetId][account];
if (corrected <= 0) return 0;
return uint256(corrected) / MAGNITUDE;
}
// ---- token-driven configuration and share sync ----
function setCriteria(uint256 minimumTokenBalanceForRewards_, uint256 claimWait_) external onlyToken {
if (claimWait_ > MAX_CLAIM_WAIT) revert ClaimWaitTooHigh();
minimumTokenBalanceForRewards = minimumTokenBalanceForRewards_;
claimWait = claimWait_;
emit CriteriaUpdated(minimumTokenBalanceForRewards_, claimWait_);
}
function setExcludedFromRewards(address account, bool excluded) external onlyToken {
excludedFromRewards[account] = excluded;
if (excluded) {
_setShare(account, 0);
}
emit ExcludedFromRewards(account, excluded);
}
function setShare(address account, uint256 newShare) external onlyToken {
if (excludedFromRewards[account] || newShare < minimumTokenBalanceForRewards) {
newShare = 0;
}
_setShare(account, newShare);
}
// ---- treasury-driven distribution ----
/// @notice Credit `amount` of asset `assetId`. The treasury has already
/// delivered the tokens (v4 `take` to this address) and measured the
/// received delta, so `amount` reflects real balance.
function distribute(uint256 assetId, uint256 amount) external onlyTreasury {
if (assetId >= _assets.length) revert UnknownAsset();
if (amount == 0) revert ZeroAmount();
if (totalShares == 0) revert NoShares();
Asset storage a = _assets[assetId];
a.magnifiedRewardPerShare += (amount * MAGNITUDE) / totalShares;
a.totalDistributed += amount;
emit RewardDistributed(assetId, amount);
}
// ---- claims ----
function claim(address account) external onlyToken nonReentrant returns (uint256 paidAssets) {
return _processAccount(account, false);
}
function process(uint256 gasLimit)
external
onlyToken
nonReentrant
returns (uint256 iterations, uint256 claims, uint256 newLastProcessedIndex)
{
uint256 numberOfHolders = holders.length;
if (numberOfHolders == 0) {
return (0, 0, lastProcessedIndex);
}
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 localIndex = lastProcessedIndex;
while (gasUsed < gasLimit && iterations < numberOfHolders) {
localIndex++;
if (localIndex >= numberOfHolders) {
localIndex = 0;
}
address account = holders[localIndex];
if (_canAutoClaim(account)) {
if (_processAccount(account, true) > 0) {
claims++;
}
}
iterations++;
uint256 newGasLeft = gasleft();
if (gasLeft > newGasLeft) {
gasUsed += gasLeft - newGasLeft;
}
gasLeft = newGasLeft;
}
lastProcessedIndex = localIndex;
emit Processed(iterations, claims, lastProcessedIndex, gasLimit, tx.origin);
return (iterations, claims, lastProcessedIndex);
}
/// @notice External self-call target so the automatic batch can wrap a
/// single (holder, asset) transfer in try/catch. Restricted to self.
function transferReward(uint256 assetId, address account, uint256 amount) external {
if (msg.sender != address(this)) revert OnlySelf();
_assets[assetId].rewardToken.safeTransfer(account, amount);
}
// ---- internals ----
/// @dev Pays every asset with a positive withdrawable for `account`.
/// Returns how many assets were actually paid.
function _processAccount(address account, bool automatic) internal returns (uint256 paidAssets) {
uint256 n = _assets.length;
bool paidAny = false;
for (uint256 assetId = 0; assetId < n; assetId++) {
uint256 amount = withdrawableRewardOf(assetId, account);
if (amount == 0) continue;
Asset storage a = _assets[assetId];
// Effects before interaction, per asset: any reward-token
// reentrancy sees zero withdrawable for this (account, asset).
claimedRewards[assetId][account] += amount;
a.totalClaimed += amount;
if (automatic) {
// Fault isolation per (holder, asset): a freezing memecoin
// skips only this leg; other assets and holders still pay.
try this.transferReward(assetId, account, amount) {
emit Claim(account, assetId, amount, true);
paidAssets++;
paidAny = true;
} catch {
claimedRewards[assetId][account] -= amount;
a.totalClaimed -= amount;
emit ClaimFailed(account, assetId, amount);
}
} else {
// Manual claim path stays strict: a failing transfer reverts
// the whole claim so the caller gets a clear error.
a.rewardToken.safeTransfer(account, amount);
emit Claim(account, assetId, amount, false);
paidAssets++;
paidAny = true;
}
}
if (paidAny) {
lastClaimTimes[account] = block.timestamp;
}
}
function _canAutoClaim(address account) internal view returns (bool) {
if (claimWait == 0) return true;
uint256 lastClaimTime = lastClaimTimes[account];
if (lastClaimTime == 0) return true;
return block.timestamp >= lastClaimTime + claimWait;
}
function _setShare(address account, uint256 newShare) internal {
uint256 currentShare = shares[account];
if (currentShare == newShare) return;
uint256 n = _assets.length;
if (newShare > currentShare) {
uint256 mintAmount = newShare - currentShare;
totalShares += mintAmount;
for (uint256 i = 0; i < n; i++) {
uint256 mps = _assets[i].magnifiedRewardPerShare;
if (mps != 0) _corrections[i][account] -= int256(mps * mintAmount);
}
} else {
uint256 burnAmount = currentShare - newShare;
totalShares -= burnAmount;
for (uint256 i = 0; i < n; i++) {
uint256 mps = _assets[i].magnifiedRewardPerShare;
if (mps != 0) _corrections[i][account] += int256(mps * burnAmount);
}
}
shares[account] = newShare;
if (newShare == 0) {
_removeHolder(account);
} else {
_addHolder(account);
}
emit ShareUpdated(account, currentShare, newShare);
}
function _addHolder(address account) internal {
if (holderIndexPlusOne[account] != 0) return;
holders.push(account);
holderIndexPlusOne[account] = holders.length;
}
function _removeHolder(address account) internal {
uint256 indexPlusOne = holderIndexPlusOne[account];
if (indexPlusOne == 0) return;
uint256 index = indexPlusOne - 1;
uint256 lastIndex = holders.length - 1;
if (index != lastIndex) {
address lastHolder = holders[lastIndex];
holders[index] = lastHolder;
holderIndexPlusOne[lastHolder] = index + 1;
}
holders.pop();
delete holderIndexPlusOne[account];
if (holders.length == 0) {
lastProcessedIndex = 0;
} else if (lastProcessedIndex >= holders.length) {
lastProcessedIndex = holders.length - 1;
}
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "minimumTokenBalanceForRewards_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "claimWait_",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "ClaimWaitTooHigh",
"type": "error",
"inputs": []
},
{
"name": "NoShares",
"type": "error",
"inputs": []
},
{
"name": "OnlySelf",
"type": "error",
"inputs": []
},
{
"name": "OnlyToken",
"type": "error",
"inputs": []
},
{
"name": "OnlyTreasury",
"type": "error",
"inputs": []
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "TooManyAssets",
"type": "error",
"inputs": []
},
{
"name": "TreasuryAlreadySet",
"type": "error",
"inputs": []
},
{
"name": "UnknownAsset",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "ZeroAmount",
"type": "error",
"inputs": []
},
{
"name": "AssetRegistered",
"type": "event",
"inputs": [
{
"name": "assetId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "rewardToken",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Claim",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "assetId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "automatic",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "ClaimFailed",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "assetId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "CriteriaUpdated",
"type": "event",
"inputs": [
{
"name": "minimumTokenBalanceForRewards",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "claimWait",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ExcludedFromRewards",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "excluded",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "Processed",
"type": "event",
"inputs": [
{
"name": "iterations",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "claims",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "lastProcessedIndex",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "gas",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "processor",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RewardDistributed",
"type": "event",
"inputs": [
{
"name": "assetId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ShareUpdated",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "previousShare",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "newShare",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "TreasurySet",
"type": "event",
"inputs": [
{
"name": "treasury",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "MAX_ASSETS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_CLAIM_WAIT",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "accountInfo",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "share",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "withdrawable",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "claimed",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"name": "accumulativeRewardOf",
"type": "function",
"inputs": [
{
"name": "assetId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "assetAt",
"type": "function",
"inputs": [
{
"name": "assetId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "rewardToken",
"type": "address",
"internalType": "address"
},
{
"name": "totalDistributed",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalClaimed",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "assetCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "claim",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "paidAssets",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "claimWait",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "claimedRewards",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "distribute",
"type": "function",
"inputs": [
{
"name": "assetId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "excludedFromRewards",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "holderAt",
"type": "function",
"inputs": [
{
"name": "index",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "holderCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "holdersSlice",
"type": "function",
"inputs": [
{
"name": "start",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "count",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "accounts",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "shareAmounts",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"name": "lastClaimTimes",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "lastProcessedIndex",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "minimumTokenBalanceForRewards",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "process",
"type": "function",
"inputs": [
{
"name": "gasLimit",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "iterations",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "claims",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "newLastProcessedIndex",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "registerAsset",
"type": "function",
"inputs": [
{
"name": "rewardToken_",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "assetId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "setCriteria",
"type": "function",
"inputs": [
{
"name": "minimumTokenBalanceForRewards_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "claimWait_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setExcludedFromRewards",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "excluded",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setShare",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "newShare",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setTreasury",
"type": "function",
"inputs": [
{
"name": "treasury_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "shares",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "token",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "totalShares",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalsAll",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "tokens",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "distributed",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "claimed",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"name": "transferReward",
"type": "function",
"inputs": [
{
"name": "assetId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "treasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "withdrawableRewardOf",
"type": "function",
"inputs": [
{
"name": "assetId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
}
]0x60806040526004361015610011575f80fd5b5f3560e01c806314b6ca9614610bca57806315274d6014610b75578063197bc33614610b3e5780631aab9a9f14610b215780631e83409a146109b957806321a436e41461099c578063226cfa3d146109645780633009a609146109475780633a98ef391461092a57806361d027b3146109035780636f2789ec146108e65780637625391a146107ff57806376b1d08f146107e45780637b551f3d146107be578063995652a51461079857806399aab83a1461077b578063a7310b58146106bb578063aa9239f514610674578063b00dc77b146105a6578063b33068c414610562578063c6f5def7146104a5578063ce7c2ac21461046d578063d312998f14610421578063d78c629e146103db578063eafe7a74146103be578063f0f4426014610302578063f259f3df14610271578063f82f235f14610234578063fc0c546a146101f05763ffb2c47914610163575f80fd5b346101ec5760203660031901126101ec577f00000000000000000000000018b5c23cb9175727cfc5bdbaefb17953663ddca26001600160a01b031633036101dd576101ac6116e1565b60606101b9600435611116565b9060015f805160206118ce8339815191525560405192835260208301526040820152f35b633d0f0d9f60e21b5f5260045ffd5b5f80fd5b346101ec575f3660031901126101ec576040517f00000000000000000000000018b5c23cb9175727cfc5bdbaefb17953663ddca26001600160a01b03168152602090f35b346101ec5760203660031901126101ec576001600160a01b03610255610c58565b165f52600b602052602060ff60405f2054166040519015158152f35b346101ec5761027f36610c84565b7f00000000000000000000000018b5c23cb9175727cfc5bdbaefb17953663ddca26001600160a01b031633036101dd5762093a8081116102f357816040917f2f4d1814657d140c6d8df30ea0eb3e78cfc8a32ba4c202deb5920147d51be621936005558060065582519182526020820152a1005b63b2034bbb60e01b5f5260045ffd5b346101ec5760203660031901126101ec5761031b610c58565b7f00000000000000000000000018b5c23cb9175727cfc5bdbaefb17953663ddca26001600160a01b031633036101dd576001600160a01b031680156103af575f546001600160a01b0381166103a0576001600160a01b03191681175f9081557f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f9080a2005b636f98f01d60e11b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b346101ec575f3660031901126101ec576020600154604051908152f35b346101ec5761040f61041d6103f86103f236610c84565b9061100f565b604092919251938493604085526040850190610ccd565b908382036020850152610c9a565b0390f35b346101ec5760203660031901126101ec5761043a610c58565b5f546001600160a01b0316330361045e57610456602091610edc565b604051908152f35b632298d39d60e11b5f5260045ffd5b346101ec5760203660031901126101ec576001600160a01b0361048e610c58565b165f526009602052602060405f2054604051908152f35b346101ec5760403660031901126101ec576104be610c58565b60243590811515908183036101ec577f00000000000000000000000018b5c23cb9175727cfc5bdbaefb17953663ddca26001600160a01b031633036101dd577f6fb704e328736eb59ac6758cc1df5a98a609cfd47a1877201101c614dffc92e99160209160018060a01b03811694855f52600b845260405f2060ff1981541660ff8516179055610553575b50604051908152a2005b61055c906113c6565b84610549565b346101ec5760403660031901126101ec5761057b610c6e565b6004355f52600460205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b346101ec575f3660031901126101ec576001546105c281610e96565b6105cb82610e96565b916105d581610e96565b905f5b81811061061b576105ff8461041d8561060d89604051958695606087526060870190610ccd565b908582036020870152610c9a565b908382036040850152610c9a565b80610627600192610d09565b50828060a01b0390541661063b8287610ec8565b52600261064782610d09565b5001546106548288610ec8565b52600361066082610d09565b50015461066d8286610ec8565b52016105d8565b346101ec5760203660031901126101ec576060610692600435610d09565b5060018060a01b0381541690600360028201549101549060405192835260208301526040820152f35b346101ec5760203660031901126101ec576106d4610c58565b6001546001600160a01b0382165f9081526009602052604090205490916106fa83610e96565b9261070481610e96565b916001600160a01b038116905f5b83811061073b57868661041d8761060d6040519485948552606060208601526060850190610c9a565b8061074883600193610d7e565b610752828a610ec8565b52805f52600460205260405f20845f5260205260405f20546107748288610ec8565b5201610712565b346101ec575f3660031901126101ec57602060405162093a808152f35b346101ec5760403660031901126101ec5760206104566107b6610c6e565b600435610ddd565b346101ec5760403660031901126101ec5760206104566107dc610c6e565b600435610d7e565b346101ec575f3660031901126101ec57602060405160088152f35b346101ec5761080d36610c84565b5f546001600160a01b0316330361045e576001548210156108d75780156108c85760075480156108b95761084083610d09565b5091608081901b818104600160801b036108a5577feaf3d57629d9b1ce95715ccd98d6f5bf48023be1d5a06e09f64ab7f6d8be01d5936020936002920461088c60018301918254610d64565b90550161089a828254610d64565b9055604051908152a2005b634e487b7160e01b5f52601160045260245ffd5b63b317087b60e01b5f5260045ffd5b631f2a200560e01b5f5260045ffd5b63c97d95cf60e01b5f5260045ffd5b346101ec575f3660031901126101ec576020600654604051908152f35b346101ec575f3660031901126101ec575f546040516001600160a01b039091168152602090f35b346101ec575f3660031901126101ec576020600754604051908152f35b346101ec575f3660031901126101ec576020600854604051908152f35b346101ec5760203660031901126101ec576001600160a01b03610985610c58565b165f52600a602052602060405f2054604051908152f35b346101ec575f3660031901126101ec576020600554604051908152f35b346101ec5760203660031901126101ec576109d2610c58565b7f00000000000000000000000018b5c23cb9175727cfc5bdbaefb17953663ddca26001600160a01b031633036101dd57610a0a6116e1565b6001545f9182916001600160a01b038216919083905b808210610a5e57505050602092610a4c575b5060015f805160206118ce83398151915255604051908152f35b5f52600a82524260405f205582610a32565b919390928095610a6e8686610d7e565b908115610b125750610b0192917fad82e4ded87b4f1d117a62956445ec6ff411c4f2eb80134db1573f8cb74b86e7604083610af089958b610aae88610d09565b50885f526004602052855f20885f52602052855f20610ace848254610d64565b905560038101610adf848254610d64565b9055546001600160a01b0316611660565b81519081525f6020820152a3611108565b92600180935b019091949294610a20565b94905060019150949194610b07565b346101ec575f3660031901126101ec576020600c54604051908152f35b346101ec5760203660031901126101ec576020610b5c600435610d39565b905460405160039290921b1c6001600160a01b03168152f35b346101ec5760603660031901126101ec57610b8e610c6e565b303303610bbb57610bb990610ba4600435610d09565b505460443591906001600160a01b0316611660565b005b63029a949d60e31b5f5260045ffd5b346101ec5760403660031901126101ec57610be3610c58565b6024357f00000000000000000000000018b5c23cb9175727cfc5bdbaefb17953663ddca26001600160a01b031633036101dd576001600160a01b0382165f908152600b6020526040902054610bb9929060ff16828115610c4c575b50156114a2575f91506114a2565b90506005541184610c3e565b600435906001600160a01b03821682036101ec57565b602435906001600160a01b03821682036101ec57565b60409060031901126101ec576004359060243590565b90602080835192838152019201905f5b818110610cb75750505090565b8251845260209384019390920191600101610caa565b90602080835192838152019201905f5b818110610cea5750505090565b82516001600160a01b0316845260209384019390920191600101610cdd565b600154811015610d255760015f5260205f209060021b01905f90565b634e487b7160e01b5f52603260045260245ffd5b600c54811015610d2557600c5f5260205f2001905f90565b818102929181159184041417156108a557565b919082018092116108a557565b919082039182116108a557565b90610d898183610ddd565b915f52600460205260405f209060018060a01b03165f5260205260405f205480821115610dbc57610db991610d71565b90565b50505f90565b9190915f83820193841291129080158216911516176108a557565b610e3591610e106001610def84610d09565b5001546001600160a01b0383165f9081526009602052604090205490610d51565b915f52600360205260405f209060018060a01b03165f5260205260405f205490610dc2565b5f811315610e435760801c90565b505f90565b90601f8019910116810190811067ffffffffffffffff821117610e6a57604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff8111610e6a5760051b60200190565b90610ea082610e7e565b610ead6040519182610e48565b8281528092610ebe601f1991610e7e565b0190602036910137565b8051821015610d255760209160051b010190565b6001600160a01b03169081156103af57815f52600260205260405f205480610ffe57506001546008811015610fef576040516080810181811067ffffffffffffffff821117610e6a5760405283815260208101915f8352604082015f815260608301915f8352600160401b811015610e6a57806001610f5e9201600155610d09565b949094610fdc5760039360018060a01b039051166bffffffffffffffffffffffff60a01b86541617855551600185015551600284015551910155600154915f1983018381116108a5578093825f52600260205260405f20557f85819f62de3f36778ef25274607ec7071cf41151e6e04a29971d86f30e8bbf915f80a3565b634e487b7160e01b5f525f60045260245ffd5b63df8153c760e01b5f5260045ffd5b9091505f1981019081116108a55790565b9091600c5492838310156110d3576110279083610d64565b928084116110cb575b5061104361103e8385610d71565b610e96565b9261105161103e8483610d71565b92805b82811061106057505050565b8061106c600192610d39565b838060a01b0391549060031b1c1661108d6110878584610d71565b89610ec8565b5261109781610d39565b838060a01b0391549060031b1c165f52600960205260405f20546110c46110be8584610d71565b88610ec8565b5201611054565b92505f611030565b509150506020906040516110e78382610e48565b5f81525f368137604051926110fc8185610e48565b5f8452505f3681379190565b5f1981146108a55760010190565b5f915f92600c5480156113b8575f9392915a926008545b858710806113af575b156113615761114490611108565b9183831015611359575b61115783610d39565b905460039190911b1c6001600160a01b031661117281611719565b6111b0575b5061118190611108565b935a90818111611194575b50939161112d565b966111a3826111a99399610d71565b90610d64565b955f61118c565b6001545f919082906001600160a01b03831690825b818110611208575050506111f5575b506111e0575b5f611177565b966111ed61118191611108565b9790506111da565b5f52600a6020524260405f20555f6111d4565b6112128582610d7e565b801561135057600361122383610d09565b50835f52600460205260405f20865f5260205260405f20611245848254610d64565b905501611253828254610d64565b8155303b156101ec5760405162a93a6b60e51b81528360048201528760248201528260448201525f8160648183305af19081611340575b506112f55791867f9d9e98f5e08c69876edaf0f6cb5a710145dffdf28a008e0e756bee3319d6fb4e60208394600196855f526004835260405f208a5f52835260405f206112d8838254610d71565b90556112e5828254610d71565b9055604051908152a35b016111c5565b5081945090857fad82e4ded87b4f1d117a62956445ec6ff411c4f2eb80134db1573f8cb74b86e76040611336959994815190815260016020820152a3611108565b93600180936112ef565b5f61134a91610e48565b5f61128a565b506001906112ef565b5f925061114e565b95509391509150836008556040519082825285602083015284604083015260608201527f30a24227f922fbe8461722b748679f146da10df67921abe743ce85386ca32bf860803292a2929190565b50838310611136565b50506008545f935083925090565b6001600160a01b0381165f818152600960205260409020549091811561149d576001546113f583600754610d71565b6007555f5b81811061144b5750507fd8a33efa58f607a36c49d8a8c5477fce4b2c71986998476cbe3494fb8f5fb7589161143d604092855f5260096020525f848120556117d3565b81519081525f6020820152a2565b8060016114588193610d09565b500154858161146a575b5050016113fa565b61147391610d51565b815f52600360205260405f20875f5260205261149460405f20918254610dc2565b90555f85611462565b505050565b6001600160a01b0381165f818152600960205260409020549092909182821461165a57600154838311156115b8576114da8484610d71565b6114e681600754610d64565b6007555f5b82811061155557505050916040917fd8a33efa58f607a36c49d8a8c5477fce4b2c71986998476cbe3494fb8f5fb758935b855f52600960205281845f205581155f146115475761153a906117d3565b82519182526020820152a2565b61155090611757565b61153a565b81600161156183610d09565b50015480611574575b50506001016114eb565b9061157e91610d51565b90805f52600360205260405f20885f5260205260405f209182545f82820392128183128116918313901516176108a557909155815f61156a565b6115c28385610d71565b6115ce81600754610d71565b6007555f5b82811061160857505050916040917fd8a33efa58f607a36c49d8a8c5477fce4b2c71986998476cbe3494fb8f5fb7589361151c565b8060016116158193610d09565b5001548381611627575b5050016115d3565b61163091610d51565b815f52600360205260405f20895f5260205261165160405f20918254610dc2565b90555f8361161f565b50505050565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f51148216156116c0575b604052156116a05750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b9060018115166116d857823b15153d15161690611695565b503d5f823e3d90fd5b60025f805160206118ce833981519152541461170a5760025f805160206118ce83398151915255565b633ee5aeb560e01b5f5260045ffd5b600654908115611750576001600160a01b03165f908152600a60205260409020549081156117505761174a91610d64565b42101590565b5050600190565b6001600160a01b0381165f818152600d60205260409020549091906117cf57600c5490600160401b821015610e6a576117998260016117bd9401600c55610d39565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b600c54905f52600d60205260405f2055565b5050565b6001600160a01b03165f818152600d602052604090205480156117cf575f1981018181116108a557600c545f1981019081116108a55780820361188f575b505050600c54801561187b575f190161182981610d39565b81549060018060a01b039060031b1b19169055600c555f52600d6020525f6040812055600c5480155f1461185e57505f600855565b80600854101561186b5750565b5f1981019081116108a557600855565b634e487b7160e01b5f52603160045260245ffd5b6117999161189f6118b992610d39565b905460039190911b1c6001600160a01b0316928391610d39565b5f52600d60205260405f20555f808061181156fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220855e560a41282b4fb7b68911656fe8b39a967010a6091a4fba41c5170578bca264736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| CASHCAT | 0.000000 | $0.129 | $0 | |
| JUGGERNAUT | 0.000000 | $0.00242 | $0 | |
| MARIAN | 0.000000 | $0.000864 | $0 | |
| 401k | 0.000000 | $0.0000466 | $0 | |
| PrizeFight by Virtuals (PRIZE) | PRIZE | 450 | — | — |
| Lady Marian (MARIAN) | MARIAN | 25 | — | — |
| Lady Marian (MARIAN) | MARIAN | 5 | — | — |
| The Juggernauts (JUGGERNAUT) | JUGGERNAUT | 5 | — | — |
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x1e7b74…a585e4 | 38 days agoFri, 10 Jul 2026 14:09:03 UTC | 0xd8a33e…b758 | [0] 0x000000000000…f5de0834 data: 0x000000000000000000…e7fffff5 |
| 0x1e7b74…a585e4 | 38 days agoFri, 10 Jul 2026 14:09:03 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…00000000 |
| 0xf8fca2…16d7f6 | 38 days agoFri, 10 Jul 2026 14:08:57 UTC | 0xd8a33e…b758 | [0] 0x000000000000…f5de0834 data: 0x000000000000000000…0557e728 |
| 0x43679f…3d7f43 | 38 days agoFri, 10 Jul 2026 13:42:50 UTC | 0x30a242…2bf8 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…0007a120 |
| 0x3d74cf…32cf79 | 38 days agoFri, 10 Jul 2026 13:41:49 UTC | 0x30a242…2bf8 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…0007a120 |
| 0x3d74cf…32cf79 | 38 days agoFri, 10 Jul 2026 13:41:49 UTC | 0xad82e4…86e7 | [0] 0x000000000000…79045bfe [1] 0x000000000000…00000003 data: 0x000000000000000000…00000001 |
| 0xf68977…de03e9 | 38 days agoFri, 10 Jul 2026 13:41:47 UTC | 0xeaf3d5…01d5 | [0] 0x000000000000…00000003 data: 0x000000000000000000…648e63be |
| 0x21b85b…8ff7d1 | 38 days agoFri, 10 Jul 2026 13:41:41 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…e2a818cd |
| 0x7ba552…d79483 | 38 days agoFri, 10 Jul 2026 13:41:39 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…c5503199 |
| 0x70c254…d3989b | 38 days agoFri, 10 Jul 2026 13:41:36 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…b7f1ce94 |
| 0x65c797…7ac353 | 38 days agoFri, 10 Jul 2026 13:41:33 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…6fe39d28 |
| 0x2fa88f…9dc3c7 | 38 days agoFri, 10 Jul 2026 13:36:18 UTC | 0x30a242…2bf8 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…0007a120 |
| 0x2fa88f…9dc3c7 | 38 days agoFri, 10 Jul 2026 13:36:18 UTC | 0xad82e4…86e7 | [0] 0x000000000000…79045bfe [1] 0x000000000000…00000003 data: 0x000000000000000000…00000001 |
| 0x427bea…79295a | 38 days agoFri, 10 Jul 2026 13:36:15 UTC | 0xeaf3d5…01d5 | [0] 0x000000000000…00000003 data: 0x000000000000000000…cc9fd9ef |
| 0x54d79d…ec1080 | 38 days agoFri, 10 Jul 2026 13:32:59 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…78a81fe5 |
| 0x79ec63…c2be40 | 38 days agoFri, 10 Jul 2026 13:32:57 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…f1503fc9 |
| 0xc82357…10c036 | 38 days agoFri, 10 Jul 2026 13:32:54 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…a7fcc797 |
| 0xd4bc12…cd5955 | 38 days agoFri, 10 Jul 2026 13:32:51 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…4ff98f2e |
| 0x6b6924…587b13 | 38 days agoFri, 10 Jul 2026 13:31:10 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…aaf946c2 |
| 0x4f2b7e…595916 | 38 days agoFri, 10 Jul 2026 13:31:07 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…55f28d84 |
| 0x28493f…9653ff | 38 days agoFri, 10 Jul 2026 13:31:04 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…3a95a6c0 |
| 0x13dd88…b31e4d | 38 days agoFri, 10 Jul 2026 13:31:01 UTC | 0xd8a33e…b758 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…752b4d7f |
| 0x00841a…328d7e | 38 days agoFri, 10 Jul 2026 13:30:49 UTC | 0x30a242…2bf8 | [0] 0x000000000000…79045bfe data: 0x000000000000000000…0007a120 |
| 0x00841a…328d7e | 38 days agoFri, 10 Jul 2026 13:30:49 UTC | 0xad82e4…86e7 | [0] 0x000000000000…79045bfe [1] 0x000000000000…00000002 data: 0x000000000000000000…00000001 |
| 0x552d72…373522 | 38 days agoFri, 10 Jul 2026 13:30:47 UTC | 0xeaf3d5…01d5 | [0] 0x000000000000…00000002 data: 0x000000000000000000…b93371a9 |
| 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 | |||||||||
| 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 | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xa1f20245…3526bb | Transfer | 29,623,560 | 11 days agoThu, 06 Aug 2026 20:07:23 UTC | 0xb29e…ab38 | IN | 0x806b…a08f | 25 MARIAN | Lady Marian (MARIAN) | |
| 0x5884e40a…f0d77f | Transfer | 20,715,449 | 21 days agoMon, 27 Jul 2026 12:00:41 UTC | 0xcf6a…3450 | IN | 0x806b…a08f | 0 JUGGERNAUT | The Juggernaut (JUGGERNAUT) | |
| 0x9c170613…f22fa7 | Transfer | 12,126,556 | 31 days agoFri, 17 Jul 2026 12:40:42 UTC | 0xc7a7…cec7 | IN | 0x806b…a08f | 5 MARIAN | Lady Marian (MARIAN) | |
| 0xcc5f2760…28e50c | Transfer | 9,891,854 | 34 days agoTue, 14 Jul 2026 22:32:58 UTC | 0x8b9f…7c63 | IN | 0x806b…a08f | 18,931,696.375017 CREDITCAT | Credit Cat (CREDITCAT) | |
| 0x8b68521e…7960dd | Transfer | 8,717,324 | 35 days agoMon, 13 Jul 2026 13:51:49 UTC | 0xb545…cc2c | IN | 0x806b…a08f | 5 JUGGERNAUT | The Juggernauts (JUGGERNAUT) | |
| 0x7e85ef58…438450 | Transfer | 6,562,070 | 38 days agoSat, 11 Jul 2026 01:53:07 UTC | 0x1260…e4fa | IN | 0x806b…a08f | 450 PRIZE | PrizeFight by Virtuals (PRIZE) | |
| 0x3d74cf3b…32cf79 | Transfer | 6,123,684 | 38 days agoFri, 10 Jul 2026 13:41:49 UTC | 0x806b…a08f | OUT | 0x3f96…5bfe | $0.1250.616750 JUGGERNAUT | ||
| 0xf6897785…de03e9 | Transfer | 6,123,659 | 38 days agoFri, 10 Jul 2026 13:41:47 UTC | 0x588b…2746 | IN | 0x806b…a08f | $0.1250.616750 JUGGERNAUT | ||
| 0x2fa88f4b…9dc3c7 | Transfer | 6,120,366 | 38 days agoFri, 10 Jul 2026 13:36:18 UTC | 0x806b…a08f | OUT | 0x3f96…5bfe | $0.2499.072394 JUGGERNAUT | ||
| 0x427beae9…79295a | Transfer | 6,120,341 | 38 days agoFri, 10 Jul 2026 13:36:15 UTC | 0x588b…2746 | IN | 0x806b…a08f | $0.2499.072394 JUGGERNAUT | ||
| 0x00841a13…328d7e | Transfer | 6,117,103 | 38 days agoFri, 10 Jul 2026 13:30:49 UTC | 0x806b…a08f | OUT | 0x3f96…5bfe | $0.02431.864893 401k | ||
| 0x552d723c…373522 | Transfer | 6,117,077 | 38 days agoFri, 10 Jul 2026 13:30:47 UTC | 0xf636…aa6d | IN | 0x806b…a08f | $0.02431.864893 401k | ||
| 0xf74201f3…b2be9b | Transfer | 6,113,126 | 38 days agoFri, 10 Jul 2026 13:24:12 UTC | 0x806b…a08f | OUT | 0x3f96…5bfe | $0.44509.613240 MARIAN | ||
| 0xc6a88066…395598 | Transfer | 6,113,101 | 38 days agoFri, 10 Jul 2026 13:24:09 UTC | 0xfe33…4081 | IN | 0x806b…a08f | $0.44509.613240 MARIAN | ||
| 0x25f786f3…ba0989 | Transfer | 6,109,533 | 38 days agoFri, 10 Jul 2026 13:18:12 UTC | 0x806b…a08f | OUT | 0x3f96…5bfe | $2.2217.174210 CASHCAT | ||
| 0xe031b3f6…5fd435 | Transfer | 6,109,508 | 38 days agoFri, 10 Jul 2026 13:18:10 UTC | 0xa70f…e313 | IN | 0x806b…a08f | $2.2217.174210 CASHCAT |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| no transactions indexed for this address yet | |||||||||