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.
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.
1
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
2
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)
3
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
4
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)
5
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.)