Provably Fair

Choose a game from the list below to learn how we guarantee that all results are completely random and cannot be altered.

XSkins utilizes a provably fair system, ensuring that outcomes remain unchanged once the game begins. Below, you can see how the results are calculated.

You can run the code directly in your browser using tools like this NodeJS tester. Simply replace the parameters with those from the round you want to verify.

Info

This is a randomly generated string or passphrase set by the player or their browser. You can modify and update it regularly as needed.
This field is required
To reveal the hashed server seed, the player must rotate the seed, generating a new one in its place. Once this is done, you can verify any previous bets using the old server seed, ensuring its authenticity with the provided encrypted hash.
You can validate the hashed server seed using this script. The server seed is hashed using SHA-256, so after revealing it, you can confirm that it matches the hashed version.
This field is required
You can validate the hashed server seed using this script. The server seed is hashed using SHA-256, so after revealing it, you can confirm that it matches the hashed version.
var sha256 = require('sha256');
var seed = 'ENTER_SEED_HERE';
function fair_getHash256(seed){
return sha256(seed);
}
console.log('Hashed: ' + fair_getHash256(seed));
Id Server Seed Useds Created At

Unboxing Game

In the Provably Fair tab, you can modify the client seed and generate a new server seed.
The server seed is a SHA-256 hash generated from a random 32-byte value. You can regenerate the server seed at any time. While the original server seed remains hidden, you will be able to verify that it was not altered once it has been revealed.
The client seed is generated for each user upon first use, just like the server seed. Since the client seed influences every roll, you can replace it with a seed of your choice at any time, ensuring that results cannot be manipulated.
However, since the SHA-256 function used to generate rolls is deterministic, combining the same client seed with the same server seed will always produce identical results. To prevent potential abuse, we introduce a 'nonce'—a counter that starts at 0 and increments by 1 for each roll, ensuring every result is unique.
The nonce naturally increments with each roll and cannot be altered or manipulated.
The total number of tickets is normalized to a fixed range of 100,000 tickets for all cases. This ensures consistent precision across all cases, regardless of item drop rates.
Each item's drop chance is converted to a proportional ticket range within this 100,000 ticket system. For example, a 1% drop rate equals 1,000 tickets, while a 0.001% drop rate equals 1 ticket.
SHA-256 generates a hash from a combination of the salt and hash, encoded in hexadecimal format. We extract the first 12 characters from this hash and convert them into a number.
Applying a modulus operation with 'total_tickets' (100,000) to this number results in a value between 0 and 99,999. Finally, adding 1 ensures the result falls within the range of 1 to 100,000.
Each roll can be independently verified once you reveal the server seed for past rolls. By applying the SHA-256 function to the published unhashed server seed, you can confirm that it matches the previously displayed hashed version. This ensures that every roll remains provably fair and can be verified by any user.
var crypto = require('crypto');
var roll_server_seed = 'ENTER_SERVER_SEED';
var roll_client_seed = 'ENTER_CLIENT_SEED';
var roll_nonce = 12;
var roll_total_tickets = 100000; // Fixed range for all cases
function fair_getCombinedSeed(server_seed, public_seed, nonce) {
return [server_seed, public_seed, nonce].join('-');
}
function fair_generateSaltHash(seed) {
return crypto.createHmac('sha256', seed).digest('hex');
}
function fair_getRoll(salt, max) {
return Math.abs(parseInt(salt.substr(0, 12), 16)) % max;
}
var generated_seed = fair_getCombinedSeed(roll_server_seed, roll_client_seed, roll_nonce);
var generated_salt = fair_generateSaltHash(generated_seed);
var generated_roll = fair_getRoll(generated_salt, roll_total_tickets) + 1;
console.log('Roll: ' + generated_roll);
Id Server Seed Client Seed Nonce Tickets Roll

Case Battle Game

