// 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 {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import {RewardVault} from "./RewardVault.sol";
/// @dev The one Collection view the vault's funding gauge needs (D34).
interface ICollectionMinted {
function totalMinted() external view returns (uint256);
}
/// @dev The token as this vault burns it. Every launched token is burnable;
/// the interface exists so the vault can keep holding a plain IERC20.
interface IERC20Burnable {
function burn(uint256 amount) external;
}
/// @notice Where a vault trade fee goes, and what it costs to trade (D78/D79).
/// Grouped rather than passed flat: the constructor was already at twelve
/// arguments and the same ABI-decode stack limit that forced `CurveParams` on
/// the Launchpad was one argument away.
struct VaultFees {
/// @dev sellNFT + buyRandomNFT. Since D78 `specificBps` matches it: buying
/// a NAMED bull used to cost double, which taxed the only reason anyone
/// looks at the collection.
uint16 randomBps;
uint16 specificBps;
/// @dev The three-way cut of the fee itself, in bps OF THE FEE. The
/// holders' share is the remainder — see `holdersShareBps`.
uint16 burnBps;
uint16 lpBps;
address lpSafe;
}
/// @title Fixed-ratio NFT<->token exchange (D28, blueprint anvil.clutch.market)
/// @notice One per launch. Inverted from Anvil: their vault starts empty of
/// NFTs with 100% of supply escrowed; ours starts with the community holding
/// free-minted NFTs and a 5% escrow (D29). The two sides mirror-fill:
/// `escrowBalance >= ESCROW_ALLOC - N x inventory` at all times, and the
/// worst case (every NFT sold in) pays out exactly ESCROW_ALLOC — solvency by
/// construction, enforced at the constructor (`N x maxSupply == escrowAlloc`).
///
/// Inactive until the Launchpad calls `activate()` at graduation, which is
/// also when the escrow arrives. No owner, no pause, no parameter changes —
/// same freeze ethos as LaunchedToken.
contract NFTVault {
using SafeERC20 for IERC20;
uint16 internal constant BPS = 10_000;
/// @dev Anvil's range: staker fee 1-15%.
uint16 internal constant MAX_TRADE_FEE_BPS = 1_500;
uint256 internal constant TOMBSTONE = type(uint256).max;
IERC721 public immutable COLLECTION;
IERC20 public immutable TOKEN;
RewardVault public immutable REWARDS;
address public immutable TREASURY;
address public immutable LAUNCHPAD;
/// @notice Tokens per NFT — the floor. Since D34 it is DECOUPLED from the
/// day-one funding: `N = fullBps × tokenSupply / 1e4 / maxSupply`, a target
/// far above what the 5% escrow funds. On the genesis D87 puts `fullBps` at
/// 10_000, so one NFT is quoted at a 1/maxSupply share of the whole supply
/// and the escrow funds 5.05% of it. The vault is deliberately fractionally
/// reserved: `buyNFT` returns N, and the SkimRouter can route a share of
/// every convert (zero since D80). `sellNFT` pays out of the real balance
/// and reverts `VaultDry` when it runs out — the pre-D34 "solvent by
/// construction" is now "bounded by the balance, funding is public".
///
/// A `fullBps` of 10_000 also means `FULL_TARGET` IS the supply, so
/// `missingToFull()` never reaches zero and a refill would have no term.
/// That is deliberate (D87), not an oversight to be clamped away.
uint256 public immutable N;
/// @notice N × maxSupply — the balance at which the floor is 100% funded.
uint256 public immutable FULL_TARGET;
/// @notice Tokens transferred in at graduation (day-one funding). Backs
/// the `active` check; the funding ratio is `balance / (N × outside)`.
uint256 public immutable ESCROW_ALLOC;
uint16 public immutable RANDOM_FEE_BPS; // sellNFT + buyRandomNFT
uint16 public immutable SPECIFIC_FEE_BPS; // buySpecificNFT, >= random
/// @notice The cut OF THE FEE, not of N. D78 replaced "all of it streams to
/// holders" with three legs, because a fee that only streams is a fee that
/// never reduces supply and never thickens the pool.
uint16 public immutable FEE_BURN_BPS;
uint16 public immutable FEE_LP_BPS;
address public immutable LP_SAFE;
bool public active;
/// @dev FIFO inventory (Anvil: random buy = oldest deposit). buySpecific
/// leaves a TOMBSTONE that random pops skip.
uint256[] internal fifo;
uint256 public fifoHead;
uint256 public inventoryCount;
mapping(uint256 tokenId => bool) public inVault;
mapping(uint256 tokenId => uint256) internal fifoIdx;
event Activated(uint256 escrow);
event SoldToVault(uint256 indexed tokenId, address indexed seller, uint256 payout);
event BoughtFromVault(uint256 indexed tokenId, address indexed buyer, uint256 cost, bool specific);
error FeeOutOfRange();
error BadFeeSplit();
error BadFloorTarget(uint256 n, uint256 escrowAlloc, uint256 fullTarget);
error NotLaunchpad();
error AlreadyActive();
error NotActive();
error EscrowShort(uint256 balance, uint256 needed);
error SlippageExceeded();
error EmptyInventory();
error NotInInventory();
error ZeroSupplyCollection();
error VaultDry(uint256 balance, uint256 needed);
constructor(
IERC721 collection,
IERC20 token,
RewardVault rewards,
address treasury,
address launchpad,
uint256 maxSupply,
uint256 tokenSupply,
uint256 fullBps,
uint256 escrowAlloc,
VaultFees memory f
) {
if (maxSupply == 0) revert ZeroSupplyCollection();
if (
f.randomBps > MAX_TRADE_FEE_BPS || f.specificBps > MAX_TRADE_FEE_BPS
|| f.specificBps < f.randomBps
) revert FeeOutOfRange();
// The three legs must add up, and the one that can be paid to an
// address must have an address to be paid to.
if (uint256(f.burnBps) + f.lpBps > BPS) revert BadFeeSplit();
if (f.lpBps != 0 && f.lpSafe == address(0)) revert BadFeeSplit();
// D34: N is the FLOOR TARGET, not the funding. Floor division leaves a
// dust below one N escrowed forever (cheaper than forcing supplies to
// divide evenly). Two bounds:
// - `escrowAlloc <= fullTarget`: day-one funding cannot exceed the
// 100%-funded mark (else the "trajectory to full" is already past
// full and `fundingBps` would need clamping on arrival, not use).
// - `escrowAlloc >= n`: the day-one balance covers at least one sell,
// or the vault is dead on arrival.
uint256 n = (fullBps * tokenSupply) / BPS / maxSupply;
uint256 fullTarget = n * maxSupply;
if (n == 0 || escrowAlloc < n || escrowAlloc > fullTarget) {
revert BadFloorTarget(n, escrowAlloc, fullTarget);
}
COLLECTION = collection;
TOKEN = token;
REWARDS = rewards;
TREASURY = treasury;
LAUNCHPAD = launchpad;
N = n;
FULL_TARGET = fullTarget;
ESCROW_ALLOC = escrowAlloc;
RANDOM_FEE_BPS = f.randomBps;
SPECIFIC_FEE_BPS = f.specificBps;
FEE_BURN_BPS = f.burnBps;
FEE_LP_BPS = f.lpBps;
LP_SAFE = f.lpSafe;
// Fee intake path: REWARDS.notify pulls from us.
token.forceApprove(address(rewards), type(uint256).max);
}
/// @notice Flipped once by the Launchpad inside `_graduate`, after it has
/// transferred the escrow allocation. Atomic with graduation: nobody holds
/// an "activate" button.
function activate() external {
if (msg.sender != LAUNCHPAD) revert NotLaunchpad();
if (active) revert AlreadyActive();
uint256 bal = TOKEN.balanceOf(address(this));
if (bal < ESCROW_ALLOC) revert EscrowShort(bal, ESCROW_ALLOC);
active = true;
emit Activated(bal);
}
// ---- Sell side: NFT in, tokens out ----
/// @notice Deposit an NFT, receive `N - fees` tokens. The seller's pending
/// fee stream is paid out by the RewardVault on the way in (the NFT stops
/// accruing while it sits in inventory).
function sellNFT(uint256 tokenId, uint256 minPayout) external returns (uint256 payout) {
if (!active) revert NotActive();
uint256 tradeFee = (N * RANDOM_FEE_BPS) / BPS;
payout = N - tradeFee;
if (payout < minPayout) revert SlippageExceeded();
// D34: the vault is fractionally reserved. Pay only if the balance
// covers a whole N (the trade fee splits three ways, the payout goes to
// the seller — N leaves in total). When the floor is under-funded the
// guichet closes with VaultDry rather than half-paying; it reopens as
// buyNFTs and convert refills top it up.
if (TOKEN.balanceOf(address(this)) < N) {
revert VaultDry(TOKEN.balanceOf(address(this)), N);
}
COLLECTION.transferFrom(msg.sender, address(this), tokenId);
_push(tokenId);
REWARDS.onLeave(tokenId, msg.sender);
_splitFee(tradeFee);
TOKEN.safeTransfer(msg.sender, payout);
emit SoldToVault(tokenId, msg.sender, payout);
}
// ---- Buy side: tokens in, NFT out ----
/// @notice Pay `N + fees` tokens for the oldest NFT in inventory.
function buyRandomNFT(uint256 maxCost) external returns (uint256 tokenId) {
tokenId = _popOldest();
_buy(tokenId, RANDOM_FEE_BPS, maxCost, false);
}
/// @notice Pay `N + fees` (specific rate) for an exact tokenId. D78 set the
/// specific rate equal to the random one on the genesis: the premium had
/// been pricing selection, and selection is the only reason to look at a
/// collection whose art differs bull by bull. The two rates stay separate
/// parameters — a later market may want the delta back.
function buySpecificNFT(uint256 tokenId, uint256 maxCost) external {
if (!inVault[tokenId]) revert NotInInventory();
fifo[fifoIdx[tokenId]] = TOMBSTONE;
_buy(tokenId, SPECIFIC_FEE_BPS, maxCost, true);
}
// ---- Funding trajectory (D34) ----
/// @notice NFTs minted and outside the vault — the float the floor must
/// stand behind. `N × outside` is 100% funding for the current float;
/// `FULL_TARGET` is 100% for the whole collection.
function outside() public view returns (uint256) {
// Clamped, never a bare subtraction: `fundingBps()` sits on the
// critical path of `SkimRouter.convert` (the refill), so an underflow
// here would brick every convert of this market for good on an
// immutable contract. `inventoryCount` should never exceed `totalMinted`
// — this is insurance against an adopted collection whose counter is
// not the monotone one this vault assumes.
uint256 minted = ICollectionMinted(address(COLLECTION)).totalMinted();
return minted > inventoryCount ? minted - inventoryCount : 0;
}
/// @notice How funded the floor is for the current float, in bps, capped at
/// 1e4 (100%). `1e4` means every outside NFT can sell at N right now.
function fundingBps() public view returns (uint256) {
uint256 need = N * outside();
if (need == 0) return BPS; // no float to back yet
uint256 bal = TOKEN.balanceOf(address(this));
uint256 ratio = (bal * BPS) / need;
return ratio > BPS ? BPS : ratio;
}
/// @notice Tokens still needed to reach 100% of FULL_TARGET (the whole
/// collection at N). Zero once the vault holds FULL_TARGET or more.
function missingToFull() public view returns (uint256) {
uint256 bal = TOKEN.balanceOf(address(this));
return bal >= FULL_TARGET ? 0 : FULL_TARGET - bal;
}
// ---- Quotes ----
/// @notice The holders' share of a trade fee, derived from the other two so
/// a split that does not add up to 100% cannot be deployed.
function holdersShareBps() public view returns (uint16) {
return BPS - FEE_BURN_BPS - FEE_LP_BPS;
}
function quoteSell() external view returns (uint256) {
return N - (N * RANDOM_FEE_BPS) / BPS;
}
function quoteBuyRandom() public view returns (uint256) {
return N + (N * RANDOM_FEE_BPS) / BPS;
}
function quoteBuySpecific() public view returns (uint256) {
return N + (N * SPECIFIC_FEE_BPS) / BPS;
}
// ---- Internals ----
/// @dev The fee is paid in $TOKEN and leaves in three legs (D78): burned,
/// parked in the LP safe, streamed to holders. The stream takes the
/// remainder rather than a third multiplication, so rounding dust follows
/// the holders instead of being stranded on this contract forever.
function _splitFee(uint256 fee) internal {
if (fee == 0) return;
uint256 burned = (fee * FEE_BURN_BPS) / BPS;
uint256 toLp = (fee * FEE_LP_BPS) / BPS;
uint256 toHolders = fee - burned - toLp;
if (burned > 0) IERC20Burnable(address(TOKEN)).burn(burned);
if (toLp > 0) TOKEN.safeTransfer(LP_SAFE, toLp);
// Last, and only if nonzero: `notify` reverts on a zero amount, and a
// split configured with no holders' leg must not brick every trade.
if (toHolders > 0) REWARDS.notify(address(TOKEN), toHolders);
}
function _buy(uint256 tokenId, uint16 feeBps, uint256 maxCost, bool specific) internal {
if (!active) revert NotActive();
uint256 tradeFee = (N * feeBps) / BPS;
uint256 cost = N + tradeFee;
if (cost > maxCost) revert SlippageExceeded();
inVault[tokenId] = false;
inventoryCount -= 1;
// The principal N returns to escrow (this contract); only the fees move on.
TOKEN.safeTransferFrom(msg.sender, address(this), cost);
_splitFee(tradeFee);
REWARDS.onJoin(tokenId);
// Plain transferFrom out: no receiver callback, no reentrancy surface.
COLLECTION.transferFrom(address(this), msg.sender, tokenId);
emit BoughtFromVault(tokenId, msg.sender, cost, specific);
}
function _push(uint256 tokenId) internal {
inVault[tokenId] = true;
fifoIdx[tokenId] = fifo.length;
fifo.push(tokenId);
inventoryCount += 1;
}
function _popOldest() internal returns (uint256 tokenId) {
uint256 head = fifoHead;
uint256 len = fifo.length;
while (head < len && fifo[head] == TOMBSTONE) {
head++;
}
if (head >= len) revert EmptyInventory();
tokenId = fifo[head];
fifo[head] = TOMBSTONE;
fifoHead = head + 1;
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "collection",
"type": "address",
"internalType": "contract IERC721"
},
{
"name": "token",
"type": "address",
"internalType": "contract IERC20"
},
{
"name": "rewards",
"type": "address",
"internalType": "contract RewardVault"
},
{
"name": "treasury",
"type": "address",
"internalType": "address"
},
{
"name": "launchpad",
"type": "address",
"internalType": "address"
},
{
"name": "maxSupply",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "tokenSupply",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "fullBps",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "escrowAlloc",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "f",
"type": "tuple",
"components": [
{
"name": "randomBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "specificBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "burnBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "lpBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "lpSafe",
"type": "address",
"internalType": "address"
}
],
"internalType": "struct VaultFees"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadyActive",
"type": "error",
"inputs": []
},
{
"name": "BadFeeSplit",
"type": "error",
"inputs": []
},
{
"name": "BadFloorTarget",
"type": "error",
"inputs": [
{
"name": "n",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "escrowAlloc",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "fullTarget",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "EmptyInventory",
"type": "error",
"inputs": []
},
{
"name": "EscrowShort",
"type": "error",
"inputs": [
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "FeeOutOfRange",
"type": "error",
"inputs": []
},
{
"name": "NotActive",
"type": "error",
"inputs": []
},
{
"name": "NotInInventory",
"type": "error",
"inputs": []
},
{
"name": "NotLaunchpad",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "SlippageExceeded",
"type": "error",
"inputs": []
},
{
"name": "VaultDry",
"type": "error",
"inputs": [
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ZeroSupplyCollection",
"type": "error",
"inputs": []
},
{
"name": "Activated",
"type": "event",
"inputs": [
{
"name": "escrow",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BoughtFromVault",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "buyer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "cost",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "specific",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "SoldToVault",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "seller",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "payout",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "COLLECTION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC721"
}
],
"stateMutability": "view"
},
{
"name": "ESCROW_ALLOC",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "FEE_BURN_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "FEE_LP_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "FULL_TARGET",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "LAUNCHPAD",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "LP_SAFE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "N",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "RANDOM_FEE_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "REWARDS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract RewardVault"
}
],
"stateMutability": "view"
},
{
"name": "SPECIFIC_FEE_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "TOKEN",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC20"
}
],
"stateMutability": "view"
},
{
"name": "TREASURY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "activate",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "active",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "buyRandomNFT",
"type": "function",
"inputs": [
{
"name": "maxCost",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "buySpecificNFT",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxCost",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "fifoHead",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "fundingBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "holdersShareBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"name": "inVault",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "inventoryCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "missingToFull",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "outside",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "quoteBuyRandom",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "quoteBuySpecific",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "quoteSell",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "sellNFT",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "minPayout",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "payout",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
}
]0x608060405234801561000f575f80fd5b50600436106101bb575f3560e01c806384265a90116100f3578063be33f3c511610093578063c9e525df1161006e578063c9e525df14610459578063d7e02b9a14610480578063e7a8304a14610489578063f3918e741461049c575f80fd5b8063be33f3c5146103e9578063c0034e0c1461040b578063c5d5ec9b14610432575f80fd5b80639bcada07116100ce5780639bcada071461038b5780639f47f9cd14610393578063a34d80c0146103ba578063ab2a85b8146103e1575f80fd5b806384265a901461032a57806391a48a1e1461035157806393b3eb9014610364575f80fd5b80633221ac811161015e57806351431d4f1161013957806351431d4f146102ac5780635b98c83d146102d3578063697b2365146102dc57806382bfefc814610303575f80fd5b80633221ac811461026a5780633559952b1461027257806343dbce8514610285575f80fd5b80630d4c557c116101995780630d4c557c146102115780630f15f4c0146102195780632d2c55651461022357806331a3b42314610262575f80fd5b8063028cb683146101bf57806302fb0c5e146101df578063099b390b146101fb575b5f80fd5b6101c76104c3565b60405161ffff90911681526020015b60405180910390f35b5f546101eb9060ff1681565b60405190151581526020016101d6565b610203610520565b6040519081526020016101d6565b6102036105a6565b61022161062c565b005b61024a7f000000000000000000000000d23996aae8cc2aed900d87662378bd678e76cdb081565b6040516001600160a01b0390911681526020016101d6565b6102036107da565b61020361082c565b610221610280366004611600565b610931565b6102037f0000000000000000000000000000000000000000033b2e3c9fd0803ce7fffc1881565b61024a7f000000000000000000000000af5634f6842ee0917100f4bd824314eabc5d4eb481565b61020360035481565b61024a7f0000000000000000000000004d908ec6f8b6b63dcd57e68ede19e595c402d83b81565b61024a7f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d73981565b6101c77f000000000000000000000000000000000000000000000000000000000000006481565b61020361035f366004611600565b6109bf565b61024a7f000000000000000000000000d6845862ec2dd58cc00196eb6a8abe85bd465c5981565b610203610d84565b6102037f00000000000000000000000000000000000000000029c5ca7c4b6ce04280000081565b6101c77f000000000000000000000000000000000000000000000000000000000000000081565b610203610e2a565b6101eb6103f7366004611620565b60046020525f908152604090205460ff1681565b61024a7f000000000000000000000000dc2c2b8d0bc231b0d8ad5977f932dc2e6b948d9181565b6101c77f000000000000000000000000000000000000000000000000000000000000138881565b6102037f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf81565b61020360025481565b610203610497366004611620565b610f14565b6101c77f000000000000000000000000000000000000000000000000000000000000006481565b5f7f00000000000000000000000000000000000000000000000000000000000000006105117f000000000000000000000000000000000000000000000000000000000000138861271061164b565b61051b919061164b565b905090565b5f6127106105727f000000000000000000000000000000000000000000000000000000000000006461ffff167f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf61166b565b61057c9190611682565b61051b907f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf6116a1565b5f6127106105f87f000000000000000000000000000000000000000000000000000000000000006461ffff167f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf61166b565b6106029190611682565b61051b907f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf6116b4565b336001600160a01b037f000000000000000000000000af5634f6842ee0917100f4bd824314eabc5d4eb416146106755760405163ed6fcad960e01b815260040160405180910390fd5b5f5460ff161561069857604051637cdf305160e11b815260040160405180910390fd5b6040516370a0823160e01b81523060048201525f907f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d7396001600160a01b0316906370a0823190602401602060405180830381865afa1580156106fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061072091906116c7565b90507f00000000000000000000000000000000000000000029c5ca7c4b6ce04280000081101561079157604051633e0ecca360e11b8152600481018290527f00000000000000000000000000000000000000000029c5ca7c4b6ce04280000060248201526044015b60405180910390fd5b5f805460ff191660011790556040517f3ec796be1be7d03bff3a62b9fa594a60e947c1809bced06d929f145308ae57ce906107cf9083815260200190565b60405180910390a150565b5f6127106105f87f000000000000000000000000000000000000000000000000000000000000006461ffff167f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf61166b565b5f80610836610d84565b610860907f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf61166b565b9050805f036108725750612710919050565b6040516370a0823160e01b81523060048201525f907f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d7396001600160a01b0316906370a0823190602401602060405180830381865afa1580156108d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108fa91906116c7565b90505f8261090a6127108461166b565b6109149190611682565b905061271081116109255780610929565b6127105b935050505090565b5f8281526004602052604090205460ff1661095f57604051631544738d60e21b815260040160405180910390fd5b5f82815260056020526040902054600180545f1992908110610983576109836116de565b5f918252602090912001556109bb827f0000000000000000000000000000000000000000000000000000000000000064836001610f50565b5050565b5f805460ff166109e257604051634065aaf160e11b815260040160405180910390fd5b5f612710610a347f000000000000000000000000000000000000000000000000000000000000006461ffff167f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf61166b565b610a3e9190611682565b9050610a6a817f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf6116a1565b915082821015610a8d57604051638199f5f360e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf907f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d7396001600160a01b0316906370a0823190602401602060405180830381865afa158015610b11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3591906116c7565b1015610c04576040516370a0823160e01b81523060048201527f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d7396001600160a01b0316906370a0823190602401602060405180830381865afa158015610b9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc191906116c7565b604051630f9b144d60e01b815260048101919091527f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf6024820152604401610788565b6040516323b872dd60e01b8152336004820152306024820152604481018590527f0000000000000000000000004d908ec6f8b6b63dcd57e68ede19e595c402d83b6001600160a01b0316906323b872dd906064015f604051808303815f87803b158015610c6f575f80fd5b505af1158015610c81573d5f803e3d5ffd5b50505050610c8e846111a6565b60405163679f8c1360e11b8152600481018590523360248201527f000000000000000000000000dc2c2b8d0bc231b0d8ad5977f932dc2e6b948d916001600160a01b03169063cf3f1826906044015f604051808303815f87803b158015610cf3575f80fd5b505af1158015610d05573d5f803e3d5ffd5b50505050610d128161121b565b610d466001600160a01b037f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d739163384611439565b604051828152339085907fa1c5f9dd35c2d55dee580b8c08fdafc4a187322b06bd9d67864f73cc62e6d30b9060200160405180910390a35092915050565b5f807f0000000000000000000000004d908ec6f8b6b63dcd57e68ede19e595c402d83b6001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0691906116c7565b90506003548111610e17575f610e24565b600354610e2490826116a1565b91505090565b6040516370a0823160e01b81523060048201525f9081906001600160a01b037f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d73916906370a0823190602401602060405180830381865afa158015610e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb491906116c7565b90507f0000000000000000000000000000000000000000033b2e3c9fd0803ce7fffc18811015610f0d57610f08817f0000000000000000000000000000000000000000033b2e3c9fd0803ce7fffc186116a1565b610e24565b5f91505090565b5f610f1d61149d565b9050610f4b817f0000000000000000000000000000000000000000000000000000000000000064845f610f50565b919050565b5f5460ff16610f7257604051634065aaf160e11b815260040160405180910390fd5b5f612710610fa461ffff86167f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf61166b565b610fae9190611682565b90505f610fdb827f00000000000000000000000000000000000000000000326b2b313cfba03cf3cf6116b4565b905083811115610ffe57604051638199f5f360e01b815260040160405180910390fd5b5f868152600460205260408120805460ff1916905560038054600192906110269084906116a1565b9091555061106190506001600160a01b037f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d7391633308461155b565b61106a8261121b565b604051633ec05cc760e01b8152600481018790527f000000000000000000000000dc2c2b8d0bc231b0d8ad5977f932dc2e6b948d916001600160a01b031690633ec05cc7906024015f604051808303815f87803b1580156110c9575f80fd5b505af11580156110db573d5f803e3d5ffd5b50506040516323b872dd60e01b8152306004820152336024820152604481018990527f0000000000000000000000004d908ec6f8b6b63dcd57e68ede19e595c402d83b6001600160a01b031692506323b872dd91506064015f604051808303815f87803b15801561114a575f80fd5b505af115801561115c573d5f803e3d5ffd5b50506040805184815286151560208201523393508992507fee08500ebf6cc5f4dcb4802caf3f8fc1584e7056ca70960b68e979e7d9e27ae5910160405180910390a3505050505050565b5f818152600460209081526040808320805460ff191660019081179091558054600590935290832082905581810181558083527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690910183905560038054919290916112139084906116b4565b909155505050565b805f036112255750565b5f6127106112577f000000000000000000000000000000000000000000000000000000000000138861ffff168461166b565b6112619190611682565b90505f6127106112957f000000000000000000000000000000000000000000000000000000000000000061ffff168561166b565b61129f9190611682565b90505f816112ad84866116a1565b6112b791906116a1565b9050821561133557604051630852cd8d60e31b8152600481018490527f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d7396001600160a01b0316906342966c68906024015f604051808303815f87803b15801561131e575f80fd5b505af1158015611330573d5f803e3d5ffd5b505050505b811561138f5761138f6001600160a01b037f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d739167f000000000000000000000000d6845862ec2dd58cc00196eb6a8abe85bd465c5984611439565b8015611433576040516312fed0bb60e11b81526001600160a01b037f000000000000000000000000bd4a8293e7c3718d0f6c16de50ad66a506b2d73981166004830152602482018390527f000000000000000000000000dc2c2b8d0bc231b0d8ad5977f932dc2e6b948d9116906325fda176906044015f604051808303815f87803b15801561141c575f80fd5b505af115801561142e573d5f803e3d5ffd5b505050505b50505050565b6040516001600160a01b0383811660248301526044820183905261149891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611594565b505050565b6002546001545f91905b80821080156114d157505f19600183815481106114c6576114c66116de565b905f5260205f200154145b156114e857816114e0816116f2565b9250506114a7565b8082106115085760405163c5144d6560e01b815260040160405180910390fd5b6001828154811061151b5761151b6116de565b905f5260205f20015492505f196001838154811061153b5761153b6116de565b5f918252602090912001556115518260016116b4565b6002555090919050565b6040516001600160a01b0384811660248301528381166044830152606482018390526114339186918216906323b872dd90608401611466565b5f8060205f8451602086015f885af1806115b3576040513d5f823e3d81fd5b50505f513d915081156115ca5780600114156115d7565b6001600160a01b0384163b155b1561143357604051635274afe760e01b81526001600160a01b0385166004820152602401610788565b5f8060408385031215611611575f80fd5b50508035926020909101359150565b5f60208284031215611630575f80fd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b61ffff828116828216039081111561166557611665611637565b92915050565b808202811582820484141761166557611665611637565b5f8261169c57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561166557611665611637565b8082018082111561166557611665611637565b5f602082840312156116d7575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161170357611703611637565b506001019056fea264697066735822122082b4e9cbb590877250f56285993bdece50872593408f03a29fad3834b26c77ea64736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| Bulls Runners (BULLS) | BULLS | 32,052,422.664976 | — | — |
| BULLS RUNNERS GENESIS (BULLS) | BULLS | 78 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xdaf604…f33748 | 1 hr agoTue, 18 Aug 2026 06:53:31 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000a8e [1] 0x000000000000…0c9093e7 data: 0x000000000000000000…45092493 |
| 0x3eecdb…a17dd8 | 1 hr agoTue, 18 Aug 2026 06:46:41 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…000001cc [1] 0x000000000000…e53f1ac2 data: 0x000000000000000000…45092493 |
| 0x7498a7…6f4499 | 1 hr agoTue, 18 Aug 2026 06:29:01 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…000002d3 [1] 0x000000000000…fda1c466 data: 0x000000000000000000…45092493 |
| 0xabb264…670349 | 1 hr agoTue, 18 Aug 2026 06:24:44 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…000001dc [1] 0x000000000000…5d62d030 data: 0x000000000000000000…45092493 |
| 0xee023f…f70e75 | 1 hr agoTue, 18 Aug 2026 06:12:29 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000d66 [1] 0x000000000000…82e82d68 data: 0x000000000000000000…45092493 |
| 0x25cd2b…12b944 | 1 hr agoTue, 18 Aug 2026 06:12:14 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…000002cc [1] 0x000000000000…5d62d030 data: 0x000000000000000000…45092493 |
| 0x453168…cd9c83 | 1 hr agoTue, 18 Aug 2026 06:02:08 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…000003e3 [1] 0x000000000000…96d46de3 data: 0x000000000000000000…45092493 |
| 0xe02fa8…a861d0 | 1 hr agoTue, 18 Aug 2026 06:01:02 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…000003a3 [1] 0x000000000000…96d46de3 data: 0x000000000000000000…45092493 |
| 0x3ebf45…ecd6a1 | 1 hr agoTue, 18 Aug 2026 06:00:54 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…0000029c [1] 0x000000000000…5d62d030 data: 0x000000000000000000…45092493 |
| 0x4a33cb…1f62da | 1 hr agoTue, 18 Aug 2026 06:00:43 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…0000070b [1] 0x000000000000…82e82d68 data: 0x000000000000000000…45092493 |
| 0xc67dd6…a76c30 | 1 hr agoTue, 18 Aug 2026 05:58:40 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000369 [1] 0x000000000000…96d46de3 data: 0x000000000000000000…45092493 |
| 0xd13d97…c312b6 | 2 hrs agoTue, 18 Aug 2026 05:57:35 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000c2c [1] 0x000000000000…82e82d68 data: 0x000000000000000000…45092493 |
| 0x8bf558…c6a3a3 | 2 hrs agoTue, 18 Aug 2026 05:53:38 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000706 [1] 0x000000000000…96d46de3 data: 0x000000000000000000…45092493 |
| 0xc7fcbc…43769e | 2 hrs agoTue, 18 Aug 2026 05:42:04 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000cd9 [1] 0x000000000000…f5f580fa data: 0x000000000000000000…45092493 |
| 0x83b05a…6d07c1 | 2 hrs agoTue, 18 Aug 2026 05:41:59 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000d3e [1] 0x000000000000…f5f580fa data: 0x000000000000000000…45092493 |
| 0xc8b532…d380ba | 2 hrs agoTue, 18 Aug 2026 05:41:54 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000d55 [1] 0x000000000000…f5f580fa data: 0x000000000000000000…45092493 |
| 0xbdaa6c…8afefb | 2 hrs agoTue, 18 Aug 2026 05:41:50 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000d89 [1] 0x000000000000…f5f580fa data: 0x000000000000000000…45092493 |
| 0xc09356…440e8b | 2 hrs agoTue, 18 Aug 2026 05:41:13 UTC | 0xee0850…7ae5 | [0] 0x000000000000…00000524 [1] 0x000000000000…3bef8c50 data: 0x000000000000000000…00000001 |
| 0xe2668c…1b402d | 2 hrs agoTue, 18 Aug 2026 05:34:29 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000d40 [1] 0x000000000000…a80b26c9 data: 0x000000000000000000…45092493 |
| 0x08bbb9…30318f | 2 hrs agoTue, 18 Aug 2026 05:33:10 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000524 [1] 0x000000000000…e108e06a data: 0x000000000000000000…45092493 |
| 0x000d9f…b247ea | 2 hrs agoTue, 18 Aug 2026 05:08:51 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000437 [1] 0x000000000000…468561dd data: 0x000000000000000000…45092493 |
| 0x4271c6…1d6ba7 | 2 hrs agoTue, 18 Aug 2026 05:08:44 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000240 [1] 0x000000000000…468561dd data: 0x000000000000000000…45092493 |
| 0x773270…a66fae | 2 hrs agoTue, 18 Aug 2026 05:08:37 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000945 [1] 0x000000000000…468561dd data: 0x000000000000000000…45092493 |
| 0x891431…1c9ed3 | 2 hrs agoTue, 18 Aug 2026 05:08:27 UTC | 0xa1c5f9…d30b | [0] 0x000000000000…00000d50 [1] 0x000000000000…468561dd data: 0x000000000000000000…45092493 |
| 0xc143b3…3c9bea | 2 hrs agoTue, 18 Aug 2026 05:01:52 UTC | 0xee0850…7ae5 | [0] 0x000000000000…00000473 [1] 0x000000000000…4903df47 data: 0x000000000000000000…00000001 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xdaf6049d…f33748 | Transfer | 39,497,982 | 1 hr agoTue, 18 Aug 2026 06:53:31 UTC | 0xbbe3…93e7 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #2702 | |
| 0x3eecdb96…a17dd8 | Transfer | 39,493,894 | 1 hr agoTue, 18 Aug 2026 06:46:41 UTC | 0x2ba9…1ac2 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #460 | |
| 0x7498a73f…6f4499 | Transfer | 39,483,338 | 1 hr agoTue, 18 Aug 2026 06:29:01 UTC | 0x5232…c466 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #723 | |
| 0xabb264a5…670349 | Transfer | 39,480,774 | 1 hr agoTue, 18 Aug 2026 06:24:44 UTC | 0x676c…d030 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #476 | |
| 0xee023f5a…f70e75 | Transfer | 39,473,455 | 1 hr agoTue, 18 Aug 2026 06:12:29 UTC | 0x21e3…2d68 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #3430 | |
| 0x25cd2b34…12b944 | Transfer | 39,473,298 | 1 hr agoTue, 18 Aug 2026 06:12:14 UTC | 0x676c…d030 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #716 | |
| 0x453168ab…cd9c83 | Transfer | 39,467,261 | 1 hr agoTue, 18 Aug 2026 06:02:08 UTC | 0x3651…6de3 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #995 | |
| 0xe02fa8ed…a861d0 | Transfer | 39,466,610 | 1 hr agoTue, 18 Aug 2026 06:01:02 UTC | 0x3651…6de3 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #931 | |
| 0x3ebf45ca…ecd6a1 | Transfer | 39,466,522 | 1 hr agoTue, 18 Aug 2026 06:00:54 UTC | 0x676c…d030 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #668 | |
| 0x4a33cbc2…1f62da | Transfer | 39,466,415 | 1 hr agoTue, 18 Aug 2026 06:00:43 UTC | 0x21e3…2d68 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #1803 | |
| 0xc67dd68d…a76c30 | Transfer | 39,465,195 | 1 hr agoTue, 18 Aug 2026 05:58:40 UTC | 0x3651…6de3 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #873 | |
| 0xd13d97da…c312b6 | Transfer | 39,464,549 | 2 hrs agoTue, 18 Aug 2026 05:57:35 UTC | 0x21e3…2d68 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #3116 | |
| 0x8bf558b2…c6a3a3 | Transfer | 39,462,183 | 2 hrs agoTue, 18 Aug 2026 05:53:38 UTC | 0x3651…6de3 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #1798 | |
| 0xc7fcbc60…43769e | Transfer | 39,455,271 | 2 hrs agoTue, 18 Aug 2026 05:42:04 UTC | 0x6cc4…80fa | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #3289 | |
| 0x83b05a89…6d07c1 | Transfer | 39,455,220 | 2 hrs agoTue, 18 Aug 2026 05:41:59 UTC | 0x6cc4…80fa | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #3390 | |
| 0xc8b532d3…d380ba | Transfer | 39,455,174 | 2 hrs agoTue, 18 Aug 2026 05:41:54 UTC | 0x6cc4…80fa | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #3413 | |
| 0xbdaa6c41…8afefb | Transfer | 39,455,129 | 2 hrs agoTue, 18 Aug 2026 05:41:50 UTC | 0x6cc4…80fa | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #3465 | |
| 0xc093560f…440e8b | Transfer | 39,454,767 | 2 hrs agoTue, 18 Aug 2026 05:41:13 UTC | 0x4ded…e814 | OUT | 0x1ac0…8c50 | Transfer | BULLS RUNNERS GENESIS (BULLS) #1316 | |
| 0xe2668c73…1b402d | Transfer | 39,450,744 | 2 hrs agoTue, 18 Aug 2026 05:34:29 UTC | 0x9809…26c9 | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #3392 | |
| 0x08bbb958…30318f | Transfer | 39,449,958 | 2 hrs agoTue, 18 Aug 2026 05:33:10 UTC | 0x3cd9…e06a | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #1316 | |
| 0x000d9f56…b247ea | Transfer | 39,435,439 | 2 hrs agoTue, 18 Aug 2026 05:08:51 UTC | 0xa1c4…61dd | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #1079 | |
| 0x4271c672…1d6ba7 | Transfer | 39,435,370 | 2 hrs agoTue, 18 Aug 2026 05:08:44 UTC | 0xa1c4…61dd | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #576 | |
| 0x773270fc…a66fae | Transfer | 39,435,298 | 2 hrs agoTue, 18 Aug 2026 05:08:37 UTC | 0xa1c4…61dd | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #2373 | |
| 0x8914319d…1c9ed3 | Transfer | 39,435,201 | 2 hrs agoTue, 18 Aug 2026 05:08:27 UTC | 0xa1c4…61dd | IN | 0x4ded…e814 | Transfer | BULLS RUNNERS GENESIS (BULLS) #3408 | |
| 0xc143b3f5…3c9bea | Transfer | 39,431,262 | 2 hrs agoTue, 18 Aug 2026 05:01:52 UTC | 0x4ded…e814 | OUT | 0x87f9…df47 | Transfer | BULLS RUNNERS GENESIS (BULLS) #1139 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xdaf604…f33748 | sellNFT | 39,497,982 | 1 hr agoTue, 18 Aug 2026 06:53:31 UTC | 0xbbe3…93e7 | IN | NFTVault | $0.000 ETH | 0.00000408 | |
| 0x3eecdb…a17dd8 | sellNFT | 39,493,894 | 1 hr agoTue, 18 Aug 2026 06:46:41 UTC | 0x2ba9…1ac2 | IN | NFTVault | $0.000 ETH | 0.00000383 | |
| 0x7498a7…6f4499 | sellNFT | 39,483,338 | 1 hr agoTue, 18 Aug 2026 06:29:01 UTC | 0x5232…c466 | IN | NFTVault | $0.000 ETH | 0.00000409 | |
| 0xabb264…670349 | sellNFT | 39,480,774 | 1 hr agoTue, 18 Aug 2026 06:24:44 UTC | 0x676c…d030 | IN | NFTVault | $0.000 ETH | 0.00000408 | |
| 0xee023f…f70e75 | sellNFT | 39,473,455 | 1 hr agoTue, 18 Aug 2026 06:12:29 UTC | 0x21e3…2d68 | IN | NFTVault | $0.000 ETH | 0.00000409 | |
| 0x25cd2b…12b944 | sellNFT | 39,473,298 | 1 hr agoTue, 18 Aug 2026 06:12:14 UTC | 0x676c…d030 | IN | NFTVault | $0.000 ETH | 0.00000407 | |
| 0x453168…cd9c83 | sellNFT | 39,467,261 | 1 hr agoTue, 18 Aug 2026 06:02:08 UTC | 0x3651…6de3 | IN | NFTVault | $0.000 ETH | 0.00000422 | |
| 0xe02fa8…a861d0 | sellNFT | 39,466,610 | 1 hr agoTue, 18 Aug 2026 06:01:02 UTC | 0x3651…6de3 | IN | NFTVault | $0.000 ETH | 0.00000424 | |
| 0x3ebf45…ecd6a1 | sellNFT | 39,466,522 | 1 hr agoTue, 18 Aug 2026 06:00:54 UTC | 0x676c…d030 | IN | NFTVault | $0.000 ETH | 0.00000413 | |
| 0x4a33cb…1f62da | sellNFT | 39,466,415 | 1 hr agoTue, 18 Aug 2026 06:00:43 UTC | 0x21e3…2d68 | IN | NFTVault | $0.000 ETH | 0.00000408 | |
| 0xc67dd6…a76c30 | sellNFT | 39,465,195 | 1 hr agoTue, 18 Aug 2026 05:58:40 UTC | 0x3651…6de3 | IN | NFTVault | $0.000 ETH | 0.00000422 | |
| 0xd13d97…c312b6 | sellNFT | 39,464,549 | 2 hrs agoTue, 18 Aug 2026 05:57:35 UTC | 0x21e3…2d68 | IN | NFTVault | $0.000 ETH | 0.00000409 | |
| 0x8bf558…c6a3a3 | sellNFT | 39,462,183 | 2 hrs agoTue, 18 Aug 2026 05:53:38 UTC | 0x3651…6de3 | IN | NFTVault | $0.000 ETH | 0.00000386 | |
| 0xc7fcbc…43769e | sellNFT | 39,455,271 | 2 hrs agoTue, 18 Aug 2026 05:42:04 UTC | 0x6cc4…80fa | IN | NFTVault | $0.000 ETH | 0.00000388 | |
| 0x83b05a…6d07c1 | sellNFT | 39,455,220 | 2 hrs agoTue, 18 Aug 2026 05:41:59 UTC | 0x6cc4…80fa | IN | NFTVault | $0.000 ETH | 0.00000383 | |
| 0xc8b532…d380ba | sellNFT | 39,455,174 | 2 hrs agoTue, 18 Aug 2026 05:41:54 UTC | 0x6cc4…80fa | IN | NFTVault | $0.000 ETH | 0.00000388 | |
| 0xbdaa6c…8afefb | sellNFT | 39,455,129 | 2 hrs agoTue, 18 Aug 2026 05:41:50 UTC | 0x6cc4…80fa | IN | NFTVault | $0.000 ETH | 0.00000386 | |
| 0xc09356…440e8b | buySpecificNFT | 39,454,767 | 2 hrs agoTue, 18 Aug 2026 05:41:13 UTC | 0x1ac0…8c50 | IN | NFTVault | $0.000 ETH | 0.00000352 | |
| 0xe2668c…1b402d | sellNFT | 39,450,744 | 2 hrs agoTue, 18 Aug 2026 05:34:29 UTC | 0x9809…26c9 | IN | NFTVault | $0.000 ETH | 0.00000425 | |
| 0x08bbb9…30318f | sellNFT | 39,449,958 | 2 hrs agoTue, 18 Aug 2026 05:33:10 UTC | 0x3cd9…e06a | IN | NFTVault | $0.000 ETH | 0.00000405 | |
| 0x000d9f…b247ea | sellNFT | 39,435,439 | 2 hrs agoTue, 18 Aug 2026 05:08:51 UTC | 0xa1c4…61dd | IN | NFTVault | $0.000 ETH | 0.00000388 | |
| 0x4271c6…1d6ba7 | sellNFT | 39,435,370 | 2 hrs agoTue, 18 Aug 2026 05:08:44 UTC | 0xa1c4…61dd | IN | NFTVault | $0.000 ETH | 0.00000389 | |
| 0x773270…a66fae | sellNFT | 39,435,298 | 2 hrs agoTue, 18 Aug 2026 05:08:37 UTC | 0xa1c4…61dd | IN | NFTVault | $0.000 ETH | 0.00000387 | |
| 0x891431…1c9ed3 | sellNFT | 39,435,201 | 2 hrs agoTue, 18 Aug 2026 05:08:27 UTC | 0xa1c4…61dd | IN | NFTVault | $0.000 ETH | 0.00000423 | |
| 0xc143b3…3c9bea | buySpecificNFT | 39,431,262 | 2 hrs agoTue, 18 Aug 2026 05:01:52 UTC | 0x87f9…df47 | IN | NFTVault | $0.000 ETH | 0.00000277 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xb2649a62…74531e | Transfer | 39,528,716 | 13 mins agoTue, 18 Aug 2026 07:44:54 UTC | 0xb6b2…bccd | IN | 0x4ded…e814 | 17,661.724480 BULLS | Bulls Runners (BULLS) | |
| 0xdaf6049d…f33748 | Transfer | 39,497,982 | 1 hr agoTue, 18 Aug 2026 06:53:31 UTC | 0x4ded…e814 | OUT | 0xbbe3…93e7 | 235,714.285714 BULLS | Bulls Runners (BULLS) | |
| 0xdaf6049d…f33748 | Transfer | 39,497,982 | 1 hr agoTue, 18 Aug 2026 06:53:31 UTC | 0x4ded…e814 | OUT | 0xdc2c…8d91 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0xdaf6049d…f33748 | Transfer | 39,497,982 | 1 hr agoTue, 18 Aug 2026 06:53:31 UTC | 0x4ded…e814 | OUT | 0x0000…0000 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0x3eecdb96…a17dd8 | Transfer | 39,493,894 | 1 hr agoTue, 18 Aug 2026 06:46:41 UTC | 0x4ded…e814 | OUT | 0x2ba9…1ac2 | 235,714.285714 BULLS | Bulls Runners (BULLS) | |
| 0x3eecdb96…a17dd8 | Transfer | 39,493,894 | 1 hr agoTue, 18 Aug 2026 06:46:41 UTC | 0x4ded…e814 | OUT | 0xdc2c…8d91 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0x3eecdb96…a17dd8 | Transfer | 39,493,894 | 1 hr agoTue, 18 Aug 2026 06:46:41 UTC | 0x4ded…e814 | OUT | 0x0000…0000 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0x7498a73f…6f4499 | Transfer | 39,483,338 | 1 hr agoTue, 18 Aug 2026 06:29:01 UTC | 0x4ded…e814 | OUT | 0x5232…c466 | 235,714.285714 BULLS | Bulls Runners (BULLS) | |
| 0x7498a73f…6f4499 | Transfer | 39,483,338 | 1 hr agoTue, 18 Aug 2026 06:29:01 UTC | 0x4ded…e814 | OUT | 0xdc2c…8d91 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0x7498a73f…6f4499 | Transfer | 39,483,338 | 1 hr agoTue, 18 Aug 2026 06:29:01 UTC | 0x4ded…e814 | OUT | 0x0000…0000 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0xabb264a5…670349 | Transfer | 39,480,774 | 1 hr agoTue, 18 Aug 2026 06:24:44 UTC | 0x4ded…e814 | OUT | 0x676c…d030 | 235,714.285714 BULLS | Bulls Runners (BULLS) | |
| 0xabb264a5…670349 | Transfer | 39,480,774 | 1 hr agoTue, 18 Aug 2026 06:24:44 UTC | 0x4ded…e814 | OUT | 0xdc2c…8d91 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0xabb264a5…670349 | Transfer | 39,480,774 | 1 hr agoTue, 18 Aug 2026 06:24:44 UTC | 0x4ded…e814 | OUT | 0x0000…0000 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0xee023f5a…f70e75 | Transfer | 39,473,455 | 1 hr agoTue, 18 Aug 2026 06:12:29 UTC | 0x4ded…e814 | OUT | 0x21e3…2d68 | 235,714.285714 BULLS | Bulls Runners (BULLS) | |
| 0xee023f5a…f70e75 | Transfer | 39,473,455 | 1 hr agoTue, 18 Aug 2026 06:12:29 UTC | 0x4ded…e814 | OUT | 0xdc2c…8d91 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0xee023f5a…f70e75 | Transfer | 39,473,455 | 1 hr agoTue, 18 Aug 2026 06:12:29 UTC | 0x4ded…e814 | OUT | 0x0000…0000 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0x25cd2b34…12b944 | Transfer | 39,473,298 | 1 hr agoTue, 18 Aug 2026 06:12:14 UTC | 0x4ded…e814 | OUT | 0x676c…d030 | 235,714.285714 BULLS | Bulls Runners (BULLS) | |
| 0x25cd2b34…12b944 | Transfer | 39,473,298 | 1 hr agoTue, 18 Aug 2026 06:12:14 UTC | 0x4ded…e814 | OUT | 0xdc2c…8d91 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0x25cd2b34…12b944 | Transfer | 39,473,298 | 1 hr agoTue, 18 Aug 2026 06:12:14 UTC | 0x4ded…e814 | OUT | 0x0000…0000 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0x453168ab…cd9c83 | Transfer | 39,467,261 | 1 hr agoTue, 18 Aug 2026 06:02:08 UTC | 0x4ded…e814 | OUT | 0x3651…6de3 | 235,714.285714 BULLS | Bulls Runners (BULLS) | |
| 0x453168ab…cd9c83 | Transfer | 39,467,261 | 1 hr agoTue, 18 Aug 2026 06:02:08 UTC | 0x4ded…e814 | OUT | 0xdc2c…8d91 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0x453168ab…cd9c83 | Transfer | 39,467,261 | 1 hr agoTue, 18 Aug 2026 06:02:08 UTC | 0x4ded…e814 | OUT | 0x0000…0000 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0xe02fa8ed…a861d0 | Transfer | 39,466,610 | 1 hr agoTue, 18 Aug 2026 06:01:02 UTC | 0x4ded…e814 | OUT | 0x3651…6de3 | 235,714.285714 BULLS | Bulls Runners (BULLS) | |
| 0xe02fa8ed…a861d0 | Transfer | 39,466,610 | 1 hr agoTue, 18 Aug 2026 06:01:02 UTC | 0x4ded…e814 | OUT | 0xdc2c…8d91 | 1,190.476190 BULLS | Bulls Runners (BULLS) | |
| 0xe02fa8ed…a861d0 | Transfer | 39,466,610 | 1 hr agoTue, 18 Aug 2026 06:01:02 UTC | 0x4ded…e814 | OUT | 0x0000…0000 | 1,190.476190 BULLS | Bulls Runners (BULLS) |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 39,195,852 | 9 hrs agoMon, 17 Aug 2026 22:28:32 UTC | 0xe958ec…6b5cb0 | CREATE | launch | 0xf48a…76ef | IN | 0x4ded…e814 | 0 ETH |