// SPDX-License-Identifier: BUSL-1.1
// Official website: https://stonkmon.com
// Product X: https://x.com/stonkmonHQ
// Developer X: https://x.com/0xwhom
pragma solidity ^0.8.26;
import {FullMath} from "v4-core/src/libraries/FullMath.sol";
import {IGachaPool} from "./interfaces/IGachaPool.sol";
import {IStonkToken} from "./interfaces/IStonkToken.sol";
error OnlyGachaPool();
error OnlyStonkToken();
error InvalidConfiguration();
error InvalidPullReward();
error InsufficientRewardAllocation();
error FloorUnavailable();
error FloorInsolvent();
error TransferFailed();
error ReentrantCall();
/// @notice STO emissions and the always-on ETH buyback counter.
contract RewardsVault {
uint256 public constant ACC_PRECISION = 1e27;
uint256 public constant BPS = 10_000;
uint256 public constant SAFETY_BPS = 9_000;
uint256 public constant LAUNCH_PERIODS = 15;
uint256 public constant LAUNCH_DAILY_BPS = 200;
uint256 public constant STEADY_DAILY_BPS = 50;
uint256 public constant MAX_ROLL_DAYS = 64;
/// @notice Share of the lister emission routed to the tier-table comp channel (D-10).
uint256 public constant EM_COMP_BPS = 5_000;
struct DayEmission {
uint128 listerBudget;
}
struct PullReward {
address puller;
uint64 day;
uint128 fee;
bool console;
bool claimed;
}
IStonkToken public immutable token;
IGachaPool public immutable gachaPool;
uint64 public immutable launchTime;
uint64 public immutable LAUNCH_DAYS;
uint64 public immutable DAY;
uint64 public budgetCursor;
uint64 public lastListerCheckpoint;
uint256 public totalScheduled;
uint256 public totalEmissionPaid;
/// @notice D-15: cumulative puller allocation that is scheduled but never minted.
uint256 public totalRetired;
uint256 public accListerPerWeight;
uint256 public accListerPerCompUnit;
uint256 public listerAllocated;
uint256 public listerPaid;
uint256 public listerRecycleReserve;
uint256 public consoleRecycleReserve;
uint256 public floorReserves;
uint256 public floorPrice;
mapping(uint256 => DayEmission) public dayEmission;
mapping(uint256 => PullReward) public pullRewards;
mapping(uint256 => uint256) public pullConsoleStonk;
bool private _entered;
event EmissionDayScheduled(uint256 indexed day, uint256 listerBudget, uint256 retired);
event ListerCheckpoint(
uint256 indexed timestamp,
uint256 activeWeight,
uint256 activeCompUnits,
uint256 accPerWeight,
uint256 accPerCompUnit
);
event PullRewardRecorded(uint256 indexed pullId, address indexed puller, uint256 indexed day, uint256 fee);
event ConsoleRecorded(uint256 indexed pullId, uint256 indexed day, uint256 fee);
event PullRewardClaimed(uint256 indexed pullId, address indexed puller, uint256 console);
event ListerRewardPaid(address indexed recipient, uint256 amount);
event FloorFunded(uint256 amount, uint256 reserves);
event FloorRatchet(uint256 previousFloor, uint256 nextFloor);
event Redeemed(address indexed account, uint256 amount, uint256 payout);
event BuybackRouted(uint256 amount, uint256 burned, uint256 lister, uint256 console);
event PullBuybackRouted(uint256 indexed pullId, uint256 amount, uint256 burned, uint256 lister, uint256 console);
event PullRewardForfeited(uint256 indexed pullId, uint256 burned, uint256 lister);
modifier onlyGachaPool() {
if (msg.sender != address(gachaPool)) revert OnlyGachaPool();
_;
}
modifier nonReentrant() {
if (_entered) revert ReentrantCall();
_entered = true;
_;
_entered = false;
}
constructor(IStonkToken token_, IGachaPool gachaPool_, uint64 launchDuration_) {
if (
address(token_) == address(0) || address(gachaPool_) == address(0) || launchDuration_ < LAUNCH_PERIODS
|| launchDuration_ % LAUNCH_PERIODS != 0
) {
revert InvalidConfiguration();
}
token = token_;
gachaPool = gachaPool_;
launchTime = uint64(block.timestamp);
LAUNCH_DAYS = launchDuration_;
// LAUNCH_PERIODS is the literal 15 and fits uint64.
// forge-lint: disable-next-line(unsafe-typecast)
DAY = launchDuration_ / uint64(LAUNCH_PERIODS);
lastListerCheckpoint = uint64(block.timestamp);
}
receive() external payable {
revert OnlyGachaPool();
}
function currentDay() public view returns (uint256) {
return (block.timestamp - launchTime) / DAY;
}
function circulatingSupply() public view returns (uint256) {
return token.totalSupply() - token.balanceOf(address(this));
}
/// @notice Current circulation plus every STO unit that may still be emitted.
function protectedSupply() public view returns (uint256) {
// v2.1 D-01 deliberately keeps the original CAP-based conservative
// denominator even though the permanent LP allocation is circulating.
return circulatingSupply() + token.TOTAL_SUPPLY_CAP() - totalEmissionPaid;
}
function rollEmission() public returns (bool caughtUp) {
uint256 target = currentDay();
uint256 cursor = budgetCursor;
uint256 rolled;
while (cursor <= target && rolled < MAX_ROLL_DAYS) {
uint256 daily;
if (cursor < LAUNCH_PERIODS) {
daily = token.EMITTABLE() * LAUNCH_DAILY_BPS / BPS;
} else {
daily = (token.EMITTABLE() - totalScheduled) * STEADY_DAILY_BPS / BPS;
}
uint256 lister = daily / 2;
// D-15: the puller half is no longer scheduled as emission -- it is RETIRED,
// i.e. never minted. A fixed daily puller mint becomes a farm as soon as STO
// trades far above the floor, because the mint is worth more than the fees it
// costs to capture it; puller rewards now come from the buyback instead.
// `totalScheduled` still advances by the full `daily` so the steady tail
// (EMITTABLE - totalScheduled) decays exactly as before and the lister curve
// is bit-for-bit unchanged.
uint256 retired = daily - lister;
// Each budget is below the 7.1B token cap, far below uint128.
// forge-lint: disable-next-line(unsafe-typecast)
dayEmission[cursor].listerBudget = uint128(lister);
totalScheduled += daily;
totalRetired += retired;
emit EmissionDayScheduled(cursor, lister, retired);
++cursor;
++rolled;
}
// Day indexes derived from uint64 Unix time fit uint64.
// forge-lint: disable-next-line(unsafe-typecast)
budgetCursor = uint64(cursor);
caughtUp = cursor > target;
}
/// @notice Accrues listing·seconds against the active weight/comp totals before GachaPool mutates them.
function checkpointListings() external returns (bool caughtUp) {
caughtUp = _checkpointListings();
}
/// @notice Both lister accumulators in one call for GachaPool's debt bookkeeping.
function listerAccumulators() external view returns (uint256 perWeight, uint256 perCompUnit) {
return (accListerPerWeight, accListerPerCompUnit);
}
function recordPull(uint256 pullId, address puller, uint256 fee) external onlyGachaPool {
if (puller == address(0) || fee == 0 || pullRewards[pullId].puller != address(0)) {
revert InvalidPullReward();
}
rollEmission();
uint256 day = currentDay();
// Day derives from uint64 Unix time; GachaPool bounds its stored fee to uint128.
pullRewards[pullId] =
// forge-lint: disable-next-line(unsafe-typecast)
PullReward({puller: puller, day: uint64(day), fee: uint128(fee), console: false, claimed: false});
emit PullRewardRecorded(pullId, puller, day, fee);
}
function recordConsole(uint256 pullId) external onlyGachaPool returns (uint256 paid) {
PullReward storage reward = pullRewards[pullId];
if (reward.puller == address(0) || reward.claimed) revert InvalidPullReward();
reward.console = true;
reward.claimed = true;
paid = pullConsoleStonk[pullId];
delete pullConsoleStonk[pullId];
if (paid != 0) _payConsole(reward.puller, paid);
emit ConsoleRecorded(pullId, reward.day, reward.fee);
emit PullRewardClaimed(pullId, reward.puller, paid);
}
function forfeitPullReward(uint256 pullId) external onlyGachaPool {
PullReward storage reward = pullRewards[pullId];
if (reward.puller == address(0) || reward.claimed) revert InvalidPullReward();
reward.claimed = true;
uint256 amount = pullConsoleStonk[pullId];
delete pullConsoleStonk[pullId];
(uint256 burnAmount, uint256 listerAmount) = _routeForfeited(amount);
emit PullRewardForfeited(pullId, burnAmount, listerAmount);
}
function payLister(address to, uint256 amount) external onlyGachaPool nonReentrant {
if (listerPaid + amount > listerAllocated) revert InsufficientRewardAllocation();
listerPaid += amount;
_deliver(to, amount);
emit ListerRewardPaid(to, amount);
}
function recordFloorFee() external payable onlyGachaPool {
floorReserves += msg.value;
emit FloorFunded(msg.value, floorReserves);
_ratchet();
}
function ratchet() external {
_ratchet();
}
/// @notice Routes real STO purchased by the permissionless market buyback.
function onBuyback(uint256 amount) external {
if (msg.sender != address(token)) revert OnlyStonkToken();
if (amount == 0 || token.balanceOf(address(this)) < listerRecycleReserve + consoleRecycleReserve + amount) {
revert InvalidConfiguration();
}
(uint256 burnAmount, uint256 listerAmount, uint256 consoleAmount) = _routeRecycled(amount);
emit BuybackRouted(amount, burnAmount, listerAmount, consoleAmount);
}
/// @notice Splits the STO bought from one pull's dedicated immediate reward budget.
function onPullBuyback(uint256 pullId, uint256 amount) external {
if (msg.sender != address(token)) revert OnlyStonkToken();
PullReward storage reward = pullRewards[pullId];
if (
amount == 0 || reward.puller == address(0) || pullConsoleStonk[pullId] != 0
|| token.balanceOf(address(this)) < listerRecycleReserve + consoleRecycleReserve + amount
) revert InvalidConfiguration();
uint256 burnAmount = amount / 3;
uint256 listerAmount = amount / 3;
uint256 consoleAmount = amount - burnAmount - listerAmount;
if (burnAmount != 0) token.burnVaultBalance(burnAmount);
listerRecycleReserve += listerAmount;
consoleRecycleReserve += consoleAmount;
pullConsoleStonk[pullId] = consoleAmount;
emit PullBuybackRouted(pullId, amount, burnAmount, listerAmount, consoleAmount);
}
function redeem(uint256 amount) external nonReentrant returns (uint256 payout) {
_ratchet();
uint256 price = floorPrice;
if (price == 0 || amount == 0) revert FloorUnavailable();
payout = FullMath.mulDiv(amount, price, 1e18);
if (payout > floorReserves) revert FloorInsolvent();
if (!token.transferFrom(msg.sender, address(this), amount)) revert TransferFailed();
floorReserves -= payout;
_routeRecycled(amount);
_assertSolvent();
(bool ok,) = msg.sender.call{value: payout}("");
if (!ok) revert TransferFailed();
_ratchet();
emit Redeemed(msg.sender, amount, payout);
}
function _checkpointListings() internal returns (bool caughtUp) {
if (!rollEmission()) return false;
uint256 cursor = lastListerCheckpoint;
uint256 target = block.timestamp;
uint256 weightTotal = gachaPool.activeWeight();
uint256 compTotal = gachaPool.activeCompUnits();
if (cursor == target) return true;
if (weightTotal == 0) {
// `target` is the current Unix timestamp and fits uint64 for the protocol's lifetime.
// forge-lint: disable-next-line(unsafe-typecast)
lastListerCheckpoint = uint64(target);
emit ListerCheckpoint(target, 0, 0, accListerPerWeight, accListerPerCompUnit);
return true;
}
uint256 segments;
while (cursor < target && segments < MAX_ROLL_DAYS) {
uint256 day = (cursor - launchTime) / DAY;
uint256 dayEnd = uint256(launchTime) + (day + 1) * DAY;
uint256 end = target < dayEnd ? target : dayEnd;
uint256 emission = FullMath.mulDiv(dayEmission[day].listerBudget, end - cursor, DAY);
// D-10: the lister emission routes by draw weight plus the tier-table comp
// channel. With no comp-eligible stalls the comp share falls back into
// the weight channel so no scheduled emission is ever stranded.
uint256 compEmission = compTotal == 0 ? 0 : emission * EM_COMP_BPS / BPS;
accListerPerWeight += FullMath.mulDiv(emission - compEmission, ACC_PRECISION, weightTotal);
if (compEmission != 0) {
accListerPerCompUnit += FullMath.mulDiv(compEmission, ACC_PRECISION, compTotal);
}
// Track the released source budget, not a second rounded-down
// reconstruction of it. Individual listings carry fractional
// remainders across checkpoints, so their eventual aggregate
// claims can exceed sum(floor(increment * units / precision)) by
// a few wei even though they never exceed the source emission.
listerAllocated += emission;
cursor = end;
++segments;
}
// `cursor` never exceeds the current Unix timestamp.
// forge-lint: disable-next-line(unsafe-typecast)
lastListerCheckpoint = uint64(cursor);
caughtUp = cursor == target;
emit ListerCheckpoint(cursor, weightTotal, compTotal, accListerPerWeight, accListerPerCompUnit);
}
/// @dev Lister emission. Spends recycled STO first and mints the shortfall, which is
/// correct here because the lister budget IS scheduled emission.
function _deliver(address to, uint256 amount) internal {
if (amount == 0) return;
if (totalEmissionPaid + amount > totalScheduled) revert InsufficientRewardAllocation();
_assertSolvent();
totalEmissionPaid += amount;
uint256 reserve = listerRecycleReserve;
uint256 recycled = reserve < amount ? reserve : amount;
if (recycled != 0) {
listerRecycleReserve = reserve - recycled;
if (!token.transfer(to, recycled)) revert TransferFailed();
}
uint256 mintAmount = amount - recycled;
if (mintAmount != 0) token.mint(to, mintAmount);
}
/// @dev D-15: console rewards are recycled STO and are NEVER minted. Deleting the
/// mint shortfall is what makes the reward self-funding: the vault can only pay
/// what a buyback actually bought, so the payout scales with fees rather than
/// with the token price, and monopolising pulls to farm it is a guaranteed loss.
function _payConsole(address to, uint256 amount) internal {
if (amount > consoleRecycleReserve) revert InsufficientRewardAllocation();
// The floor ratchet is only monotone-safe while protectedSupply never grows:
// floorPrice ratchets up against the protected supply of the moment and can never
// come back down, so a later increase would leave `required` above floorReserves.
// Releasing recycled STO raises circulating supply, so it must consume the same
// amount of future-emission allowance to keep protectedSupply flat -- which is what
// the old mint-offset path did incidentally and this does deliberately. The retired
// puller half leaves ample headroom under totalScheduled for this to never bind.
if (totalEmissionPaid + amount > totalScheduled) revert InsufficientRewardAllocation();
totalEmissionPaid += amount;
consoleRecycleReserve -= amount;
if (!token.transfer(to, amount)) revert TransferFailed();
}
function _routeRecycled(uint256 amount)
internal
returns (uint256 burnAmount, uint256 listerAmount, uint256 consoleAmount)
{
burnAmount = amount / 2;
listerAmount = amount - burnAmount;
consoleAmount = 0;
if (burnAmount != 0) token.burnVaultBalance(burnAmount);
listerRecycleReserve += listerAmount;
}
function _routeForfeited(uint256 amount) private returns (uint256 burnAmount, uint256 listerAmount) {
if (amount > consoleRecycleReserve) revert InsufficientRewardAllocation();
consoleRecycleReserve -= amount;
burnAmount = amount / 2;
listerAmount = amount - burnAmount;
if (burnAmount != 0) token.burnVaultBalance(burnAmount);
listerRecycleReserve += listerAmount;
}
function _assertSolvent() internal view {
if (floorPrice == 0) return;
uint256 required = FullMath.mulDiv(floorPrice, protectedSupply(), SAFETY_BPS * 1e14);
if (floorReserves < required) revert FloorInsolvent();
}
function _ratchet() internal {
uint256 protected = protectedSupply();
if (protected == 0) return;
uint256 candidate = FullMath.mulDiv(floorReserves, SAFETY_BPS * 1e14, protected);
if (candidate > floorPrice) {
uint256 previous = floorPrice;
floorPrice = candidate;
emit FloorRatchet(previous, candidate);
}
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "token_",
"type": "address",
"internalType": "contract IStonkToken"
},
{
"name": "gachaPool_",
"type": "address",
"internalType": "contract IGachaPool"
},
{
"name": "launchDuration_",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "nonpayable"
},
{
"name": "FloorInsolvent",
"type": "error",
"inputs": []
},
{
"name": "FloorUnavailable",
"type": "error",
"inputs": []
},
{
"name": "InsufficientRewardAllocation",
"type": "error",
"inputs": []
},
{
"name": "InvalidConfiguration",
"type": "error",
"inputs": []
},
{
"name": "InvalidPullReward",
"type": "error",
"inputs": []
},
{
"name": "OnlyGachaPool",
"type": "error",
"inputs": []
},
{
"name": "OnlyStonkToken",
"type": "error",
"inputs": []
},
{
"name": "ReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "TransferFailed",
"type": "error",
"inputs": []
},
{
"name": "BuybackRouted",
"type": "event",
"inputs": [
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "burned",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "lister",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "console",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ConsoleRecorded",
"type": "event",
"inputs": [
{
"name": "pullId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "day",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "fee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "EmissionDayScheduled",
"type": "event",
"inputs": [
{
"name": "day",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "listerBudget",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "retired",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "FloorFunded",
"type": "event",
"inputs": [
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "reserves",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "FloorRatchet",
"type": "event",
"inputs": [
{
"name": "previousFloor",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "nextFloor",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ListerCheckpoint",
"type": "event",
"inputs": [
{
"name": "timestamp",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "activeWeight",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "activeCompUnits",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "accPerWeight",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "accPerCompUnit",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ListerRewardPaid",
"type": "event",
"inputs": [
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "PullBuybackRouted",
"type": "event",
"inputs": [
{
"name": "pullId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "burned",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "lister",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "console",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "PullRewardClaimed",
"type": "event",
"inputs": [
{
"name": "pullId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "puller",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "console",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "PullRewardForfeited",
"type": "event",
"inputs": [
{
"name": "pullId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "burned",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "lister",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "PullRewardRecorded",
"type": "event",
"inputs": [
{
"name": "pullId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "puller",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "day",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "fee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Redeemed",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "payout",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ACC_PRECISION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "DAY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "EM_COMP_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "LAUNCH_DAILY_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "LAUNCH_DAYS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "LAUNCH_PERIODS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_ROLL_DAYS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "SAFETY_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "STEADY_DAILY_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "accListerPerCompUnit",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "accListerPerWeight",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "budgetCursor",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "checkpointListings",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "caughtUp",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "circulatingSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "consoleRecycleReserve",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "currentDay",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "dayEmission",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "listerBudget",
"type": "uint128",
"internalType": "uint128"
}
],
"stateMutability": "view"
},
{
"name": "floorPrice",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "floorReserves",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "forfeitPullReward",
"type": "function",
"inputs": [
{
"name": "pullId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "gachaPool",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IGachaPool"
}
],
"stateMutability": "view"
},
{
"name": "lastListerCheckpoint",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "launchTime",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "listerAccumulators",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "perWeight",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "perCompUnit",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "listerAllocated",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "listerPaid",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "listerRecycleReserve",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "onBuyback",
"type": "function",
"inputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "onPullBuyback",
"type": "function",
"inputs": [
{
"name": "pullId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "payLister",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "protectedSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "pullConsoleStonk",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "pullRewards",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "puller",
"type": "address",
"internalType": "address"
},
{
"name": "day",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "fee",
"type": "uint128",
"internalType": "uint128"
},
{
"name": "console",
"type": "bool",
"internalType": "bool"
},
{
"name": "claimed",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "ratchet",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "recordConsole",
"type": "function",
"inputs": [
{
"name": "pullId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "paid",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "recordFloorFee",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "recordPull",
"type": "function",
"inputs": [
{
"name": "pullId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "puller",
"type": "address",
"internalType": "address"
},
{
"name": "fee",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "redeem",
"type": "function",
"inputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "payout",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "rollEmission",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "caughtUp",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "token",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IStonkToken"
}
],
"stateMutability": "view"
},
{
"name": "totalEmissionPaid",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalRetired",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalScheduled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x60806040526004361015610027575b3615610018575f80fd5b636b7ca3ab60e11b5f5260045ffd5b5f803560e01c8063028060b5146112d1578063040425d1146112b65780630feae3b614611245578063188e0af71461122a5780631dd0baed1461120c578063249d39e9146111ef57806327a43f23146111d157806327cfe8561461118c5780633095aa471461116e57806332fcd9661461114757806333986db61461112957806338040039146110375780633d18ba201461101b578063463fcc1f14610dbd578063475d9f3d14610d9f5780634d8f59f014610d815780635679abee14610d685780635c9302c914610d4d5780635ccec6fe14610d31578063616b886714610d135780636b136ecb14610cf55780637382aa7314610cd7578063790ca41314610c9257806379d67fc114610c695780639358928b14610c465780639363c81214610c2857806396bf1ee714610c0c578063a74cd5b6146109f3578063ad0ad36a146109c0578063ae2e6e06146109a3578063b2ed9d2914610979578063b312acc114610934578063b90a35481461090f578063c28479ae146108f3578063c86604d4146108ce578063d6674a8e146108a7578063db006a751461069d578063e098584814610658578063e8f7bec71461063a578063ed818e5d146105a5578063f6a85e7a146103c2578063fc0c546a1461037d578063fd17dd8a146102355763ffa92c8c14610216575061000e565b3461023257806003193601126102325760206040516113888152f35b80fd5b5034610232576020366003190112610232576004357f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b03163381900361036e5781159081156102de575b506102cf576102c9816102b97fdb8706d86422709014bada3bd25f2d778ee89e0d80f545122f791634203ace0f9361215b565b9060409492945194859485611945565b0390a180f35b63c52a9bd360e01b8252600482fd5b6040516370a0823160e01b81523060048201529150602090829060249082905afa90811561036357839161032d575b5061032682610321600854600954906114b3565b6114b3565b115f610286565b90506020813d60201161035b575b816103486020938361147c565b8101031261035757515f61030d565b5f80fd5b3d915061033b565b6040513d85823e3d90fd5b63d53c3a3f60e01b8352600483fd5b50346102325780600319360112610232576040517f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b03168152602090f35b5034610232576060366003190112610232576004356024356001600160a01b038116908190036105a157604435917f00000000000000000000000074848886996c29fb3de1a4867f60382a12a862476001600160a01b03163303610592578115801561058a575b801561056c575b61055d5761043c6115b0565b506104456117ee565b60405190939060a081016001600160401b038111828210176105495760409081528482526001600160401b03861660208381019182526001600160801b03808616848601908152606086018b815260808088018d81528a8e52600d8652878e209851895497516001600160e01b03199098166001600160a01b03919091161760a09790971b600160a01b600160e01b031696909617885591516001979097018054915195516001600160901b03199092169790931696909617931515901b60ff60801b169290921793151560881b60ff60881b16939093179055519182527fe4d13d03950df95f361cc23d2231232a084766d37610170bfb3bca5a65e94b6891a480f35b634e487b7160e01b87526041600452602487fd5b6316d7e65f60e31b8452600484fd5b50808452600d60205260408420546001600160a01b03161515610430565b508215610429565b636b7ca3ab60e11b8452600484fd5b8280fd5b5080600319360112610232577f00000000000000000000000074848886996c29fb3de1a4867f60382a12a862476001600160a01b0316330361062b577f1492d4768134966ff4344cea5408beec08d1db59a3242bd2dc2066ca056cc92c604061061034600a546114b3565b80600a558151903482526020820152a1610628611b08565b80f35b636b7ca3ab60e11b8152600490fd5b50346102325780600319360112610232576020600754604051908152f35b50346102325780600319360112610232576040517f00000000000000000000000074848886996c29fb3de1a4867f60382a12a862476001600160a01b03168152602090f35b503461023257602036600319011261023257600435600f5460ff81166108985760ff1916600117600f556106cf611b08565b600b5480158015610890575b610881576106e99082611ebd565b90600a548211610872576040516323b872dd60e01b815233600482015230602482015260448101829052602081606481877f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b03165af1908115610867578491610838575b50156108105761076682600a546114d4565b600a556107728161215b565b50505061077d6121f4565b8280808085335af13d15610833573d6001600160401b03811161081f57604051906107b2601f8201601f19166020018361147c565b81528460203d92013e5b1561081057602092506107cd611b08565b60405190815281838201527ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec26260403392a260ff19600f5416600f55604051908152f35b6312171d8360e31b8352600483fd5b634e487b7160e01b85526041600452602485fd5b6107bc565b61085a915060203d602011610860575b610852818361147c565b810190611961565b5f610754565b503d610848565b6040513d86823e3d90fd5b6305727a8f60e41b8352600483fd5b634017a46160e01b8352600483fd5b5081156106db565b6306fda65d60e31b8352600483fd5b5034610232578060031936011261023257546040516001600160401b039091168152602090f35b503461023257806003193601126102325760206108e9611b67565b6040519015158152f35b50346102325780600319360112610232576020604051600f8152f35b5034610232578060031936011261023257604060045460055482519182526020820152f35b50346102325780600319360112610232576040517f000000000000000000000000000000000000000000000000000000000013c6806001600160401b03168152602090f35b50346102325760203660031901126102325760406020916004358152600e83522054604051908152f35b503461023257806003193601126102325760206040516123288152f35b5034610232576020366003190112610232576020906004358152600c8252604060018060801b0391205416604051908152f35b5034610232576040366003190112610232576004357f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b031660243533829003610bfd57828452600d602052604084208115908115610bea575b508015610bd5575b8015610b53575b610b4457600381049084610a7f83610a7a81856114d4565b6114d4565b9383610aec575b5050610ae67faa776b3188e208c378b2e52d641bef2f7172e5f355b6e55c4a0b5fbc9da7494793610ab9846008546114b3565b600855610ac8816009546114b3565b600955858752600e6020528060408820558360405194859485611945565b0390a280f35b803b15610b4057818091602460405180948193636ce6ed0560e01b83528960048401525af18015610b355715610a865781610b269161147c565b610b3157845f610a86565b8480fd5b6040513d84823e3d90fd5b5080fd5b63c52a9bd360e01b8452600484fd5b506040516370a0823160e01b8152306004820152602081602481865afa908115610bca578591610b98575b50610b9282610321600854600954906114b3565b11610a62565b90506020813d602011610bc2575b81610bb36020938361147c565b8101031261035757515f610b7e565b3d9150610ba6565b6040513d87823e3d90fd5b50828452600e60205260408420541515610a5b565b546001600160a01b03161590505f610a53565b63d53c3a3f60e01b8452600484fd5b5034610232578060031936011261023257602060405160c88152f35b50346102325780600319360112610232576020600b54604051908152f35b50346102325780600319360112610232576020610c61611854565b604051908152f35b5034610232578060031936011261023257546040805191901c6001600160401b03168152602090f35b50346102325780600319360112610232576040517f000000000000000000000000000000000000000000000000000000006a68dfda6001600160401b03168152602090f35b50346102325780600319360112610232576020600254604051908152f35b50346102325780600319360112610232576020600454604051908152f35b50346102325780600319360112610232576020600654604051908152f35b5034610232578060031936011261023257602060405160408152f35b50346102325780600319360112610232576020610c616117ee565b5034610232578060031936011261023257610628611b08565b50346102325780600319360112610232576020600354604051908152f35b50346102325780600319360112610232576020600554604051908152f35b5034610232576020366003190112610232576004357f00000000000000000000000074848886996c29fb3de1a4867f60382a12a862476001600160a01b0316330361100c57808252600d6020526040822080549091906001600160a01b0316158015610ffb575b610fec57600182019061010160801b61ffff60801b19835416178255808452600e602052604084205492818552600e60205284604081205583610eee575b5491546040516001600160801b039091168152602094506001600160401b0360a084901c169082907f021340c1a8692a8e9148f2ec9f5cb1776d54bdb9ba108f6b36abf54e904c006e908790a36040518381526001600160a01b03909216917fe7db3471853fbba5461f0415b3b6f9320c29c924d3298f4ae2e45b84197caf8f908590a3604051908152f35b60018060a01b03815416600954808611610fdd57600254610f0f87826114b3565b60015410610fce57610f5392610f3588602094610f2d8280966114b3565b6002556114d4565b60095560405163a9059cbb60e01b8152938492839260048401611979565b0381897f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b03165af1908115610fc3578691610fa4575b50610e62576312171d8360e31b8552600485fd5b610fbd915060203d60201161086057610852818361147c565b5f610f90565b6040513d88823e3d90fd5b631ebf50c160e01b8852600488fd5b631ebf50c160e01b8752600487fd5b6316d7e65f60e31b8352600483fd5b5060ff600183015460881c16610e24565b636b7ca3ab60e11b8252600482fd5b5034610232578060031936011261023257602060405160328152f35b5034610232576040366003190112610232576004356001600160a01b038116908181036105a157602435907f00000000000000000000000074848886996c29fb3de1a4867f60382a12a862476001600160a01b0316330361059257600f5460ff811661111a5760ff1916600117600f556007546110b483826114b3565b6006541061110b57916110f7816020936110ef827fc862b3c761419e48fb06a5966a8f0be664ba22691dc2c762c20e22408b6ed0f8976114b3565b600755611994565b604051908152a260ff19600f5416600f5580f35b631ebf50c160e01b8552600485fd5b6306fda65d60e31b8552600485fd5b50346102325780600319360112610232576020600154604051908152f35b5034610232578060031936011261023257604051676765c793fa10079d601b1b8152602090f35b50346102325780600319360112610232576020600854604051908152f35b50346102325780600319360112610232576040517f00000000000000000000000000000000000000000000000000000000000151806001600160401b03168152602090f35b50346102325780600319360112610232576020600a54604051908152f35b503461023257806003193601126102325760206040516127108152f35b50346102325780600319360112610232576020600954604051908152f35b503461023257806003193601126102325760206108e96115b0565b503461023257602036600319011261023257604060a0916004358152600d6020522060ff6001825492015460405192600180861b038116845260018060401b0390851c16602084015260018060801b0381166040840152818160801c161515606084015260881c1615156080820152f35b50346102325780600319360112610232576020610c616114e1565b5034610357576020366003190112610357576004357f00000000000000000000000074848886996c29fb3de1a4867f60382a12a862476001600160a01b03163303610018575f818152600d6020526040902080546001600160a01b031615801561146b575b61145c57600101805460ff60881b1916600160881b1790555f818152600e60205260408120805491905560095480821161144d5781611374916114d4565b6009556113858160011c80926114d4565b816113ba575b5f8051602061224983398151915291816113a96040936008546114b3565b60085582519182526020820152a280f35b7f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b0316803b15610357575f8091602460405180948193636ce6ed0560e01b83528860048401525af180156114425761141a575b5061138b565b6040919450916114385f5f805160206122498339815191529461147c565b5f94915091611414565b6040513d5f823e3d90fd5b631ebf50c160e01b5f5260045ffd5b6316d7e65f60e31b5f5260045ffd5b5060ff600182015460881c16611336565b601f909101601f19168101906001600160401b0382119082101761149f57604052565b634e487b7160e01b5f52604160045260245ffd5b919082018092116114c057565b634e487b7160e01b5f52601160045260245ffd5b919082039182116114c057565b6114e9611854565b60405163244989a960e11b81526020816004817f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b03165afa908115611442575f91611550575b506115449061154d926114b3565b600254906114d4565b90565b90506020813d60201161157c575b8161156b6020938361147c565b81010312610357575161154d611536565b3d915061155e565b811561158e570490565b634e487b7160e01b5f52601260045260245ffd5b5f1981146114c05760010190565b6115b86117ee565b5f80549092906001600160401b03165b82811115806117e4575b156117c257600f81101561170057604051630e1e304760e11b81526020816004817f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b03165afa908115611442575f916116cf575b5060c881029080820460c814901517156114c057816116c9925f8051602061226983398151915260406127106116c395045b8060011c906116a161167183836114d4565b5f878152600c60205285902080546001600160801b0319166001600160801b0386161790556001549092906114b3565b6001556116b0816003546114b3565b60035582519182526020820152a26115a2565b936115a2565b926115c8565b90506020813d82116116f8575b816116e96020938361147c565b8101031261035757515f61162d565b3d91506116dc565b604051630e1e304760e11b81526020816004817f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b03165afa8015611442575f9061178f575b61175a9150600154906114d4565b6032810290808204603214901517156114c057816116c9925f8051602061226983398151915260406127106116c3950461165f565b506020813d82116117ba575b816117a86020938361147c565b810103126103575761175a905161174c565b3d915061179b565b5f80546001600160401b0319166001600160401b038316179055919091119150565b50604084106115d2565b61154d6118247f000000000000000000000000000000000000000000000000000000006a68dfda6001600160401b0316426114d4565b7f00000000000000000000000000000000000000000000000000000000000151806001600160401b031690611584565b6040516318160ddd60e01b81527f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b0316602082600481845afa918215611442575f92611910575b50906020602492604051938480926370a0823160e01b82523060048301525afa908115611442575f916118da575b61154d92506114d4565b90506020823d602011611908575b816118f56020938361147c565b810103126103575761154d9151906118d0565b3d91506118e8565b91506020823d60201161193d575b8161192b6020938361147c565b810103126103575790519060206118a2565b3d915061191e565b9094939260609260808301968352602083015260408201520152565b90816020910312610357575180151581036103575790565b6001600160a01b039091168152602081019190915260400190565b908015611b04576002546119a882826114b3565b6001541061144d57816119bd916103216121f4565b60025560085481811015611afd57805b81611a5a575b506119dd916114d4565b90816119e7575050565b7f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b031691823b1561035757611a3c925f92836040518096819582946340c10f1960e01b845260048401611979565b03925af1801561144257611a4e575b50565b5f611a589161147c565b565b81611a64916114d4565b60085560405163a9059cbb60e01b815260208180611a86858860048401611979565b03815f7f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b03165af1908115611442575f91611ade575b5015611acf575f6119d3565b6312171d8360e31b5f5260045ffd5b611af7915060203d60201161086057610852818361147c565b5f611ac3565b81906119cd565b5050565b611b106114e1565b8015611a4b57611b2290600a54611f38565b600b5490818111611b31575050565b7fbca693753a10e7208b735685d84833793eed91182250639c475116dbde73bbf09181604092600b5582519182526020820152a1565b611b6f6115b0565b15611eb9575f5460408051630736559d60e01b815292919081901c6001600160401b0316907f00000000000000000000000074848886996c29fb3de1a4867f60382a12a862476001600160a01b0316602085600481845afa948515611442575f95611e82575b509060206004926040519384809263d437b4c760e01b82525afa918215611442575f92611e4e575b50428314611e45578415611de257505f916001600160401b037f000000000000000000000000000000000000000000000000000000006a68dfda8116917f0000000000000000000000000000000000000000000000000000000000015180909116905b42811080611dd8575b15611d7d57611c8182611c7c85846114d4565b611584565b90600182018083116114c057838102908082048514901517156114c057611ce291611cad8592876114b3565b8042105f14611d77575042935b5f908152600c60205260409020546001600160801b031690611cdc90856114d4565b906120db565b9084611d5157611d23611d2c92865f5b611d10611d088d611d0384876114d4565b611fcf565b6004546114b3565b60045580611d32575b50506006546114b3565b600655946115a2565b93611c60565b611d4791611d3f91611fcf565b6005546114b3565b600555865f611d19565b611388820282810461138814831517156114c057611d2c9286612710611d239304611cf2565b93611cba565b5f8054600160401b600160801b031916604083811b600160401b600160801b0316919091179091556004546005549151428414999397505f8051602061222983398151915296909550859450611dd39385611945565b0390a2565b5060408510611c69565b600160401b600160801b03191642604081811b600160401b600160801b0316929092175f908155600454600554845183815260208101939093529382015260608101929092529394505f80516020612229833981519152925060809150a2600190565b50600193505050565b9091506020813d602011611e7a575b81611e6a6020938361147c565b810103126103575751905f611bfd565b3d9150611e5d565b919094506020823d602011611eb1575b81611e9f6020938361147c565b81010312610357579051936020611bd5565b3d9150611e92565b5f90565b808202905f1983820990828083109203918083039283670de0b6b3a764000011156103575714611f27577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b5050670de0b6b3a764000091500490565b90670c7d713b49da00008202905f19670c7d713b49da00008409928280851094039380850394858411156103575714611fc857670c7d713b49da000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b90676765c793fa10079d601b1b80830291905f19908409928280851094039380850394858411156103575714611fc8578190676765c793fa10079d601b1b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b808202905f1983820990828083109203918083039283670c7d713b49da0000111561035757146120ca577f271b7f28ddb054547d2c870dcfc0f4a12799d94c8f4c005d4f0959fbc43258e593670c7d713b49da0000910990828211900360ef1b910360111c170290565b5050670c7d713b49da000091500490565b91818302915f19818509938380861095039480860395868511156103575714612153579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b9061216a8260011c80936114d4565b905f9083612184575b61217f836008546114b3565b600855565b7f000000000000000000000000ef7bc2750bc75b175ac81cabdccc88d21396433d6001600160a01b0316803b15610357575f8091602460405180948193636ce6ed0560e01b83528a60048401525af18015611442576121e4575b50612173565b5f6121ee9161147c565b5f6121de565b600b548015611a4b5761220f906122096114e1565b90612060565b600a541061221957565b6305727a8f60e41b5f5260045ffdfea7a32e1633970c8d38c540c8478c8b9702f3383d537d5ad486c76c8578ed20733f63d2a4fd7ae350fe109c119372a90544257f9ab3d559af643a2b9cfa22652258119817567f5bd3defc3c1aebd2b9b2028719dbd7e7c60d38b5c2146cdb292ca164736f6c634300081a000a
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x5f6714…dc8ff2 | 16 days agoSat, 01 Aug 2026 14:48:46 UTC | 0xc862b3…d0f8 | [0] 0x000000000000…86a25556 data: 0x000000000000000000…ce8cad81 |
| 0x5f6714…dc8ff2 | 16 days agoSat, 01 Aug 2026 14:48:46 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6e074e data: 0x000000000000000000…95e6958e |
| 0xe1c233…80dcb5 | 16 days agoSat, 01 Aug 2026 09:45:57 UTC | 0xc862b3…d0f8 | [0] 0x000000000000…f498c7d0 data: 0x000000000000000000…4e77ed2b |
| 0xe1c233…80dcb5 | 16 days agoSat, 01 Aug 2026 09:45:57 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6dc055 data: 0x000000000000000000…95e6958e |
| 0xf3b4e4…107f24 | 16 days agoSat, 01 Aug 2026 09:42:46 UTC | 0xc862b3…d0f8 | [0] 0x000000000000…3755d6cf data: 0x000000000000000000…35114961 |
| 0xf3b4e4…107f24 | 16 days agoSat, 01 Aug 2026 09:42:46 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6dbf96 data: 0x000000000000000000…95e6958e |
| 0xf3b4e4…107f24 | 16 days agoSat, 01 Aug 2026 09:42:46 UTC | 0x581198…292c | [0] 0x000000000000…00000003 data: 0x000000000000000000…78400000 |
| 0xf3b4e4…107f24 | 16 days agoSat, 01 Aug 2026 09:42:46 UTC | 0x581198…292c | [0] 0x000000000000…00000002 data: 0x000000000000000000…78400000 |
| 0xffe5ab…ded399 | 19 days agoWed, 29 Jul 2026 22:21:40 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6a7cf4 data: 0x000000000000000000…95e6958e |
| 0xec2122…bf30e4 | 19 days agoWed, 29 Jul 2026 22:21:39 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6a7cf3 data: 0x000000000000000000…95e6958e |
| 0xbe7b39…815ec5 | 19 days agoWed, 29 Jul 2026 17:46:01 UTC | 0xe7db34…af8f | [0] 0x000000000000…000000cd [1] 0x000000000000…fb0918df data: 0x000000000000000000…6d5871f2 |
| 0xbe7b39…815ec5 | 19 days agoWed, 29 Jul 2026 17:46:01 UTC | 0x021340…006e | [0] 0x000000000000…000000cd [1] 0x000000000000…00000000 data: 0x000000000000000000…e55d0bca |
| 0xbe7b39…815ec5 | 19 days agoWed, 29 Jul 2026 17:46:01 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6a3c59 data: 0x000000000000000000…95e6958e |
| 0xfd255e…6c605a | 19 days agoWed, 29 Jul 2026 17:38:07 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6a3a7f data: 0x000000000000000000…95e6958e |
| 0x29ee17…9adbe2 | 19 days agoWed, 29 Jul 2026 17:38:06 UTC | 0xe7db34…af8f | [0] 0x000000000000…00000090 [1] 0x000000000000…dec6b985 data: 0x000000000000000000…a463cc58 |
| 0x29ee17…9adbe2 | 19 days agoWed, 29 Jul 2026 17:38:06 UTC | 0x021340…006e | [0] 0x000000000000…00000090 [1] 0x000000000000…00000000 data: 0x000000000000000000…368dadc1 |
| 0x29ee17…9adbe2 | 19 days agoWed, 29 Jul 2026 17:38:06 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6a3a7e data: 0x000000000000000000…95e6958e |
| 0x8fd0ea…39db85 | 19 days agoWed, 29 Jul 2026 17:32:02 UTC | 0xe7db34…af8f | [0] 0x000000000000…00000064 [1] 0x000000000000…69854ce6 data: 0x000000000000000000…2ffde0f6 |
| 0x8fd0ea…39db85 | 19 days agoWed, 29 Jul 2026 17:32:02 UTC | 0x021340…006e | [0] 0x000000000000…00000064 [1] 0x000000000000…00000000 data: 0x000000000000000000…cba8d15a |
| 0x8fd0ea…39db85 | 19 days agoWed, 29 Jul 2026 17:32:02 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6a3912 data: 0x000000000000000000…95e6958e |
| 0x8e3d5c…2e670d | 19 days agoWed, 29 Jul 2026 17:31:45 UTC | 0xe7db34…af8f | [0] 0x000000000000…00000061 [1] 0x000000000000…37205232 data: 0x000000000000000000…b042ac6c |
| 0x8e3d5c…2e670d | 19 days agoWed, 29 Jul 2026 17:31:45 UTC | 0x021340…006e | [0] 0x000000000000…00000061 [1] 0x000000000000…00000000 data: 0x000000000000000000…04b3d336 |
| 0x8e3d5c…2e670d | 19 days agoWed, 29 Jul 2026 17:31:45 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6a3901 data: 0x000000000000000000…95e6958e |
| 0x923aa7…e8312d | 19 days agoWed, 29 Jul 2026 17:28:24 UTC | 0xa7a32e…2073 | [0] 0x000000000000…6a6a3838 data: 0x000000000000000000…95e6958e |
| 0xa7dded…145652 | 19 days agoWed, 29 Jul 2026 17:28:23 UTC | 0xe7db34…af8f | [0] 0x000000000000…0000003a [1] 0x000000000000…c66374b9 data: 0x000000000000000000…c3a5d4a8 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xbe7b3983…815ec5 | Transfer | 22,643,711 | 19 days agoWed, 29 Jul 2026 17:46:01 UTC | 0x5920…59cd | OUT | 0x783d…18df | 8,436.095616 STO | Stonkmon (STO) | |
| 0x29ee1746…9adbe2 | Transfer | 22,638,973 | 19 days agoWed, 29 Jul 2026 17:38:06 UTC | 0x5920…59cd | OUT | 0xc80d…b985 | 8,444.260498 STO | Stonkmon (STO) | |
| 0x8fd0eab6…39db85 | Transfer | 22,635,339 | 19 days agoWed, 29 Jul 2026 17:32:02 UTC | 0x5920…59cd | OUT | 0x3545…4ce6 | 8,242.809907 STO | Stonkmon (STO) | |
| 0x8e3d5c5c…2e670d | Transfer | 22,635,171 | 19 days agoWed, 29 Jul 2026 17:31:45 UTC | 0x5920…59cd | OUT | 0xdc6b…5232 | 8,266.890269 STO | Stonkmon (STO) | |
| 0xa7dded83…145652 | Transfer | 22,633,163 | 19 days agoWed, 29 Jul 2026 17:28:23 UTC | 0x5920…59cd | OUT | 0x3356…74b9 | 8,150.900721 STO | Stonkmon (STO) | |
| 0xdb00a868…237691 | Transfer | 22,323,575 | 19 days agoWed, 29 Jul 2026 08:50:54 UTC | 0x5920…59cd | OUT | 0xf636…8a4c | 33,679.078072 STO | Stonkmon (STO) | |
| 0x2640dcf2…68ed3e | Transfer | 22,322,849 | 19 days agoWed, 29 Jul 2026 08:49:41 UTC | 0x5920…59cd | OUT | 0x0000…0000 | 33,679.078072 STO | Stonkmon (STO) | |
| 0x2640dcf2…68ed3e | Transfer | 22,322,849 | 19 days agoWed, 29 Jul 2026 08:49:41 UTC | 0x9fb2…0631 | IN | 0x5920…59cd | 67,358.156144 STO | Stonkmon (STO) | |
| 0x61492486…c63535 | Transfer | 21,997,726 | 20 days agoTue, 28 Jul 2026 23:46:09 UTC | 0x5920…59cd | OUT | 0xe005…75d7 | 68,482.959251 STO | Stonkmon (STO) | |
| 0x9857270f…e5a817 | Transfer | 21,860,679 | 20 days agoTue, 28 Jul 2026 19:57:31 UTC | 0x5920…59cd | OUT | 0xe005…75d7 | 27,963.417436 STO | Stonkmon (STO) | |
| 0x8fb2c369…860be6 | Transfer | 21,832,264 | 20 days agoTue, 28 Jul 2026 19:09:59 UTC | 0x5920…59cd | OUT | 0xd781…62e0 | 292,554.909812 STO | Stonkmon (STO) | |
| 0x577e557e…1a1331 | Transfer | 21,827,800 | 20 days agoTue, 28 Jul 2026 19:02:32 UTC | 0x5920…59cd | OUT | 0xf636…8a4c | 77,947.814884 STO | Stonkmon (STO) | |
| 0x04d557d8…0c5706 | Transfer | 21,826,459 | 20 days agoTue, 28 Jul 2026 19:00:17 UTC | 0x5920…59cd | OUT | 0xa1a5…1753 | 80,264.182257 STO | Stonkmon (STO) | |
| 0x8516bd4d…df3ad3 | Transfer | 21,820,418 | 20 days agoTue, 28 Jul 2026 18:50:11 UTC | 0x5920…59cd | OUT | 0x0000…0000 | 4,196.829547 STO | Stonkmon (STO) | |
| 0xc10042f2…530221 | Transfer | 21,813,402 | 20 days agoTue, 28 Jul 2026 18:38:26 UTC | 0x5920…59cd | OUT | 0xf636…8a4c | 7,436.693439 STO | Stonkmon (STO) | |
| 0x1e4b86bc…326e22 | Transfer | 21,812,011 | 20 days agoTue, 28 Jul 2026 18:36:08 UTC | 0x5920…59cd | OUT | 0xf636…8a4c | 10,508.371164 STO | Stonkmon (STO) | |
| 0xecbde915…5f4c3c | Transfer | 21,810,643 | 20 days agoTue, 28 Jul 2026 18:33:50 UTC | 0x5920…59cd | OUT | 0xe005…75d7 | 6,119.330121 STO | Stonkmon (STO) | |
| 0x52f02472…cb198d | Transfer | 21,810,069 | 20 days agoTue, 28 Jul 2026 18:32:53 UTC | 0x5920…59cd | OUT | 0xf636…8a4c | 8,083.362433 STO | Stonkmon (STO) | |
| 0x026880ec…b80967 | Transfer | 21,809,179 | 20 days agoTue, 28 Jul 2026 18:31:23 UTC | 0x5920…59cd | OUT | 0x1af5…c772 | 2,988.354606 STO | Stonkmon (STO) | |
| 0x9a929639…9770ba | Transfer | 21,808,573 | 20 days agoTue, 28 Jul 2026 18:30:23 UTC | 0x5920…59cd | OUT | 0xf636…8a4c | 15,897.279453 STO | Stonkmon (STO) | |
| 0xb782b846…09ad69 | Transfer | 21,807,895 | 20 days agoTue, 28 Jul 2026 18:29:15 UTC | 0x5920…59cd | OUT | 0x1ab3…e155 | 5,191.480340 STO | Stonkmon (STO) | |
| 0xca2b88ed…4d316d | Transfer | 21,805,644 | 20 days agoTue, 28 Jul 2026 18:25:28 UTC | 0x5920…59cd | OUT | 0xf636…8a4c | 28,053.946485 STO | Stonkmon (STO) | |
| 0xe048b332…769ea6 | Transfer | 21,804,379 | 20 days agoTue, 28 Jul 2026 18:23:22 UTC | 0x5920…59cd | OUT | 0xbb0e…f0c9 | 30,584.284608 STO | Stonkmon (STO) | |
| 0xcf891b22…8406d7 | Transfer | 21,803,574 | 20 days agoTue, 28 Jul 2026 18:22:01 UTC | 0x5920…59cd | OUT | 0x7718…0a0c | 1,173.792900 STO | Stonkmon (STO) | |
| 0x04539a1a…349833 | Transfer | 21,803,043 | 20 days agoTue, 28 Jul 2026 18:21:08 UTC | 0x5920…59cd | OUT | 0xf636…8a4c | 93,177.418534 STO | Stonkmon (STO) |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 22,322,849 | 19 days agoWed, 29 Jul 2026 08:49:41 UTC | 0x2640dc…68ed3e | CALL | redeem | 0x5920…59cd | OUT | 0x9fb2…0631 | 0.00000 ETH |
| 21,800,074 | 20 days agoTue, 28 Jul 2026 18:16:11 UTC | 0xd35491…82dcb6 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00052 ETH |
| 21,798,814 | 20 days agoTue, 28 Jul 2026 18:14:04 UTC | 0x7c93c0…a4d485 | CALL | redeem | 0x5920…59cd | OUT | 0x3d51…1def | 0.00000 ETH |
| 21,797,982 | 20 days agoTue, 28 Jul 2026 18:12:40 UTC | 0xdd2396…cc01b4 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00051 ETH |
| 21,797,586 | 20 days agoTue, 28 Jul 2026 18:12:00 UTC | 0xe8b0ee…0e92e9 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00052 ETH |
| 21,797,084 | 20 days agoTue, 28 Jul 2026 18:11:11 UTC | 0x50606a…e19a50 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00052 ETH |
| 21,796,894 | 20 days agoTue, 28 Jul 2026 18:10:52 UTC | 0xbef4ab…f50985 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00052 ETH |
| 21,796,442 | 20 days agoTue, 28 Jul 2026 18:10:06 UTC | 0x410b75…e134ef | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00052 ETH |
| 21,796,318 | 20 days agoTue, 28 Jul 2026 18:09:54 UTC | 0xd2af4b…a84802 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00052 ETH |
| 21,796,204 | 20 days agoTue, 28 Jul 2026 18:09:42 UTC | 0x949184…593b0a | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00052 ETH |
| 21,795,992 | 20 days agoTue, 28 Jul 2026 18:09:21 UTC | 0x58da59…6f4331 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00052 ETH |
| 21,794,679 | 20 days agoTue, 28 Jul 2026 18:07:09 UTC | 0xe7e4ef…9f34ac | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,794,403 | 20 days agoTue, 28 Jul 2026 18:06:41 UTC | 0x9c9f47…1eacf5 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,790,666 | 20 days agoTue, 28 Jul 2026 18:00:26 UTC | 0x980711…2d24f7 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00054 ETH |
| 21,788,102 | 20 days agoTue, 28 Jul 2026 17:56:09 UTC | 0xd9bf15…091dcb | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00054 ETH |
| 21,787,280 | 20 days agoTue, 28 Jul 2026 17:54:47 UTC | 0x35944c…19b97a | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,787,057 | 20 days agoTue, 28 Jul 2026 17:54:24 UTC | 0x7dbca9…5be878 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,786,967 | 20 days agoTue, 28 Jul 2026 17:54:15 UTC | 0xc2e4c4…f5d147 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,786,789 | 20 days agoTue, 28 Jul 2026 17:53:57 UTC | 0x0c2037…b40e84 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,786,578 | 20 days agoTue, 28 Jul 2026 17:53:36 UTC | 0x53a9d8…d6d21c | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,786,501 | 20 days agoTue, 28 Jul 2026 17:53:28 UTC | 0x83554f…6262ea | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,786,416 | 20 days agoTue, 28 Jul 2026 17:53:20 UTC | 0xe70e60…b4401f | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,786,313 | 20 days agoTue, 28 Jul 2026 17:53:09 UTC | 0xdf6e19…c6e7a6 | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,786,191 | 20 days agoTue, 28 Jul 2026 17:52:57 UTC | 0xaa896f…cf60ac | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| 21,786,120 | 20 days agoTue, 28 Jul 2026 17:52:50 UTC | 0x72f243…b9676d | CALL | payToPull | 0x7484…6247 | IN | 0x5920…59cd | 0.00053 ETH |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x2640dc…68ed3e | redeem | 22,322,849 | 19 days agoWed, 29 Jul 2026 08:49:41 UTC | 0x9fb2…0631 | IN | RewardsVault | $0.000 ETH | 0.00000261 | |
| 0x7c93c0…a4d485 | redeem | 21,798,814 | 20 days agoTue, 28 Jul 2026 18:14:04 UTC | 0x3d51…1def | IN | RewardsVault | $0.000 ETH | 0.00000275 |