Case Battle utilizes a provably fair system where the public seed remains unknown until the battle begins. The result of each battle is determined using the SHA-256 hash of three distinct inputs:
The server seed is a securely generated random value created when a round starts. Its SHA-256 hash is displayed to all players immediately after the round is initiated. Once the battle concludes, players can verify that the revealed private seed corresponds to the initially provided SHA-256 hash.
The public seed is derived from the ID of an EOS block, which is generated after the countdown ends. When the countdown finishes, our system selects an upcoming EOS blockchain block number. The ID of this block serves as the public seed. This ensures that neither players nor our system can predict the outcome before all bets are placed.
The nonce is determined by the round ID.
The number of rounds corresponds to the total number of cases in the battle.
The number of players corresponds to the total participants in the battle.
The outcome is represented as a matrix, where each row corresponds to a round, and each column represents a player's position. Each value in the matrix is determined by the case roll for that specific round.
var crypto = require('crypto');
var roll_server_seed = 'ENTER_SERVER_SEED';
var roll_public_seed = 'ENTER_PUBLIC_SEED';
var roll_nonce = 3;
var roll_rounds = 4;
var roll_players = 2;
function fair_getCombinedSeed(server_seed, public_seed, nonce) {
return [server_seed, public_seed, nonce].join('-');
}
function fair_generateSaltHash(seed) {
return crypto.createHmac('sha256', seed).digest('hex');
}
function fair_getRoll(salt, max) {
return Math.abs(parseInt(salt.substr(0, 12), 16)) % max;
}
function fair_getRollCaseBattle(salt, rounds, players) {
var array = [];
for(var i = 0; i < rounds; i++) {
array.push([]);
for(var j = 0; j < players; j++) {
var salt_position = fair_generateSaltHash(salt + '-' + i + '-' + j);
var roll = fair_getRoll(salt_position, Math.pow(10, 8)) / Math.pow(10, 8);
array[i].push(roll);
}
}
return array;
}
var generated_seed = fair_getCombinedSeed(roll_server_seed, roll_public_seed, roll_nonce);
var generated_salt = fair_generateSaltHash(generated_seed);
var generated_roll = fair_getRollCaseBattle(generated_salt, roll_rounds, roll_players);
console.log('Roll: ' + JSON.stringify(generated_roll));
Id Server Seed Public Seed Block id Roll Created At
50 d028d4c36c1c1223149940b30dd8c6fefdca8b3532fe7cd3878c161b06fb7898 1c676217cc223cb52c8f6f71eeb3e0c5327344c904bd76d0ed3d0ad72a341df0 476537367
04 January 2026, 04:58 PM
49 7af67ce08fa7cfb378e3998c185d2cb0a5fbc0b822e540deb3a7b77a6db8b9b4 1c66b1624792f3994d70033977270ed0a22d600ae2b39dfae5284984af144181 476492130
04 January 2026, 10:39 AM
48 8a6f38e4d446f9decfb3c9a3f49baebaae0b7fb7cffe042dbe50bcda44acf722 1c64b763120ea815cab5da7d3ea66703c7e012fc75cf930d810744bb95c3fd3e 476362595
03 January 2026, 04:41 PM
47 a9e80976cda72ba85e1463588dd88ded83570af617e534c9fe1fd06de2e9b0a4 1c530d8f626398f6ad74b257caf3d9d734d0f4bc34731d2d7f69bce3b62c1d41 475205007
27 December 2025, 11:51 PM
46 b3f61a21397a43dfc7755b84c36692c7c884e33cf57ba46254561c62381269f6 1c3c49230f81c009aeb43cd5b71e0f944994a22d0bc6d797932f2af98a41969d 473712931
19 December 2025, 08:31 AM
45 b1b73454f87373073225813c20d4404df181b23cd62bbd4708a287d2138c5122 1c3c4757914ae0c8c3a746e20e8b3e5be7386efb40a558e768411478d1ac2006 473712471
19 December 2025, 08:28 AM
44 c241ba2fbd159e944ce7d521fe1737925550c8810726c30ed9976d08c4561b4f 1c37427d33274cfbeaca94ad56a9270454f0c2451b8ed0ba6b5de162c305a030 473383549
17 December 2025, 10:45 AM
43 162af724ea225aa95b7688b6189fac6ca2fa5e7a9dee7037cae8e8a690073496 1c3741617ae44ac3f8f79302211f79499ac5665c7561d3f0081e492f1ff04e56 473383265
17 December 2025, 10:43 AM
42 803e225e3e832e3a21879e268130a3432e4c36f827d7fd673df5ceef83a7b740 1c3740ca53b2eb235f196d085908be7829127b0b3df30b6eb9c27f746cf17627 473383114
17 December 2025, 10:41 AM
40 7e6f8b48402a4cb2390a4d219b8568a86446ebf41f32b83ae63afde83b145a0a 1c360a7aad850782faff9ca9901f85e734bb02ad8bf4781a54603ad919d78714 473303674
16 December 2025, 11:37 PM
39 eb9ccb16705413885aabbae664d005783bd4bddd0f5d9f5b80a45b61375ebfc1 1c3609465f1bd9e1c662d4d61fdfe30a56b5acdbc9174e87b71369c83e49f99a 473303366
16 December 2025, 11:36 PM
38 e10f45d97388c852d4cff895bb15a9a0a739526adf36b6e159e388938d5a14bf 1c373c72dbbf03b5a3a1c3df05f8b85729b39a1c02c0acd680387e9faa9abce4 473382002
16 December 2025, 10:39 PM
37 b1b3fe4d4537bb8729c416d9313a752b1cc2c14445a8e4f99a0f4a02f4b66d6c 1c35e88e84bd68b7b4b0295bf5d24aeb46ca90e29be9559c9f5e1d4c3bbf42a7 473294990
16 December 2025, 10:27 PM
36 65eead92751d896f3d6c1a4033a2a7f7702c52711982a671dce3ad10f8b684e5 1c35e7dade65b0dca35584bcb7d18758306277af0a75afc1bfcd648d73ca365f 473294810
16 December 2025, 10:25 PM
35 436cc6fe0b20bfc4e1ab5be01c36124be858f6c109b8b4c9cd1f07fcdabb6560 1c35e1ee8c7b6ea25a964193e0403f653d41ebe40bbdd68bd0bbeefea59f0c51 473293294
16 December 2025, 10:12 PM
34 fe10fd62d109b2b3584ca6e6f61676e9425687e9cbd6af5fef71232e1de7554f 1c35df12ad4e17c048621d6cc8176af88e46e82429069fab30fab53716bc8014 473292562
16 December 2025, 10:06 PM
33 a82424e5d2e7508e9ccd8091257c4e3356296088c241b7ccc5d2658e78ef8f19 1c35abb68c668ba84e331260379c9b5b8303e8ea39af94f8adbe1571f0d18fb4 473279414
16 December 2025, 08:17 PM
32 206c9addad8af41bb64a9ae4c116c9cfec47f3143f7ff3415257c8f9a3e32037 1c35766df3fc21bfeec3dbed518b2ed98c92fef8b25f99b49c4aff1972ec6d6d 473265773
16 December 2025, 06:23 PM
30 94a54cabf3fd23d3ee628e8e2bde6c2c423d615b71d919600e5c5e04df75b7fc 1c357495109daab9a33ba9c2b3f746765a00c712f5b2271e7143801da272ea0e 473265301
16 December 2025, 06:19 PM
29 b9b28293a48359181cfe5242092929a6025e3662743531f45dd213f4c7f363f1 1c356eba40127d93c0f9d4df36601f5c673b20a11309a130635e4a3dc598686e 473263802
16 December 2025, 06:07 PM
28 80f02c08ee519a8c7a5fbc6e3cfaabf20f918e86b4fca1562b5206e729142210 1c356d560a1ef2fb91937a7b55daa7117aa881771d5a69868252593ab6480e07 473263446
16 December 2025, 06:04 PM
27 04068b37728e69c7e62d1c22688e82d571a2774a349a3e5629e4b57001ab1ab2 1c356ba9b2b430d7480d794bec1bd6807bcdbcac7cc5a0b821ca0cf5f6fe5329 473263017
16 December 2025, 05:59 PM
26 59c9fafaa049ba8f28ded3cee2201d509e0c237bb358d42cb2af388a809f8d00 1c356a05b157f5ec691dc6a01dc475b2214d56350835e6db43eb541727c7c852 473262597
16 December 2025, 05:57 PM
25 2f61ef862ff86f4e749d5f0636ec4f4929cf6d22c789850550e2299bcb116134 1c356879199e1573ac6ccdc93086283973056b31e09a75668bc04f29117bc9a5 473262201
16 December 2025, 05:53 PM
24 e0233237876faa94166c22954bd0aec45e96d51115708991cfcc5f7db7238628 1c3566017277483585b815122ced55af2be27116d4ade9203aa767040eb49807 473261569
16 December 2025, 05:48 PM
23 522e6503b62715dfb0b1f672190639e1b2e4f833707c6c1f1866b1ca60958410 1c3560dd79cb504e015535eaf73202df6e89e682e07a4b8ba27a2312d30722d4 473260253
16 December 2025, 05:37 PM
22 33c3011ea62a76690c91787dd01e30da9fadd5f95d041280c94287b08f03d1ea 1c355dbda92771ea9e5e2fe63195120174663e4bcfe30a91f289b3b00f031b65 473259453
16 December 2025, 05:30 PM
21 9fafd86e4f9a9c34e7e9e1c7647158504c38c06175a9fa6802f2d2a08d5fbb63 1c35552d71df37898b5e853851d33db943dd03194dfff2f9f88af82aa7e981cd 473257261
16 December 2025, 05:12 PM
20 8f5f435ea39557a208538ac392789c132c59b0afad7803eb0de2894174bfa3d6 1c3551f1a03e285d36574e956d0eb287a212dde1c19b86ad69cbc775f7f7eb1e 473256433
16 December 2025, 05:05 PM
19 36ce787850d5939357fc175a27c2b9b6bd832d77bfa4addae4b873226122e6ef 1c355119277d70e8f2089449dad83e6c5e24a0c20fe05f80e7d737616a57fcae 473256217
16 December 2025, 05:01 PM
18 ff7d782785c16ee7ee96f617ddc00549727cc5d6af13d94c0eee3d4f15ae46b4 1c33731d31bf56383acd8a2936dec31a2ee1dc9551b5d846716fd6f0c1c99a7b 473133853
16 December 2025, 00:03 AM
17 d4593b094a9a77979039b343341e305b104c579c37913bdb947ba6b31633427c 1c3372259683e095524a606206f193952ac9d85725fea1ccf23d338c88409a0b 473133605
16 December 2025, 00:01 AM
16 bae49b2f5876da6e6848d842a4d6a08a5db665dac9d9c47173d68cb25e2557b1 1c3371684b99e97c7cf3cc9e983204d582326d4717f343986fd78211c44e097d 473133416
15 December 2025, 11:59 PM
15 c325082ea4c1c9315f697ed6cd5501c1c7a980cb9a32595cb7bef7e9ac56dcd6 1c337048d51e53c9f5b708efb01727e41e09b8a278d3593ed8361c97291b1d9d 473133128
15 December 2025, 11:57 PM
14 580314d85410d217ac2130fcf8b1567788dcc21653721523bad469209d51a571 1c336f75801f80294436fbf701d6256cddc0fc335d8449f975c52fc5499170d4 473132917
15 December 2025, 11:55 PM
13 dce2cdd95ec4de525a724f09bb64ad5d4af0e342b9ed4a4bd7fb17410605e2f6 1c336e3e5f6b496fbf6cc9966228cf773e43eb1c809b7159cb237ae4ac0fd559 473132606
15 December 2025, 11:52 PM
12 205e5c45c019a5fd84602f21f45a0588e1169604983263598097959d5b30bae7 1c33205cf880cc2b3b3fb508fe06ad766f9ec301c184d4b55baf5b2a1f73935c 473112668
15 December 2025, 09:06 PM
11 ceb8b6232a68c08816dfddc5778e8a8b36098a8c9cfd16fe29c82bb21e415dee 1c28cb3487200e0f08ba3f1708a08c96fe835f2de9bdf9d47f54a5f355696387 472435508
11 December 2025, 10:56 PM
10 bbefc5dd3f6bc6963ff0ba5ffa5149a3afa35a9b0643fd7eb0576cc6d69b7af1 1c28ca50825f251a9f5bad7d2117f3d7b5693aab681e2cc37ee7976e565bcfd3 472435280
11 December 2025, 10:53 PM
9 3e62cff1f94eafced8ee61edee7171b0d025b31af4a7d4362361b2e79294c538 1c28c6f941ac976286781c79eea88b6dcf481946d6bccad8009db3d53864419d 472434425
11 December 2025, 10:47 PM
8 180dc8bb9463b5851e8ff6c7f5e8929e2e78af42c6fea2e67211f7d3e4385089 1c28c1f1aec0839f1d7ae23bf5594852be809f9495f6900856c0846287df4285 472433137
11 December 2025, 10:36 PM
7 ad95dcd2cc95f3547854261fadc1b1afca5befa1ecf87a1ad028426e8b548af0 1c28c0f97bd624e2d12cf554243c4e287a947d57ad89c9c23e5b75cf678af718 472432889
11 December 2025, 10:34 PM
6 798b2d4bba1391efb37679543f7b2180f73dfcd5e8d691eec53708424a67bd88 1c279cd5783616ec09c19b3cae12135084a96b0131c6cd1db858695fca8611a0 472358101
11 December 2025, 00:10 PM
5 f4721f2ae93ba81fdbabdde4b038821a2d0ace449439f2b6f198d4ccd867955f 1c279bc1cc6a80dd1d45c1b500a0243c777771c902fbc69c2e490130a3d10f01 472357825
11 December 2025, 00:08 PM
4 d4e9b49a2d9b0231bd44684d59a581b420e21fe7dadac9433b8d5fe599d59f19 1c279b21994fbc5bf03f9d334ba6112685d37f54476191b0cbea0fedd633dc6d 472357665
11 December 2025, 00:07 PM
3 c9b37a4d96f9ee3ad1fd6fb761ca72b127f73fd091c1246ce309379521ee7df8 1c279a9154165260ac77f9b700df1657e73362805cfdd036f9e7df6f6f0e6d07 472357521
11 December 2025, 00:05 PM
2 e446c69b855f0b0d526aa19e9fd9415bc1d548c29089d992fffd7e906eb58c0e 1c27988adaaa0eb32226872b4e8c0f9ac40b6351862d8300656b5e6b23073c3a 472357002
11 December 2025, 00:01 PM
1 3b87d169d6850492f3b4bc2cab8e3da7a15dc9cd121cd003b2def0ecbcd4158d 1bf5a4f60560fbf052347534f69bc6da653005a23b3808630f4570ef6f3404d3 469083382
22 November 2025, 00:50 PM

