Skip to content
CheckMyPull

Verify your Skin.club roll

Verified: reproduces real results

Skin.club's fairness page states no formula. Its off-site code and all three published test values reproduce here, as does a real roll at nonce 259: 66,748.

Live verifier
0 network requests

Step 1Where did you play?

Using Skin.club roll: HMAC-SHA512 (inverted key/message) over key = clientSeed-nonce, message = serverSeeddetails

HMAC-SHA512 where the secret key is clientSeed-nonce (dash separator) and the message is the server seed (the reverse of the usual convention, as published by Skin.club). The first 15 hex characters convert to an integer; roll = (integer mod 100,000) + 1, giving [1, 100,000] for case openings.

Where to find your numbers on Skin.club:

  1. Your roll history and seed-change history are available in your account; other players' results are also visible.
  2. The server seed hash (SHA-256) is shown before play.

Source: Skin.club'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 Skin.club

  1. 1

    Your roll history and seed-change history are available in your account; other players' results are also visible.

  2. 2

    The server seed hash (SHA-256) is shown before play.

The documentation gap, and what closed it

Skin.club's provably fair page explains what the system does without saying how. It tells you outcomes are random and unaltered, that your roll history is complete, that seed-change history is visible. Its entire technical content is one sentence: the mechanism depends on the server seed, client seed and nonce, which create a roll that defines the result. No hash function, no string format, no conversion.

Signed out, as of October 2026, the page shows less still: two introductory sentences and a prompt to log in, with no formula and no link to one.

The formula is published, just never on that page. It appears in two places, both linked from the page as it read in September 2026, and the validator can be opened directly without an account. A Skin.Club post on Medium, dated July 2020, states the method in prose, and prose leaves gaps: three of them matter enough here to produce a wrong answer with no error message. Since May 2026 there is also a validator at roll.skin.club, backed by a public code repository that publishes the method as runnable PHP along with three worked test values.

That last part is worth more than it sounds. Published code sits at the top of the disclosure hierarchy this site uses: code beats a worked example, an example beats a description, a description beats a badge. Skin.club publishes code and examples. The oddity is purely one of placement, since a reader who opens the page marked "provably fair" finds the badge tier and has to click twice more to reach the code.

The three published test values

All three reproduce here, and they are the fastest way to check any tool, including this one.

CheckInputsExpected
Case rollserver c4ca4238a0b92382, client my_seed, nonce 421,752
Commitmentserver c4ca4238a0b92382, salt 0dcc509a6f75849bdc883b29...f493
Battle rollbeacon Tt5qAdTwoTeygDdghVlfEWtNJQkGYg5q, client 12354,abgd, nonce 95,415

Alongside those, a real revealed roll captured from Skin.club's own Check Roll tool on 22 July 2026 confirms the method against a live account rather than a published example: server seed 1862b99dc42ce8a0c05bc458b250bd20, client seed cce4eedfa71787e499c44552981ca48a, nonce 259, roll 66,748. Published examples prove the method. An operator-produced outcome proves the method is what the site actually runs.

The formula, precisely

