Claim

Connect a wallet to see what the tower owes you.

Stonkers

666 Stonkers in the tower. A Stonker is the only way to earn from raids without raiding: 7% of every haircut goes to the Stonkers pool, split by rarity. Dividends from trading go to token holders; what the raids produce goes to Stonkers holders.

What you get

Every raid takes 20% of a resident's balance. Of that balance 10% goes to the raider, 3% is burned and 7% lands in the Stonkers pool. On top of that, a raider bounty left unclaimed for 24 hours is swept into the same pool — Stonkers collect what the careless leave behind.

The pool is split by weight, not per head. Rarer Stonker, larger share of every raid, forever. Secondary royalties of 3% go to the reserve and are distributed to Stonkers holders every 24 hours from sellout, by the same weights.

Rarity and weight

HumanHuman300 of 666
WojakWojak156 of 666
CatCat60 of 666
ShibaShiba60 of 666
HippoHippo60 of 666
PepePepe30 of 66610×

The numbers

ItemValue
Supply666 Stonkers
Price0.00666 ETH
Per wallet6 max
ContractTBA
Art48×48 pixel art, delivered at 960×960 · unrevealed at mint · revealed 24 hours after sellout
Traits36 traits · 6 one-of-ones
Income7% of every haircut · unclaimed raid bounties · 3% royalties
WeightsHuman 1 · Wojak 2 · Cat / Shiba / Hippo 5 · Pepe 10
Royalty3% on secondary, to the reserve
First distribution24 hours after sellout

Unrevealed

At mint you receive a Stonker, shown as a tie until reveal. The colour is the only thing you see: red for Human, green for Wojak, black for Cat, grey for Shiba, yellow for Hippo, blue for Pepe. Everything accrued before the sellout is distributed 24 hours after the last Stonker is minted. At reveal each Stonker shows its traits — 36 in the collection, plus six one-of-ones. Traits are cosmetic; earnings follow the class only.

Everything a Stonker has earned travels with it. Sell the Stonker and the unclaimed balance goes to the buyer — the claim belongs to the token, not to the address that held it.
Mint price
0.00666 ETH
0 / 666 minted
Total 0.01 ETH

Mint opens at launch. Connect a wallet first.

StonkTower

$STONKTOWER is an ERC-20 that is its own Uniswap v4 hook, paired to SPYon on Ethereum. Every holder above 0.05% of supply lives on one of six floors. Trading volume prints raids; a raid takes a cut from one resident, pays the raider, feeds the Stonkers pool and burns the rest. Sells pay dividends to every holder. No keeper and no timer — raids run off the order flow and nothing else.

Supply1,000,000
PairSPYon · Uniswap v4
Swap fee5% buy · 5% sell
Haircut20%
Raid every1.5 SPYon
Settlement+4 blocks, on buys
A swap 5% fee Raid queued +4 blocks Haircut settles buy · burned sell · SPYon to holders settled by the next buy 10% raider · 7% Stonkers · 3% burn

Floors

Floors are balance bands measured in whole tokens and fixed at launch. They do not drift as supply burns, so the ladder you see today is the ladder forever. Below 500 tokens you sit in the lobby: you still collect dividends, you just do not play.

P2%+ · 20,000+51 – 2% · 10,000 – 20,00040.5 – 1% · 5,000 – 10,00030.2 – 0.5% · 2,000 – 5,00020.1 – 0.2% · 1,000 – 2,00010.05 – 0.1% · 500 – 1,000Lobbybelow 0.05% · < 500
// balance bands, in whole tokens (×1e18 on chain)
uint128[6] constant FLOORS = [500e18, 1_000e18, 2_000e18, 5_000e18, 10_000e18, 20_000e18];
uint128 constant SAFE_FLOOR = 500e18;

function floorOf(uint128 bal) internal pure returns (uint8) {
    if (bal < SAFE_FLOOR) return 0;
    for (uint8 f = 6; f > 0; f--) if (bal >= FLOORS[f - 1]) return f;
    return 0;
}