Upgrader Game

In the Provably Fair tab, you can modify the client seed and generate a new server seed.
The server seed is a SHA-256 hash generated from a random 32-byte value. You can regenerate the server seed at any time. While the original server seed remains hidden, you will be able to verify its integrity after generating a new one.
The client seed is initially generated for each user in the same manner as the server seed. Since the client seed influences every roll outcome, you can change it at any time to ensure that the results remain fair and beyond our control.
The SHA-256 function used to generate roll outcomes is deterministic. If the same client seed is combined with the same server seed, it will always produce the same result. To prevent potential exploitation, we incorporate a 'nonce,' which increments by 1 with each roll, ensuring unique results.
The nonce is an incremental number that cannot be manipulated, as it naturally increases by 1 with every roll.
SHA-256 generates a hash value for the salt-hash combination in a hex-encoded format. The first 8 characters of this hash are extracted and converted into a numeric value.
By applying a modulus of 10000, we obtain a number between 0 and 9999. Finally, dividing this result by 100 produces a decimal value ranging from 0 to 99.99.
Each roll can be independently verified using this formula once the server seed has been revealed. Players can confirm the integrity of previous rolls by applying the SHA-256 function to the published unhashed server seed. This process will generate the originally displayed hashed version, allowing users to verify that no tampering has occurred.
var crypto = require('crypto');
var roll_server_seed = '2c3eea4603280f3cadfb0046b248e7b756930b0b6886997ac73f96d478c823f3';
var roll_client_seed = '0b3eeb63c10796f00e3faff36207b369';
var roll_nonce = 0;
function fair_getCombinedSeed(server_seed, public_seed, nonce) {
return [server_seed, public_seed, nonce].join('-');
}
function fair_generateSaltHash(seed) {
return crypto.createHmac('sha256', seed).digest('hex');
}
function fair_getRoll(salt, max) {
return Math.abs(parseInt(salt.substr(0, 12), 16)) % max;
}
var generated_seed = fair_getCombinedSeed(roll_server_seed, roll_client_seed, roll_nonce);
var generated_salt = fair_generateSaltHash(generated_seed);
var generated_roll = (fair_getRoll(generated_salt, 10000) / 100) % 100;
console.log('Roll: ' + generated_roll);
Id Server Seed Client Seed Nonce Roll

