ShadowBets

$ how ShadowBets works

A blind, multi-outcome parimutuel prediction market. Size shown, side sealed, settled on-chain. Non-custodial.

The idea — blind parimutuel

It's parimutuel: there's no house and no bookmaker setting odds. Everyone's stake goes into one pot. When the event resolves, the pot (minus a 2% fee) is split among whoever backed the winning outcome, pro-rata to their stake.

The twist is blind: while betting is open, every bet is encrypted. You can see the pot size, but not who backed what. No live odds, no order book, nothing to copy. Back a winner few others did and you split a fatter pot — the crowd can't pile onto your read and crush the payout, because they can't see it.

The lifecycle

  1. Commit. You pick an outcome, your browser encrypts choice‖nonce with timelock encryption (drand), and submits the ciphertext plus a hash commitment. Your stake (USDC) is escrowed by the contract.
  2. Seal. Betting stays open until the close time. Every bet is a sealed box on-chain — invisible even to us.
  3. Reveal. After close, the drand round publishes and a keeper decrypts every box and submits the reveals on-chain. The contract checks each against its commitment, so a reveal can't be faked.
  4. Resolve. Price markets settle from a whitelisted feed; event markets settle from a whitelisted resolver's posted outcome.
  5. Payout. Winners split the pot minus the fee. The keeper auto-claims for winners — gasless to you — and a manual claim is always open as a fallback.

The trust model — be honest about it

✓ The contract can't rug you

Non-custodial. Funds sit in the contract; payout math is fixed in code. We can't touch your stake or change who won. Reveals are verified against on-chain commitments, so picks can't be forged.

⚠ The keeper is a liveness dependency

A keeper must decrypt and reveal bets before each market's deadline. It can't steal funds — but if it goes down and bets aren't revealed in time, those stakes are refunded/forfeited rather than counted. One job: stay alive.

If a market's winning side has no revealed stake (e.g. the keeper failed), the contract voids it and everyone is refunded in full — funds can't get stuck.

Fees

A flat 2% is taken from the pot on a resolved market — 0.5% to the market creator, 1.5% to the protocol. Voided markets take no fee. The multiples you see are always after the fee, so the number on the receipt is the number you get.

This deployment

Live on Base Sepolia (testnet). Test USDC and a settable feed — play money, real machinery. Verify everything yourself:

NetworkBase Sepolia · chain 84532
Settlementtlock / drand quicknet · off-chain keeper reveal

Testnet only for now. Real money needs a security audit first — see the project plan. Browse the markets →