Raids

There is no clock. The hook watches its own pool and every 1.5 SPYon of cumulative volume drops one raid into the queue, which holds four at most. A quiet week cannot bank a hundred raids and dump them at once. Trade and the tower wakes up; stop trading and it sleeps.

The contract commits, not a person. A raid is armed inside the swap that printed it and settled four or more blocks later by the next buy — up to four raids in a single buy. Raids never settle inside a sell: in v4 the router takes the sold tokens after the hook runs, so cutting the seller mid-sale would revert the whole transaction. The seed is the hash of a block that did not exist when the raid was armed, so nobody can aim it and nobody can front-run it — and there is no target to block, because nobody names one.

nn+1n+2n+3n+4 commit blockhash → seed
uint256 constant EAT_UNIT    = 1.5e18;   // SPYon of volume per raid
uint8   constant MAX_PENDING = 4;
uint64  constant COMMIT_LAG  = 4;

function _afterSwap(uint256 volumeSpy) internal {
    cumulativeVolume += volumeSpy;
    while (cumulativeVolume >= nextRaidAt) {
        nextRaidAt += EAT_UNIT;
        if (pendingRaids < MAX_PENDING) pendingRaids++;
    }
    if (pendingRaids > 0 && commitBlock == 0) commitBlock = uint64(block.number);
    _settle();
}

Who gets picked

The target is drawn uniformly from every resident on the board — not floor first, then resident. That single choice is what keeps the tower honest: splitting a whale into forty wallets buys forty times the tickets and forty times smaller haircuts, and the two cancel out exactly. Weighting the draw by size would do the opposite and pay people to split. The raider is then drawn from the target's own floor or the floor below, which caps the size gap between the two at roughly 4×.

function _raid(uint256 seed) internal {
    uint256 n = live.length;
    uint256 i = seed % n;                                // uniform over residents
    address target;
    for (uint8 k = 0; k <= MAX_REDRAWS; k++) {           // skip lock-ups and poison pills
        address c = live[(i + k) % n];
        if (_inPlay(c)) { target = c; break; }
    }
    if (target == address(0)) return;                     // raid stays queued

    uint8 f = floorOf(balanceOf[target]);
    address raider = _drawFrom(f, f == 1 ? 1 : f - 1, seed >> 128, target);
    if (raider != address(0)) _haircut(raider, target);
}

The haircut

A raid takes up to 20% of the target's balance. Of that balance, 10% goes to the raider, 7% to the Stonkers pool and 3% is burned — in shares of the haircut itself that is 50 / 35 / 15. The raider's reward is a share of the haircut, never a fixed bounty: a fixed bounty would make it profitable to raid your own dust wallet, a share makes that a guaranteed loss.

The raider's cut is not pushed to their balance: it waits in a claimable bucket, so the raider's floor and mark do not move at the moment of the raid. Several bounties can be claimed in one transaction. Leave a bounty unclaimed for 24 hours and anyone can sweep it into the Stonkers pool. Claiming adds the tokens to your balance without moving your mark — which puts you above your line and back in play.

50% to the raider35% to Stonkers15% burned 20% of the target's balance · 10% raider · 7% Stonkers · 3% burned
uint16 constant BITE_BPS     = 2000;   // 20% of the target, at most
uint16 constant MIN_BITE_BPS = 200;    // below 2% the raid does not land
uint16 constant TO_RAIDER    = 5000;   // of the haircut
uint16 constant TO_STONKERS  = 3500;
uint16 constant TO_BURN      = 1500;

mapping(address => uint256) public bountyOf;

