Skip to content
cardrip

Provably fair proves the draw, not the odds

A hash published before you pay stops an app changing your pull afterwards. It says nothing about the odds table. Run the check below, then see which rated apps give you one.

rated apps describe a draw you can check9 of 27
of those say the odds are locked too3
give nothing to check; 1 more not read14

The hash is published before you pay. It pins the operator's secret without showing it.

Are pack openings rigged?

Nobody outside an operator can say. What can be said is which kind of cheating a provably fair check would catch.

1✓ Covered

Your result is changed after you pay

The secret is locked by a hash first. A swapped secret fails the check, as the demo below shows.

2✗ Not covered, unless the odds are hashed too

The odds are worse than the page shows

The check redoes a sum. It does not know which table the ticket was read against.

3✗ Not covered

The card is worth less than stated, or never ships

Value, delivery and payout sit outside the maths altogether.

What else can and cannot be known from outside is in the trust guide.

Run the check yourself

A working commit-reveal draw on SHA-256, in your browser. Change the operator and see which cheat the check catches.

The operator

Draws with the secret it committed to, at the odds it showed.

Both checks pass: the secret was fixed first and the ticket follows from it. Nothing here says the table was the one you were shown.

1Before you pay: the commitment

a76da88b6c0ea12b0ec2eee4ab0ea72085afbb125fd1fc926b6938970bac0ff4

SHA-256 of a secret the operator keeps. You cannot work the secret out from it, and a second secret with the same hash cannot be found in practice.

2Your input

Pull number 1, so each pull differs.

3The draw

9,981your ticket, from 0 to 9,999: HMAC-SHA256 of the secret and “cardrip-reader:1”

The example odds the operator used, with the tier this ticket lands in
TierTicketsOdds used
Common0 to 7,99980%
Uncommon8,000 to 9,49915%
Rare9,500 to 9,9494.5%
▶ Chase9,950 to 9,9990.5%

An example table of ours, not any app's odds.

4After: reveal and recompute

The secret handed over2d34711670a708133f775fc8a11fb2de8e403e3d1c71efd38bbc2306fa04450c

Its SHA-256, worked out in your browsera76da88b6c0ea12b0ec2eee4ab0ea72085afbb125fd1fc926b6938970bac0ff4

  • Hash equals the commitment: passThe secret is the one locked before you paid.
  • Secret and your input give the ticket: passRedone here: 9,981.
  • Odds are the ones you were shown: not checkedNothing in the check covers the table.

The demo opens on a secret picked because its ticket lands in the chase band, where shrunk odds bite. New secret draws a random one.

A published example, redone

ripz.gg prints every value of one pull on its fairness page. The same sums give the same answer here.

Published before the pull
64099870ed3bfd3f36e06a4ed6c03cb5d7c88a4ff021bf21581592eba84992eb
Secret published afterwards
5cabd1516e8c5c72f773eb1f2fe2a6425016b735b1e5e45593d31ed1beb002a4
The buyer's half
2d7b8b441907645a300b13c46e3004c6:12:free_signup_card:0
SHA-256 of the secret equals the commitment
Match ✓
place in a pool of 1,000; ripz.gg says 96
96 ✓

The 32-bit number came out as 413,870,033. ripz.gg says place 96 was a Jigglypuff; the card list is not on its page, so that last step is its word.

Worked out when this page was built.

Example read 7 October 2026 on ripz.gg's provably-fair pageNo commission

That shows the published arithmetic holds together. It is not a pull made on the site, and it says nothing about ripz.gg, its odds or its payouts.

What it proves, and what it cannot

A passing check is a narrow statement. Read it row by row.

A passing check proves

It cannot prove

The secretIt was fixed before your pull, so it was not picked to suit your input.That your input was yours. A seed made by the app's own software is the operator's as well.
The resultIt follows from that secret and your input by a published sum. Nobody chose it afterwards.That anyone looked. A check nobody runs deters nothing.
The oddsOnly where the table or card pool is hashed too: then it did not change after the commitment.That the table is worth the price. A hashed table can still return far less than a pack costs.
The cardNothing. The check ends at the ticket.That it exists, ships, or sells for the value the app puts on it.

For those, read how odds are published and how apps set a card's value.

Which rated apps let you check a pull

From each operator's own page, read 7 October 2026. Tap a group, then any cell for the operator's words and the source.

describe a draw you can check: 9 of 27 rated apps
AppMethodSecret locked firstYour input goes inOdds locked tooA way to redo it
Lastpack
Sealed key and sealed odds

Read on the operator's own page

