Provably Fair PvP System
Our PvP system uses a provably fair method that ensures every game result is completely random and cannot be predicted or manipulated by anyone, including us.
Part of the random seed that determines the outcome is not known until after all bets have been placed and the game has started. This guarantees that nobody can know the result in advance.
How It Works
Each game result is created from three parts:
Public Seed (EOS Hash)
Server Seed
Nonce
These three values are combined to generate the final random result.
Nonce
In PvP Case Battles, the nonce is based on each player’s unique PvP bet ID.
Every new PvP bet made on the site gets a unique, sequential ID number.
Each case or box in the battle counts as one bet.
All bets are locked in before the battle begins.
Each player has their own nonce for each round, which matches their PvP bet ID.
The nonces are visible before the public seed is known and can be viewed in the Provably Fair window on the PvP Duel page.
We also include the Game Mode (for example, Case Battles or Unboxing) in the seed generation. This prevents different game modes from ever using the same seed combination.
Public Seed (EOS Hash)
The public seed is only known after all players have committed their bets.
We link the game to a future EOS Block that has not been mined yet. Once that block is mined, its hash becomes the public seed. Because the block does not exist when bets are placed, nobody can predict or influence the result in advance.
Server Seed
The server seed is a random string created for each player when they join a battle.
As soon as a player joins, we show the SHA256 hash of their server seed.
After the battle ends, we reveal the full unhashed seed.
You can confirm that it was not changed by comparing the revealed seed with its original hash.
This can be verified using any SHA256 hash calculator such as xorbin.com/tools/sha256-hash-calculator.
Independent Verification
Every unboxing result in a battle can be verified independently using our public algorithm.
You can run the same code in your browser by entering:
The Public Seed (EOS Hash)
The Server Seeds
The Nonces
All of these values can be copied directly from the Provably Fair pop-up on the PvP Battle page.
const crypto =require('crypto');// --- BEGIN: Fill these values// Hash (ID) of the mined EOS block in the future (assigned at the start of the game)const clientSeed ='0f2dc7fdc888572ac7ef496269ac60b3d8ce0cfe4c9a8f689a3e487cc69f0dcd';// Numeric ID of the specific PVP bet (used as the nonce)const pvpBetId =9999;// Server seed created when new game is createdconst serverSeed ='41c563068047ec52294131d39ae39ae7694e4baa998218b55a9e19f91b1f93e8';// --- END: Fill these values// With example values ^ it will output `Roll value: 35864249`// Turn this on if you want to see all the messagesconst verboseMode =false;// Get seedconst game ='PVP_BOX';const seed =getCombinedSeed(game, serverSeed, clientSeed, pvpBetId);// Get random roll value using provided informationconst max =1e8;const rollValue =getRandomInt({ max, seed }); console.log(`Roll value: ${rollValue}`);/** * Below this line are algorithmic functions used for calculating a roll value * ============================================================================= */functionlog(message){if(verboseMode){ console.log(message);}}functiongetRandomInt({ max, seed }){// Get hash from seedlog(`Seed value: ${seed}`);const hash = crypto.createHmac('sha256', seed).digest('hex');// Get value from hashconst subHash = hash.slice(0,13);const valueFromHash = Number.parseInt(subHash,16);// Get dynamic result for this rollconst e = Math.pow(2,52);const result = valueFromHash / e;return Math.floor(result * max);}functiongetCombinedSeed(game, serverSeed, clientSeed, nonce){// Add main parametersconst seedParameters =[serverSeed, clientSeed, nonce];// Add game parameter if neededif(game){ seedParameters.unshift(game);}// Combine parameters to get seed valuereturn seedParameters.join('-')}Important Notes
Note: Our Random Number Generator algorithm was updated on 19th October 2022.
For all games played before PvP Round ID #201,649,576, please use the previous version for independent verification instead.
Note: Our Random Number Generator algorithm was also updated on 28th September 2021 at 10:57 PM UTC.
For all games played before PvP Round ID #158,295,96, please use the previous version for independent verification instead.
If you have any further questions about our provably fair system, please contact our support team for more help and information.