Double Game

Each section of the roll is assigned a number - and there are 15 potential numbers to land on. The resulting number from each spin is determined by a combination of three individual elements, which are fed into an algorithm:
Client seed is SHA-256 hash generated daily from random 32 bytes. We show it to you the moment it's generated.
Server seed is SHA-256 hash generated daily from random 32 bytes. We show you the encrypted version while it's in use.
The nonce is based on numbers that is the round id. The first round ever played would have an nonce of 1. This number increases by 1 for each new round. The nonce's job in generating outcomes is to ensure that, even when the same public seed and server seed combination are used, the outcome generated in the next game would still be different, since the seed combination is paired with a unique nonce, the nonce for each game is always different, since the round id would have increased by one for every new game played.
Since each roll, or outcome, is generated using cryptographically-secure randomness, the probability of a particular outcome will never change - even if you play 100,000,000 times. There’s no pattern or method used to determine which number will hit next - it’s sheer randomness.
Today's server seed is currently in-use, therefore it is a secret and only the encrypted seed (hash) is visible to you. You can not verify today's results until the day is over and the (unhashed) server seed has been revealed.
var crypto = require('crypto');
var roll_server_seed = 'aed859a82f458f3111fb8dd813001a65a9d88fce5004a37a3648a4f3c745e9df';
var roll_public_seed = '3e2a4be2d0eb744ea4b07b2773f881f035f84f5fcb1880ceb25929ad7563df34';
var roll_nonce = 0;
function getCombinedSeed(server_seed, public_seed, nonce) {
return [server_seed, public_seed, nonce].join('-');
}
function generateSaltHash(seed) {
return crypto.createHmac('sha256', seed).digest('hex');
}
function getRoll(salt, max) {
return Math.abs(parseInt(salt.substr(0, 12), 16)) % max;
}
var generated_seed = getCombinedSeed(roll_server_seed, roll_public_seed, roll_nonce);
var generated_salt = generateSaltHash(generated_seed);
var generated_roll = getRoll(generated_salt, 15);
console.log('Double Roll: ' + generated_roll);
Date Server Seed Public Seed Games
16 January 2026, 05:32 PM (hashed) fddf4ca169744d11971bd6aa09f160c3b9c93610515dfc824a86a710b6c9354c 8dc6bdfd2eb5f47e3e1a38d2e20c8838ee988c0b13219ef291896becd95690dc
99362 - 102112
15 January 2026, 05:32 PM 454de6ef57948718032c6910bbf7f7acc59ac06774e0ea74aa212f4faf1c6ffa 9d3d1804b4f7620c1e109485d8b191111ca24b4c90124e305ac198520c76ac74
96671 - 99361
14 January 2026, 05:31 PM 60cd682fcb9fdfdbaa34784fd5d01f5328b741967fac27e994d5a1b96c53aae2 e07562279369b2356b99760fe56911c64b8a598f4047818c741c00b5e034ccf8
93915 - 96670
13 January 2026, 05:31 PM 7477b16cee8e06948cfd9d3cfa976986b23ee700881007f23425733fe9eceff4 3ae102da91b13663fefe3dd3be28207238bc3672c2c9718be3424c9875390f57
91131 - 93914
12 January 2026, 05:31 PM fcb743c988f8f0a8f782567ee61b0b1405bf6ca687b732d98a80b8cbc7a522ef fbe9f16767c19c3661f1258bd94326803344df30723ad28cce3cac4f69742cab
88347 - 91130
11 January 2026, 05:31 PM 9d7271e8bb086dfb9125da0eab525afdb492b3220ca0598f9e2b6ce68a06e202 f13d45ed427ad1a91ab138eb3c26d2537c3be2d0b2be73bc47277eed4d89f6e0
85562 - 88346
10 January 2026, 05:30 PM 9676ca65164dfcc1356b140d4cd28a7a39c47337ecb89db2de4a3dd130b29630 13cbb67bfc1107d0d58a8bb2dae26090c4a7983384b9241f95bd730336bca4a0
82777 - 85561

