Dice
A 20-sided die with a configurable, capped house edge and payouts derived from probability, not from a marketing page.
How it works
The Overtime Dice contract simulates a fair d20 (20-sided die). When you place a bet:
You pick a target number between 1 and 20
You pick a direction: Roll Under or Roll Over
The contract requests a random word from Chainlink VRF
The result is computed as
(randomWords[0] % 20) + 1The bet wins if the result lands on the side of the target you chose
The total payout multiplier is derived from a single formula:
payoutMultiplier = (1 - houseEdge) / probabilityThat's the entire pricing model. The houseEdge is a public state variable, capped at MAX_HOUSE_EDGE = 5% and enforced by the contract, the operator cannot set a slot quietly extracting more.
Bet types
Roll Under
Pick a target between 2 and 20. You win if the rolled number is less than your target.
Target =
2→ 1 winning face (only1wins) → ~1/20 probability → near-19× payoutTarget =
20→ 19 winning faces (1–19) → ~19/20 probability → near-1× payout
Roll Over
Pick a target between 1 and 19. You win if the rolled number is greater than your target.
Target =
19→ 1 winning face (only20wins) → ~1/20 probability → near-19× payoutTarget =
1→ 19 winning faces (2–20) → ~19/20 probability → near-1× payout
The target you pick determines both your odds and your payout, deterministically. There is no asymmetry between the contract's quoted multiplier and the math.
Sample payouts (at 1% house edge)
Roll Under
2
5%
~19.80×
Roll Under
11
50%
~1.98×
Roll Under
20
95%
~1.04×
Roll Over
1
95%
~1.04×
Roll Over
10
50%
~1.98×
Roll Over
19
5%
~19.80×
The actual houseEdge set on the deployed contract is readable directly from chain state. Verify it at any time, it can never silently exceed 5%.
Limits
Minimum bet
3 USD
House edge
Configurable, capped at 5% (MAX_HOUSE_EDGE)
Maximum profit per bet
Set per deployment (maxProfitUsd)
Cancel timeout
30 seconds minimum
Supported collaterals: USDC, WETH, $OVER.
User guide
1. Open the Dice table
From the casino lobby, select Dice.
[Screenshot — dice game interface]
2. Choose your direction
Toggle between Roll Under and Roll Over.
[Screenshot — direction toggle]
3. Set your target
Drag the slider to your target number. The interface live-updates the win probability and the total payout multiplier as you move it. The riskier the bet, the higher the multiplier — and the math is exact, not promotional.
[Screenshot — slider with live multiplier display]
4. Set your stake
Enter the amount and pick your collateral. The minimum bet is 3 USD equivalent.
[Screenshot — stake entry]
5. Roll
Click Roll, sign the transaction. The bet enters PENDING while waiting for the VRF callback.
[Screenshot — pending roll]
6. Result
When the random word arrives, the d20 result is revealed. If you won, the payout is in your wallet in the same transaction. Your bet history shows the result, the random word and the payout — verifiable on a block explorer.
[Screenshot — resolved roll]
Why this matters
A traditional Vegas table will not give you its true RTP. A traditional online casino will quote one and reserve the right to change it. Overtime Dice publishes its house edge as a public state variable, hard-capped on-chain, with a payout formula that is mathematical rather than editorial.
If the contract ever changes its house edge, it emits a HouseEdgeChanged event. Every bettor who comes after sees the new number before they place their stake. There is no fine-print version of the game.
Free bets
Dice supports placeBetWithFreeBet for users with an Overtime free-bet balance. The mechanics are identical, pick a target, set a direction, roll, and the contract settles the result through the existing free-bets infrastructure.
Last updated
