Provably Fairness

We operate a provably fair system to ensure players can verify and trust that their results are fair and free from manipulation.

To guarantee the transparency of all processes and results, we use the widely recognized cryptographic algorithm keccak-256 (SHA-3 standard) and probability calculations based on binomial distribution to ensure fairness in outcomes.

Game Code and Verification

To secure the fairness and security of the game result generation algorithm, we provide functionality to change the server seed and client seed.

Players can verify the fairness of game results through the combination of the server seed, client seed, and nonce input.

Game Result Generation Algorithm:

  • The server seed, client seed, and nonce are hashed using keccak256.
  • A random number is generated based on the hashed value and compared against a cumulative probability distribution to determine the result.
  • Binomial coefficients are used to calculate the probability for each slot, and the result is selected according to these probabilities.

To verify game results, please use the external tools available here.

const seedStringUtf8Bytes: Uint8Array = toUtf8Bytes(`${serverSeed}:${clientSeed}:${currentNonce}`); const hashValue: string = keccak256(seedStringUtf8Bytes); const randumNumber: number = new BigNumber(hashValue).mod(1000000).div(1000000).toNumber(); const probabilities: number[] = []; const cumulativeProbabilities: number[] = []; let cumulativeSum = 0; for (let k = 0; k <= slotCount; k++) { const binomialCoefficient = this.factorial(slotCount) / (this.factorial(k) * this.factorial(slotCount - k)); const probability = binomialCoefficient * Math.pow(0.5, slotCount); probabilities.push(probability); } for (const prob of probabilities) { cumulativeSum += prob; cumulativeProbabilities.push(cumulativeSum); } for (let i = 0; i < cumulativeProbabilities.length; i++) { if (randomNumber < cumulativeProbabilities[i]) { return i; } } const resultSlot = i;

The server seed is an encrypted initial value generated by the game server and kept secret. It is created with enhanced randomness and security using the keccak256 hashing algorithm.

The client seed is a random sequence of characters chosen by the user (or automatically generated by the user's browser) and allows for customization in the game result generation process.

The nonce is a number used to combine the server seed and client seed to generate game results. Its initial value is 0, and it increases by 1 after each bet, ensuring the uniqueness of each game round.

Algorithm Characteristics

  • Ensured Randomness of Initial Seeds: Server and client seeds are combined and hashed with keccak256 (SHA-3 standard) to generate cryptographically secure random numbers.
  • Advanced Probability Calculations: Binomial coefficients are used to calculate the probability of each slot, which is then converted into a cumulative probability array to determine results.
  • Fair Seed Provision: Client seed and nonce values are disclosed to users, and the client seed can be freely modified.
  • Encrypted Server Seed: The server seed is stored in an independent database and provided to users after hashing with keccak256.
  • Automatic Increment of Nonce: The nonce increases by 1 in each game round, generating new RNG (Random Number Generator) values.
  • When the client seed is reset, the nonce value is also reset, preventing manipulation and ensuring fairness.

Providing Verifiable Fairness

When the client seed is changed, a new server seed is generated, and the previous server seed is disclosed. Users can hash the disclosed previous server seed to verify that the RNG for past games operated fairly.

This process ensures that game results are transparently guaranteed to be free from manipulation.

Seed Generation Steps

A cryptographically secure pseudo-random number generator (CSPRNG) is used to generate the server seed. This is implemented using Node.js’s crypto.randomBytes library, which enhances security with Linux's /dev/urandom source.

The client seed consists of 10 to 32 characters made up of uppercase and lowercase letters, while the server seed is a 64-character hexadecimal value.

The nonce increases by 1 in each game round, maintaining uniqueness and RNG randomness.

RNG Generation Steps

The server seed, client seed, and nonce are combined and hashed with keccak256 to generate random numbers. These numbers fall between 0 and 1.

The generated random numbers are compared with cumulative probability distributions to determine specific outcomes (slots or game events).

Verification Steps

Users can freely change the client seed. When changed, a new server seed is generated, and the previous server seed is disclosed in its unhashed form. Anyone can use the disclosed server seed to verify the fairness of game results.

By combining the previous server seed, client seed, and nonce, users can reproduce the keccak256 hash to confirm the randomness and fairness of past RNG results.

Chat
Chat Rules
0 / 300
Notice