Using the protocol

03 / 11

Odds & weighting

Odds are not a published table someone promises to honour — they are computed live from the exact lots the contract holds, by the same code that settles the draws.

Each lot in a pool carries a selection weight inverse to its current oracle value: a $20 lot is nine times likelier than a $180 one. This is the only shape that keeps a house-banked pool solvent — cheap lots pay out constantly while marquee lots stay genuinely rare — and it means the odds move honestly with the market: if your target stock rallies while you wait, its odds shorten, and everyone can see it.

The views

getOdds(tier) returns every lot with its exact selection probability, scaled to 1e18. The pack page renders this call directly — nothing is hardcoded, so the UI cannot lie without the chain contradicting it. spinEV(tier) returns the expected prize value of one spin: Σ(value × weight) / Σ(weight). Pack prices are sized so EV targets roughly 70% of the pack price; the live figure is shown before you buy, never after.

Valuation

All lot values come from Chainlink price feeds — one per stock token, operated as 24/5 tokenized-equity feeds. Every valuation enforces a 1-hour staleness bound: a quiet feed halts pricing-dependent actions rather than mispricing them. The protocol never prices from a DEX spot read, which is the manipulation vector this rule exists to close.

Note

Frozen odds while you wait: lots deposited while any spin is pending wait in a staging queue and only merge between settlements. The inventory your draw selects over is the inventory that existed when you bought the pack — nobody can reshape your odds mid-flight.