EV × stake in expectation (v1: EV = 0.85). What differs is the shape of the payout distribution.
Pick your mode
Strike - binary
Pick a stakeB and a multiple M (as multipleBps). You win W = M × B or lose the stake.
Formulas
EV × B expected payout. The multiple you can pick is capped live by effectiveMaxMultiplierBps, which shrinks from 100× toward 2× as bankroll liability fills up.
Range - bounded always-payout
Pick a stakeB, a floor P_min, and a ceiling P_max. Settlement always pays something in [P_min, P_max].
Formulas
P = P_min + (P_max − P_min) × U^α, where U is uniform from the bet’s entropy and α is solved so the mean lands on EV × B. It is not binned - discrete buckets belong to TieredBetter.
TieredBetter - multi-bucket
Pick a stakeB and up to 64 mutually exclusive buckets: payouts[i] (USDG payout if bucket i hits) and massWad[i] (probability mass in WAD, 1e18 = 100%).
Formulas
u = entropy % WAD and pays the first bucket whose cumulative mass covers u. The contract enforces the EV identity exactly in integer math - invalid mass sums, zero-mass buckets, or EV mismatches revert InvalidOdds. See Bet constraints for how clients snap float probabilities onto the identity.
TieredBetter is the general-purpose discrete mode: a classic dice or wheel game is just a TieredBetter with the right buckets.
Shuffle - pick seats, entropy permutes
Pick a stakeB, N payout rungs (payouts[], max 64), and K distinct seat indexes (pickIndexes[]). Settlement Fisher-Yates-permutes the rungs from the bet’s entropy, then pays the sum of the seats you picked.
Formulas
N = 0, K = 0, or K > N reverts InvalidOdds.
Onward
- Bet constraints - the gates each place call must pass
- Placing bets - building the actual call args