Tower Game

In the Provably Fair tab, you can change the client seed and regenerate the server seed.
Server seed is SHA-256 hash generated from random 32 bytes. You can regenerate it at any time. You cannot see the original server seed, yet later you can verify that it was unmodified.
Client seed is generated once for the user, similar to the server seed. Changing it ensures outcome integrity.
The nonce is based on numbers that naturally increment by 1 after each roll.
A tower game is generated with 10 separate salts. Each salt is produced by using the stage index from the board and the main salt (generated using the server seed, client seed and nonce). For each output, a modulus of 3 is applied, giving a number in the range 0–2, which represents the tile index for a wrong move. The tile location is determined by a grid from bottom-to-top, left-to-right.
var crypto = require('crypto');
var roll_server_seed = '2c3eea4603280f3cadfb0046b248e7b756930b0b6886997ac73f96d478c823f3';
var roll_client_seed = '0b3eeb63c10796f00e3faff36207b369';
var roll_nonce = 45;
function fair_getCombinedSeed(server_seed, public_seed, nonce) {
return [server_seed, public_seed, nonce].join('-');
}
function fair_generateSaltHash(seed) {
return crypto.createHmac('sha256', seed).digest('hex');
}
function fair_getRoll(salt, max) {
return Math.abs(parseInt(salt.substr(0, 12), 16)) % max;
}
function fair_getRollTower(salt) {
var array = [];
//Get tower roll by stage
for(var i = 0; i < 10; i++){
var salt_possition = fair_generateSaltHash(salt + '-' + i);
var roll = fair_getRoll(salt_possition, 3);
array.push(roll);
}
return array;
}
var generated_seed = fair_getCombinedSeed(roll_server_seed, roll_client_seed, roll_nonce);
var generated_salt = fair_generateSaltHash(generated_seed);
var generated_array = fair_getRollTower(generated_salt);
var generated_roll = generated_array.join('');
console.log('Roll: ' + generated_roll);
Id Server Seed Client Seed Nonce

