Provably Fair Gaming at Cashy

Provably Fair Roulette

Most BGaming games at Cashy are provably fair. That means you don't have to take our word for it — you can verify every single result yourself, right after it happens. No middleman. No blind trust. Just cold, hard math.

Here's what that actually means: we use a cryptographic system that makes it genuinely impossible — for us or for you — to know how a round will land before it starts. You get a real, visible say in every spin. We hand you a fingerprint of the upcoming result before the game begins. And once it's over, you can check that we played it exactly straight. Here's the full breakdown:

1. We use a computer model for the Roulette Wheel and decide on a random spin to apply to it.

We lay out the roulette wheel as an ordered list of tiles, then pick a random position for it to stop. To do that, we use the Mersenne Twister — the gold standard of pseudorandom number generators. Think of it as the most honest dealer in the building. We call that landing position the Result.

roulette model

2. We show you a 'fingerprint' of the spin and a random number we call 'Secret'.

We call this Hash(Result + Secret). We generate a random Secret value to pair with the result, then run both through the SHA-256 Hashing Algorithm. What comes out is a fingerprint that's completely unique to that exact combination. You can't work backwards from the fingerprint to figure out the result — but after the game, you can use it to confirm we never pulled a switcheroo.

roulette fingerprint

3. We get you to have some input on the game.

You get to give the wheel a nudge. Pick any number from 0 to 36 — or 0 to 37 on American roulette — and we'll push the wheel forward that many spots when you spin. Your number, your call. Or let us pick one randomly. Either way, it's your fingerprints on the outcome.

roulette input

4. You play the game!

Place your bets, hit spin, and enjoy every second of it.

5. We show you the actual data used to generate your game!

When the round wraps up, we put everything on the table: the spin data (Result + Secret), the fingerprint we showed you before things kicked off (Hash[Result + Secret]), your input, and the final result. Verify it all right here using our built-in widget — or take the numbers to any third-party SHA-256 calculator you trust. We've got nothing to hide.

roulette data

6. Check the effect you had on the game!

Want to see exactly how your number changed things? Grab your client seed, find the tile the wheel was originally going to stop on in the Result + Secret data, count forward that many positions, and you'll land right on the final result. It's all traceable — and all yours to check.

Provably Fair Pocket Dice

To deliver genuinely provably fair Pocket Dice, Cashy runs three of the most trusted cryptographic tools in the business: the SHA-256 Hashing Algorithm, the Mersenne Twister, and the Fisher-Yates shuffle. Together, they make it flat-out impossible to mess with outcomes.

Technical Implementation

We generate 30 random numbers between 1 and 6, plus a random server seed. Those numbers get hashed immediately using hash("sha256", json_encode($initial_numbers) . $server_seed) — and that hash goes public right away. When your game launches, your browser creates a client seed on the fly using JavaScript. Then the initial numbers get reshuffled via Fisher-Yates using your client seed. Every step is on the record. Every step is yours to audit.

Code used for hashing initial numbers:

/**
* Calculates hash of array with server seed
* @param array $initialNumbers
* @param string $serverSeed
* @return string
*/

function hashInitialNumbers(array $initialNumbers, $serverSeed)
{
 return hash('sha256', json_encode($initialNumbers) . $serverSeed);
}

Code used for shuffling:

/**
* Shuffles array with client seed
* @param array $items
* @param string $seed
* @return array shuffled array
*/

function fisherYatesShuffle(array $items, $seed)
{
 $mt_seed = intval(substr(hash('sha256', $seed), -8), 16);
 mt_srand($mt_seed);
 $count = count($items);
 for ($i = $count - 1; $i > 0; $i--)
 {
  $j = mt_rand(0, $i);
  $tmp = $items[$i];
  $items[$i] = $items[$j];
  $items[$j] = $tmp;
 }
 return $items;
}

$finalShuffle = fisherYatesShuffle($initialNumbers, $clientSeed);
$result = array_slice($finalShuffle, 0, 2);

Provably Fair Cards

1. We generate a shuffled deck using modern shuffling techniques, as well as another number we call Secret.

Secret is a server-generated number used to build the hash — more on that in a second. The deck gets shuffled using the Fisher-Yates shuffle — basically the digital equivalent of pulling cards blindly from a hat. And to make sure every pick is genuinely random, we use the Mersenne Twister throughout. That shuffled deck? We call it the Result.

cards model

2. We show you a 'fingerprint' of the shuffled deck and the 'Secret'.

This is your Hash(Result + Secret). We create it by running the deck and Secret together through the SHA-256 Algorithm. The fingerprint is tied exclusively to that exact deck — swap even one card and the hash changes completely. You'll use this to verify the game after the fact.