“Before you open a pack, we lock in the odds and a secret key, and publish a fingerprint of that key so it can't be changed afterwards.”

The article's own date stamp is 6 October 2026, the day before we read it. It says pulls opened before that date, “and some since”, use an older check. It does not name the hash function.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“Before you open, we commit to a secret answer key (its fingerprint is on your fairness page)”

Checked 7 Oct 2026.

Open the source
Key fingerprint

Read on the operator's own page

“Before you open, we commit to a secret answer key (its fingerprint is on your fairness page)”

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“When you open, your device adds its own random input that we can't see in advance.”

Checked 7 Oct 2026.

Open the source
Your device

Read on the operator's own page

“When you open, your device adds its own random input that we can't see in advance.”

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“every rarity tier's exact share and a fingerprint of every card in it”

The card list itself stays unpublished: the article says a roll “proves its card is part of the sealed card list, without that list being published”.

Checked 7 Oct 2026.

Open the source
Sealed odds

Read on the operator's own page

“every rarity tier's exact share and a fingerprint of every card in it”

The card list itself stays unpublished: the article says a roll “proves its card is part of the sealed card list, without that list being published”.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“a short Python or Node script with your pull's values already filled in”

Offered on the Verify screen of each pull, so it needs an account and a pull.

Checked 7 Oct 2026.

Open the source
Script to run

Read on the operator's own page

“a short Python or Node script with your pull's values already filled in”

Offered on the Verify screen of each pull, so it needs an account and a pull.

Checked 7 Oct 2026.

Open the source
Phygitals
Seed hash, commit-reveal

Read on the operator's own page

“Our system is built on a cryptographic commit-reveal scheme combined with transparent algorithm disclosure.”

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“The server computes a SHA-256 hash of this seed and makes it available to you.”

Checked 7 Oct 2026.

Open the source
SHA-256 hash

Read on the operator's own page

“The server computes a SHA-256 hash of this seed and makes it available to you.”

Checked 7 Oct 2026.

Open the source
~
Partly

Read on the operator's own page

“A client seed is generated for each pack opening, unique to you and the specific transaction.”

The page does not say you can choose or change it.

Checked 7 Oct 2026.

Open the source
A seed made for you

Read on the operator's own page

“A client seed is generated for each pack opening, unique to you and the specific transaction.”

The page does not say you can choose or change it.

Checked 7 Oct 2026.

Open the source
~
Partly

Read on the operator's own page

“The card pool and rarity distributions for each pack tier are defined before the opening and are part of the provable record.”

No hash of the pool or the odds is described.

Checked 7 Oct 2026.

Open the source
Says so, no hash

Read on the operator's own page

“The card pool and rarity distributions for each pack tier are defined before the opening and are part of the provable record.”

No hash of the pool or the odds is described.

Checked 7 Oct 2026.

Open the source
✗
No

We looked and the operator does not publish it

“The algorithm logic is publicly documented so that anyone can implement their own verification.”

The page says the algorithm is public but does not show it, and its two links to the proofs page pointed to a localhost address when we read it.

Checked 7 Oct 2026.

Open the source
Not on the page

We looked and the operator does not publish it

“The algorithm logic is publicly documented so that anyone can implement their own verification.”

The page says the algorithm is public but does not show it, and its two links to the proofs page pointed to a localhost address when we read it.

Checked 7 Oct 2026.

Open the source
RipRip.io
Daily seed hash plus a public beacon

Read on the operator's own page

“Every day we publish a SHA-256 commit hash of a freshly generated server secret before any pack opens against it.”

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“Once the day's epoch closes, we publish the original secret.”

Checked 7 Oct 2026.

Open the source
SHA-256 hash, daily

Read on the operator's own page

“Once the day's epoch closes, we publish the original secret.”

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“the RNG also mixes in a public randomness beacon from drand”

The beacon applies to openings on the protocol the page calls OPENv2: “the first beacon published after your payment settled”.

Checked 7 Oct 2026.

Open the source
Your seed and drand

Read on the operator's own page

“the RNG also mixes in a public randomness beacon from drand”

The beacon applies to openings on the protocol the page calls OPENv2: “the first beacon published after your payment settled”.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“Pack contents and odds are committed before you rip, so they cannot be adjusted based on who is buying.”

Checked 7 Oct 2026.

Open the source
Hashed pack config

Read on the operator's own page

“Pack contents and odds are committed before you rip, so they cannot be adjusted based on who is buying.”

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“run a verification yourself in the standalone verifier”

We did not open the verifier.

Checked 7 Oct 2026.

Open the source
Public verifier

Read on the operator's own page

