EVERY LOOP, END TO END

One vault of real slabs.
Four ways to play it.

Every card is a real PSA / CGC / BGS slab, every roll a Collector Crypt VRF proof, and all it takes is a wallet - no signup, no KYC. Four games, one page.

ANIMATED LOOP - 5 STAGES
  1. Fee accrues
  2. Swap to USDC
  3. Buy graded pack
  4. Roll - pick holder
  5. Winner claims slabs
PICK YOUR MODE

Same vault, four doors. All provably fair.

More modes in the works.

THE RAFFLE LOOP - 5 STEPS

The passive engine: fees in, graded slabs out, every hour.

This is the mode you never have to touch. Trading fees on $GACHA buy real packs, the packs open into a vault, and once an hour one holder wins the lot.

RAFFLE STEP 01 FEE

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

100% fair launch on the Meteora DBC bonding curve - no team supply, no presale, no vest. 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
RAFFLE 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)
RAFFLE STEP 03 PACK

USDC buys a $25-$2,500 graded booster pack on Collector Crypt.

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

balance >= packPrice > CC.buyPack() > queue
RAFFLE 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 window. Whatever opens in the next hour - one card or fifty - is what the next winner takes.

while queue: open() > vault[currentDraw].push(card)
RAFFLE STEP 05 ROLL

At the close of the hour, one holder wins the whole vault.

Snapshot every eligible $GACHA holder at the close slot. Every holder owns a slice sized by their balance; the VRF proof (RFC 9381 ECVRF, signing key frozen on-chain before the round) picks one point, and whoever's slice covers it wins every card opened in the window - then has about 70 hours to claim the slabs or instant-sell them for USDC.

winner = walk(weights, VRF_beta(alpha = drawId))
BUILT SO NOBODY - INCLUDING US - CAN RIG IT

Don’t trust us. Verify it.

Every raffle draw and every game roll is derived from a Collector Crypt VRF proof - RFC 9381 ECVRF, real cryptographic randomness. The signing key was registered and frozen on-chain before it signed its first round, so the operator can’t grind or bias a result. Recompute verifyVRF(key, alpha, proof) in your browser - no server in the loop. (Older raffle draws used a committed server seed pinned to a Solana slot hash; the verifier still checks those, but VRF is the mechanism today.)