Bitcoin dice is the simplest casino game on Lightning Faucet: you pick a target number, choose whether the roll will land over or under it, set your wager in sats, and roll. The result is an integer from 0 to 9999, generated by a commit and reveal cryptographic system that lets you independently verify every single roll after the fact. If the roll lands on your side of the target, you win your wager multiplied by the payout shown before you rolled. If not, you lose the wager. One roll takes about a second.
This guide is written by the team that operates the game, so it covers exactly how dice on Lightning Faucet works: the real number ranges, the real bet presets, the exact hashing math behind each roll, and the precise steps to verify a result yourself with nothing but a hash function. You can be rolling within two minutes of landing on the site, with or without a deposit.
What Bitcoin dice is
Bitcoin dice is a number prediction game denominated in satoshis (sats), the smallest unit of bitcoin. Unlike physical dice with six faces, a Bitcoin dice roll on Lightning Faucet produces one of 10,000 equally likely outcomes: an integer from 0 to 9999. You do not guess the exact number. Instead you set a target and a direction:
- Under: you win if the roll is strictly less than your target.
- Over: you win if the roll is strictly greater than your target.
Because you choose the target yourself, you choose your own probability of winning on every roll. Set target 5000 and pick under, and exactly 5,000 of the 10,000 outcomes (0 through 4999) win for you, a 50.00% chance. Set target 9900 and pick over, and only 99 outcomes (9901 through 9999) win, a 0.99% chance, but the payout multiplier is far larger. That direct trade between win probability and payout size, fully under your control, is why dice became the classic Bitcoin casino game.
How a roll works on Lightning Faucet
Here is what actually happens when you press roll, in the order our backend executes it:
The bet you place
You submit three things: a wager, a target, and a direction.
- Wager: preset chips of 1, 10, 100, 500, 1,000, 2,000, 5,000, 10,000, 25,000, 50,000, and 100,000 sats. Yes, you can roll for a single sat. That is deliberate: it lets you test the game and the verification flow with essentially nothing at risk.
- Target: any integer from 1 to 9998. The ends are excluded so that both over and under always have at least one winning and one losing outcome.
- Direction: over or under.
The interface shows your win chance as a percentage and the exact payout multiplier before you commit the roll. The multiplier is floored to four decimal places and displayed up front, so there is never a surprise about what a win pays. Multipliers are capped at 9900x, and any single roll's payout is capped at 1,000,000 sats. If a low probability bet would mathematically pay more than that cap, the interface and the result both flag it, so size long shot wagers with the cap in mind.
The roll itself
The roll is not a random number the server invents at roll time. It is derived from three inputs that already existed before you clicked:
- Server seed: a secret 64 character hex string our server generated earlier. Before you ever roll, we publish its SHA-256 hash. That hash is a commitment: we cannot change the seed afterward without the hash no longer matching.
- Client seed: a string you control. You can set it to anything alphanumeric up to 64 characters from the fairness panel, and it takes effect on your next roll.
- Nonce: a counter that starts at 0 for each new server seed and increases by exactly 1 with every game you play. It guarantees every roll under the same seed pair produces a different result.
The combined hash for a roll is:
combined = HMAC_SHA256(key = server_seed, message = client_seed + ":" + nonce)
The roll is then the first 8 hex characters of that hash, interpreted as an integer, modulo 10,000:
roll = int(combined[0..8], 16) % 10000
If the roll beats your target in your chosen direction, the win amount (wager times the displayed multiplier, floored to a whole sat) is credited instantly. Every result you get back includes a fairness block with the server seed hash, your client seed, the nonce used, and the roll, so you always have the exact inputs needed to audit it later.
Why this design matters
The server commits to its seed before knowing your client seed or when you will roll. You control the client seed. Neither party alone can steer the outcome: we cannot pick a favorable roll because the seed was committed in advance, and you cannot pick one either because the server seed stays secret until you rotate it. This commit and reveal structure is what "provably fair" means in practice, and it is the same construction we use across our casino games and even for shuffling decks in multiplayer poker, where each table carries its own committed seed.
Step by step: your first dice roll
1. Get some sats on balance
You have two routes, and they take about the same amount of time:
- Play for free first. Lightning Faucet is a faucet at heart. Claim from the earn surfaces or grab the free spin to put your first sats on balance without depositing anything. Since the dice minimum bet is 1 sat, even a small faucet claim funds dozens of real rolls.
- Deposit over Lightning. Open the deposit panel, and you get a Lightning invoice as a QR code. Scan it with any Lightning wallet and the sats appear on your balance within seconds. Deposits are denominated in sats from end to end. There is no fiat conversion step, no card processing delay, and no minimum that locks out small experiments.
2. Set your client seed before you roll
This step is optional but we recommend it, because it is the half of the fairness math that belongs to you. Open the fairness panel, type any string you like (up to 64 letters and numbers), and save it. It applies from your next roll onward. If you skip this, a default client seed is used, and the math still verifies, but choosing your own seed proves the server could not have precomputed your results.
3. Choose target, direction, and wager
Drag the selector to set your target, or type the number directly, and pick over or under. The green band on the range bar shows your winning region, and the win chance and multiplier update live as you move it. Pick a wager chip. If you are new, start at 1 or 10 sats and get a feel for the rhythm before sizing up.
4. Roll and read the result
The result shows the roll, win or loss, the payout, and your new balance, plus the fairness block (server seed hash, client seed, nonce, roll). Your balance updates immediately, and winnings are available to withdraw right away. There is no clearing period on dice winnings from a regular balance.
How to verify a roll yourself
This is the part most guides hand wave, so here is the complete procedure as it works on our platform.
Reveal the server seed
A server seed must stay secret while it is in use, otherwise you could predict future rolls. So verification works on rotation: when you click "rotate seed" in the fairness panel, we publish the full server seed you were just playing under, archive it in your seed history together with its hash and the nonce range it covered, and commit to a fresh seed by showing you the new hash. Your seed history is always available, so you can come back and audit rolls from any past session.
Recompute the roll
With the revealed server seed in hand, check two things. First, that the SHA-256 hash of the revealed seed equals the hash we showed you before you played. Second, that each roll follows from the seeds and nonce. In Node.js:
const crypto = require('crypto');
const serverSeed = 'the revealed server seed from your seed history';
const clientSeed = 'your client seed';
const nonce = 12; // the nonce shown on the roll you are checking
// 1. Commitment check: must equal the hash shown before you played
const commitment = crypto.createHash('sha256').update(serverSeed).digest('hex');
// 2. Recompute the roll
const combined = crypto.createHmac('sha256', serverSeed)
.update(`${clientSeed}:${nonce}`)
.digest('hex');
const roll = parseInt(combined.slice(0, 8), 16) % 10000;
console.log(commitment, roll);
If the recomputed roll matches the roll you were paid on, the game was fair, and no trust in us was required to establish that. Any hash calculator or a few lines of Python work just as well; the math is deliberately simple enough to check anywhere.
Honest strategy notes from the operator
We run the game, so take this section as ground truth rather than marketing.
- Every roll is independent. The nonce changes each roll, which changes the hash completely. A streak of ten losses says nothing about roll eleven. There is no "due" number.
- No staking system changes the probabilities. Martingale and similar progressions rearrange when you win and lose, not how often. Doubling after losses on a near even chance bet walks you toward the table maximum and a large drawdown. The payout multiplier is always set from your chosen win chance, and no bet sizing pattern alters that relationship.
- Pick your volatility deliberately. Under 5000 at even chances pays just under 2x and keeps sessions long and steady. Over 9900 pays a large multiplier but wins about once per hundred rolls, so expect long dry stretches and size accordingly.
- Mind the payout cap on long shots. With a 1,000,000 sat cap per roll, an extreme long shot bet at a large wager can hit the cap before the full multiplier. The interface warns you, but it is worth internalizing.
- If you are playing with a bonus, note that playthrough credit on dice scales with the risk you take. A roll at around even chances counts fully toward playthrough, while a 95% win chance roll counts only a small fraction. Grinding near certain rolls does not clear a bonus faster; it mostly just spends time.
- Set a stop. Decide a session budget in sats before you start and treat hitting it as the end of the session. Sats are real money. Play for entertainment, never with funds you need.
Withdrawing your winnings
Withdrawals are where playing on Lightning genuinely differs from legacy sites. When you withdraw, Lightning Faucet gives you an LNURL withdraw QR code or link. You scan it (or tap it on mobile), your wallet fetches the invoice automatically, and the payment settles over the Lightning Network, usually within seconds. You never paste an invoice by hand. Amounts are in sats with no conversion, and if a payment fails to route, the sats return to your balance automatically within a couple of minutes. Winnings from a regular dice session are withdrawable immediately.
Where dice fits on Lightning Faucet
Dice is the fastest way to see our provably fair system in action because the math is one line. Once the commit and reveal flow makes sense here, you will recognize the same structure across the rest of the casino: roulette, blackjack, baccarat, and slots all derive outcomes from the identical server seed, client seed, and nonce construction. If you prefer wagering on real world outcomes instead of hash outputs, our prediction markets let you take positions on sports, weather, and Bitcoin network events in sats.
The best way to understand any of this is to run one verifiable roll yourself. Claim a few sats, set a client seed, bet 1 sat, then rotate your seed and recompute the roll with the snippet above. Play Bitcoin dice on Lightning Faucet and check our math.