“run a verification yourself in the standalone verifier”

We did not open the verifier.

Checked 7 Oct 2026.

Open the source
Collector Crypt
Verifiable random function, on Solana

Read on the operator's own page

“a VRF roll decides your tier (Common / Uncommon / Rare / Epic), then a second provable step decides which card you win inside that tier”

Collector Crypt runs the function itself: “Our server runs ECVRF with its secret key”.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“The proof either verifies against our public key or it doesn't.”

A verifiable random function gives one valid output for each input, so there is no seed to reveal.

Checked 7 Oct 2026.

Open the source
Proof, not a seed

Read on the operator's own page

“The proof either verifies against our public key or it doesn't.”

A verifiable random function gives one valid output for each input, so there is no seed to reveal.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“The VRF input (alpha) is always derived from something only you can produce by signing.”

Checked 7 Oct 2026.

Open the source
Your wallet signature

Read on the operator's own page

“The VRF input (alpha) is always derived from something only you can produce by signing.”

Checked 7 Oct 2026.

Open the source
~
Partly

Read on the operator's own page

“the machine's live prize inventory, snapshotted into an immutable pool version and committed as a Merkle tree”

The tier odds are described as “the machine's published rarity weights”, read from an API. The page does not say they are hashed.

Checked 7 Oct 2026.

Open the source
Pool hashed, weights not

Read on the operator's own page

“the machine's live prize inventory, snapshotted into an immutable pool version and committed as a Merkle tree”

The tier odds are described as “the machine's published rarity weights”, read from an API. The page does not say they are hashed.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“The browser page recomputes everything from scratch (client-side) and checks it against the on-chain record.”

Checked 7 Oct 2026.

Open the source
Verify page and API

Read on the operator's own page

“The browser page recomputes everything from scratch (client-side) and checks it against the on-chain record.”

Checked 7 Oct 2026.

Open the source
Slabz
A roll seeded by your wallet, recorded on Solana

Read on the operator's own page

“Every rip is decided by a roll from 1 to 100,000,000, seeded by your own wallet's signature.”

Read in the site's own script. Slabz has no page that sets the method out.

Checked 7 Oct 2026.

Open the source
~
Partly

Read on the operator's own page

“It comes from verifiable math and is recorded on Solana the moment you rip, so nobody can choose it or change it.”

Nothing published before the pull is described.

Checked 7 Oct 2026.

Open the source
Recorded at the rip

Read on the operator's own page

“It comes from verifiable math and is recorded on Solana the moment you rip, so nobody can choose it or change it.”

Nothing published before the pull is described.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“seeded by your own wallet's signature”

Checked 7 Oct 2026.

Open the source
Your wallet signature

Read on the operator's own page

“seeded by your own wallet's signature”

Checked 7 Oct 2026.

Open the source
✗
No

We looked and the operator does not publish it

Checked 7 Oct 2026.

Open the source
Not stated

We looked and the operator does not publish it

Checked 7 Oct 2026.

Open the source
~
Partly

Read on the operator's own page

“Check any rip yourself: open Ripz in your profile and tap Verify.”

No code, formula or outside verifier is published on the site.

Checked 7 Oct 2026.

Open the source
A button in your account

Read on the operator's own page

“Check any rip yourself: open Ripz in your profile and tap Verify.”

No code, formula or outside verifier is published on the site.

Checked 7 Oct 2026.

Open the source
BOXED.GG
Seed hash, revealed a day later

Read on the operator's own page

“We publish a hash of the server seed before you play and reveal the actual server seed afterward”

The article does not name the hash function.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“Instead we show a hash of the server seed, and the actual server seed is revealed 24 hours later.”

Checked 7 Oct 2026.

Open the source
Hash, seed after 24 hours

Read on the operator's own page

“Instead we show a hash of the server seed, and the actual server seed is revealed 24 hours later.”

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“Your client seed is a value you control.”

Checked 7 Oct 2026.

Open the source
Your own seed

Read on the operator's own page

“Your client seed is a value you control.”

Checked 7 Oct 2026.

Open the source
✗
No

We looked and the operator does not publish it

“The drop rates shown on each box page stay the same regardless of your seed.”

The article says the number maps to a range that sets the item. It does not say the ranges are hashed.

Checked 7 Oct 2026.

Open the source
Not stated

We looked and the operator does not publish it

“The drop rates shown on each box page stay the same regardless of your seed.”

The article says the number maps to a range that sets the item. It does not say the ranges are hashed.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“Open the verification sandbox and copy your client seed, server seed, nonce, and salt into the variable definitions in the code”

The values come from the game history in your account.