cards fingerprint

3. We get you to have some input on the game.

For card games, your input is a cut. You pick a position in the deck — your client seed — and we cut that many cards from the top before the deal starts. Playing poker and you choose 24? We cut 24 cards down before a single card hits the felt. You're in the mix from the jump.

cards input

4. You play the game!

Place your bets, start the game, and enjoy every hand.

5. We show you the actual data used to generate your game!

Hand over, we show you everything: the full shuffled deck (Result + Secret), the pre-game fingerprint (Hash[Result + Secret]), your Client Seed, and the Final Result. Cross-reference it with our widget — or take it to any SHA-256 calculator you like. The numbers will line up every time.

cards data

6. Check the effect you had on the game!

Line up the original shuffled deck (Result + Secret) against the post-cut deck (Final Result). Same cards, same order — just cut at the exact spot you chose. Your influence is baked right in.

Provably Fair Slots

1. We use a computer model for the Slot Reels and decide on a random spin to apply to each one.

Every reel gets mapped out as an ordered list of symbols, and a random stopping position is generated for each one individually using the Mersenne Twister. No reel gets the same treatment as another. The full set of positions across all reels is called the Result.

2. We show you a 'fingerprint' of the spin and a random number we call 'Secret'.

Same deal as always: we generate a random Secret, combine it with the Result, and run both through SHA-256 to produce a fingerprint — Hash(Result + Secret) — that's unique to that exact spin. You can't figure out the result from the fingerprint alone, but you can absolutely use it after the fact to confirm we didn't change anything on you.

slots fingerprint

3. We get you to have some input on the game.

You get to push each reel forward before it spins. Pick a digit from 0 to 9 for each reel — that's how many extra spots it shifts. Choose your own numbers or go with a random set. Either way, your input is locked in before anything happens.

slots input

4. You play the game!

Lock in your bet, hit spin, and let those reels fly.

5. We show you the actual data used to generate your game!

Once the reels settle, we show you the full breakdown: reel positions (Result + Secret), the pre-spin fingerprint (Hash[Result + Secret]), your client seed, and the Final Result. Verify it here with our widget or take it to any independent hash tool. Everything checks out — every time.

slots data

6. Check the effect you had on the game!

Your client seed is a multi-digit number where each digit maps to a different reel. On a 5-reel slot, it's a 5-digit number. Say your seed was 30700: for the first reel, locate the 3rd set in Result + Secret (sets start at 0) and take the first icon listed — that's your top row symbol for reel one. Work through the digits and you'll reconstruct the Final Result row by row, reel by reel.

Example:

Final Result

{
 "symbols": [
  [", "shield", "siren", "lightning", "medusa", "siren"],
  [", "thor", "neptune", "heracles", "shield", "artemis"],
  [", "coin", "coin", "themis", "coin", "thor"]
 ],
 "card": "6D"
}
final result

Client Seed: 30700

Result + Secret

{
 "symbols": [
  ["siren", "siren", "heracles", "medusa", "siren"], (0)
  ["themis", "neptune", "themis", "shield", "artemis"], (1)
  ["heracles", "coin", "artemis", "coin", "thor"], (2)
  ["shield", "heracles", "heracles", "medusa", "shield"], (3)
  ["thor", "thor", "coin", "shield", "heracles"], (4)
  ["coin", "medusa", "themis", "artemis", "thor"], (5)
  ["lightning", "artemis", "ship", "ship", "medusa"], (6)
  ["minotaur", "shield", "lightning", "themis", "lightning"], (7)
  ["thor", "heracles", "heracles", "coin", "shield"], (8)
  ["artemis", "thor", "themis", "artemis", "medusa"], (9)
  ["coin", "siren", "coin", "heracles", "artemis"], (10)
  ["ship", "heracles", "neptune", "medusa", "thor"] (11)
 ],
 "card": "6D",
 "game": "slots:platinum_lightning",
 "secret": "ad17e9bf57de88cd103569c6f84a1d63"
}

How to verify?

1. Use any trusted hash calculator (quickhash works well).

2. Paste the game’s Result + Secret into the input box.

3. Choose SHA-256 and generate.

4. Confirm the new hash matches the one shown before the game.

If it matches, the spin was never altered.
Your bet didn’t change it. Your choices didn’t sway it. The result was sealed before play began.

Provably Fair Gaming At Cashy Casino

Most trust in online crypto casino gaming is borrowed. The casino says the games are fair, a gambling testing laboratory confirms it periodically and the player accepts both statements without being able to verify either one independently. That arrangement has worked well enough for the industry for a long time.

Frequently Asked Questions