Controls & safety

09 / 11

Safety

The guarantees are structural — enforced by contract code and a formal invariant test suite, not by policy or promises.

  • No phantom prizes — the sum of listed lots always equals tokens the SpinEngine actually holds. A prize that isn't in the contract can't be offered.
  • No extraction path — the only function that moves inventory out is settlement to a winner. Rescue functions refuse every token accounted into inventory and all $IWA escrow — for the team as much as for anyone.
  • Payouts can't be paused — no pause exists on settlements. The only circuit breaker blocks new pack sales when a pool is below its value floor, and it lifts itself when the Stocker refills.
  • Strict FIFO — draws settle in creation order per pool; deposits stage until the queue clears, so pending odds never shift.
  • Conservation — burn + restock + refunds equals 100% of every pack payment. Refund credits are pull-only and single-claim.

Randomness

The draw is served by a swappable randomness service; the provider currently live is named in the spin flow (Verifiable onchain draw). The engine refuses a provider change while any spin is pending, so no in-flight draw can have its randomness source changed. Chainlink VRF is adopted the day it deploys on Robinhood Chain; Pyth Entropy if it arrives first; until then a zero-dependency blockhash bootstrap keeps the game live — bounded by the same inventory and refund rules, and clearly labelled while active.

Verify a draw yourself

Your spin transaction's SpinRequested event carries your requestId. Find its randomness delivery (the provider's fulfilment transaction, or the public deliver() call in bootstrap mode). The SpinSettled event names your prize — recompute it: weights are 1e36 / lotValueUsd over the inventory at your request, and the winner index follows word % totalWeight through the running sum. The reveal animation starts only after settlement and lands on the settled result.

Risk

What safety does not mean: prizes can lose value, $IWA can lose value, packs have a house edge, and in bootstrap randomness mode a block producer could in principle bias a draw (bounded to which held lot wins — never minting, escrow, or extraction). Audit and legal review status is published before launch.