Checked 7 Oct 2026.

Open the source
Public sandbox

Read on the operator's own page

“Open the verification sandbox and copy your client seed, server seed, nonce, and salt into the variable definitions in the code”

The values come from the game history in your account.

Checked 7 Oct 2026.

Open the source
Underdog Rips
Phygitals' seed hash, record by email

Read on the operator's own page

“This system utilizes a combination of a server seed hash, a client seed, and a disclosed algorithm that verify the randomness and integrity of pack results after opening.”

Underdog's packs run on Phygitals. The record is not shown in the app: the terms say to ask support for it.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“a server seed hash, a client seed, and a disclosed algorithm”

Checked 7 Oct 2026.

Open the source
Seed hash

Read on the operator's own page

“a server seed hash, a client seed, and a disclosed algorithm”

Checked 7 Oct 2026.

Open the source
~
Partly

Read on the operator's own page

The terms name a client seed and do not say who sets it.

Checked 7 Oct 2026.

Open the source
A client seed

Read on the operator's own page

The terms name a client seed and do not say who sets it.

Checked 7 Oct 2026.

Open the source
✗
No

We looked and the operator does not publish it

Checked 7 Oct 2026.

Open the source
Not stated

We looked and the operator does not publish it

Checked 7 Oct 2026.

Open the source
~
Partly

Read on the operator's own page

“If you would like to request your provable fairness documentation for an Underdog Rip you purchased, please reach out to Underdog’s Customer Support Department”

Checked 7 Oct 2026.

Open the source
On request, by email

Read on the operator's own page

“If you would like to request your provable fairness documentation for an Underdog Rip you purchased, please reach out to Underdog’s Customer Support Department”

Checked 7 Oct 2026.

Open the source
Packs.com
Seed hash, HMAC-SHA512

Read on the operator's own page

“The system uses HMAC-SHA512 to deterministically derive a hex hash from these values, then converts the first 8 hex characters into a ticket number between 0 and 99,999,999.”

Help article dated 7 April 2026.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“Before gameplay, we show you a SHA-256 hash of the server seed so you can later verify we didn't change it after the fact.”

Checked 7 Oct 2026.

Open the source
SHA-256 hash

Read on the operator's own page

“Before gameplay, we show you a SHA-256 hash of the server seed so you can later verify we didn't change it after the fact.”

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“You can change this seed anytime, giving you an element of control and ensuring the outcome is influenced by your input.”

Checked 7 Oct 2026.

Open the source
Your own seed

Read on the operator's own page

“You can change this seed anytime, giving you an element of control and ensuring the outcome is influenced by your input.”

Checked 7 Oct 2026.

Open the source
✗
No

We looked and the operator does not publish it

“Each card in the pack is assigned a contiguous range of tickets proportional to its drop chance.”

The article says each card holds a ticket range in proportion to its drop chance. It does not say the ranges are hashed or handed over with the proof.

Checked 7 Oct 2026.

Open the source
Not stated

We looked and the operator does not publish it

“Each card in the pack is assigned a contiguous range of tickets proportional to its drop chance.”

The article says each card holds a ticket range in proportion to its drop chance. It does not say the ranges are hashed or handed over with the proof.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“Use the verification tool to input these values”

The values come from the Opening History in your account.

Checked 7 Oct 2026.

Open the source
Public sandbox

Read on the operator's own page

“Use the verification tool to input these values”

The values come from the Opening History in your account.

Checked 7 Oct 2026.

Open the source
ripz.gg
Seed hash, HMAC-SHA256

Read on the operator's own page

“Before any pull, we publish sha256(server_seed). The hash is timestamped to your draw. We can't change the seed afterwards without breaking the hash.”

The page carries a worked example with every value. We redid its sums on 7 October 2026 and got its numbers. ripz.gg names no company in its terms.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“When your chain rotates (manually or on schedule), the plaintext server_seed is published.”

Checked 7 Oct 2026.

Open the source
SHA-256 hash

Read on the operator's own page

“When your chain rotates (manually or on schedule), the plaintext server_seed is published.”

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“HMAC-SHA256(server_seed, client_seed:nonce:action:cursor)”

Checked 7 Oct 2026.

Open the source
Your own seed

Read on the operator's own page

“HMAC-SHA256(server_seed, client_seed:nonce:action:cursor)”

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“the full sorted list of 1000 eligible card IDs is hashed with SHA-256 and stamped onto the claim as pf_odds_schema_hash”

This fixes which cards were in the pool for the pull. The values come from the history in your account.

Checked 7 Oct 2026.

Open the source
Hashed card pool