key     = clientSeed-nonce          (your seed, dash separator)
message = serverSeed                (the site's secret)
        |
        v
   HMAC-SHA512          <-- key and message are the reverse of normal
        |
        v
  first 15 hex characters as an integer
        |
        v
  ( integer mod 100,000 ) + 1  =  roll from 1 to 100,000

The three traps, in the order to check them

Each produces a plausible wrong number rather than an obvious failure. The figures below all use Skin.club's own published test seeds, so you can run them yourself.

Wrong assumptionWhat it returnsCorrect
Conventional key and message1,80021,752
Underscore separator88,12821,752
Salt fed into the rollA different wrong number21,752

Every one of those sits inside the valid 1 to 100,000 range. Nothing about 1,800 announces itself as wrong, and nothing about 88,128 does either. That is the whole difficulty, and it is what this site calls a plausible wrong number.

The HMAC is inverted

Skin.club swaps the roles every other platform gives its seeds. Nearly every provably fair system keys the HMAC with the server seed and passes the client seed and nonce as the message. Skin.club does the opposite: the key is clientSeed-nonce and the message is the server seed.

The separator is a dash

An underscore is the obvious alternative and several platforms use one. Here it is wrong.

The salt is not in the roll

Skin.club exposes a secret salt alongside the seeds, and the obvious assumption is that it feeds the calculation. It does not. The salt exists to key the commitment instead, which is its own trap and gets its own section below.

The commitment is not a plain hash

Even the sealed envelope is sealed differently here. The public hash Skin.club shows before you play is HMAC-SHA256 keyed with the salt over the server seed. It is not a plain SHA-256 of the server seed, and it is not SHA-256 of the server seed concatenated with the salt. Neither reproduces the published hash.

This matters because the commitment check is the half of provably fair that proves the site did not swap its seed after seeing your play. Check it the ordinary way and it fails, and the natural reading of that failure is that Skin.club cheated. It did not. The commitment simply uses a construction most tools do not try. The verifier above runs the correct check automatically.

Fifteen hex characters, and why that is awkward

The awkward part is the size of the piece the formula reads. The slice is the first 15 hex characters of the digest, which is 60 bits of information. That is more than a standard JavaScript number can hold exactly, since ordinary floating-point integers stop being reliable above 53 bits.

A verifier that converts that slice using normal arithmetic will be silently wrong for a portion of rolls: correct most of the time, quietly off in the cases where the top bits matter. Ours runs the conversion through arbitrary-precision integers so the result is exact for every possible digest. Skin.club's own validator makes the same point from the other direction, refusing to run at all on a PHP build that cannot hold the intermediate value.

Where to find your seeds

Four values decide a case check, and one of them only appears after you act.

  1. The hashed server seed, shown before you play. Save it; this is the commitment.
  2. Your client seed, editable on the same page.
  3. The secret salt, exposed alongside the seeds. Needed for the commitment check, never for the roll.
  4. The nonce for the roll you care about.

All of these live on your account's Provably Fair page, behind a login, and a Verify Roll control on an inventory item shows that roll's specific inputs.

The unhashed server seed appears only for previous seeds, so rotating is what makes past rolls checkable. Skin.club also rotates automatically once the nonce reaches 500, which means a long session eventually makes its own early rolls verifiable without you doing anything. Rotation is not the site being obstructive: a server seed still in use cannot be published, because anyone holding it could compute every remaining outcome in advance.

One convention worth knowing if you use the operator's own validator: a value beginning with * means not yet revealed, and the tool will refuse to verify rather than returning something misleading.

The ticket table is public, which is the unusual part

Most platforms stop at the roll. Skin.club publishes the other half, and it does so without a login.

Open any case page and a "Check odds range" control shows the full ticket table: every item, its price, and the exact block of numbers that wins it. The ranges are contiguous and span exactly 1 to 100,000, matching the roll space.

ItemPriceWinning rangeStated odds
AK-47 VariCamo Grey (MW)$0.121 to 16,20016.200%
AK-47 Olive Polycam (MW)$0.1816,201 to 35,20019.000%
AK-47 Uncharted (FT)$0.6135,201 to 50,20015.000%
AK-47 Redline (MW)$152.2499,951 to 99,9600.010%
AK-47 Fuel Injector (FT)$166.4699,961 to 99,9700.010%

Read the scarce end of that table and the structure of the thing becomes obvious: a 0.010% item holds exactly ten numbers out of a hundred thousand. The published chance is not a claim about the long run, it is a literal count of the numbers that win.

The table also carries a version identifier and an odds-history link, so a changed table is visible as a change rather than a silent edit. Together with the roll check, that makes a Skin.club result verifiable end to end: the commitment, the number, and the skin the number won.

Battles are a different check

Battle rolls use the same arithmetic with one substitution: a public beacon takes the place of the server seed, so no player's own seed can decide a shared outcome. They also carry no commitment hash, because there is no secret to commit to, which means a battle check confirms the roll and has nothing to compare a commitment against. The published battle test value above is the one to check a tool with.

What a passing check settles

The case opening and upgrade modes share one engine, confirmed against both the published values and a real account roll. Rolls run 1 to 100,000 for case opening; other mechanics may use a different ceiling, which is why the verifier exposes it as an adjustable value rather than assuming.

A match proves that one roll came from values fixed before you played, and, because the ranges are public, which skin that roll was owed. That is further than most platforms let an outsider go.

It settles nothing else. On a skins platform the gap worth naming is value: a verified roll tells you which item came up, never what that item is worth, because wear tier and float do the pricing and two copies of the same skin name can be very different goods. Skin.club's reviews are polarised, and the recurring accusation in them is that results are steered, which is precisely the claim this check can settle in either direction. Whether a trade clears, how support answers, and what any case is worth opening are separate questions, and we are explicit about what verification cannot prove.

What we can check on Skin.club

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

GameAlgorithmStatus
Case opening / upgradeHMAC-SHA512 (inverted key/message)Verified

Verified against a real Skin.club UPGRADE roll (server 1862b99d…, client cce4eed…, nonce 259 -> roll 66,748) from their Check Roll tool, 2026-07-22, which confirms the whole roll engine: inverted HMAC-SHA512, dash separator, first-15-hex slice, +1, salt not in the roll. Case opening uses this identical engine with the same MaxRollNumber (100,000) per Skin.club's published explainer; a real case-opening roll would confirm that mode with live data too.

Common questions

Is Skin.club provably fair?

Yes, and we have confirmed it against a real outcome rather than only against its documentation. A revealed roll from Skin.club's own Check Roll tool, server seed 1862b99d with nonce 259, produces roll 66,748, and our implementation reproduces that exactly.

What is Skin.club's provably fair formula?

HMAC-SHA512 with the key and message reversed from the usual convention: the key is your client seed and nonce joined by a dash, and the message is the server seed. The first 15 hex characters become an integer, and the roll is that value modulo 100,000 plus 1.

Why does my Skin.club roll not match?

Three causes account for nearly all mismatches. On Skin.club's own published test seeds, running the HMAC the conventional way round returns 1,800 instead of 21,752, and using an underscore instead of a dash returns 88,128. The secret salt must also be left out of the roll entirely, since it only keys the commitment.

How does Skin.club's public hash work?

It is HMAC-SHA256 keyed with the salt over the server seed, not a plain SHA-256 of the server seed and not SHA-256 of the two concatenated. Neither of those reproduces the published hash. A commitment check done the ordinary way fails here even when nothing is wrong.

Where do I find my Skin.club seeds?

Your roll history and seed-change history are in your account, and other players' results are visible too. The SHA-256 keyed server-seed fingerprint is shown before play. Skin.club's own Check Roll tool looks up an existing roll by its id, so a roll has to have happened before it can be checked.

What is the Skin.club secret salt for?

It keys the commitment, not the roll. Skin.club exposes a secret salt alongside your seeds and the natural assumption is that it feeds the outcome calculation. It does not, and including it there produces a plausible but wrong roll. You need both the revealed server seed and the salt to check the commitment.

Sources

Algorithm details on this page are checked against Skin.club'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 Skin.club 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.