function _haircut(address raider, address target) internal returns (bool) {
    uint128 bal  = balanceOf[target];
    uint128 bite = bal * BITE_BPS / 10_000;
    uint128 room = bal - _line(target);                     // never below the line
    if (bite > room) bite = room;
    if (bite < bal * MIN_BITE_BPS / 10_000) return false;   // dust cannot reopen a target

    uint128 toRaider   = bite * TO_RAIDER   / 10_000;
    uint128 toStonkers = bite * TO_STONKERS / 10_000;
    _take(target, bite);
    bountyOf[raider] += toRaider;                            // claimable, 24 h before sweep
    stonkersPool     += toStonkers;
    _burn(bite - toRaider - toStonkers);
    // marks are untouched: the target now sits on its line, the raider has not moved
    emit Raid(raider, target, bite);
    return true;
}

Poison pill

Every resident carries a mark: their balance as of their last own move. A raid can only land while the balance sits above mark minus 20%. Once raided you drop exactly to the line and the pill holds — nobody can raid you again until you buy, sell or transfer, because any of those resets the mark to your new balance. An incoming transfer does not move your mark, and a raid needs at least 2% of balance above the line to land, so a dust gift cannot reopen you.

before · in play line = mark − 20% after the haircut · pill active Balance above the line → a raid can land. Balance sits on the line → nothing can touch you.
Selling to hide does not work: the mark follows you down and you are back in play at the new size. Sitting still works forever — and costs nothing.
mapping(address => uint128) public mark;

function _line(address a) internal view returns (uint128) {
    return mark[a] * (10_000 - BITE_BPS) / 10_000;
}
function _inPlay(address a) internal view returns (bool) {
    return balanceOf[a] >= SAFE_FLOOR
        && block.timestamp >= bornAt[a] + LOCKUP
        && balanceOf[a] > _line(a);
}
// own moves reset the mark; receiving a transfer does not
if (from == POOL)    mark[to]   = balanceOf[to];     // buy
else                 mark[from] = balanceOf[from];   // sell or outgoing transfer

Lock-up

A fresh buy carries a five-minute lock-up: you cannot be raided and you cannot raid. The stamp is set only on a buy from the pool, never on an incoming transfer, so hopping to a fresh wallet does not refresh it. The raider needs the same five minutes — no buy, raid and sell in one breath.

uint64 constant LOCKUP = 5 minutes;
if (from == POOL) bornAt[to] = uint64(block.timestamp);   // on a buy only

Fees & dividends

Every swap pays 5%. On a buy the fee is taken in $STONKTOWER and burned. On a sell the fee is taken in SPYon and goes to holders by balance, all of it. Dividends accrue to every holder, lobby included — the game is for residents, the yield is for everyone. A sell fee is booked on the next swap, after the seller's balance has dropped, so nobody earns a share of their own fee.

5% → burned 5% → 100% dividends to holders Buy · fee in $STONKTOWER Sell · fee in SPYon

Claim whenever you like, in one transaction. One rule worth knowing: anyone can flag an address, and dividends that address still has not claimed 24 hours later can be swept to the reserve. Swept dividends are then redistributed to active holders from the reserve.

uint256 public accSpyPerToken;                // MasterChef-style accumulator
mapping(address => uint256) debt;

function collect() external {
    uint256 owed = balanceOf[msg.sender] * accSpyPerToken / 1e18 - debt[msg.sender];
    debt[msg.sender] = balanceOf[msg.sender] * accSpyPerToken / 1e18;
    SPYON.transfer(msg.sender, owed);
    emit Collected(msg.sender, owed);
}

function flag(address[] calldata who) external;    // starts a 24 h clock per address
function sweep(address[] calldata who) external;   // unclaimed after 24 h → reserve

Stonkers

Stonkers are 666 NFTs that live off the raids. Token holders earn from trading; Stonkers holders earn from what raids take and from the collection's own royalties. Mint is in ETH, 0.00666 per Stonker, six per wallet at most.

Supply666
Price0.00666 ETH
Per wallet6
Royalty3%
Revealsellout + 24 h
First payoutsellout + 24 h

Two income streams

StreamPaid inComes fromWhen
Stonkers bounty$STONKTOWER7% of every raided balance, plus raider bounties left unclaimed for 24 hoursaccrues with every raid
Stonkers dividendsETH3% royalty on secondary sales, collected in the reservedistributed every 24 hours from sellout