Read on the operator's own page

“the full sorted list of 1000 eligible card IDs is hashed with SHA-256 and stamped onto the claim as pf_odds_schema_hash”

This fixes which cards were in the pool for the pull. The values come from the history in your account.

Checked 7 Oct 2026.

Open the source
✓
Yes

Read on the operator's own page

“Copy, paste, run.”

JavaScript and Python, with no network calls.

Checked 7 Oct 2026.

Open the source
Code on the page

Read on the operator's own page

“Copy, paste, run.”

JavaScript and Python, with no network calls.

Checked 7 Oct 2026.

Open the source

✓ in writing · ~ partly · ✗ not stated. A mark records what a page describes: no check was run on a real pull. It is not a rating either; how we rate does not score this.

Check a real pull in five steps

For an app with a tick in the last column. Skip a step and the rest prove less.

  1. 1Save the hashScreenshot the commitment before you pay. A hash you first see afterwards locks nothing.
  2. 2Set your own seedWhere the app lets you. An input you chose cannot have been planned for.
  3. 3Wait for the secretIt comes after the pull, or later: BOXED.GG says 24 hours, RipRip.io when its day closes.
  4. 4Hash it yourselfWith any SHA-256 tool that is not the app's own result screen. It must equal the hash you saved.
  5. 5Redo the drawRun the published code on your values. Then compare the odds on your receipt with the odds on the pack page.

Questions people ask

What does provably fair mean?

The operator publishes a hash of a secret before your pull and the secret after it. If the secret hashes to the same value it was not changed, and you can redo the draw from it.

Can a provably fair app still short-change you?

Yes. The check rules out one thing: changing a result after you pay. An operator can still set poor odds, change a table it never hashed, or overvalue a card. 3 of the 27 rated apps say they hash the odds as well: Lastpack, RipRip.io, and ripz.gg.

Is a VRF the same thing?

Close. A verifiable random function gives one valid output for each input, with a proof, so there is no secret to reveal later. Collector Crypt documents one, with your wallet's signature as the input.

Is an audit as good?

An audit is someone else's look at the system at one point in time. It gives you nothing to redo for your own pull. Arena Club and Beezie each name an auditor, and the pages we read link no report.

See the apps ranked by what they put in writing

Sources26

  1. Arena Club: how a card is picked arenaclubsupport.zendesk.com · read 7 October 2026
  2. Lastpack: how a card is picked support.lastpack.com · read 7 October 2026
  3. Phygitals: how a card is picked docs.phygitals.com · read 7 October 2026
  4. Repackz: terms collectibles.com · read 7 October 2026
  5. Tilt Rips: terms tiltrips.com · read 7 October 2026
  6. Courtyard: terms docs.courtyard.io · read 7 October 2026
  7. Ripit: terms docs.ripit.co · read 7 October 2026
  8. Packz: terms packz.io · read 7 October 2026
  9. RipRip.io: how a card is picked riprip.io · read 7 October 2026
  10. rip.fun: how a card is picked docs.rip.fun · read 7 October 2026
  11. Collector Crypt: how a card is picked docs.collectorcrypt.com · read 7 October 2026
  12. MNSTR: terms mnstr.xyz · read 7 October 2026
  13. Rips by Triumph: terms docs.triumpharcade.com · read 7 October 2026
  14. Slabz: how a card is picked slabz.com · read 7 October 2026
  15. BOXED.GG: how a card is picked helpdesk.boxed.gg · read 7 October 2026
  16. Stadium Vault: terms stadium-vault.gitbook.io · read 7 October 2026
  17. Rip Rush: terms riprush.net · read 7 October 2026
  18. Underdog Rips: how a card is picked underdogfantasy.pactsafe.io · read 7 October 2026
  19. Fanatics Instant Rips: terms support.fanaticscollect.com · read 7 October 2026
  20. ClutchPacks: terms clutchpacks.io · read 7 October 2026
  21. Beezie: how a card is picked docs.beezie.com · read 7 October 2026
  22. DOPA: terms dopa-global.com · read 7 October 2026
  23. Packs.com: how a card is picked intercom.help · read 7 October 2026
  24. Gemint: terms help.gemint.io · read 7 October 2026
  25. Crown Cards: terms crowncards.io · read 7 October 2026
  26. ripz.gg: how a card is picked ripz.gg · read 7 October 2026
Alexander Korsager

Alexander Korsager

Every figure was read on public pages between 6 October 2026 and 7 October 2026. Nothing here has been tested with money yet. The fairness pages here were read on 7 October 2026. Marks record what a page says; no check was run on a real pull.