Snitch CatBack to the board

Snitch Cat tokenomics v2

Status: implemented in contracts/src/PodiumVault.sol (v2), backend/ and web/, with two deltas from the design below: jackpot hits pay 50% through the podium and 50% across the street (lower concentration, see sim/RESULTS.md), and the house floor is 0.01 ETH instead of 0.05 (same holder outcomes, most of the house income kept).

Audit changes (2026-09-08)

An adversarial review before launch changed the contract in ten places; the full table is in LAUNCH.md. The ones that change the numbers on this page: the split is taken from fresh fees only (stash releases and unpaid prize are no longer re-taxed, so the house takes exactly 10% of fees); a rearm pins the draw hash while it is still readable and real rerolls are capped at three per hand; the settler always submits all 40 attempts; every listed wallet must show at least one ticket's worth of bag; the jackpot decision uses the reserve as it stood before the settle's drips.

Goal: attract new holders and keep existing ones through quiet stretches, without rewarding wallet splitting, whales, or bots. Everything below keeps the v1 promise: nothing to click, nothing to claim, the pot is trading fees.

Method: five independent proposals (lottery design, mechanism design, market microstructure, retention behaviour, on-chain feasibility), each attacked by adversarial reviewers where budget allowed; the survivors were combined and the reviewers' fixes applied. Dropped ideas and why are at the end.

1. Diagnosis of v1 (all five lenses agreed)

hand = 69.75% × 4.7% × volume/288. At 20 ETH/day that is a first prize of 0.001 ETH, 288 times a day. Quiet hours show dust, and quiet hours are exactly when a holder decides whether to stay. There is no number that only goes up, no headline for a newcomer, no event to come back for.

trimming 5% of a bag erases the whole streak, so a small profit-take rationally becomes a full exit. An old dust wallet that receives a whale bag inherits a 10-day streak (aged-wallet hole).

cooldown makes the next hands worthless to them, and the forfeit check is only "still holds 10,000 tokens", so a winner can dump to 10,001 between snapshot and settle and still be paid.

while the convexity meant to punish splitting tops out at 1.5 × 1.5.

tick after settle, size public in the event, 3% slippage, on a pool with 4.2 ETH of depth. Simulated: a bot nets 0.06 to 0.18 ETH per buyback.

rearm() picks a new seed; only the operator holds the list, so the operator can reroll a draw it does not like. Tolerable at podium size, fatal once a jackpot exists.

takes 10% during the only window that decides graduation.

2. Design principles

pays yield; v2 only moves the same ETH through time and across holders.

event that is getting closer.

3. Flows per settled hand

Gross pot G = harvested fees + stash release (see 3.3). Post-graduation:

SliceShare of GNotes
Settler bounty0.25%unchanged
House10%, scaling to 0 below a 0.05 ETH pot"house eats last": houseEff = houseBps × min(1, pot / 0.05 ETH)
Buyback and burn reserve15% (was 20)executed as bites, see 3.5
Big Rat jackpot reserve15%pays through the podium on a seed-chosen hand, see 3.4
Stash deposit20%banked in the vault, released at 0.75% of the stash per hand
Prizeremainder, ≈ 40% + stash release ≈ 60% in steady statepodium 90% (45 / 27 / 18 of prize), street 10%

Pre-graduation (owner sets once, keeper flips at PoolCreated): house 0%, burn 25%, jackpot 15%, stash 20%. Every burn bite is a curve buy that counts toward the 4.2 ETH graduation and lifts the curve price.

3.1 Podium and the Street

today, cooldowns 3 / 2 / 1 hands, one slot per wallet per hand.

five more distinct wallets 2% of the prize each. One of the five is the rookie slot, drawn from a second small root of wallets whose first inbound transfer came from the Pons curve or the V4 pool (a taxed buy, not a wallet-to-wallet transfer) within the last 288 hands, once per address for life. Street winners get a separate 2-hand street cooldown.