Crash Game

Each section of the roll is assigned a number - greater than or equal to 1.00 to land on. The resulting number from each crash is determined by a combination of three individual elements, which are fed into an algorithm:
Client seed is SHA-256 hash generated daily from random 32 bytes. We show it to you the moment it's generated.
Server seed is SHA-256 hash generated daily from random 32 bytes. We show you the encrypted version while it's in use.
The nonce is based on numbers that is the round id. The first round ever played would have a nonce of 1. This number increases by 1 for each new round. The nonce's job in generating outcomes is to ensure that, even when the same public seed and server seed combination are used, the outcome generated in the next game would still be different, since the seed combination is paired with a unique nonce, the nonce for each game is always different, since the round id would have increased by one for every new game played.
Since each roll, or outcome, is generated using cryptographically-secure randomness, the probability of a particular outcome will never change - even if you play 100,000,000 times. There’s no pattern or method used to determine which number will hit next - it’s sheer randomness.
Today's server seed is currently in-use, therefore it is a secret and only the encrypted seed (hash) is visible to you. You can not verify today's results until the day is over and the (unhashed) server seed has been revealed.
var crypto = require('crypto');
var roll_server_seed = 'e581f85cab4f8f4ee22afc82b8299c4bd7f132049c9212b32e989b798246ac31';
var roll_public_seed = '1b233defb3b6acc3ead30a62ded768e8db9950bb922db728f44dcf9fb464d21e';
var roll_nonce = 0;
function fair_getCombinedSeed(server_seed, public_seed, nonce) {
return [server_seed, public_seed, nonce].join('-');
}
function fair_generateSaltHash(seed) {
return crypto.createHmac('sha256', seed).digest('hex');
}
function fair_getRollCrash(salt) {
var INSTANT_CRASH_PERCENTAGE = 5.00;
// Use the most significant 52-bit from the salt to calculate the crash point
var h = parseInt(salt.slice(0, 52 / 4), 16);
var e = Math.pow(2, 52);
var result = (100 * e - h) / (e - h);
// INSTANT_CRASH_PERCENTAGE of 10.00 will result in modifier of 0.90 = 10.00% house edge with a lowest crashpoint of 1.00x
var houseEdgeModifier = 1 - INSTANT_CRASH_PERCENTAGE / 100;
var endResult = Math.max(100, result * houseEdgeModifier);
return Math.floor(endResult);
}
var generated_seed = fair_getCombinedSeed(roll_server_seed, roll_public_seed, roll_nonce);
var generated_salt = fair_generateSaltHash(generated_seed);
var generated_roll = fair_getRollCrash(generated_salt).toFixed(2);
console.log('Roll: ' + generated_roll);
Date Server Seed Public Seed Games
17 January 2026, 04:34 PM (hashed) 086aa05f46c7bbcdb2fa4696269c972e860cb245e3fa6f1c0187de8fdac7d46a 83f39e019957cdd77c6346ead8e48c30593fe8bac31038347d7002eb62997546
115215 - 115290
16 January 2026, 04:34 PM a7871b2635d3c6e37bbfc28f4ce1a1d6067ff0b3a5178cadbb29b97e8a5308fd 0d5a930cbe53ff59f697db394b393452e0ed1d6eff92dcc20429cebaf3b7a99a
112433 - 115214
15 January 2026, 04:33 PM 8ca6711211738c68542fe06188592cde9c74702fa168460daeb3c7eb21e60cfd 096ea11556e28bc8ac150d878d464ac957e063bd0326af651e1bdad143087385
109859 - 112432
14 January 2026, 04:31 PM a36efe150706b6136e277d408177cab93ecf3b47cdfa51bc2e4b5015b6873a9d 0ff9354465eb032ffb46a4dd6be656991ec6886ef7b548011b5a9ab5afe94232
107136 - 109858
13 January 2026, 04:31 PM c3d09f94e5730fbc165bcdcd0338bab7c064afecb114169292ef8edd728cc066 296cc8f0995bebe839b011d4588cb20e17ce655a69cb3ccb1d20b89ba89f2e97
104462 - 107135
12 January 2026, 04:31 PM 66698aff20cb7d1830aedc6ba440c9ab75575e80d3107b29af010770cec66c80 9bd511b4a323508a9db35cc9853783d2dd8899a03913976adfc94d4ee688fd88
101682 - 104461
11 January 2026, 04:31 PM 636d9e5ba8ce490d6fd4d6986bb4bce9ea2238e739fc16a838ea290d68c87ad1 dff731eb8a28a43fb1dc0d81f2fd2e8406adff6ae2799ef04543770047215703
98969 - 101681

