How Fairplay Pools Work

FairplayVault runs commit–reveal USDC pools on Base. Everyone pays the same entry price. The pool draws a winner after a short reveal phase using secrets (salts) committed ahead of time—so the outcome is provably fair without VRF.

  • No VRF dependency
    Fairness comes from the creator’s pre-committed salt (and an optional sentinel).
  • Instant, on-chain payout
    Winner is paid directly from the pool when finalized.
Tip: If you’re a developer, you can integrate with the SDK and customize fees on your own deployment.

Create a Pool — Quick Start

~2 minutes

  1. Choose basics: entry price, optional entry caps, and timing (entry window & reveal window).
  2. Salt is auto-generated: keep it safe. You’ll reveal it later. You can optionally encrypt and download a local backup.
  3. (Optional) Add a sentinel: a second, independent salt/commit that reveals after you for extra “you didn’t bias it” assurances. You can paste a commit or fetch from your sentinel service.
  4. Approve & Create: approve the bond(s), then submit. The pool opens until the entry deadline.
  5. Reveal on time: after entries close, reveal your salt (and the sentinel reveals theirs if configured), then finalize.
Fees: On this hosted app, fees are fixed for simplicity. If you need custom fees, use the SDK on your own deployment.

Join a Pool

For participants

  1. Pick a pool from the list and review the entry price, close time, and any min/max entry limits.
  2. Approve USDC (one-time per token/contract), then choose a quantity and click Enter.
  3. Wait for reveal/finalize: once the reveal phase is complete, the contract draws a winner and pays out instantly.
You can track pool status on the home page or via the block explorer.

Timeline at a Glance

1) Entry Window
Users join by paying the entry price.
2) Reveal Window
Creator reveals their salt; sentinel reveals if configured.
3) Finalize
Contract computes the winner & pays out. Missed reveals may slash bonds.

Salts, Commits & Fairness

When a pool is created, the creator’s salt is committed (hashed) on-chain. Later, during the reveal window, the creator reveals the raw salt. The contract checks it matches the prior commit, then uses it—plus other pool state—to derive the random outcome. If a sentinel is used, their commit & reveal happens too, making it even harder to bias.

  • Keep your salt safe. Losing it means you can’t reveal (and you may lose your bond).
  • Don’t share the raw salt early. Only reveal during the reveal phase.
  • Sentinel is optional. It’s an extra proof against creator bias for higher-stakes pools.

Fees & Bonds

  • Entry price: what each participant pays to enter. Total prize is entries minus fees.
  • Protocol / Builder fees: set by this app and/or contract configuration. On this hosted app, they’re fixed for consistency.
  • Bonds: refundable deposits from creator (and sentinel if used). Missing reveals or certain failure conditions can slash bonds.
Want different fee behavior? See About for the SDK & deployment options.

Best Practices

  • Back up your salt (the app offers a local JSON backup). Consider encrypting it with a passphrase.
  • Pick sensible windows: short enough to keep momentum, long enough that you can reveal on time.
  • Use a sentinel for larger pools to strengthen fairness guarantees.
  • Communicate clearly to participants: entry close time, reveal time, and when to expect finalization.

FAQ

What happens if the creator forgets to reveal?
Their bond may be slashed. If a sentinel is configured and reveals correctly, finalization can still proceed according to contract rules.
Do I need a sentinel?
No. Sentinel is optional. It adds an extra, independent commit to further reduce the chance of creator bias.
How is the winner chosen?
The contract derives randomness from committed salts and pool state. Since salts are committed ahead of time, the outcome is verifiable.
Can I change fees?
On this hosted app, fees are fixed. You can deploy your own UI/SDK integration to set your own fee policy.
Which network does this run on?
Base mainnet. Ensure your wallet is connected to Base before interacting.

Need Help?

Check the About page for technical notes and SDK pointers, or reach out via the footer links. You can also inspect transactions on the configured explorer for your network.