every day or two instead of every couple of weeks, and a first ticket usually pays something in day one. Rookie farming is bounded at 2% of the prize and costs 4.7% of churned capital; acceptable.

slot is forfeited if balanceOf < 90% × units × 10,000, not "< 10,000".

3.2 The Drip (vest while you hold)

hands later (about 24 h) if the wallet still holds at least 90% of the balance it won with. Otherwise the 40% goes to the jackpot reserve.

6 processed per settle), balances read on chain, no claim. Contract wallets fall back to pendingEth as today.

holders have a drip in flight, a standing reason not to sell tonight. Sell-and-rebuy around the checkpoint costs ~9.75% round trip and never pays; moving the bag to another wallet is an outbound transfer and forfeits.

3.3 The Stash (never a zero pot)

unchanged). When volume dies the release decays with a 7.7-hour half-life and never reaches zero, so the board can always say "next hand pays at least X even if nobody trades". Honest copy: the stash is past fees, delayed, not yield.

can only move stashBps (cap 40%) and stashReleaseBps (0.1% to 5%).

3.4 The Big Rat (seed-triggered jackpot)

odds = jackpotInterval / handSeconds (default 2 days → 1 in 576 per hand), or forced when the reserve reaches 2 ETH. On a hit the reserve is added to that hand's prize and flows through the normal podium, cooldowns, cap and forfeit rules. A forfeited first place keeps the jackpot in the reserve rather than rolling it.

random hour, and most hours are quiet. Expected size ≈ 15% of two days of pot flow (0.28 ETH at 20 ETH/day, 2 ETH cap at ~150 ETH/day).

hands (about 1 h), so a buy-and-dump around a hit is impossible.

hand, average two days, not a schedule", and the 2 ETH must-pay line.

3.5 Buybacks as bites

Keeper-only change, no contract change beyond lowering maxBuybackPerTx:

10.8% round-trip fee a sandwicher pays). Pre-graduation read curve.getReserves(), post-graduation the pool's ETH side.

published after the fact in /api/buybacks), more bites when spot is under the 1-hour TWAP, at most 12 hands of deferral, 1% slippage.

bid, and the burned counter and average entry.

3.6 Trust fixes (contract)

exists anyone stores arbBlockHash(drawBlock) and earns 0.05% of the pot at settle. settle() uses the stored hash and no longer needs the 200- block window. rearm() is only allowed when nothing was recorded, and a rearmed hand can never be a jackpot hit. This closes the operator reroll.

always fully harvested and nobody gains by timing harvest().

Harvested (fees) per hand; the site and the feed label pots that include direct transfers ("includes 4 ETH sent to the vault"). Stops bought headlines.

clock; abandoned hands do not.

4. Ticket rules v2 (keeper, replayable from Transfer logs)

Inbound of v to balance b at block n: ageStart += floor(v × (n − ageStart) / (b + v)) (new tokens are age 0; a whale bag moved into an old dust wallet gets age ≈ 0, closing the aged-wallet hole). Outbound of v from b: ageStart = min(n, ageStart + floor(2 × v × (n − ageStart) / b)): selling 10% costs 20% of the age, selling half kills it. Splitting still strictly loses (source loses age, destination starts at zero) but a small profit-take no longer erases weeks.

+50% at day 10 as today, +90% at day 30. There is always something left to lose.

effective total, iterative fixed point, from 20 eligible wallets): eff(t) = c + isqrt((t − c) × c). Splitting gain drops from unbounded to 1.0× at 2c, 1.24× at 3c, 2.5× at 10c, paid for with tier loss, a 30-day age reset on every new wallet and the fresh-transfer delay. A whale that stays whole keeps ~10% share at 2c, 20% at 10c, then cooldowns rotate it.

transfer (not from the curve or pool) do not count for 24 h.

it appears in (5 to 10 minutes after buying). Kills buy-snapshot-dump inside a hand and gives the site a "you're in from hand N+2" moment.