Coinflip Game

Coinflip uses a provably fair system in which the public seed is not known until after a coinflip game has started. The result for each round is generated using the SHA-256 hash of 3 separate inputs:
The server seed is a securely random value, generated when a round is created. The SHA-256 hash of the server seed is displayed to all players immediately after a round is created. Players can check that the private seed revealed after the coinflip result is made known matches this SHA-256 hash.
The public seed is the ID of an EOS block, which is to be generated after the countdown is finished. When the countdown is finished, our system chooses a block number on the EOS blockchain that will be generated in the near future. The ID of this block is what will be used as the public seed. This way, neither the players nor our system know what data will be used to generate the coinflip result until after both players have committed their bets.
The nonce is based on numbers that is the round id.
var crypto = require('crypto');
var roll_server_seed = '30dfbd2887ff70583787976bc3105fc992942f91985c7acd96cc5a2ff4de6e45';
var roll_public_seed = '0d3a2d2c14fa35d5cec6c3940b05040e62ba57182661174dc48a35e6dab46e7d';
var roll_nonce = 1;
function fair_getCombinedSeed(server_seed, public_seed, nonce) {
return [server_seed, public_seed, nonce].join('-');
}
function fair_generateSaltHash(seed) {
return crypto.createHmac('sha256', seed).digest('hex');
}
function fair_getRoll(salt, max) {
return Math.abs(parseInt(salt.substr(0, 12), 16)) % max;
}
var generated_seed = fair_getCombinedSeed(roll_server_seed, roll_public_seed, roll_nonce);
var generated_salt = fair_generateSaltHash(generated_seed);
var generated_roll = fair_getRoll(generated_salt, Math.pow(10, 8)) / Math.pow(10, 8);
var generated_side = (generated_roll < 0.5) ? 1 : 2;
console.log('Roll: ' + generated_roll + ' | Side: ' + generated_side);
Id Server Seed Public Seed Block id Roll Created At
7 2b634713ef4979dea21f6179d4f121d93623984daff35281e454a4bedf86b9cd 1c6763d350c712885678f2b3b88ccd1770443a9287beaaf503856a5ebc1a42d2 476537811 0.62424328 04 January 2026, 05:02 PM
6 f1d212d95d9b5f03d0f81cc5a5cc46ba49e16bee1bd29ed0a75086727b7c1244 1c64bd975d46528cde5bf021d15fd6684cca6e1e4aac4773486c9c83e092bdf2 476364183 0.15058588 03 January 2026, 04:54 PM
5 94a9bdc6f7091f999bfe77420a68bc046c18331bd4357a6c28258d442ae0b2e1 1c64bd53a3f4f0b656f52c5fb99da2abcb03380af3a25b7383b5bfdfbf0a7aaa 476364115 0.80844256 03 January 2026, 04:45 PM
4 cbf987a76d417d49555231eb429ee4118ed03b0bdb4284e226e37f059bbb87e9 1c5d138668c56c53189d562b86245686d228dac27a6da0878be10d6daf117d88 475861894 0.02549953 31 December 2025, 07:07 PM
3 78f650f2a518f70b90b66b7e1c6e87d152f2effedfc61f84461dada6734521ba 1c29fd20182975c1c107f0589c62e8a14aafeedad8f55e9f557237bba0f83e32 472513824 0.24822477 12 December 2025, 09:48 AM
2 81cee0b182206759986d9cc3ce86335f9318fac4dda9dfb881c6b9eb805411de 1c2897ed19e04778482aa4b0505dbb02c4fd6b51f4975db5c54cc7270d1d637d 472422381 0.54208989 11 December 2025, 09:06 PM
1 9c3b1c3e1b408f5f5408c031f95661c4a2daac3beebdd65b50328f6bd488987e 1c288034c1508f13673f37d4544d82c624c4e229758d712b3fbf071435f7000a 472416308 0.41699664 11 December 2025, 08:15 PM

Plinko Game

