Crash Game

PROVABLY FAIR

What does it mean?

All game results for the next 6 million rounds have been predetermined. Before each round, we reveal a hash of the result, making it impossible for us to change the result after the fact.

We have actually chained all results, making it impossible for us to even change future results. And before generating the chain of results, we revealed the first hash, published this to , and mixed in a future Bitcoin blockhash we could not have known. This makes all results provably fair.

CRASH

Global Seed

0x00000000000000000004ab6468e03c35500b5f59b8ef58ef9873f67ffbf12bcd
Date/TimeResultRoundHash
November 15 2023 9:13 AMx1.14215258de1fd1e02aecb7489484fb23552a095ef106b596a5c0f5c85956d72599bb4cec
November 15 2023 9:12 AMx1.772152578f2af7201824ed9b0ddd13e6120f6f9da0d69cac115960528c6a7097aa5ec443
November 15 2023 9:12 AMx1215256fb264ba632a0315b55a1df30996440026b1dca1cc74c984354411d0318cfbea8
November 15 2023 9:12 AMx2.4121525568c8f221385cbbdd8dfaa630ad0427ef2cad88480b4c9f06cdae004fbfa8e82c
November 15 2023 9:11 AMx2.4221525468878c8925f47a01ef4a9703e638e16eaefcd704a9e00bb2481f0e8d515ec348

ALGORITHM

Before the first round of the game began, we created a chain of hashes. Each hash is a 256 bit value. The chain begins with a randomly chosen 256 bit value and every subsequent value is calculated using the

Using a cryptographic hash function ensures that one can easily calculate any value in the chain using the previous value, but one can not easily calculate values in the reverse direction. The last value in the precalculated hash chain is what we publically published and used for the first round of the game. The second round of the game used the second to last hash value, the third round used the third to last hash value, etc. By traversing the chain in this manner, one can verify that the outcome of all past game rounds were consistent with the precalculated chain, but the outcome of future rounds remains unpredictable to users.

In order to eliminate the possibility that we intentionally generated the chain using an initial value that biased the games results in our favor, each value in the chain is appended to the global seed and the resulting value is hashed again using BLAKE2b to create the final value that will determine the outcome of each game round. This global seed is set to the hash of the Bitcoin block that we announced prior to its mining. The inclusion of the global seed ensures that the outcome of the games was unknowable to us when the hash value of the first game was published.

VERIFICATION EXAMPLE

Anyone can verify that the outcomes of all prior game rounds were generated using the provably fair algorithm with the following python code:


import math
import pyblake2

# The global seed is the hash of the Bitcoin block published by Rollbit
global_seed = bytes.fromhex("00000000000000000004ab6468e03c35500b5f59b8ef58ef9873f67ffbf12bcd")

# In this example, we'll start with the 369,862nd game round and work backwards.
round = 369862

# The round_hash is initially set to the value published for the 369,862nd round.
round_hash = bytes.fromhex("344893385fa113a48edafe61cc0e52a11fba9c1cd2dc4a92f7e919be87945ec5")

# Iterate backwards through the rounds
for i in range(round, round - 10, -1):
    # For every round, we append the global_seed to the round_hash to get a final hash value.
    round_final_hash = pyblake2.blake2b(round_hash + global_seed, digest_size=32).digest()

    # We then convert that hex value to a floating point number 'x',
    # which is uniformly distributed in the unit interval
    x = float(int.from_bytes(round_final_hash[:8], byteorder='little', signed=False)) / float(2**64 - 1)

    # The round's outcome is calculated by applying the house's 5% edge,
    # rounding to 0.01 precision, and restricting the outcome range to [1.0, 1000000.0)
    outcome = min(1e6, max(1.0, math.floor(100.0*(1.0-0.05)/x) / 100.0))

    print("Round: ", i)
    print("Round Hash: ", round_hash.hex())
    print("Round Outcome: ", outcome)

    # For the next round, we calculate the next value in the chain of hashes.
    round_hash = pyblake2.blake2b(round_hash, digest_size=32).digest()


  
Loading...