5 wallets, 15% at 10, 7.5% at 20. Protects the launch hands.

5. Launch regime

house gift on the site. Hand 1 rolls (nobody seasoned yet), hand 2 pays.

stash 20); keeper flips to post-graduation values at PoolCreated.

launch and not changed afterwards without a week's notice.

6. Site and feed

dinner queue, next hand countdown, eligible wallets, your odds.

per hand (podium and street), age in days and what a 10% sell would cost in tickets, drip in flight ("0.012 ETH due at hand #N if you still hold ≥ 250,000"), jackpot eligibility, next tier.

short addresses only, with the tickets and age forfeited. Excludes team and CEX wallets, ignores dust.

post jackpots and buybacks above 0.05 ETH, plus a daily summary. Never an APY, never a receipt without the odds line. Do not post 288 dust hands a day; that is a decay chart in everyone's pocket.

7. Parameters

ParameterValueCap
houseBps1000 (0 pre-graduation), scales to 0 below 0.05 ETH2000
burnBps1500 (2500 pre-graduation)5000
jackpotBps15002500
jackpotInterval172,800 s (1 in 576 per 5-min hand)≥ 12 hands
jackpotCap2 ETH (forces payout)
jackpotMinAgeHands12
stashBps / stashReleaseBps2000 / 754000 / 10..500
podium split45 / 27 / 18 of prizefixed
street5 slots × 2% (1 rookie)fixed
drip60% now, 40% at +288 hands, 90% balance test
cooldowns3 / 2 / 1 (4 / 2 / 1 first 12 hands); street 2100
age curve+5%/day to 10, +2%/day to 30 (+90%)
sell penalty2× the sold fraction of age
soft cap knee5% from 20 wallets; warm-up 150%/N
fresh-transfer delay864,000 blocks (24 h)
buyback bite≤ 2% of quote reserve, 1..4 per hand, 1% slippagemaxBuybackPerTx 0.12 ETH
recordDraw bounty0.05% of pot
forfeit threshold90% of snapshot balance

8. What changes per layer

Contract (redeploy; pre-launch this is free, post-launch the fee stream moves to the new vault with transferCreatorFeeRecipient): recordDraw, harvest-in-settle, stashReserve + release, jackpotReserve + hit rule + cap, street slots (MAX_ATTEMPTS to 40, PODIUM + STREET), rookie root, vest queue, forfeit threshold on units, house scaling, cooldowns on dealt hands, pre/post-graduation split, maxBuybackPerTx 0.12.

Keeper / indexer: token-age accounting, soft cap, fresh-transfer delay, seasoning, warm-up cap, rookie root, bites buyback executor with TWAP, pot provenance, feed gating, recordDraw racing.

Site: stash line, Big Rat panel, dinner queue, drip on the odds card, paper-hands wall, provenance labels, updated rules and FAQ.

Rollout order: trust fixes and stash first (they change nothing for holders and remove the reroll), then Drip and street, then the jackpot, then ticket rules v2 (announce a week ahead).

9. Dropped, and why

realistic volume every hand rolls to the maximum, "every five minutes" becomes "every 30 minutes", payout touchpoints drop 6×, the feed goes silent, and rolled hands burned the on-chain cooldowns. The stash and the jackpot solve the dust problem without touching cadence.

erased the anti-split convexity, and it taxed newcomers and fresh winners.

dump-after window; the seed-triggered jackpot has no window.

second tree plus the Drip and the 30-day curve already reward long holders; candidate for v2.1 once the base is live.

framing conflicts with the honesty rule, rendering in the keeper process risks missing the draw window. Keep the daily summary and jackpot posters.

needs fork tests against the live V4 hook; later.

10. Honest risks that remain

No identity-free rule removes that because wallet-to-wallet transfers are tax-free; the site shows it.

new money. A dead market is still a dead market; the mechanics only stop the board from broadcasting the decay every five minutes.

review.