Skip to content
CheckMyPull

Verify your CSGOEmpire roll

Verified: reproduces real results

CSGOEmpire runs three different algorithms. All three are confirmed here: roulette round 8,878,257, case openings, and battle 1,013,463 giving 56,288.

Live verifier
0 network requests

Step 1Where did you play?

Using CSGOEmpire roulette: SHA-256 over serverSeed-publicSeed-rounddetails

Plain SHA-256 of serverSeed-publicSeed-round (hyphen separators). The first 8 hex characters convert to an integer, 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.

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 use different hash functions, different message formats and different ways of turning a digest into a result. 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
RoulettePublished round 8,878,257bonus
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 and the most unusual in how it is scheduled.

SHA-256( serverSeed-publicSeed-roundNumber )     plain hash, hyphens
        |
        v
  first 8 hex characters as an integer
        |
        v
  value mod 15   ->   0 = bonus,  1 to 7 = orange,  8 to 14 = black

The scheduling is the interesting part. 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.

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.

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

This is the detail nobody outside CSGOEmpire documents, and it is 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.

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
RouletteSHA-256Verified

Reproduces the published round 8,878,257 vector (bonus).

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).

Games before 2024-04-18 used legacy formulas this tool does not implement.

Common questions

Is CSGOEmpire provably fair?

Yes, across three separate modes, and all three are confirmed here against CSGOEmpire's own published values: roulette on round 8,878,257, case opening on its published code, and case battles on battle 1,013,463 giving 56,288.

How does CSGOEmpire roulette work?

A plain SHA-256 of the server seed, public seed and round number joined by hyphens. The first 8 hex characters become an integer and the remainder after dividing by 15 gives the colour: 0 is bonus, 1 to 7 orange, 8 to 14 black. 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. Our implementation reproduces its published roulette value 8,878,257.

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.