Pack openings are fun to watch. The anticipation, the foil, the reveal. Most online versions ask you to trust a black box, though. When I started building SolFoil (https://solfoil.xyz) I set one rule: nobody should have to trust me. Every pull should be something you can check yourself.
This is how it's built, what I learned, and where it stands. Short version: it's live on Solana devnet, and the $RIPV token is coming soon. No real money is in play yet.
The core idea
SolFoil is a pack-rip and spin game. You pick a pack, rip it open, and get a prize in one of four tiers, from common "Dust" up to the rare top pulls. A spin wheel gives a second way to play. The game runs on the web and as a Telegram bot (https://t.me/Solfoil_bot), so you can play without leaving your chat app.
Provably fair rolls
The fairness scheme is a standard commit-reveal setup:
- Server commit. Before you open anything, the server makes a random server seed and shows you only its SHA-256 hash. It is locked in at that point.
- Client seed. Your browser adds its own seed, and a nonce goes up with each roll.
- Roll. The result comes from an HMAC of the server seed with your client seed and nonce, mapped onto the odds table.
- Reveal and verify. Afterwards the server seed is revealed. The Verify panel hashes it again, checks it against the commitment, and recomputes your roll, so you can see the outcome wasn't changed after the fact.
The odds table is published too. "Fair" means nothing if you can't see the odds.
A pity timer
Random is honest, but it can still feel cruel. A long run of Dust pulls is how players quit. So SolFoil has a pity timer: after a set number of pulls without hitting a higher tier, the next pack is guaranteed to land one. The pity counter is part of the published rules and the verifiable state. It sets a minimum. It doesn't hide a second set of odds.
Cinematic multi-pack reveals
The first version of the reveal looked cheap. It was a flat card with no branding. I rebuilt it as a full-screen cinematic: the pack shakes, the foil tears, and the card flips in with an animated logo, a moving rainbow foil border, and colour treatment for each tier (Dust gets a silver holo look).
Then I added Rip 5. You pay once for five packs and get five separate, independently verifiable results, revealed one after another. The hard part was pacing. Five reveals have to feel fast but still give the big pull its moment. Each result has its own commit and nonce, so batching doesn't weaken fairness.
A live pulls feed
Opening packs is social. A live pulls feed shows recent rips across the site as they happen. It makes the game feel alive, and it's a public record people can watch, which fits the "don't trust, verify" idea.
The stack
- Frontend: Next.js on Vercel, with React components for the pack, the unwrap, the reveal and the feed.
- Chain: a Solana program deployed to devnet, with Helius RPC.
- Payouts: a separate worker handles prize payouts. For launch it will have payout caps and a kill switch, because safety rails go in before money does.
- Telegram: a bot that wraps the same game logic.
What's next
The plan is to launch the $RIPV token on Pump.fun and move from devnet to mainnet after more testing: small live test spins first, then a gradual rollout. Until then, everything you see is devnet, and nothing is for sale.
Lessons
- Make fairness visible. A Verify button gets used more than a whitepaper gets read.
- Polish is trust. The cheap-looking reveal hurt credibility more than any bug did.
- Pity timers keep people playing without changing the honest odds.
- Ship on devnet first. It's the cheapest way to find out what breaks.
If you want to try it or poke holes in the fairness scheme, go to https://solfoil.xyz, play in Telegram at https://t.me/Solfoil_bot, join https://t.me/SolFoilOfficial, or follow @SolFoilxyz on X. Feedback is very welcome.
Top comments (0)