// 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 {IERC721} from "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol";
import {ReentrancyGuard} from "openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol";
import {Pausable} from "openzeppelin-contracts/contracts/utils/Pausable.sol";
import {AccessControl} from "openzeppelin-contracts/contracts/access/AccessControl.sol";
import {
ZeroAddress,
Unauthorized,
NotOwner,
InvalidTier,
TierNotUpgrade,
NotActivated,
NotInitialized,
TooManyRewardTokens,
AlreadyListed,
NotListed,
NoRewardsToClaim,
InsufficientSwapFee
} from "../libs/Errors.sol";
interface ITokensPerNFTView {
function tokensPerNFT() external view returns (uint256);
}
interface IRobinhoodFeeView {
function robinhoodSwapFeeWei() external view returns (uint256);
}
/// @title SoftStakingVault
/// @notice Non-custodial ("soft") staking for Anvil AMM markets. NFTs never leave the
/// holder's wallet: the holder burns the market's collection token to ACTIVATE a
/// tokenId at a tier, and activated tokens share every reward stream pro-rata by
/// tier weight. Activation is void the moment the NFT changes owner (wallet
/// transfer, AMM sell, loan-escrow) — mirroring StonkBrokers' ActivationManager.
///
/// Tier schedule (fees in bps of the market's tokensPerNFT "P"; weights in bps):
/// Base 10% of P 1.00x (10000)
/// T1 22% of P 1.25x (12500)
/// T2 45% of P 1.60x (16000)
/// T3 90% of P 2.00x (20000)
/// T4 240% of P 3.33x (33300)
///
/// Ladder economics: the benchmark for "+1.0x of reward weight" is buying a second
/// NFT from the AMM (1.0 P + its base activation + swap fees ≈ 1.2 P per weight
/// point). Reaching 2.00x on one NFT costs 0.9 P total, so total capital for 2x
/// rewards = 1.0 P (the NFT) + 0.9 P (burn) = 1.9 P — slightly cheaper than the
/// ~2.3 P all-in of owning two NFTs. Marginal cost per weight point rises
/// monotonically (0.48 / 0.66 / 1.13 / 1.13 P), so early rungs are the best value,
/// exactly like the StonkBrokers curve. Upgrades pay only the fee DIFFERENCE.
///
/// Every activation fee splits 95% → burn wallet (0x…dEaD), 5% → protocol treasury.
///
/// Rewards: the vault can receive ANY listed ERC-20 (the collection token is listed
/// at initialization; the admin can list up to 16). Tokens sent to the vault are
/// skimmed by `sync()` (or arrive via the AMM/LoanVault `distributeRewards` hook)
/// and stream out linearly over 30 days. Claims are available IMMEDIATELY — the
/// burned activation fee is the commitment, no time lock is needed — and there is
/// no deactivate: transferring the NFT (sale, wallet move, loan escrow) is the
/// natural exit and voids the activation. Rewards accrued by a token whose owner
/// changed are FORFEITED back into the stream for everyone else.
contract SoftStakingVault is ReentrancyGuard, Pausable, AccessControl {
using SafeERC20 for IERC20;
bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
uint8 public constant TIER_COUNT = 5;
uint16 public constant BPS = 10_000;
uint16 public constant BURN_BPS = 9_500;
uint256 public constant REWARD_DURATION = 30 days;
uint256 public constant MAX_REWARD_TOKENS = 16;
address public constant BURN_WALLET = 0x000000000000000000000000000000000000dEaD;
uint256 private constant PRECISION = 1e18;
IERC20 public immutable token; // the market's collection token
IERC721 public immutable collection;
address public immutable protocolTreasury;
/// @notice The market's AMM price per NFT — the base unit of the tier fee ladder.
/// Set once in initializeDependencies() by reading the AMM vault.
uint256 public tokensPerNFT;
address public ammVault;
address public loanVault;
bool public dependenciesInitialized;
struct Activation {
address owner; // owner at activation time; any change voids the activation
uint8 tierPlusOne; // 0 = not activated
uint40 activatedAt;
}
mapping(uint256 => Activation) public activations;
uint256 public totalWeight; // sum of active tier weights, in bps units
uint256 public activeCount;
struct RewardData {
bool listed;
uint40 periodFinish;
uint40 lastUpdate;
uint256 rate; // token units per second, scaled by PRECISION
uint256 perWeightStored; // reward per weight-bps unit, scaled by PRECISION
uint256 accounted; // portion of vault balance already owned by streams/pending
uint256 queued; // zero-weight emissions + forfeits awaiting re-stream
}
mapping(address => RewardData) public rewardData;
address[] public rewardTokens;
/// tokenId => rewardToken => perWeightStored snapshot at last settle
mapping(uint256 => mapping(address => uint256)) public perWeightPaid;
/// tokenId => rewardToken => settled-but-unclaimed amount
mapping(uint256 => mapping(address => uint256)) public pendingReward;
event Activated(uint256 indexed tokenId, address indexed owner, uint8 tier, uint256 feePaid);
event TierUpgraded(uint256 indexed tokenId, address indexed owner, uint8 fromTier, uint8 toTier, uint256 feePaid);
event ActivationVoided(uint256 indexed tokenId, address indexed previousOwner);
event ActivationEthFeePaid(uint256 indexed tokenId, address indexed payer, uint256 amount);
event RewardTokenListed(address indexed rewardToken);
event RewardAdded(address indexed rewardToken, uint256 amount);
event RewardPaid(uint256 indexed tokenId, address indexed owner, address indexed rewardToken, uint256 amount);
/// @notice A payout leg failed (frozen/blacklisted/paused reward token); the
/// amount was re-queued into that token's stream instead of blocking the tx.
event RewardTransferFailed(uint256 indexed tokenId, address indexed rewardToken, uint256 amount);
constructor(address token_, address collection_, address admin_, address protocolTreasury_) {
if (token_ == address(0) || collection_ == address(0) || admin_ == address(0) || protocolTreasury_ == address(0))
{
revert ZeroAddress();
}
token = IERC20(token_);
collection = IERC721(collection_);
protocolTreasury = protocolTreasury_;
_grantRole(DEFAULT_ADMIN_ROLE, admin_);
_grantRole(PAUSER_ROLE, admin_);
}
// ------------------------------------------------------------------
// Factory wiring (same call surface as NFTStakingVault)
// ------------------------------------------------------------------
function initializeDependencies(address loanVault_, address ammVault_, address loanRewardsSource_)
external
onlyRole(DEFAULT_ADMIN_ROLE)
{
if (dependenciesInitialized) revert Unauthorized();
if (loanVault_ == address(0) || ammVault_ == address(0) || loanRewardsSource_ == address(0)) {
revert ZeroAddress();
}
loanVault = loanVault_;
ammVault = ammVault_;
tokensPerNFT = ITokensPerNFTView(ammVault_).tokensPerNFT();
dependenciesInitialized = true;
// The collection token is always a reward stream (AMM/loan fee share).
_listRewardToken(address(token));
}
/// @notice Soft staking never custodies NFTs, so nothing is ever "staked" in the
/// LoanVault sense — collateralizing an activated NFT is allowed (the escrow
/// transfer voids the activation instead).
function isStaked(uint256) external pure returns (bool) {
return false;
}
/// @notice UI marker for vault-type detection.
function softStakingVersion() external pure returns (uint256) {
return 1;
}
// ------------------------------------------------------------------
// Tier tables
// ------------------------------------------------------------------
function tierFeeBps(uint8 tier) public pure returns (uint16) {
if (tier == 0) return 1_000;
if (tier == 1) return 2_200;
if (tier == 2) return 4_500;
if (tier == 3) return 9_000;
if (tier == 4) return 24_000;
revert InvalidTier();
}
function tierWeightBps(uint8 tier) public pure returns (uint16) {
if (tier == 0) return 10_000;
if (tier == 1) return 12_500;
if (tier == 2) return 16_000;
if (tier == 3) return 20_000;
if (tier == 4) return 33_300;
revert InvalidTier();
}
/// @notice Absolute activation fee for `tier`, in collection-token units.
function tierFee(uint8 tier) public view returns (uint256) {
return (tokensPerNFT * tierFeeBps(tier)) / BPS;
}
/// @notice Flat ETH due on EVERY activate() call (first activation AND tier
/// upgrades), paid to the protocol treasury: ~$1 on Robinhood Chain — half
/// of the AMM's $2 oracle-priced swap fee, read from the same vault so the
/// two fees can never quote different ETH/USD marks. Zero when the AMM
/// doesn't expose the fee (other chains / older vault generations).
function activationEthFeeWei() public view returns (uint256) {
if (ammVault == address(0)) return 0;
try IRobinhoodFeeView(ammVault).robinhoodSwapFeeWei() returns (uint256 fee) {
return fee / 2;
} catch {
return 0;
}
}
// ------------------------------------------------------------------
// User actions
// ------------------------------------------------------------------
/// @notice Activates `tokenId` at `tier`, or upgrades an existing activation.
/// First activation pays the full tier fee; upgrades pay only the difference
/// (allowed at ANY time — the claim lock keeps its original clock). The
/// collection-token fee splits 95% burn / 5% protocol treasury, and every
/// call additionally requires `activationEthFeeWei()` (~$1) in ETH, sent to
/// the treasury. Excess msg.value is refunded. Caller must own the NFT and
/// have approved this vault for the collection token.
function activate(uint256 tokenId, uint8 tier) external payable nonReentrant whenNotPaused {
if (!dependenciesInitialized || tokensPerNFT == 0) revert NotInitialized();
if (tier >= TIER_COUNT) revert InvalidTier();
address currentOwner = collection.ownerOf(tokenId);
if (currentOwner != msg.sender) revert NotOwner();
(Activation memory act, bool valid) = _settle(tokenId);
uint256 fee;
if (valid) {
uint8 curTier = act.tierPlusOne - 1;
if (tier <= curTier) revert TierNotUpgrade();
fee = tierFee(tier) - tierFee(curTier);
totalWeight += uint256(tierWeightBps(tier)) - uint256(tierWeightBps(curTier));
activations[tokenId].tierPlusOne = tier + 1; // claim lock keeps original activatedAt
emit TierUpgraded(tokenId, msg.sender, curTier, tier, fee);
} else {
fee = tierFee(tier);
// CRITICAL ORDER: advance every stream to `now` BEFORE the new weight
// joins totalWeight, then baseline against the fresh accumulators —
// otherwise emissions since lastUpdate would be diluted by (and
// partially credited to) the newcomer.
uint256 n = rewardTokens.length;
for (uint256 i = 0; i < n; ++i) {
_updateGlobal(rewardTokens[i]);
perWeightPaid[tokenId][rewardTokens[i]] = rewardData[rewardTokens[i]].perWeightStored;
}
activations[tokenId] = Activation({owner: msg.sender, tierPlusOne: tier + 1, activatedAt: uint40(block.timestamp)});
totalWeight += tierWeightBps(tier);
activeCount += 1;
emit Activated(tokenId, msg.sender, tier, fee);
}
uint256 burnAmount = (fee * BURN_BPS) / BPS;
token.safeTransferFrom(msg.sender, BURN_WALLET, burnAmount);
token.safeTransferFrom(msg.sender, protocolTreasury, fee - burnAmount);
_collectEthFee(tokenId);
}
/// @dev Charges the flat ETH activation fee to the treasury and refunds any
/// excess. When the fee is zero (non-Robinhood), stray msg.value is refunded.
function _collectEthFee(uint256 tokenId) internal {
uint256 ethFee = activationEthFeeWei();
if (msg.value < ethFee) revert InsufficientSwapFee();
if (ethFee > 0) {
(bool okFee,) = protocolTreasury.call{value: ethFee}("");
require(okFee, "eth fee failed");
emit ActivationEthFeePaid(tokenId, msg.sender, ethFee);
}
uint256 excess = msg.value - ethFee;
if (excess > 0) {
(bool refunded,) = msg.sender.call{value: excess}("");
require(refunded, "fee refund failed");
}
}
/// @notice Claims all settled + accrued rewards for `tokenId`, available at any
/// time — the burned activation fee is the commitment, so there is no time
/// lock. Caller must be the activating owner and still own the NFT. There is
/// deliberately NO deactivate(): transferring the NFT is the natural exit
/// (the owner change voids the activation).
function claim(uint256 tokenId) public nonReentrant whenNotPaused {
(Activation memory act, bool valid) = _settle(tokenId);
if (!valid) revert NotActivated();
if (act.owner != msg.sender) revert NotOwner();
bool paidAny = _flushPending(tokenId, msg.sender);
if (!paidAny) revert NoRewardsToClaim();
}
function claimMany(uint256[] calldata tokenIds) external {
for (uint256 i = 0; i < tokenIds.length; ++i) {
claim(tokenIds[i]);
}
}
/// @notice Voids the activation of a token whose owner changed since activation.
/// Anyone may call; accrued rewards are forfeited back into the stream.
function kick(uint256 tokenId) external nonReentrant {
(, bool valid) = _settle(tokenId);
// _settle already removed weight, forfeited and emitted if the owner moved.
// Revert when the activation is still healthy so the call isn't a silent no-op.
if (valid) revert Unauthorized();
}
// ------------------------------------------------------------------
// Reward streams
// ------------------------------------------------------------------
/// @notice Fee hook shared with NFTAMMVault / LoanVault (they forceApprove then
/// call). Pulls `amount` of the collection token and folds it into the stream.
function distributeRewards(uint256 amount) external nonReentrant whenNotPaused {
token.safeTransferFrom(msg.sender, address(this), amount);
_skim(address(token));
}
/// @notice Folds any un-accounted balance of `rewardToken` (e.g. a plain
/// transfer from an airdropper) into its 30-day stream. Permissionless.
function sync(address rewardToken) external nonReentrant {
if (!rewardData[rewardToken].listed) revert NotListed();
_skim(rewardToken);
}
/// @notice Lists a new ERC-20 as a distributable reward token (admin-gated to
/// keep claim gas bounded and block spam listings). Max 16 tokens.
function listRewardToken(address rewardToken) external onlyRole(DEFAULT_ADMIN_ROLE) {
_listRewardToken(rewardToken);
}
function _listRewardToken(address rewardToken) internal {
if (rewardToken == address(0)) revert ZeroAddress();
if (rewardData[rewardToken].listed) revert AlreadyListed();
if (rewardTokens.length >= MAX_REWARD_TOKENS) revert TooManyRewardTokens();
rewardData[rewardToken].listed = true;
rewardTokens.push(rewardToken);
emit RewardTokenListed(rewardToken);
}
// ------------------------------------------------------------------
// Views
// ------------------------------------------------------------------
function rewardTokensLength() external view returns (uint256) {
return rewardTokens.length;
}
function allRewardTokens() external view returns (address[] memory) {
return rewardTokens;
}
/// @notice Full activation status for a tokenId, including live validity.
function activationOf(uint256 tokenId)
external
view
returns (bool active, address owner, uint8 tier, uint40 activatedAt, uint16 weightBps)
{
Activation memory act = activations[tokenId];
if (act.tierPlusOne == 0) return (false, address(0), 0, 0, 0);
owner = act.owner;
tier = act.tierPlusOne - 1;
activatedAt = act.activatedAt;
weightBps = tierWeightBps(tier);
active = _safeOwnerOf(tokenId) == act.owner;
}
/// @notice Live pending rewards (settled + accrued-since-settle) for a tokenId.
/// Returns zeros when the activation has been voided by a transfer.
function pendingRewards(uint256 tokenId)
external
view
returns (address[] memory tokens, uint256[] memory amounts)
{
uint256 n = rewardTokens.length;
tokens = rewardTokens;
amounts = new uint256[](n);
Activation memory act = activations[tokenId];
if (act.tierPlusOne == 0 || _safeOwnerOf(tokenId) != act.owner) return (tokens, amounts);
uint256 weight = tierWeightBps(act.tierPlusOne - 1);
for (uint256 i = 0; i < n; ++i) {
address rt = tokens[i];
uint256 perWeight = _projectedPerWeight(rt);
amounts[i] =
pendingReward[tokenId][rt] + (weight * (perWeight - perWeightPaid[tokenId][rt])) / PRECISION;
}
}
/// @notice Stream status for a reward token: current drip rate (units/sec,
/// unscaled) and when the current 30-day window ends.
function streamInfo(address rewardToken)
external
view
returns (uint256 ratePerSec, uint256 periodFinish, uint256 undistributed)
{
RewardData storage r = rewardData[rewardToken];
ratePerSec = r.rate / PRECISION;
periodFinish = r.periodFinish;
if (block.timestamp < r.periodFinish) {
undistributed = (r.rate * (r.periodFinish - block.timestamp)) / PRECISION;
}
undistributed += r.queued;
}
// ------------------------------------------------------------------
// Admin
// ------------------------------------------------------------------
function pause() external onlyRole(PAUSER_ROLE) {
_pause();
}
function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) {
_unpause();
}
// ------------------------------------------------------------------
// Internals
// ------------------------------------------------------------------
function _safeOwnerOf(uint256 tokenId) internal view returns (address) {
try collection.ownerOf(tokenId) returns (address o) {
return o;
} catch {
return address(0); // burned / nonexistent
}
}
/// @dev Advances a stream's global accumulator. Emissions during zero-weight
/// windows queue up and re-stream on the next notify instead of being lost.
function _updateGlobal(address rt) internal {
RewardData storage r = rewardData[rt];
uint256 applicable = block.timestamp < r.periodFinish ? block.timestamp : r.periodFinish;
if (applicable > r.lastUpdate) {
uint256 emission = (r.rate * (applicable - r.lastUpdate)) / PRECISION;
if (totalWeight > 0) {
r.perWeightStored += (emission * PRECISION) / totalWeight;
} else {
r.queued += emission;
}
r.lastUpdate = uint40(applicable);
}
}
/// @dev Folds `extra` fresh tokens (already held & accounted) plus any queued
/// carryover and the un-emitted remainder of the current window into a fresh
/// 30-day stream.
function _notify(address rt, uint256 extra) internal {
_updateGlobal(rt);
RewardData storage r = rewardData[rt];
uint256 amount = extra + r.queued;
r.queued = 0;
if (block.timestamp < r.periodFinish) {
amount += (r.rate * (r.periodFinish - block.timestamp)) / PRECISION;
}
if (amount == 0) return;
r.rate = (amount * PRECISION) / REWARD_DURATION;
r.lastUpdate = uint40(block.timestamp);
r.periodFinish = uint40(block.timestamp + REWARD_DURATION);
if (extra > 0) emit RewardAdded(rt, extra);
}
/// @dev Skims any balance not yet owned by streams/pending into the stream.
function _skim(address rt) internal {
RewardData storage r = rewardData[rt];
uint256 bal = IERC20(rt).balanceOf(address(this));
uint256 delta = bal > r.accounted ? bal - r.accounted : 0;
if (delta > 0) {
r.accounted = bal;
_notify(rt, delta);
}
}
/// @dev Settles a token against every stream. If the activation is stale
/// (owner changed), removes its weight, forfeits its rewards back into the
/// streams, and deletes the activation. Returns the pre-settle activation and
/// whether it is still valid.
function _settle(uint256 tokenId) internal returns (Activation memory act, bool valid) {
act = activations[tokenId];
if (act.tierPlusOne == 0) return (act, false);
address currentOwner = _safeOwnerOf(tokenId);
valid = currentOwner == act.owner;
uint256 weight = tierWeightBps(act.tierPlusOne - 1);
uint256 n = rewardTokens.length;
for (uint256 i = 0; i < n; ++i) {
address rt = rewardTokens[i];
_updateGlobal(rt);
RewardData storage r = rewardData[rt];
uint256 accrued = (weight * (r.perWeightStored - perWeightPaid[tokenId][rt])) / PRECISION;
if (valid) {
if (accrued > 0) pendingReward[tokenId][rt] += accrued;
} else {
uint256 forfeited = accrued + pendingReward[tokenId][rt];
if (forfeited > 0) {
pendingReward[tokenId][rt] = 0;
r.queued += forfeited;
_notify(rt, 0); // re-stream immediately
}
}
perWeightPaid[tokenId][rt] = r.perWeightStored;
}
if (!valid) {
totalWeight -= weight;
activeCount -= 1;
delete activations[tokenId];
emit ActivationVoided(tokenId, act.owner);
}
}
/// @dev Pays out all pending rewards for a token. Returns true if anything
/// was paid. A reward token whose transfer fails (frozen / blacklisted /
/// paused) must NEVER block the other legs — listing is irreversible, so a
/// hard revert here would brick claims for the whole market forever. Failed
/// legs re-queue into their own stream.
function _flushPending(uint256 tokenId, address to) internal returns (bool paidAny) {
uint256 n = rewardTokens.length;
for (uint256 i = 0; i < n; ++i) {
address rt = rewardTokens[i];
uint256 amt = pendingReward[tokenId][rt];
if (amt == 0) continue;
pendingReward[tokenId][rt] = 0;
RewardData storage r = rewardData[rt];
if (_tryTransfer(rt, to, amt)) {
r.accounted -= amt;
emit RewardPaid(tokenId, to, rt, amt);
paidAny = true;
} else {
r.queued += amt;
_notify(rt, 0);
emit RewardTransferFailed(tokenId, rt, amt);
}
}
}
/// @dev Non-reverting ERC-20 transfer that tolerates no-return tokens
/// (USDT-style). Returns false on revert or an explicit `false` return.
function _tryTransfer(address rt, address to, uint256 amt) internal returns (bool) {
(bool success, bytes memory ret) = rt.call(abi.encodeCall(IERC20.transfer, (to, amt)));
if (!success) return false;
if (ret.length == 0) return true;
if (ret.length < 32) return false; // malformed return data — treat as failure
return abi.decode(ret, (bool));
}
/// @dev View-only projection of a stream's accumulator at `block.timestamp`.
function _projectedPerWeight(address rt) internal view returns (uint256) {
RewardData storage r = rewardData[rt];
if (totalWeight == 0) return r.perWeightStored;
uint256 applicable = block.timestamp < r.periodFinish ? block.timestamp : r.periodFinish;
if (applicable <= r.lastUpdate) return r.perWeightStored;
uint256 emission = (r.rate * (applicable - r.lastUpdate)) / PRECISION;
return r.perWeightStored + (emission * PRECISION) / totalWeight;
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "token_",
"type": "address",
"internalType": "address"
},
{
"name": "collection_",
"type": "address",
"internalType": "address"
},
{
"name": "admin_",
"type": "address",
"internalType": "address"
},
{
"name": "protocolTreasury_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AccessControlBadConfirmation",
"type": "error",
"inputs": []
},
{
"name": "AccessControlUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "neededRole",
"type": "bytes32",
"internalType": "bytes32"
}
]
},
{
"name": "AlreadyListed",
"type": "error",
"inputs": []
},
{
"name": "EnforcedPause",
"type": "error",
"inputs": []
},
{
"name": "ExpectedPause",
"type": "error",
"inputs": []
},
{
"name": "InsufficientSwapFee",
"type": "error",
"inputs": []
},
{
"name": "InvalidTier",
"type": "error",
"inputs": []
},
{
"name": "NoRewardsToClaim",
"type": "error",
"inputs": []
},
{
"name": "NotActivated",
"type": "error",
"inputs": []
},
{
"name": "NotInitialized",
"type": "error",
"inputs": []
},
{
"name": "NotListed",
"type": "error",
"inputs": []
},
{
"name": "NotOwner",
"type": "error",
"inputs": []
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "TierNotUpgrade",
"type": "error",
"inputs": []
},
{
"name": "TooManyRewardTokens",
"type": "error",
"inputs": []
},
{
"name": "Unauthorized",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "Activated",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tier",
"type": "uint8",
"indexed": false,
"internalType": "uint8"
},
{
"name": "feePaid",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ActivationEthFeePaid",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "payer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ActivationVoided",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Paused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RewardAdded",
"type": "event",
"inputs": [
{
"name": "rewardToken",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RewardPaid",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "rewardToken",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RewardTokenListed",
"type": "event",
"inputs": [
{
"name": "rewardToken",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RewardTransferFailed",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "rewardToken",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RoleAdminChanged",
"type": "event",
"inputs": [
{
"name": "role",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "previousAdminRole",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "newAdminRole",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
}
],
"anonymous": false
},
{
"name": "RoleGranted",
"type": "event",
"inputs": [
{
"name": "role",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "sender",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RoleRevoked",
"type": "event",
"inputs": [
{
"name": "role",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "sender",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "TierUpgraded",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "fromTier",
"type": "uint8",
"indexed": false,
"internalType": "uint8"
},
{
"name": "toTier",
"type": "uint8",
"indexed": false,
"internalType": "uint8"
},
{
"name": "feePaid",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Unpaused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "BURN_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "BURN_WALLET",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "DEFAULT_ADMIN_ROLE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "MAX_REWARD_TOKENS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "PAUSER_ROLE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "REWARD_DURATION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "TIER_COUNT",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "activate",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "tier",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "activationEthFeeWei",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "activationOf",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "active",
"type": "bool",
"internalType": "bool"
},
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "tier",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "activatedAt",
"type": "uint40",
"internalType": "uint40"
},
{
"name": "weightBps",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "activations",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "tierPlusOne",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "activatedAt",
"type": "uint40",
"internalType": "uint40"
}
],
"stateMutability": "view"
},
{
"name": "activeCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "allRewardTokens",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address[]",
"internalType": "address[]"
}
],
"stateMutability": "view"
},
{
"name": "ammVault",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "claim",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "claimMany",
"type": "function",
"inputs": [
{
"name": "tokenIds",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "collection",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC721"
}
],
"stateMutability": "view"
},
{
"name": "dependenciesInitialized",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "distributeRewards",
"type": "function",
"inputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "getRoleAdmin",
"type": "function",
"inputs": [
{
"name": "role",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "grantRole",
"type": "function",
"inputs": [
{
"name": "role",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "hasRole",
"type": "function",
"inputs": [
{
"name": "role",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "initializeDependencies",
"type": "function",
"inputs": [
{
"name": "loanVault_",
"type": "address",
"internalType": "address"
},
{
"name": "ammVault_",
"type": "address",
"internalType": "address"
},
{
"name": "loanRewardsSource_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "isStaked",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "pure"
},
{
"name": "kick",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "listRewardToken",
"type": "function",
"inputs": [
{
"name": "rewardToken",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "loanVault",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "paused",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "pendingReward",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "pendingRewards",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "tokens",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "amounts",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"name": "perWeightPaid",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "protocolTreasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "renounceRole",
"type": "function",
"inputs": [
{
"name": "role",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "callerConfirmation",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "revokeRole",
"type": "function",
"inputs": [
{
"name": "role",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "rewardData",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "listed",
"type": "bool",
"internalType": "bool"
},
{
"name": "periodFinish",
"type": "uint40",
"internalType": "uint40"
},
{
"name": "lastUpdate",
"type": "uint40",
"internalType": "uint40"
},
{
"name": "rate",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "perWeightStored",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "accounted",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "queued",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "rewardTokens",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "rewardTokensLength",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "softStakingVersion",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "pure"
},
{
"name": "streamInfo",
"type": "function",
"inputs": [
{
"name": "rewardToken",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "ratePerSec",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "periodFinish",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "undistributed",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "supportsInterface",
"type": "function",
"inputs": [
{
"name": "interfaceId",
"type": "bytes4",
"internalType": "bytes4"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "sync",
"type": "function",
"inputs": [
{
"name": "rewardToken",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "tierFee",
"type": "function",
"inputs": [
{
"name": "tier",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "tierFeeBps",
"type": "function",
"inputs": [
{
"name": "tier",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "pure"
},
{
"name": "tierWeightBps",
"type": "function",
"inputs": [
{
"name": "tier",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "pure"
},
{
"name": "token",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC20"
}
],
"stateMutability": "view"
},
{
"name": "tokensPerNFT",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalWeight",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "unpause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146117795750806306e3489c146117515780630d5ea213146116fa578063180eca20146116d2578063248a9ca3146116a7578063249d39e91461168b57806327060b2b1461166f5780632b31c3421461163c5780632f2ff15d146115fe5780633245ea53146115b057806336331c8f1461159557806336568abe14611551578063379607f5146113c25780633f4ba83a1461135e5780634331ed1f146113415780634578f5f014610d9557806348e5d9f814610d1157806359974e3814610cb05780635ade228a14610c935780635afcc2f514610c765780635c975abb14610c555780635d0cde9714610c3a57806375492e0c14610c1f57806377fe8e4614610bdb5780637bb7bed114610b995780637cdddc5d14610b745780637dcb2abf14610b035780637de1e53614610abf578063803db96d14610a7b57806380e2aa711461090a5780638456cb591461084e57806391d1485414610805578063925489a8146105ed57806396c82e57146105d057806398969e821461058c578063a217fddf14610572578063a37a9fc014610556578063a5841194146104ea578063b571ff05146104c7578063baa51f86146104ac578063bb6098b21461048a578063bf199e621461046d578063c618b8c7146103cf578063ce0cf1a514610384578063d547741f14610341578063d5c9ae361461031e578063e1fdc640146102f3578063e63ab1e9146102b9578063f53149091461028a5763fc0c546a14610242575f80fd5b34610286575f366003190112610286576040517f000000000000000000000000b03058b8a39f3967df08d833682c1c99b29821b16001600160a01b03168152602090f35b5f80fd5b346102865760203660031901126102865760206102ad6102a8611834565b611cc3565b61ffff60405191168152f35b34610286575f3660031901126102865760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b346102865760203660031901126102865761031c61030f61181e565b610317611d99565b612547565b005b346102865760203660031901126102865760206102ad61033c611834565b611c6a565b346102865760403660031901126102865761031c600435610360611808565b9061037f61037a825f526001602052600160405f20015490565b611de8565b611eae565b346102865760203660031901126102865761039d611f32565b6103a8600435611f84565b90506103c15760015f8051602061288383398151915255005b6282b42960e81b5f5260045ffd5b346102865760203660031901126102865760606103ea61181e565b5f9060018060a01b03165f52600860205260405f2061042760018201549264ffffffffff835460081c1692834210610444575b60040154906119ef565b90670de0b6b3a76400006040519304835260208301526040820152f35b90506004670de0b6b3a764000061046461045e42876119fc565b87611a09565b0491905061041d565b34610286575f366003190112610286576020600954604051908152f35b34610286575f3660031901126102865760206104a4611bef565b604051908152f35b346102865760203660031901126102865760206040515f8152f35b346102865760203660031901126102865760206104a46104e5611834565b611bce565b346102865760203660031901126102865761050361181e565b61050b611f32565b6001600160a01b0381165f9081526008602052604090205460ff161561054757610534906123c6565b60015f8051602061288383398151915255005b63665c1c5760e01b5f5260045ffd5b34610286575f36600319011261028657602060405161251c8152f35b34610286575f3660031901126102865760206040515f8152f35b34610286576040366003190112610286576105a5611808565b6004355f52600b60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b34610286575f366003190112610286576020600654604051908152f35b346102865760203660031901126102865760043567ffffffffffffffff811161028657366023820112156102865780600401359067ffffffffffffffff8211610286573660248360051b83010111610286575f5b8281101561031c5760248160051b8301013561065b611f32565b610663611f6a565b61066c81611f84565b156107f65751336001600160a01b03909116036107e7576009545f9182915b8083106106c257505050156106b357600190815f805160206128838339815191525501610641565b6373380d9960e01b5f5260045ffd5b9091926106ce84611844565b90545f858152600b6020908152604080832060039590951b9390931c6001600160a01b03168083529390522054909181156107db57845f52600b60205260405f2060018060a01b0384165f526020525f6040812055825f52600860205260405f209061073b833386612803565b1561078b575060030161074f8282546119fc565b9055604051908152837f56a43be815d86b39dc4d398124c956790410b5e9cf70d477de0299f25fc1831360203393a4600180935b01919061068b565b95917f86b9003d1860f012ba949ab1efbd1d90bfb2d4e52ee091e0f60071dd0afe9e9c60208792600460019795016107c48282546119ef565b90556107cf85612610565b604051908152a3610783565b94905060019150610783565b6330cd747160e01b5f5260045ffd5b63037c597f60e01b5f5260045ffd5b346102865760403660031901126102865761081e611808565b6004355f52600160205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610286575f36600319011261028657335f9081527fb9cbbae02fe941283ec0eefd7b121e3bc7f89fae077b27bdd75a7fd4cf1543a8602052604090205460ff16156108d35761089c611f6a565b600160ff195f5416175f557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b63e2517d3f60e01b5f52336004527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60245260445ffd5b346102865760603660031901126102865761092361181e565b61092b611808565b6044356001600160a01b038116919082900361028657610949611d99565b6004549260ff8460a01c166103c1576001600160a01b0316918215908115610a69575b8115610a60575b50610a51576001600160a01b031983811683176004908155600380549092166001600160a01b03909316928317909155604051635afcc2f560e01b815291602091839182905afa908115610a46575f91610a14575b506002556001600160a81b031990911617600160a01b1760045561031c7f000000000000000000000000b03058b8a39f3967df08d833682c1c99b29821b16001600160a01b0316612547565b90506020813d602011610a3e575b81610a2f602093836118a0565b810103126102865751836109c8565b3d9150610a22565b6040513d5f823e3d90fd5b63d92e233d60e01b5f5260045ffd5b90501584610973565b6001600160a01b03831615915061096c565b34610286575f366003190112610286576040517f000000000000000000000000b668382cf44038a3e8140e789060f6a809787cda6001600160a01b03168152602090f35b34610286575f366003190112610286576040517f000000000000000000000000890215157dbec26d67605324271b34ba05ee9e586001600160a01b03168152602090f35b3461028657602036600319011261028657610b36610b22600435611a66565b6040519283926040845260408401906117cc565b8281036020840152602080835192838152019201905f5b818110610b5b575050500390f35b8251845285945060209384019390920191600101610b4d565b34610286575f36600319011261028657602060ff60045460a01c166040519015158152f35b346102865760203660031901126102865760043560095481101561028657610bc2602091611844565b905460405160039290921b1c6001600160a01b03168152f35b3461028657604036600319011261028657610bf4611808565b6004355f52600a60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b34610286575f36600319011261028657602060405160018152f35b34610286575f36600319011261028657602060405160108152f35b34610286575f36600319011261028657602060ff5f54166040519015158152f35b34610286575f366003190112610286576020600254604051908152f35b34610286575f36600319011261028657602060405162278d008152f35b3461028657602036600319011261028657610cc9611f32565b610cd1611f6a565b6105347f000000000000000000000000b03058b8a39f3967df08d833682c1c99b29821b1610d036004353033846122fe565b6001600160a01b03166123c6565b34610286576020366003190112610286576001600160a01b03610d3261181e565b165f52600860205260e060405f208054906001810154906002810154600460038301549201549264ffffffffff6040519560ff811615158752818160081c16602088015260301c1660408601526060850152608084015260a083015260c0820152f35b60403660031901126102865760043560243560ff81169081810361028657610dbb611f32565b610dc3611f6a565b60ff60045460a01c16158015611337575b611328576005821015611319576040516331a9108f60e11b8152600481018490526020816024817f000000000000000000000000890215157dbec26d67605324271b34ba05ee9e586001600160a01b03165afa908115610a46575f916112ea575b50336001600160a01b03909116036107e757610e5083611f84565b156111675760ff6020610e65920151166118c2565b9160ff8316918282111561115857610eca81610ec2610eba610e9b610e8c610ef496611bce565b610e958a611bce565b906119fc565b9761ffff610eb381610eac87611cc3565b1692611cc3565b16906119fc565b6006546119ef565b6006556119dd565b5f868152600560205260409020805460ff60a01b191660a09290921b60ff60a01b16919091179055565b6040519182526020820152816040820152827f8b603787383a028fae5b767c11e41bc8f2c9720dd4a008fd3f59d0c7deea7f1060603393a35b61251c810281810461251c1482151715611144576127109004907f000000000000000000000000b03058b8a39f3967df08d833682c1c99b29821b1906040516323b872dd60e01b5f523360045261dead6024528360445260205f60648180875af19060015f5114821615611123575b6040525f606052156111025790610fe191610fd97f000000000000000000000000b668382cf44038a3e8140e789060f6a809787cda9485926119fc565b9133906122fe565b610fe9611bef565b908134106110f35781611070575b506110039150346119fc565b8061101b5760015f8051602061288383398151915255005b5f80808093335af161102b612387565b50156110375780610534565b60405162461bcd60e51b8152602060048201526011602482015270199959481c99599d5b990819985a5b1959607a1b6044820152606490fd5b5f80808481945af1611080612387565b50156110bd5761100391604051908282527fb8b07b94279a1e4c4863b2fa8c894153e8e2640e8bf00672f8fc98df8e3f984e60203393a382610ff7565b60405162461bcd60e51b815260206004820152600e60248201526d195d1a081999594819985a5b195960921b6044820152606490fd5b636a5a00d160e11b5f5260045ffd5b50635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b90600181151661113b57833b15153d15161690610f9c565b503d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b63db9ad9db60e01b5f5260045ffd5b509061117282611bce565b916009545f5b81811061126857505061ffff6112138261119461121c946119dd565b604051906111a182611870565b33825260ff16602080830191825264ffffffffff421660408085019182525f8c81526005909352909120925183549251915164ffffffffff60a81b60a89190911b166001600160d01b03199093166001600160a01b039091161760ff60a01b60a09290921b9190911617179055611cc3565b166006546119ef565b6006556007546001810180911161114457600755604051908152816020820152827f4e4f107f0e9557eb4a56fbc0e0697242ee73b7aa9002ceb8c344bdaf2f5d093060403393a3610f2d565b8061128a611277600193611844565b848060a01b0391549060031b1c166121f3565b61129381611844565b838060a01b0391549060031b1c165f526008602052600260405f200154875f52600a60205260405f206112c583611844565b858060a01b0391549060031b1c16848060a01b03165f5260205260405f205501611178565b61130c915060203d602011611312575b61130481836118a0565b8101906119be565b84610e35565b503d6112fa565b63e142361760e01b5f5260045ffd5b6321c4e35760e21b5f5260045ffd5b5060025415610dd4565b34610286575f366003190112610286576020600754604051908152f35b34610286575f36600319011261028657611376611d99565b5f5460ff8116156113b35760ff19165f557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b34610286576020366003190112610286576004356113de611f32565b6113e6611f6a565b6113ef81611f84565b156107f657516001600160a01b031633036107e7575f906009545f915b81831061142c5783156106b35760015f8051602061288383398151915255005b90919261143884611844565b90545f848152600b6020908152604080832060039590951b9390931c6001600160a01b031680835293905220549091811561154557835f52600b60205260405f2060018060a01b0384165f526020525f6040812055825f52600860205260405f20906114a5833386612803565b156114f557506003016114b98282546119fc565b9055604051908152827f56a43be815d86b39dc4d398124c956790410b5e9cf70d477de0299f25fc1831360203393a4600180935b01919061140c565b95917f86b9003d1860f012ba949ab1efbd1d90bfb2d4e52ee091e0f60071dd0afe9e9c602086926004600197950161152e8282546119ef565b905561153985612610565b604051908152a36114ed565b949050600191506114ed565b346102865760403660031901126102865761156a611808565b336001600160a01b038216036115865761031c90600435611eae565b63334bd91960e11b5f5260045ffd5b34610286575f36600319011261028657602060405160058152f35b34610286576020366003190112610286576004355f526005602052606060405f205464ffffffffff6040519160018060a01b038116835260ff8160a01c16602084015260a81c166040820152f35b346102865760403660031901126102865761031c60043561161d611808565b9061163761037a825f526001602052600160405f20015490565b611e22565b34610286575f3660031901126102865761166b61165761196b565b6040519182916020835260208301906117cc565b0390f35b34610286575f36600319011261028657602060405161dead8152f35b34610286575f3660031901126102865760206040516127108152f35b346102865760203660031901126102865760206104a46004355f526001602052600160405f20015490565b34610286575f366003190112610286576003546040516001600160a01b039091168152602090f35b346102865760203660031901126102865760a060ff61ffff64ffffffffff6117236004356118d4565b94939691909260405197151588526001808a1b03166020880152166040860152166060840152166080820152f35b34610286575f366003190112610286576004546040516001600160a01b039091168152602090f35b34610286576020366003190112610286576004359063ffffffff60e01b821680920361028657602091637965db0b60e01b81149081156117bb575b5015158152f35b6301ffc9a760e01b149050836117b4565b90602080835192838152019201905f5b8181106117e95750505090565b82516001600160a01b03168452602093840193909201916001016117dc565b602435906001600160a01b038216820361028657565b600435906001600160a01b038216820361028657565b6004359060ff8216820361028657565b60095481101561185c5760095f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b6060810190811067ffffffffffffffff82111761188c57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761188c57604052565b60ff5f199116019060ff821161114457565b805f52600560205260405f20604051906118ed82611870565b549060018060a01b0382169283825260ff8360a01c169384602084015264ffffffffff604084019460a81c168452841561195a5761193164ffffffffff91956118c2565b9351169161194761194185611cc3565b92611d1c565b90516001600160a01b0391821691161494565b50505050505f905f905f905f905f90565b60405190600954808352826020810160095f5260205f20925f5b81811061199c57505061199a925003836118a0565b565b84546001600160a01b0316835260019485019487945060209093019201611985565b9081602091031261028657516001600160a01b03811681036102865790565b60ff60019116019060ff821161114457565b9190820180921161114457565b9190820391821161114457565b8181029291811591840414171561114457565b8115611a26570490565b634e487b7160e01b5f52601260045260245ffd5b67ffffffffffffffff811161188c5760051b60200190565b805182101561185c5760209160051b010190565b60095491611a7261196b565b92611a7c81611a3a565b92611a8a60405194856118a0565b818452601f19611a9983611a3a565b0136602086013783815f52600560205260405f209060405191611abb83611870565b549160018060a01b038316815260ff8360a01c1664ffffffffff602083019482865260a81c16604083015215908115611bac575b50611ba55750611b086102a860ff61ffff9351166118c2565b165f5b838110611b185750505050565b600190611b946001600160a01b03611b30838b611a52565b5116670de0b6b3a7640000611b8d61045e611b4a84612483565b895f52600b60205260405f20888060a01b0386165f5260205260405f2054948a5f52600a60205260405f2090898060a01b03165f5260205260405f2054906119fc565b04906119ef565b611b9e8289611a52565b5201611b0b565b9450505050565b9050611bb784611d1c565b90516001600160a01b03918216911614155f611aef565b611beb6127109161ffff611be460025492611c6a565b1690611a09565b0490565b6003546001600160a01b03168015611c6557602060049160405192838092637348753760e11b82525afa5f9181611c31575b50611c2b57505f90565b60011c90565b9091506020813d602011611c5d575b81611c4d602093836118a0565b810103126102865751905f611c21565b3d9150611c40565b505f90565b60ff168015611cbc5760018114611cb55760028114611cae5760038114611ca757600414611ca15763e142361760e01b5f5260045ffd5b615dc090565b5061232890565b5061119490565b5061089890565b506103e890565b60ff168015611d155760018114611d0e5760028114611d075760038114611d0057600414611cfa5763e142361760e01b5f5260045ffd5b61821490565b50614e2090565b50613e8090565b506130d490565b5061271090565b6040516331a9108f60e11b815260048101919091526020816024817f000000000000000000000000890215157dbec26d67605324271b34ba05ee9e586001600160a01b03165afa5f9181611d78575b50611d7557505f90565b90565b611d9291925060203d6020116113125761130481836118a0565b905f611d6b565b335f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604090205460ff1615611dd157565b63e2517d3f60e01b5f52336004525f60245260445ffd5b5f81815260016020908152604080832033845290915290205460ff1615611e0c5750565b63e2517d3f60e01b5f523360045260245260445ffd5b5f8181526001602090815260408083206001600160a01b038616845290915290205460ff16611ea8575f8181526001602081815260408084206001600160a01b0396909616808552959091528220805460ff19169091179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f8181526001602090815260408083206001600160a01b038616845290915290205460ff1615611ea8575f8181526001602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b60025f805160206128838339815191525414611f5b5760025f8051602061288383398151915255565b633ee5aeb560e01b5f5260045ffd5b60ff5f5416611f7557565b63d93c066560e01b5f5260045ffd5b5f60408051611f9281611870565b8281528260208201520152805f52600560205260405f209160405192611fb784611870565b546001600160a01b038116845260a081901c60ff166020850181905260a89190911c64ffffffffff1660408501528390156121ec5750611ff682611d1c565b835160208501516001600160a01b039283169190921614929061ffff90612023906102a89060ff166118c2565b166009545f5b81811061209f575050831561203c575050565b612048906006546119fc565b6006556007545f198101908111611144576007555f81815260056020526040812081905584516001600160a01b031691907f8d1c3f912b90cde417a26c3081730b53855bd9e8fd8b9fd236efe54d01199c9c9080a3565b806120ab600192611844565b838060a01b0391549060031b1c166120c2816121f3565b805f52600860205260405f206002810190670de0b6b3a764000061210e61210884548b5f52600a60205260405f20898060a01b0388165f5260205260405f2054906119fc565b89611a09565b04908a15612175575080612145575b505b5490865f52600a60205260405f2090848060a01b03165f5260205260405f205501612029565b875f52600b60205260405f20858060a01b0384165f5260205261216d60405f209182546119ef565b90555f61211d565b9061219e90895f52600b60205260405f20878060a01b0386165f5260205260405f2054906119ef565b90816121ac575b505061211f565b60046121da918a5f52600b60205260405f20888060a01b0387165f526020525f6040812055019182546119ef565b90556121e582612610565b5f806121a5565b92505f9150565b60018060a01b03165f52600860205260405f2080549064ffffffffff8260081c168042105f146122f1575064ffffffffff42925b60301c1680831161223757505050565b612259670de0b6b3a764000091612253600185015491866119fc565b90611a09565b0460065415155f146122d057670de0b6b3a7640000810290808204670de0b6b3a764000014901517156111445761199a9261229d64ffffffffff9260065490611a1c565b6122ac600285019182546119ef565b90555b825464ffffffffff60301b1916911660301b64ffffffffff60301b16179055565b61199a9264ffffffffff916122ea600485019182546119ef565b90556122af565b64ffffffffff9092612227565b6040516323b872dd60e01b5f9081526001600160a01b039384166004529290931660245260449390935260209060648180865af19060015f511482161561236f575b6040525f6060521561234f5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b90600181151661113b57823b15153d15161690612340565b3d156123c1573d9067ffffffffffffffff821161188c57604051916123b6601f8201601f1916602001846118a0565b82523d5f602084013e565b606090565b6001600160a01b0381165f8181526008602090815260409182902091516370a0823160e01b815230600482015292839060249082905afa918215610a46575f9261244e575b506003019182548083115f146124465761242590836119fc565b915b82612433575b50505050565b61243d93556126ee565b5f80808061242d565b505f91612427565b9091506020813d60201161247b575b8161246a602093836118a0565b81010312610286575190600361240b565b3d915061245d565b6001600160a01b03165f90815260086020526040902060065490811561253e57805464ffffffffff8160081c168042105f14612531575064ffffffffff42915b60301c1680821115612526576124ed600292612253670de0b6b3a7640000936001870154926119fc565b0491015490670de0b6b3a7640000810290808204670de0b6b3a7640000149015171561114457611d759261252091611a1c565b906119ef565b505060029150015490565b64ffffffffff90916124c3565b60029150015490565b6001600160a01b03168015610a5157805f52600860205260ff60405f20541661260157601060095410156125f257805f52600860205260405f20600160ff198254161790556009546801000000000000000081101561188c578060016125b09201600955611844565b81546001600160a01b0360039290921b91821b19169083901b1790557f03c34d97b6148c4667856b4706b54f991fa9d9be05f72a818947bddce3aba4695f80a2565b6303451c2960e21b5f5260045ffd5b6328f560bb60e21b5f5260045ffd5b612619816121f3565b60018060a01b03165f52600860205260405f206004810180545f81925564ffffffffff835460081c168042106126c5575b505080156126c157670de0b6b3a76400008102908104670de0b6b3a7640000036111445762278d0090046001820155805464ffffffffff60301b19164260301b64ffffffffff60301b1617815562278d0042018042116111445765ffffffffff0082549160081b169065ffffffffff001916179055565b5050565b6126e79250611b8d670de0b6b3a76400009161225360018701549142906119fc565b5f8061264a565b6126f7816121f3565b60018060a01b031690815f52600860205260405f20600481015f61271c8254856119ef565b915564ffffffffff825460081c168042106127dc575b50801561242d57670de0b6b3a76400008102908104670de0b6b3a7640000036111445762278d0090046001820155805464ffffffffff60301b19164260301b64ffffffffff60301b1617815562278d0042018042116111445765ffffffffff0082549160081b169065ffffffffff001916179055806127af575050565b60207fac24935fd910bc682b5ccb1a07b718cadf8cf2f6d1404c4f3ddc3662dae40e2991604051908152a2565b90670de0b6b3a7640000611b8d6127fd9361225360018701549142906119fc565b5f612732565b5f929183809360405190602082019363a9059cbb60e01b855260018060a01b0316602483015260448201526044815261283d6064826118a0565b51925af1612849612387565b9015611c65578051801561287b5760208110611ea8578160209181010312610286576020015180151581036102865790565b505060019056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220da9e146fe354d9d3e95ef661994aa6826699de210cabc39284f0a1d9f7eea63864736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| WALL | 199,009,511.575943 | $0.00154 | $306,179.7 | |
| Clock In (CLOCK IN) | CLOCK IN | 878.798669 | $0.000289 | $0.25 |
| TheCardWall (WALL) | WALL | 163,790,000 | — | — |
| 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 | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xf07aac…579cd4 | claimMany | 39,478,421 | 5 mins agoTue, 18 Aug 2026 06:20:48 UTC | 0x17b4…a976 | IN | SoftStakingVault | $0.000 ETH | 0.00000182 | |
| 0x416a0b…e7c106 | activate | 39,475,029 | 11 mins agoTue, 18 Aug 2026 06:15:07 UTC | 0xb083…ed8b | IN | SoftStakingVault | $1.000.00052 ETH | 0.00000338 | |
| 0xaa12ce…9b3786 | claimMany | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb083…ed8b | IN | SoftStakingVault | $0.000 ETH | 0.00001126 | |
| 0x1d4723…903bc6 | claim | 39,473,943 | 13 mins agoTue, 18 Aug 2026 06:13:19 UTC | 0x0899…2ea2 | IN | SoftStakingVault | $0.000 ETH | 0.00000185 | |
| 0x7ef4f1…125a9f | claimMany | 39,471,973 | 16 mins agoTue, 18 Aug 2026 06:10:00 UTC | 0x1d51…a198 | IN | SoftStakingVault | $0.000 ETH | 0.00000260 | |
| 0xa9acab…5343bf | claim | 39,464,298 | 29 mins agoTue, 18 Aug 2026 05:57:10 UTC | 0xc737…2a6c | IN | SoftStakingVault | $0.000 ETH | 0.00000184 | |
| 0x04c6d3…7338e7 | activate | 39,462,664 | 31 mins agoTue, 18 Aug 2026 05:54:26 UTC | 0xe451…584b | IN | SoftStakingVault | $1.000.00052 ETH | 0.00000278 | |
| 0x8da0f2…8a8ebd | activate | 39,461,933 | 33 mins agoTue, 18 Aug 2026 05:53:13 UTC | 0xe451…584b | IN | SoftStakingVault | $1.000.00052 ETH | 0.00000275 | |
| 0xfd99b9…ae455b | activate | 39,461,510 | 33 mins agoTue, 18 Aug 2026 05:52:30 UTC | 0xe451…584b | IN | SoftStakingVault | $1.000.00052 ETH | 0.00000275 | |
| 0x58357f…0a35f5 | claimMany | 39,459,712 | 36 mins agoTue, 18 Aug 2026 05:49:29 UTC | 0x5d81…52ad | IN | SoftStakingVault | $0.000 ETH | 0.00001976 | |
| 0xc33281…753fa7 | activate | 39,456,639 | 42 mins agoTue, 18 Aug 2026 05:44:21 UTC | 0x54cb…045f | IN | SoftStakingVault | $1.000.00052 ETH | 0.00000310 | |
| 0x30d515…90d14c | claimMany | 39,456,621 | 42 mins agoTue, 18 Aug 2026 05:44:19 UTC | 0x93cf…879c | IN | SoftStakingVault | $0.000 ETH | 0.00000409 | |
| 0x8d2619…868da5 | claim | 39,448,958 | 54 mins agoTue, 18 Aug 2026 05:31:29 UTC | 0xbe37…6d34 | IN | SoftStakingVault | $0.000 ETH | 0.00000184 | |
| 0x499864…7d4cc4 | claim | 39,447,374 | 57 mins agoTue, 18 Aug 2026 05:28:50 UTC | 0xbdd3…794a | IN | SoftStakingVault | $0.000 ETH | 0.00000185 | |
| 0xf7085d…88b70e | claim | 39,447,196 | 57 mins agoTue, 18 Aug 2026 05:28:32 UTC | 0x6976…4fcb | IN | SoftStakingVault | $0.000 ETH | 0.00000184 | |
| 0x25052c…a9b9df | claim | 39,439,636 | 1 hr agoTue, 18 Aug 2026 05:15:53 UTC | 0x79ac…9820 | IN | SoftStakingVault | $0.000 ETH | 0.00000183 | |
| 0x090d10…c4b72a | claimMany | 39,430,856 | 1 hr agoTue, 18 Aug 2026 05:01:11 UTC | 0x54cb…045f | IN | SoftStakingVault | $0.000 ETH | 0.00000259 | |
| 0x944b37…d28786 | activate | 39,426,966 | 1 hr agoTue, 18 Aug 2026 04:54:41 UTC | 0x41d3…cdde | IN | SoftStakingVault | $1.000.00052 ETH | 0.00000343 | |
| 0xad9c12…b11dac | activate | 39,418,447 | 1 hr agoTue, 18 Aug 2026 04:40:25 UTC | 0x58ab…5af2 | IN | SoftStakingVault | $1.000.00052 ETH | 0.00000341 | |
| 0x86b9cc…20b604 | claim | 39,418,160 | 1 hr agoTue, 18 Aug 2026 04:39:57 UTC | 0x58ab…5af2 | IN | SoftStakingVault | $0.000 ETH | 0.00000184 | |
| 0xd14704…faea29 | activate | 39,417,272 | 1 hr agoTue, 18 Aug 2026 04:38:28 UTC | 0x6800…f4e0 | IN | SoftStakingVault | $1.000.00052 ETH | 0.00000339 | |
| 0x30e1e8…efcd4c | activate | 39,416,860 | 1 hr agoTue, 18 Aug 2026 04:37:47 UTC | 0x6800…f4e0 | IN | SoftStakingVault | $1.000.00052 ETH | 0.00000338 | |
| 0x216b4c…dab78b | activate | 39,416,484 | 1 hr agoTue, 18 Aug 2026 04:37:09 UTC | 0x6800…f4e0 | IN | SoftStakingVault | $1.000.00052 ETH | 0.00000338 | |
| 0xad34d2…06c792 | claim | 39,407,550 | 2 hrs agoTue, 18 Aug 2026 04:22:12 UTC | 0x041c…74cb | IN | SoftStakingVault | $0.000 ETH | 0.00000184 | |
| 0xe07315…c3fe0e | claim | 39,406,049 | 2 hrs agoTue, 18 Aug 2026 04:19:42 UTC | 0xb990…dde6 | IN | SoftStakingVault | $0.000 ETH | 0.00000184 |
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xf07aac…579cd4 | 5 mins agoTue, 18 Aug 2026 06:20:48 UTC | 0x56a43b…8313 | [0] 0x000000000000…0000009f [1] 0x000000000000…bd8fa976 [2] 0x000000000000…b29821b1 data: 0x000000000000000000…87205f80 |
| 0xea7fe4…d24c5e | 8 mins agoTue, 18 Aug 2026 06:17:48 UTC | 0xac2493…0e29 | [0] 0x000000000000…b29821b1 data: 0x000000000000000000…38e00000 |
| 0x416a0b…e7c106 | 11 mins agoTue, 18 Aug 2026 06:15:07 UTC | 0xb8b07b…984e | [0] 0x000000000000…0000070b [1] 0x000000000000…efe8ed8b data: 0x000000000000000000…4e42b6ad |
| 0x416a0b…e7c106 | 11 mins agoTue, 18 Aug 2026 06:15:07 UTC | 0x4e4f10…0930 | [0] 0x000000000000…0000070b [1] 0x000000000000…efe8ed8b data: 0x000000000000000000…7b400000 |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…00000f7f [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…59ff56a5 |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…00000641 [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…59ff56a5 |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…00000627 [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…707f2c4f |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…000005f6 [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…b3fead4b |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…000004b4 [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…ce6e6f03 |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…0000028e [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…59ff56a5 |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…0000028c [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…707f2c4f |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…00000260 [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…8ffef109 |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…0000025e [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…707f2c4f |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…00000257 [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…b3fead4b |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…0000020e [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…b3fead4b |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…00000140 [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…f87dcc0e |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…0000013f [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…f87dcc0e |
| 0xaa12ce…9b3786 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0x56a43b…8313 | [0] 0x000000000000…0000002e [1] 0x000000000000…efe8ed8b [2] 0x000000000000…b29821b1 data: 0x000000000000000000…f87dcc0e |
| 0x30d36f…67a7cb | 12 mins agoTue, 18 Aug 2026 06:14:20 UTC | 0xac2493…0e29 | [0] 0x000000000000…b29821b1 data: 0x000000000000000000…38e00000 |
| 0x1d4723…903bc6 | 13 mins agoTue, 18 Aug 2026 06:13:19 UTC | 0x56a43b…8313 | [0] 0x000000000000…00000643 [1] 0x000000000000…368d2ea2 [2] 0x000000000000…b29821b1 data: 0x000000000000000000…24ed12f9 |
| 0x822aaa…bdb983 | 14 mins agoTue, 18 Aug 2026 06:12:22 UTC | 0xac2493…0e29 | [0] 0x000000000000…b29821b1 data: 0x000000000000000000…38e00000 |
| 0x7ef4f1…125a9f | 16 mins agoTue, 18 Aug 2026 06:10:00 UTC | 0x56a43b…8313 | [0] 0x000000000000…0000030d [1] 0x000000000000…eeafa198 [2] 0x000000000000…b29821b1 data: 0x000000000000000000…4b262545 |
| 0x7ef4f1…125a9f | 16 mins agoTue, 18 Aug 2026 06:10:00 UTC | 0x56a43b…8313 | [0] 0x000000000000…0000011e [1] 0x000000000000…eeafa198 [2] 0x000000000000…b29821b1 data: 0x000000000000000000…4b262545 |
| 0x26f4e8…c4406b | 21 mins agoTue, 18 Aug 2026 06:05:20 UTC | 0xac2493…0e29 | [0] 0x000000000000…b29821b1 data: 0x000000000000000000…d4600000 |
| 0xa9acab…5343bf | 29 mins agoTue, 18 Aug 2026 05:57:10 UTC | 0x56a43b…8313 | [0] 0x000000000000…00000320 [1] 0x000000000000…c1872a6c [2] 0x000000000000…b29821b1 data: 0x000000000000000000…12b088ba |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 39,475,029 | 11 mins agoTue, 18 Aug 2026 06:15:07 UTC | 0x416a0b…e7c106 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,462,664 | 31 mins agoTue, 18 Aug 2026 05:54:26 UTC | 0x04c6d3…7338e7 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,461,933 | 33 mins agoTue, 18 Aug 2026 05:53:13 UTC | 0x8da0f2…8a8ebd | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,461,510 | 33 mins agoTue, 18 Aug 2026 05:52:30 UTC | 0xfd99b9…ae455b | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,456,639 | 42 mins agoTue, 18 Aug 2026 05:44:21 UTC | 0xc33281…753fa7 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,426,966 | 1 hr agoTue, 18 Aug 2026 04:54:41 UTC | 0x944b37…d28786 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,418,447 | 1 hr agoTue, 18 Aug 2026 04:40:25 UTC | 0xad9c12…b11dac | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,417,272 | 1 hr agoTue, 18 Aug 2026 04:38:28 UTC | 0xd14704…faea29 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,416,860 | 1 hr agoTue, 18 Aug 2026 04:37:47 UTC | 0x30e1e8…efcd4c | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,416,484 | 1 hr agoTue, 18 Aug 2026 04:37:09 UTC | 0x216b4c…dab78b | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,400,095 | 2 hrs agoTue, 18 Aug 2026 04:09:44 UTC | 0x6200b2…40885d | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,388,058 | 2 hrs agoTue, 18 Aug 2026 03:49:36 UTC | 0x08d6d0…a7a7ef | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,371,401 | 3 hrs agoTue, 18 Aug 2026 03:21:46 UTC | 0x8de18f…9b54c6 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,365,704 | 3 hrs agoTue, 18 Aug 2026 03:12:14 UTC | 0xef84fb…848d2d | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,364,558 | 3 hrs agoTue, 18 Aug 2026 03:10:19 UTC | 0xd08bcf…92777d | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,362,723 | 3 hrs agoTue, 18 Aug 2026 03:07:16 UTC | 0x255443…dd8805 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,357,380 | 3 hrs agoTue, 18 Aug 2026 02:58:20 UTC | 0xc9a590…95a499 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,357,135 | 3 hrs agoTue, 18 Aug 2026 02:57:56 UTC | 0x1fe9b2…f37f5d | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,355,433 | 3 hrs agoTue, 18 Aug 2026 02:55:06 UTC | 0xbcb93f…c74843 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,354,791 | 3 hrs agoTue, 18 Aug 2026 02:54:01 UTC | 0x63bdaf…7ca603 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,354,564 | 3 hrs agoTue, 18 Aug 2026 02:53:39 UTC | 0x8872f8…46fa58 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,354,530 | 3 hrs agoTue, 18 Aug 2026 02:53:35 UTC | 0x03dd49…012c6b | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,352,137 | 3 hrs agoTue, 18 Aug 2026 02:49:36 UTC | 0xcfc1f0…f1c706 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,351,719 | 3 hrs agoTue, 18 Aug 2026 02:48:54 UTC | 0x43d599…52bc0c | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| 39,350,737 | 3 hrs agoTue, 18 Aug 2026 02:47:15 UTC | 0xcbe170…c3d906 | CALL | activate | 0xb3f6…b6ed | OUT | 0xb668…7cda | 0.00052 ETH |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xf07aac6b…579cd4 | Transfer | 39,478,421 | 5 mins agoTue, 18 Aug 2026 06:20:48 UTC | 0xb3f6…b6ed | OUT | 0x17b4…a976 | $NaN7,490.666230 WALL | ||
| 0xea7fe4c4…d24c5e | Transfer | 39,476,626 | 8 mins agoTue, 18 Aug 2026 06:17:48 UTC | 0xdd59…9379 | IN | 0xb3f6…b6ed | $NaN75,000.000000 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $1.31851.986957 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $1.31851.986957 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN1,064.983696 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN1,703.973914 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN1,063.799963 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $1.31851.986957 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN1,064.983696 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN1,363.179131 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN1,064.983696 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN1,703.973914 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN1,703.973914 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN2,837.116567 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN2,837.116567 WALL | ||
| 0xaa12ce53…9b3786 | Transfer | 39,474,765 | 11 mins agoTue, 18 Aug 2026 06:14:41 UTC | 0xb3f6…b6ed | OUT | 0xb083…ed8b | $NaN2,837.116567 WALL | ||
| 0x30d36f7b…67a7cb | Transfer | 39,474,553 | 12 mins agoTue, 18 Aug 2026 06:14:20 UTC | 0xdd59…9379 | IN | 0xb3f6…b6ed | $NaN75,000.000000 WALL | ||
| 0x1d472367…903bc6 | Transfer | 39,473,943 | 13 mins agoTue, 18 Aug 2026 06:13:19 UTC | 0xb3f6…b6ed | OUT | 0x0899…2ea2 | $NaN2,106.727502 WALL | ||
| 0x822aaa34…bdb983 | Transfer | 39,473,384 | 14 mins agoTue, 18 Aug 2026 06:12:22 UTC | 0xdd59…9379 | IN | 0xb3f6…b6ed | $NaN75,000.000000 WALL | ||
| 0x7ef4f1df…125a9f | Transfer | 39,471,973 | 16 mins agoTue, 18 Aug 2026 06:10:00 UTC | 0xb3f6…b6ed | OUT | 0x1d51…a198 | $NaN2,452.040086 WALL | ||
| 0x7ef4f1df…125a9f | Transfer | 39,471,973 | 16 mins agoTue, 18 Aug 2026 06:10:00 UTC | 0xb3f6…b6ed | OUT | 0x1d51…a198 | $NaN2,452.040086 WALL | ||
| 0x26f4e8ab…c4406b | Transfer | 39,469,179 | 21 mins agoTue, 18 Aug 2026 06:05:20 UTC | 0xdd59…9379 | IN | 0xb3f6…b6ed | $NaN55,000.000000 WALL | ||
| 0xa9acab01…5343bf | Transfer | 39,464,298 | 29 mins agoTue, 18 Aug 2026 05:57:10 UTC | 0xb3f6…b6ed | OUT | 0xc737…2a6c | $NaN1,539.010411 WALL | ||
| 0x58357f10…0a35f5 | Transfer | 39,459,712 | 36 mins agoTue, 18 Aug 2026 05:49:29 UTC | 0xb3f6…b6ed | OUT | 0x5d81…52ad | $0.74478.253983 WALL | ||
| 0x58357f10…0a35f5 | Transfer | 39,459,712 | 36 mins agoTue, 18 Aug 2026 05:49:29 UTC | 0xb3f6…b6ed | OUT | 0x5d81…52ad | $0.74478.253983 WALL |