Rarity and weight

Both streams are split by weight, not per head. Each class holds roughly the same share of the pool as a whole; what changes is how many hands it is split between. One Pepe earns as much as ten Humans.

ClassSupplyWeightClass sharePer Stonker
Human30016.6%0.055%
Wojak15617.2%0.110%
Cat6016.6%0.276%
Shiba6016.6%0.276%
Hippo6016.6%0.276%
Pepe3010×16.6%0.552%

Mint and reveal

Every Stonker mints unrevealed and shows only a tie. The tie colour tells you the class; the rest of the picture stays hidden. The class is drawn at mint from a fixed bag of all 666 using a future block hash, so nobody can pick an id and snipe a rarity; traits stay hidden until reveal. Reveal happens 24 hours after sellout. If it has not happened 30 hours after sellout, anyone can force it on chain.

red tie, unrevealedHuman, revealedHumanred tie
green tie, unrevealedWojak, revealedWojakgreen tie
black tie, unrevealedCat, revealedCatblack tie
grey tie, unrevealedShiba, revealedShibagrey tie
yellow tie, unrevealedHippo, revealedHippoyellow tie
blue tie, unrevealedPepe, revealedPepeblue tie

Top row is what you hold before reveal, bottom row is what it becomes.

The art

Every Stonker is pixel art drawn at 48×48 and delivered at 960×960, scaled by whole pixels with no smoothing, so it stays sharp on marketplaces, in wallets and in link previews. On top of the six classes the collection has 36 traits, and six one-of-ones — one in each class. Traits and one-of-ones are cosmetic: what a Stonker earns depends on its class weight and nothing else.

ItemValue
Canvas48×48, delivered at 960×960
Classes6
Traits36
One-of-ones6, one per class
Effect on earningsnone, only the class weight counts

Timeline

Until sellout the Stonkers pool fills but pays nobody. Everything accrued in that time is distributed 24 hours after the last Stonker is minted, together with the reveal. From then on raid income accrues continuously and royalty income is distributed once every 24 hours. Claims stay locked until that first distribution.

The claim belongs to the NFT

Earnings are booked against the token id, not the wallet. Sell a Stonker and everything it has accrued but not claimed goes with it — the buyer claims it.

uint256 public accPerWeight;                         // same accumulator as dividends, weighted by rarity
mapping(uint256 => uint256) public debtOf;           // keyed by token id, not by owner

function claim(uint256[] calldata ids) external {
    require(block.timestamp >= soldOutAt + 24 hours, "locked");
    for (uint256 i; i < ids.length; i++) {
        require(ownerOf(ids[i]) == msg.sender);
        uint256 w    = weightOf(ids[i]);                 // 1, 2, 5 or 10
        uint256 owed = w * accPerWeight / 1e18 - debtOf[ids[i]];
        debtOf[ids[i]] = w * accPerWeight / 1e18;
        STONKTOWER.transfer(msg.sender, owed);
    }
}
Royalties follow ERC-2981. Marketplaces read it but are not forced to honour it, and some pay less than 3% or nothing. The royalty stream depends on where Stonkers trade; the raid stream does not.

Launch

100% of supply goes to the pool and liquidity is locked with no withdraw path. There is no max wallet and no buy limit at any point. For the first 50 blocks raids are switched off, so the opening minutes cannot be farmed. No team allocation, no presale, no vesting schedule to watch.

ItemValue
Supply to LP100%
Team allocationnone
Presalenone
Max walletnone
Raids, first 50 blocksoff

Contracts

$STONKTOWER contract: TBA. Stonkers contract: TBA. Addresses are published at launch. Verify them on Etherscan before trading or minting — the only official source is the link in the header.

Demo APR PRICE MCAP VOL0.00 SPYon OPEN RAIDS0/4 RAIDS0 BURN0.0%
0x…
Character
Balance
Mark
Poison pill at
Floor
Dividends due
Raids led / suffered
Tenancy
Doing