In the Provably Fair tab, you can change the client seed and regenerate the server seed.
Server seed is SHA-256 hash generated from random 32 bytes. You can regenerate it at any time. You cannot see the original server seed, yet later you can verify that it was unmodified.
Client seed is generated once for the user. Changing it ensures fairness in the outcome.
The nonce is based on numbers that naturally increment by 1 after each roll.
A Plinko game is generated with 14 separate salts. Each salt is created using the stage index from the board and the main salt (derived from the server seed, client seed, and nonce). For each output, a modulus of 2 is applied, resulting in a value of 0 or 1, which represents the ball’s next move (left = 0 or right = 1).
Each roll can be verified using the published unhashed server seeds once they are revealed, ensuring the integrity of the game outcome.
var crypto = require('crypto');
var roll_server_seed = '2c3eea4603280f3cadfb0046b248e7b756930b0b6886997ac73f96d478c823f3';
var roll_client_seed = '0b3eeb63c10796f00e3faff36207b369';
var roll_nonce = 59;
function fair_getCombinedSeed(server_seed, public_seed, nonce) {
return [server_seed, public_seed, nonce].join('-');
}
function fair_generateSaltHash(seed) {
return crypto.createHmac('sha256', seed).digest('hex');
}
function fair_getRoll(salt, max) {
return Math.abs(parseInt(salt.substr(0, 12), 16)) % max;
}
function fair_getRollPlinko(salt) {
var array = [];
//Get plinko roll by stage
for(var i = 0; i < 14; i++){
var salt_possition = fair_generateSaltHash(salt + '-' + i);
var roll = fair_getRoll(salt_possition, 2);
array.push(roll);
}
return array;
}
var generated_seed = fair_getCombinedSeed(roll_server_seed, roll_client_seed, roll_nonce);
var generated_salt = fair_generateSaltHash(generated_seed);
var generated_array = fair_getRollPlinko(generated_salt);
var generated_roll = generated_array.join('');
console.log('Roll: ' + generated_roll);
Id Server Seed Client Seed Nonce Roll

Dice Game

In the Provably Fair tab, you can change the client seed and regenerate the server seed.
Server seed is SHA-256 hash generated from random 32 bytes. You can regenerate server seed at any time. You cannot see the original server seed, yet you will be able to check that it was unmodified later.
Client seed is generated once for the user in the same way as the server seed. Since the client seed affects every roll result, changing it at any time ensures that it’s impossible for us to manipulate the result.
The nonce is based on numbers that we can't manipulate (it naturally increments by 1 after each roll).
SHA-256 returns the hash value for the salt hash combination in a hex-encoded form. We then take the first 8 characters from this hash and convert it to a number. A modulus of 10000 is applied and division by 100 produces a decimal number in the range 0–99.99.
var crypto = require('crypto');
var roll_server_seed = '2c3eea4603280f3cadfb0046b248e7b756930b0b6886997ac73f96d478c823f3';
var roll_client_seed = '0b3eeb63c10796f00e3faff36207b369';
var roll_nonce = 0;
function fair_getCombinedSeed(server_seed, public_seed, nonce) {
return [server_seed, public_seed, nonce].join('-');
}
function fair_generateSaltHash(seed) {
return crypto.createHmac('sha256', seed).digest('hex');
}
function fair_getRoll(salt, max) {
return Math.abs(parseInt(salt.substr(0, 12), 16)) % max;
}
var generated_seed = fair_getCombinedSeed(roll_server_seed, roll_client_seed, roll_nonce);
var generated_salt = fair_generateSaltHash(generated_seed);
var generated_roll = (fair_getRoll(generated_salt, 10000) / 100) % 100;
console.log('Roll: ' + generated_roll);
Id Server Seed Client Seed Nonce Roll

Mines Game

In the Provably Fair tab, you can change the client seed and regenerate the server seed.
Server seed is SHA-256 hash generated from random 32 bytes. You can regenerate server seed at any time. You cannot see the original server seed, yet you will be able to check that it was unmodified later.
Client seed is generated once for the user, similar to the server seed. Changing it ensures that outcomes cannot be manipulated.
The nonce is based on numbers that naturally increment by 1 after each roll.
SHA-256 returns the hash for the salt hash combination in hex. We then take the first 8 characters, convert it to a number. A mines game is generated with 24 separate salts; each salt is generated based on the tile index and the main salt. A Fisher–Yates shuffle is applied to determine mine positions.
var crypto = require('crypto');
var roll_server_seed = 'SERVER_SEED_HERE';
var roll_client_seed = 'CLIENT_SEED_HERE';
var roll_nonce = 3;
function fair_getCombinedSeed(server_seed, public_seed, nonce) {
return [server_seed, public_seed, nonce].join('-');
}
function fair_generateSaltHash(seed) {
return crypto.createHmac('sha256', seed).digest('hex');
}
function fair_getRoll(salt, max) {
return Math.abs(parseInt(salt.substr(0, 12), 16)) % max;
}
function fair_getShuffle(salt, max) {
//Set shuffle inexes
var array = [];
for(var i = 0; i < max; i++) array.push(i);
//Fisher-yates shuffle implementation
var k = 0;
for(var i = array.length - 1; i > 0; i--, k++) {
var salt_possition = fair_generateSaltHash(salt + '-' + k);
var roll = fair_getRoll(salt_possition, Math.pow(10, 8)) / Math.pow(10, 8);
var j = Math.floor(roll * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
var generated_seed = fair_getCombinedSeed(roll_server_seed, roll_client_seed, roll_nonce);
var generated_salt = fair_generateSaltHash(generated_seed);
var generated_array = fair_getShuffle(generated_salt, 25);
var generated_roll = '';
generated_array.forEach(function(item){
if(item < 10) generated_roll += '0' + item;
else generated_roll += item;
});
console.log('Roll: ' + generated_roll);
Id Server Seed Client Seed Nonce Roll