A Provably Fair Bitcoin Casino Game

Satoshi Slot is a Provably Fair Bitcoin casino game. Wagers on the Satoshi Slot game does not take place in the Block Chain. Therefore, we need to cryptografically prove that we have a wagering process that can't be tinkered with. You can see a simplified version of the our provably fair system in the flow chart below. We will go into the details futher down, and at the end of this page, we let you investigate the code and verify the fairness by yourself!


Provably Fair Flowchart

Satoshi Slot Provably Fair System

Provably Fair Step-by-step Process

  1. The Game Client initiates a new game round by requesting a Server Hash from the Game Server.

  2. The Game Server generates a Server Salt and a Server Random Number.

  3. A SHA256 Hash of the combined Server Salt and Server Random Number is sent to the client.1

  4. The Player can now choose to keep the pre-generated number that the Game Client provided for him or her. Or he or she types his or hers own Client Random Number in the Game Client. Whatever Random Number that is in the Client Random Number text box is sent to the Game Server.

  5. The server now combines the Server Random and Client Random Number into a Resulting Random Number.2

  6. The Resulting Random Number is used to determine the resulting Reel Positions.3

  7. The Server Salt, Server Random Number and Reel Positions are sent to the client. The player can now confirm that the Server Salt and Server Random Number creates the same hash that was announced in step 3. The player can also verify that the Resulting Random Number generates the same Reel Position as was presented in the game round.

You can verify that all spins on the Satoshi Slot have been handled in a fair way by clicking a Spin ID in the top lists under the game. This will take you to a separate page where you can verify the result. You can also click the VERIFY button directly in the Provably Fair section of the game to verify the fairness of your last completed game round.
We have made a JavaScript page available that is run locally when verifying the fairness of Satoshi Slot. The page is found here, and you can view it's source here.

Further Explanations

Random Number Max

A metaphor of the Random Number Max is a dice with the number of sider specified here, with each side representing a possible outcome. This imaginary dice represents the total number of different possible outcomes of the game round.

Cliend Random Number

A metaphor of the Client Random Number is the position the dice is laying in before it's thrown. If a player enter a number greater that the Random Number Max, a controlled integer overflow will be computed and a valid Client Random Number will be produced.

Server Random Number

A metaphor of the Server Random Number is that it represents exactly how a dice is thrown. By recalculating the Server Hash, you can verify that this has not been changed after the Client Random Number is was supplied.

Resulting Random Number

A metaphor of the resulting number is that a hand holds a dice in the position of the Client Random Number. The actual roll of the metaphorical dice is represented by the Server Random Number. Both the initial position and the way the dice is rolled affects the final position of the dice.


1.
Server Hash = SHA256(Server Salt + "_" + Server Random Number)

2.
Resulting Random Number = (Server Random Number + Client Random Number) % (Random Number Max + 1)

3.
Reel 1 Position = Combined Random / (Length(Reel 2) * Length(Reel 3) * Length(Reel 4) * Length(Reel 5));

Reel 2 Position = Reel 1 Remainder / (Length(Reel 3) * Length(Reel 4) * Length(Reel 5));

Reel 3 Position = Reel 2 Remainder / (Length(Reel 4) * Length(Reel 5));

Reel 4 Position = Reel 3 Remainder / Length(Reel 5);

Reel 5 Position = Reel 4 Remainder;