Provably-fair in-house games. Same cryptography as Stake / BC.Game / Roobet. Play money — pure education.
The Book of Casino Dirty Tricks
Documented manipulation techniques the operator never wants you to know. One section per game; each cheat lists its mechanism and the red flag that exposes it.
Crash
01 Account-tagged bust seeds
Mechanism. Server seed is silently chosen per account. High-balance or +EV accounts get seeds that produce early-bust multipliers; recreational players get juicy rounds visible in chat.
Red flag. Watch published-hash rotation. If hashes change at suspicious moments (after a deposit, after a withdrawal request), the operator is selecting seeds at runtime.
02 Cashout-button latency injection
Mechanism. Operator adds 200–500 ms server-side processing delay during high multipliers, so your "cash out at 5×" lands at 4.7× — past the curve and inside the bust window.
Red flag. Compare displayed multiplier to cash-out confirmation. A consistent gap on big multipliers is intentional friction, not network jitter.
03 Display-only multiplier desync
Mechanism. Animated multiplier on screen is not the bound-to-result HMAC value — it slows down near your target to fake-look like the curve. Real outcome decided server-side from a different stream.
Red flag. Verify a few rounds against your own HMAC computation. Visible multiplier must match the formula floor((100·e − h)/(e − h))/100 exactly.
04 Modulo-bias instant-bust skew
Mechanism. Game uses h % N for the instant-bust check, with N chosen so low h values bust more often. Drains beginners who always cash out at low targets.
Red flag. Track frequency of 1.00× rounds. If it materially exceeds 1/N for the stated house edge, the algorithm is biased.
05 Phantom-cashout race
Mechanism. Server processes high-bet cashouts last during high multipliers, so by the time your bet is matched, the round has busted. Smaller bets clear first.
Red flag. Time your own cashout, then cross-reference with the round-history feed. A delay correlated with bet size is foul play.
06 Provably-fair theatre
Mechanism. Operator publishes a server-seed HASH up-front but, after rotation, reveals a different seed than what was committed to. The hash never gets reverified by 99% of players.
Red flag. Always SHA-256 the revealed seed yourself and compare to the previously-published hash. Mismatch = the seed was swapped.
Dice
01 Truncated multiplier display
Mechanism. Multiplier shown as 2.00× but actual win-chance derived from 50.001% → 1.9999× internally, rounding-down the payout silently.
Red flag. Multiply your bet × displayed multiplier yourself. Operator payout should match to the cent — long-run any discrepancy is theft.
02 Verify-tool algorithm divergence
Mechanism. Operator's in-app "verify" button uses a simpler formula than the production round generator. Round looks fair against the verifier but isn't.
Red flag. Use a third-party verifier (this site's dice verifier at /tools/dice-verifier/) not the operator's. Same inputs must produce same output across implementations.
03 Auto-roll speed throttle
Mechanism. When auto-roll trends positive for the player, the operator slows ticks down by 1–2 seconds, making players give up before reaching profit target.
Red flag. A "Run 1000" that takes 4 minutes one session and 12 the next, despite same volume, is suspect.
04 Hidden server-seed rotation
Mechanism. Server rotates the seed mid-session without notifying you, breaking the hash-chain audit window. Past rounds appear unverifiable.
Red flag. The "previous server seed" should be reachable for every nonce range you played. Gaps = silent rotation.
05 Modulo-bias on the roll
Mechanism. Roll computed from `int(bytes) % 10000` with k-bit domain not divisible by 10000. Low rolls (0.00–0.50) appear ~0.1% more often.
Red flag. Run the Kolmogorov-Smirnov test (at /tools/kolmogorov-smirnov-test/) over a few thousand of your rolls. p < 0.01 = bias material enough to act on.
Limbo
01 Multiplier rounding-down
Mechanism. True multiplier is 12.4827× but operator displays "12.48×" and pays 12.48 — a 0.06% skim on every win, compounding across sessions.
Red flag. Re-derive multiplier from (server, client, nonce). Operator must pay to at least 2 decimal places of the true value.
02 Target-cashout snap
Mechanism. Player targets 100×, round generates 99.97× → instant loss. Operator may "snap to integer" multipliers downward only.
Red flag. Always compute the result yourself for big multipliers. Even single bits of rounding favor the house.
03 Account-EV-tagged seed picking
Mechanism. Players with positive long-term EV (e.g. consistent winners) get seeds that produce more sub-1.5× rounds. Identifies +EV players, then bleeds them slowly.
Red flag. Compare your hit-rate at a given target to the theoretical (1 − HE)/target. Long-running negative variance ≠ bad luck.
Mines
01 Mine layout regenerated per click
Mechanism. Layout is not committed at round start. Each click re-rolls the mine map with a higher mine-density bias as your multiplier rises.
Red flag. Stake-style PF commits the FULL Fisher-Yates shuffle at round start. If the operator can't reveal all mine positions after a single click, they're cheating.
02 "First click always safe" with payback
Mechanism. To feel generous, the first click is forced safe — but the next mine is moved closer to your likely-next click. Net EV worse than advertised.
Red flag. In a proper PF Mines, the first click can land on a mine. If you've never busted on click 1 in dozens of rounds, the layout is biased.
03 Cashout button frozen near target
Mechanism. When current multiplier approaches your displayed cashout target, the button becomes unresponsive for 300ms. You either accept staler value or wait into a mine.
Red flag. Click-to-confirm timing must be deterministic. Variability tied to multiplier value = intentional friction.
04 Misleading payout matrix
Mechanism. Displayed multiplier for "3 mines, 5 safe" is 2.5× but actual payout 2.45×. Sub-cent skim per click multiplies over a session.
Red flag. Compute m(M, r) = (1 − HE) · C(25, r)/C(25 − M, r) yourself for your config. Operator must match to 4 decimal places.
05 Auto-cashout-on-bust slippage
Mechanism. Auto-cashout triggers fire AFTER the next reveal — if that reveal is a mine, you lose even though you "cashed out".
Red flag. Order of operations must be: cashout request → operator confirms → bet closed → THEN you can reveal more. Any race condition is house-favorable by design.
Plinko
01 Path animation ≠ actual bucket
Mechanism. Operator decides the bucket up-front, then animates a "convincing" path to it. The visual path you watched is fake — bets are bound to the final bucket only.
Red flag. Each row should consume exactly one HMAC bit/byte deterministically. Replay the bytes and trace L/R yourself — visual must match.
02 "Lucky bucket" pre-highlight
Mechanism. Before the drop, a "hot" bucket is highlighted to tempt you to bet bigger. The highlight is randomized, not predictive.
Red flag. Hot buckets that "happen" to land on your bigger bets disproportionately are statistical fingerprints of rigging.
03 Multiplier ladder swap
Mechanism. Same risk profile shows different multipliers session-to-session. Heavy session = lower multipliers; cold session = higher (to keep you hooked).
Red flag. Screenshot the payout table at start of session. Compare to end. Any change = silent recalibration.
04 Ball weight bias
Mechanism. Animation uses a "ball" that visibly drifts toward outer (low-mult) buckets in slow-motion replay. The float-determined path is honest; the WEIGHTING ad displayed differs.
Red flag. Same algorithm describes ball physics — there should be no operator parameter "weight" or "elasticity" that the player can't see.
Wheel
01 Visual landing ≠ result
Mechanism. Wheel animation lands on a generous segment, then "shifts" 1–2 segments inward to the actual result. Implied as "natural deceleration".
Red flag. Compute the segment yourself from floor(U · N). The wheel must rest with the pointer ON that exact segment, not its neighbours.
02 Segment colour bait-and-switch
Mechanism. Big-multiplier segments are visually larger than their share. 9.9× segment renders 1.5× wider than other slots — player feels it's "achievable" but probability is 1/N.
Red flag. Count segments on the wheel image carefully. Equal pixel widths or it's manipulating perceived probability.
03 Risk-profile silent swap
Mechanism. During an auto-spin streak, operator changes risk profile mid-stream — same wheel image but different multipliers internally.
Red flag. Risk profile must be a committed parameter for the round, visible in PF data. Any "drift" between rounds = manipulation.
CSGO Roulette
01 Pre-spin result determination
Mechanism. Outcome is locked the moment you place your chips. The horizontal strip animation is purely decorative — the operator already knows where it stops.
Red flag. Provably-fair: server-seed hash visible BEFORE bet. After rotation, operator must reveal the seed and you re-derive the result. If not possible: cosmetic-PF, not real.
02 Bot-driven legitimacy theatre
Mechanism. On CSGO-skin sites, bot accounts pile fake bets onto the colour that will lose, making it look like "real" players bet on red 3× more than green. Adds illusion of fairness.
Red flag. Verify bettor IDs aren't pseudo-randomized refresh tokens. If "winning" outcomes always match low-volume colour, something is upstream.
03 Skin valuation slip
Mechanism. Site lets you deposit skins at $X market value but credits $0.7X. House edge becomes 30% just at deposit, before the wheel ever spins.
Red flag. Always check deposit credit vs. spot Steam market price. Discrepancies > 10% = operator skim.
04 Green-pocket payout cap
Mechanism. Green pays 14× — but on big bets, operator silently caps "max payout per round" so a $100 bet on green winning pays $500 (5×) instead of $1400.
Red flag. Read the cap policy BEFORE betting big on green. If the cap kicks in at exactly your bet level, the operator engineered it.
05 Hashed seed for nothing
Mechanism. Operator publishes a server-seed hash daily, but never rotates / reveals — so no past round is ever verifiable. The "PF" is just a static decoration.
Red flag. A real PF operator publishes hashes that ARE eventually revealed. Hash that's "always pending verification" = no PF at all.
Keno
01 Hot-number suggestion bias
Mechanism. Auto-pick or "lucky numbers" feature recommends numbers that are statistically LESS likely to draw — but feels personalised.
Red flag. Pick your own numbers. Compare the operator's suggestions over 100 rounds — if their suggestion hit-rate is below 1/40 per number, the recommender is anti-player.
02 Pay-table silent edit
Mechanism. After a player hits a 10/10 jackpot, the operator quietly reduces the 10/10 multiplier by 20–40% for future rounds without notifying.
Red flag. Screenshot the pay table at session start. Compare end-of-session. Any change without announcement = breach of terms.
03 Drawn-numbers re-roll
Mechanism. If the 20 drawn numbers would produce a 9/10 or 10/10 hit, the draw is silently re-rolled to a worse outcome (no PF commit at start of round).
Red flag. PF round commits the full draw at start. Operator must reveal all 20 in the same nonce — no second roll allowed.
Hi-Lo
01 Push-rate inflation
Mechanism. Tie cards (push) are weighted higher than 1/13 — operator wants you to "guess again" because each push slightly drains your edge and morale.
Red flag. Track push rate over 200+ rounds. Expected 1/13 ≈ 7.7%. Significantly higher = deck-weighting.
02 Multiplier ceiling cap
Mechanism. After ~10 correct guesses, operator displays multiplier 50× but caps cashout at 30× silently. Players don't notice until withdrawal.
Red flag. Read cashout terms before chasing long streaks. The displayed multiplier MUST be the actual payout.
03 Card-RNG seed reuse
Mechanism. Some operators use the same HMAC float for both "current card" and "next card" — guessing higher/lower is then non-trivial to lose.
Red flag. Each card must use a NEW float from the stream (different cursor). If your "next card" rank is deterministic given current card, the RNG is broken.
Playable provably-fair simulators, not another black box
Plenty of sites hand you a calculator and ask for blind faith in the result. We built the reverse. Every game on this page is genuinely playable, running the same cryptography as Stake, BC.Game, Roobet, Shuffle, Rollbit, and every other Stake-derived operator. Verify any round from seed to payout. Given (server seed, client seed, nonce), you can reproduce the outcome yourself — byte by byte if you want. Nothing is hidden behind a trust-me API.
The twist benefits you: it’s play money only. This is a classroom, not a sportsbook. What you walk away with isn’t a balance — it’s a working grasp of how provably-fair claims hold up under inspection, and how operators break them when they assume nobody looks.
What every game shares
All nine games run on the canonical Stake-derived primitive:
HMAC-SHA256( server_seed, "{client_seed}:{nonce}:{cursor}" ) → 32 bytesWhen a game needs more than 32 bytes (Mines, Plinko, Keno), a cursor walks additional HMAC blocks until it has enough material. Four-byte chunks become floats in [0, 1) by dividing by 2³². Each game’s algorithm then maps that float — or a sequence of them — to a multiplier, a card, a wheel segment, or a mine layout.
In this simulator the server seed is shown up-front; it’s a strategy lab, so we skip the guessing ritual. A real operator shows you only its SHA-256 hash before betting and the raw seed after rotation. Both setups are honest provably-fair — that pre-bet hash is your audit anchor either way.
The Book of Casino Dirty Tricks
Crypto casinos have tried just about every manipulation there is. We documented 38 of them in the Book of Casino Dirty Tricks, and each game page links to the tricks specific to it. Read it before you deposit real money anywhere.
Picking your starting point
I want to understand the simplest possible PF game.
Open with Dice: one float in, one roll out, one over/under decision. Move to Limbo to see the geometric distribution in action, then Crash for the curve everyone recognizes.
I want maximum variance and lottery-style multipliers.
Set Limbo to a 100× target. Load Mines with 20 mines. Run Plinko high-risk on 16 rows. The expected loss converges to the same number every time — the ride between losses is what changes.
I want to compare operator implementations.
Run a real operator round through the universal verifier, then feed the same (server, client, nonce) into this simulator. Identical inputs must give identical outputs. Wherever they don’t, that operator has walked away from the spec.



