Skip to content
CheckMyPull

Verify your CSGOEmpire roll

Verified: reproduces real results

CSGOEmpire runs three different algorithms, all confirmed here: roulette on its own public roll history, case openings, and battle 1,013,463 giving 56,288.

Live verifier
0 network requests

Step 1Where did you play?

Using CSGOEmpire roulette: HMAC-SHA256 over key = serverSeed, message = publicSeed-rounddetails

HMAC-SHA256 keyed with the day's server seed over publicSeed-round (hyphen separator). The whole digest converts to an integer and is taken modulo 15: 0 is the bonus, 1-7 orange, 8-14 black. Seeds are generated daily and the server seed is revealed the next day at 00:00 UTC. Rounds played before 17 December 2024 used a different algorithm, selectable below.

Where to find your numbers on CSGOEmpire:

  1. Roulette seeds are daily: the server seed is revealed the next day at 00:00 UTC.
  2. Case opening seeds and nonce are in your account's provably fair section.
  3. Battle EOS block IDs are verifiable on any EOS block explorer (bloks.io, eosauthority).

Source: CSGOEmpire's own fairness page

Step 2Paste your numbers

Runs entirely on your device via your browser's built-in cryptography. Don't take our word for it: open DevTools → Network, click the button, and watch: zero requests.

Where to find your seeds on CSGOEmpire

  1. 1

    Roulette seeds are daily: the server seed is revealed the next day at 00:00 UTC.

  2. 2

    Case opening seeds and nonce are in your account's provably fair section.

  3. 3

    Battle EOS block IDs are verifiable on any EOS block explorer (bloks.io, eosauthority).

Three modes, three algorithms

Most platforms run one engine and vary a parameter. CSGOEmpire genuinely does not. Roulette, case opening and case battles all run HMAC-SHA256 now, but with different message formats and different ways of turning a digest into a result. Until December 2024 roulette did not even share the hash function. A tool that handles one of them tells you nothing about the other two.

All three are confirmed here against CSGOEmpire's own published values.

ModeConfirmed againstResult
RouletteRounds from the published history: 7 from 19 September, 23 from 2 October and 20 from 3 October 202650 of 50
Case openingCSGOEmpire's own published codeticket 54,293
Case battlePublished battle 1,013,46356,288

Roulette: a whole day, decided in advance

Roulette is the simplest of the three, the most unusual in how it is scheduled, and the one with a version trap in front of it.

key     = serverSeed
message = publicSeed-roundNumber                 hyphen, no server seed in the message
        |
        v
   HMAC-SHA256
        |
        v
  the WHOLE 64-character digest as an integer     not a slice
        |
        v
  value mod 15   ->   0 = bonus,  1 to 7 = orange,  8 to 14 = black

The 17 December 2024 change

CSGOEmpire replaced its roulette algorithm on 17 December 2024 and disclosed the change only on its fairness page. Its help centre still publishes the earlier version, bylined October 2023, with nothing marking it superseded, so the obvious source for a careful reader is the wrong one.

The earlier version is a different calculation in three ways at once: a plain SHA-256 rather than a keyed HMAC, the server seed inside the message rather than used as the key, and the first eight hex characters rather than the whole digest.

legacy, rounds before 17 December 2024
SHA-256( serverSeed-publicSeed-roundNumber )  ->  first 8 hex  ->  mod 15

Against CSGOEmpire's own published roll history for 19 September 2026, the current algorithm reproduces all seven sampled rounds and the legacy one reproduces a single round, which at fifteen outcomes is what chance looks like. A second sample, 23 rounds from 2 October 2026, reproduced 23 of 23. The verifier above carries a switch for pre-cutoff rounds; leave it off for anything recent.

Why the schedule matters

CSGOEmpire generates the entire day's results at 00:00 UTC and publishes the hashed server seed for that whole period. At 00:00 UTC the following day it reveals the unhashed seed, and every round from the previous 24 hours becomes checkable at once. The promise holds when tested: the hash CSGOEmpire displayed for 3 October 2026 while that day was still running is exactly the SHA-256 of the seed it revealed afterwards, and that seed reproduces the day's published rolls.

That is a stronger commitment than a per-round reveal. A site that commits to a full day in advance cannot adjust a single round in response to what players are doing, because every subsequent round for the next 24 hours is already fixed by the same seed.

It also has a side effect worth knowing: because the seeds and the round-by-round roll history are both published openly, roulette is one of the few things in this space you can audit without an account, on rounds you never played.

Case opening: the client seed's length is part of the message

This is the detail nobody outside CSGOEmpire documents, and the reason general-purpose verifiers fail here.

key     = serverSeed
message = clientSeed-LENGTH(clientSeed)-nonce
        |
        v
   HMAC-SHA256
        |
        v
  first 6 hex byte-pairs, each divided by 256^(position)
  and summed  ->  a value between 0 and 1
        |
        v
  ( value x ticketQuantity ) rounded down, + 1  =  your ticket

The length field nobody documents

Read the message format again. Between your client seed and the nonce sits the number of characters in your client seed. If your client seed is test, the message contains test-4-30 for nonce 30. There is no cryptographic reason for it. It is simply what CSGOEmpire's code does, and omitting it produces a completely different digest.

Base-256 fractional digits, not a slice

The conversion is also unlike the usual slice-and-divide. Instead of reading a fixed number of hex characters as one integer, CSGOEmpire takes six byte-pairs and treats them as successive fractional digits in base 256, summing them into a value between 0 and 1. One item is worth 10,000 tickets.

Where CSGOEmpire contradicts itself

