Skip to main content
Crash game
Nootiih avatar
Written by Nootiih
Updated over a week ago

We have generated a chain of 10 million SHA256 hashes, starting with a server secret that has repeatedly fed the output of SHA256 back into itself 10 million times. Now the crash game server is playing through this chain of hashes in reverse order, using the values as source data for generating each game's outcome. Anyone can easily verify the integrity of the whole chain. We're publishing the hash used to calculate the outcome after each game ends. If you apply the SHA256 function to a revealed seed, you'll get the hash for the previously played game, and so on until you get the hash for the first ever played game round on the chain.

INDEPENDENT RESULT VERIFICATION

You can independently verify any previous result by using the code displayed below. Simply input the game hash of the game you want to verify. You can execute this code yourself using Node.js, but we understand that for some of you, this may be beyond your technical know-how. So, we have created an easy way for you to execute this code directly from your browser. It runs the exact same code which is shown below, without the hassle of having to set up Node.js on your home computer.

Note: Our Random Number Generator algorithm was updated on 20th Mar 2020.
โ€‹For all games played before Game#135147on 20th Mar 2020, please use this code for independent verification instead.

The formula for verifying the result of a game hash is below. Simply edit the seed value to that of the seed for the game which you want to verify.

const crypto =require('crypto');// --- BEGIN: Fill these valuesconst seed ='2826d440b0fcad643e3008693c3a93ef81b31675ca00d686e44c40d5e83d7bb6';// --- END: Fill these values// With example values ^ it will output `Game crashed at 2.11x`// Turn this on if you want to see all the messagesconst verboseMode =false;// Set house edge percentconst houseEdgePercent =6.66;const crashTick =getCrashTickFromSeed({ houseEdgePercent, seed }); console.log(`Game crashed at ${(crashTick /100).toFixed(2)}x`);/** * Below this line are algorithmic functions used for calculating a roll value * ============================================================================= */functionlog(message){if(verboseMode){ console.log(message);}}functiongetCrashTickFromSeed({ houseEdgePercent, seed }){const hash = crypto.createHmac('sha256', seed).digest('hex');log(`Hash: ${hash}`);// Use the most significant 52-bit from the hash to calculate the crash pointconst h = Number.parseInt(hash.slice(0,52/4),16);const e = Math.pow(2,52);const result =(100* e - h)/(e - h);// houseEdgePercent of 5 will result in modifier of 0.95 = 5% house edge with a lowest crashpoint of 100const houseEdgeModifier =1- houseEdgePercent /100;const endResult = Math.max(100, result * houseEdgeModifier);return Math.floor(endResult);}

For security reasons, it would not be safe to keep using the same hash chain for 10 million games in a row, as these games would last several years. The longer a chain is in use, the higher risk is that the originating seed is found by a malicious third party (though still extremely unlikely). Due to this fact, we reserve the right to periodically update the base seed to ensure that the lifetime of a chain is not too long and the risk is minimalised. If and when we update the base seed to a new one, we will publish it below, also stating from which game round it was put into effect.

The first ever(ID: 1)public game's hash wascadaaef371bc977aae209dc9be1a30665550adf89fa40fc17771051914d1f9fc

By publishing the seed here, we are preventing our ability to pick an alternate SHA256 chain or modify parts of it from our side without you knowing about it first.

The bottom line is that results for all future games are already predefined and fairly distributed due to the maths that backs up the strong cryptographic SHA256 function. We cannot manipulate this chain of results and we publish game history results one by one as they are played. Each player can see the full history of the games and choose when to participate in a new game round and when not to. As crash results are already predefined and we can't force any player to join the game, it becomes a provably fair game of luck.

All outcomes depend strictly on what game round the player joins and when they decide to cash out. The crash point of a game is calculated based on the hash only and in no way depends on a player's activity or inactivity.

Did this answer your question?