ToppsRaffle

TL;DR

  • Hold $TOPPS, get entered every 10 min.
  • 100% of trading fees fund the next pack.
  • Prizes auto-airdrop. No claim flow.
  • Win every graded Topps Card opened in your window.
  • Winner picked by commit-reveal, not us.
  • Just a wallet. No signup, no KYC.
1

STEP 01 · FEE

You trade $TOPPS. The bonding curve sweeps a small creator fee.

100% fair launch on the Meteora DBC bonding curve — no team supply, no presale, no rug surface. Every swap pays a small fee to the creator wallet. That wallet's only job is to forward those fees into the prize loop.

creatorFee = small % of every swap > fee collector wallet
2

STEP 02 · SWAP

A worker claims the fees and swaps SOL > USDC via Jupiter.

A cron worker hits the Meteora DBC claim instruction every ~30 seconds. When claimed SOL crosses a threshold it routes through Jupiter v6 to USDC at the best public route. No private RPC, no protected mempool — the route hash is on-chain.

claim > Jupiter v6 > USDC (route hash published per sweep)
3

STEP 03 · PACK

USDC buys a graded Topps Card on Collector Crypt.

When the USDC balance crosses one pack price, the pack-buyer hits the Collector Crypt API and queues a graded Topps slab. PSA / CGC / BGS grades only — no raw packs, no shipping roulette, no condition risk.

balance ≥ packPrice > CC.buyPack() > queue
4

STEP 04 · OPEN

Packs auto-open. Every slab piles into the current vault.

The pack-opener pulls from the queue, opens each pack through Collector Crypt's API, and ingests every card into the vault for the current 10-minute window. Whatever opens in that window — one card or fifty — is what the next winner takes.

while queue: open() > vault[currentDraw].push(card)
5

STEP 05 · ROLL

At the close slot, the vault auto-airdrops to one holder.

Snapshot every eligible $TOPPS holder at the close-slot. HMAC-SHA-256 a server seed we committed to before the window opened with the slot hash and the draw id. Walk the weighted prefix sum with the roll — the first holder whose slice covers the offset gets every card opened in the window, directly, no claim.

winner = walk(weights, HMAC(seed, slotHash | drawId))