CSGOEmpire's case opening help article gives worked inputs and states the answer is 87,664. Running CSGOEmpire's own published code on those same inputs produces 54,293.

We have checked this carefully, because a discrepancy in an operator's own documentation is a serious claim. The inputs in the article, run through the algorithm the same article describes, give 54,293. The likeliest explanation is mundane: the 87,664 figure appears to come from a screenshot of a different opening than the one the worked example describes.

Our adapter follows the code, not the prose, and returns 54,293. We flag it here rather than quietly picking one, because if you check that example yourself you will hit the same contradiction and deserve to know it is documented rather than a fault in your working.

Case battles: an EOS block instead of a client seed

Battles cannot use one player's client seed, because there is more than one player and no reason any of them should supply the shared input.

CSGOEmpire uses the hash of an EOS blockchain block that is mined after every player has joined. Nobody at the table can know that value in advance, including CSGOEmpire, and anyone can look it up afterwards on a public EOS explorer to confirm the same block was used.

key     = serverSeed                    (fixed when the battle is created)
message = eosBlockSeed-roundNumber-playerPosition

The conversion is the same six-byte-pair pipeline as case opening, against a quantity of 100,000. Tiebreakers drop the player position from the message and use the number of tied players as the quantity instead.

Jackpot mode uses the same shortened message. The battle code CSGOEmpire links from its fairness page treats a tiebreaker or a jackpot draw as one extra round, so its round number is the total number of rounds plus one: a two-case battle settles its jackpot on round 3. The jackpot always draws from 100,000 tickets, split between players by their share of the total value unboxed, left to right. In Uno Reverse mode the split runs the other way, so the player who unboxed less holds more tickets. The verifier above handles both through its tiebreaker switch.

The April 2024 cutoff

Code published before 18 April 2024 differs from the current version. If you are checking something older than that and it will not reproduce, the change is the likely reason rather than an error in your inputs.

What a passing check settles

A match proves the specific round came from values fixed before you played. Given that all three modes are confirmed against CSGOEmpire's own published results, and that the case-opening path involves a field almost nobody would guess, reproducing one independently is meaningful.

It settles that round and nothing else. Whether a withdrawal arrives, how support behaves, or what any case contains are separate questions, and we are explicit about what verification cannot prove.

What we can check on CSGOEmpire

Per-game status. "Verified" means our implementation reproduced a real, documented result for that game. We never list a game on trust.

GameAlgorithmStatus
RouletteHMAC-SHA256Verified

Reproduces 7 of 7 sampled rounds from CSGOEmpire's own public roll history for 19 September 2026. Rounds before 17 December 2024 use the earlier algorithm, selectable in the tool.

Case openingHMAC-SHA256Verified

Follows the published code exactly. Known doc quirk: the article's prose says 87,664 for its example, but the article's own code computes 54,293; the code wins.

Case battleHMAC-SHA256Verified

Reproduces the published battle 1,013,463 vector (56,288).

Case openings and battles before 2024-04-18 used legacy formulas this tool does not implement. Roulette changed on 2024-12-17; its legacy formula is implemented behind the tool's legacy switch.

Common questions

Is CSGOEmpire provably fair?

Yes, across three separate modes, and all three are confirmed here against CSGOEmpire's own published material: roulette on rounds from its public roll history (23 of 23 sampled from 2 October 2026), case opening on its published code, and case battles on battle 1,013,463 giving 56,288.

How does CSGOEmpire roulette work?

Since 17 December 2024, an HMAC-SHA256 keyed with the day's server seed over the public seed and round number joined by a hyphen. The whole digest becomes an integer and the remainder after dividing by 15 gives the colour: 0 is bonus, 1 to 7 orange, 8 to 14 black. Earlier rounds used a plain SHA-256 and its first 8 hex characters. The whole day is generated at 00:00 UTC and revealed 24 hours later.

Why does CSGOEmpire case opening include the client seed length?

Because its code does. The message is your client seed, then the number of characters in that seed, then the nonce, all joined by hyphens. There is no cryptographic reason for the middle field, but leaving it out produces a completely different digest and a wrong ticket.

Does CSGOEmpire's documentation match its code?

Not on one worked example. Its case opening article states the answer is 87,664, but running its own published code on the inputs that article gives produces 54,293. The figure appears to come from a screenshot of a different opening. Our adapter follows the code and returns 54,293.

How are CSGOEmpire case battles verified?

The shared input is the hash of an EOS blockchain block mined after all players have joined, so nobody at the table can know it in advance. The message combines that block seed, the round number and the player position, and you can confirm the block independently on a public EOS explorer.

How far ahead does CSGOEmpire commit its roulette seed?

A whole day at a time. Roulette rolls for a given day are decided in advance from a single committed server seed combined with a public seed, rather than one commitment per round. That commitment holds up: the hash CSGOEmpire showed for 3 October 2026 is the SHA-256 of the seed it revealed the next day.

Sources

Algorithm details on this page are checked against CSGOEmpire's own published material before publication, and our implementation is confirmed against a real result before a game is marked verified.

The honest fine print

A passing check proves a specific outcome came from numbers fixed before you played. It does not prove CSGOEmpire will honour a withdrawal, or say anything about the site beyond this one result. Fair math and a trustworthy business are different things: how we verify and what it means.

More tools: compare every platform's algorithm · batch-verify a nonce range · check your luck vs the odds · all platforms

The verifier never sends your data anywhere. Analytics cookies are separate and let us see aggregate traffic. Nothing loads unless you allow it. See our Privacy Policy.