0 Online
Provably Fair
Select a game from the list below to learn about how we ensure that the results are always random and never tampered with.
selfie-games.online uses provably fair method, that doesn't allow us to manipulate the outcome once the game is started, below you can see how the outputs are caluclated.
You can execute the code straight from your browser with tools such as this NodeJS tester. Simply replace all parameters with the ones in the round you want to check.
Info
This is a passphrase or a randomly generated string that is determined by the player or their browser. This can be edited and changed regularly by yourself.
Client Seed
This field is required
To reveal the hashed server seed, the seed must be rotated by the player, which triggers the replacement with a newly generated seed. From this point you are able to verify any bets made with the previous server seed to verify both the legitimacy of the server seed with the encrypted hash that was provided.
You can validate hashed server seed using this script. The hashed server seed is a SHA-256 hash of the seed so after you unhash it, you can check that it matches with the hashed version.
Server Seed Hashed
This field is required
You can validate hashed server seed using this script. The hashed server seed is a SHA-256 hash of the seed so after you unhash it, you can check that it matches with the hashed version.
var sha256 = require('sha256');
var seed = 'f0c82c85ba6ef5cbba7406db81ee5451a1a795120e335116dc637d34a105e6e6';
function fair_getHash256(seed){
return sha256(seed);
}
console.log('Hashed: ' + fair_getHash256(seed));
Id
Server Seed
Useds
Created At
No data found
Roulette 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 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, 15);
console.log('Roll: ' + generated_roll);
Date
Server Seed
Public Seed
Games
17 September 2024, 01:24 AM
(hashed) 32863dc86417dc5313c396d4240f770077d23296d33d50859df072c27987d6b5
8bf2f58ad48eeea0b47006719bf17d19758b066121a7c3f09bcaef12416060dc
1818457 - 1819528
16 September 2024, 01:23 AM
8d56ad0e822314a381edd22806b390f5596b3e5090f3d38c7bdafa2bfaf63e1b
301d277f95ed61d1d71ab1607b44c1ad77c5da9511f54047f01955198069bc84
1815676 - 1818456
15 September 2024, 01:23 AM
4bdb59e94c1234d09021f470dc07c3bcb332b684add3824ada46217e58300203
67a5b01dbfe8a0f34d0e00404411c8dc3c8217302fd8db81a75b2a45419225dc
1812896 - 1815675
14 September 2024, 01:23 AM
a5c47b60abfd3c7d35aab67cad2f1b1fdc6b71c346cb72a103a5e9650c4175e9
b5289cf801d879a4af3091eb7c9115472f66b3529e1f400e82d324f936c9e5ff
1810116 - 1812895
13 September 2024, 01:23 AM
21780e77f3316aaea30d41b64382efb4a108008186670f58b256759de08ad3a8
9b2fbfd82763df88f0b5dcac972e78d34068a227cce8527dd735c63487988c35
1807336 - 1810115
12 September 2024, 01:22 AM
c3f2441f209e531cfa293889b0c08d6c8304df55b34967a2f6e334ebd892b0bd
29ac5bd166ef2326cbfb49311a07a6c4493a016619d503b75c4e14cf4e8b7dc8
1804555 - 1807335
11 September 2024, 01:22 AM
c1d2ab49a517027d4acea4b0457cbbd992dcc71d6fc61a833999c34d52cff957
4bc012d88cea31ba0f5fb6c5d59e5e3db39cd4a28740f3a9dbe3d61c5ddb5a13
1801775 - 1804554
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 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 = '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 5.00 will result in modifier of 0.95 = 5.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) / 100).toFixed(2);
console.log('Roll: ' + generated_roll);
Date
Server Seed
Public Seed
Games
17 September 2024, 01:36 AM
(hashed) 1289ab349a803e0fb6f1cb6743389081f0a25b9aae2ad6d669fbbbe198d036c1
ae0d8a601aaa1794e0f5c9150d546773a0b89d85e865f696e89525b07a6c02d2
2113624 - 2114858
16 September 2024, 01:36 AM
2ea8009e5cbd7c0430bb4d6dbf0dbc724c855c16ec5a1da655de9c471adaaad9
c791b33516e86fc486dc2b31d4813f67eefba9a951bf69242185a815c915502b
2110367 - 2113623
15 September 2024, 01:36 AM
45143d0158f5260ea8c4f04f065f1f8cde664566bef50d3325c291c18695edaa
13779a65b6ec57e2053e5dbff4897671646fb872c148c8fe1bf1a5d356fe1dc5
2107087 - 2110366
14 September 2024, 01:36 AM
f07cf46966c459d0e79738503386c98c6ef6c011ce5ec1e6c83b0d29246fe3d4
504e830dced58da90e8afe126204ab4be6fefd2736f44818229fcdb3a8284885
2103820 - 2107086
13 September 2024, 01:35 AM
8219ab7e3357b0fd79812c743947c14a5ad66f2e66d18ed938b9b33a31a595de
3068decbaa6b555bac4b8bc46c081df7509208ea4590d2c61fc4a5339e3c6d0c
2100564 - 2103819
12 September 2024, 01:35 AM
42c21c3fd31ce934e4973eaace90455deec680e831eda99180632130c7516456
32ef5a38f3b74e86d5386e11888dfa77a0910cb0b27259dfa187d57a9a9c9411
2097307 - 2100563
11 September 2024, 01:34 AM
aea49d7f7d17e0fc01116b34a42fca3328c8b492f374c1f20c7c95d6e11731f9
ff4b61c0c3e5d0e0943861a3303b3e71d9451b073d69d26ea6d4cf2bd020673e
2094077 - 2097306
Minesweeper 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 in any time. You cannot see the original server seed, yet you will be able to check that it was unmodified later after regenerating the server seed.
Client seed is generated first time for user, same way like server seed. As the client seed affects every roll result, changing it to any seed of your choice at any time means you can ensure that it's impossible for us to manipulate the result.
However, the SHA-256 function we use to generate the roll is deterministic, if the client seed is combined with the same server seed, it will generate exactly the same roll result every time. This could be used to abuse the system, so we use something called a 'nonce' which prevents this from being abusable. Each roll done using the same server seed & client seed pair will also be paired with a different nonce, which is simply a number starting at 0 and incremented by 1 for each roll done.
The nonce is based on numbers that we can't manipulate (they naturally increment 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 this hex string to a number.
A mine game is generated with 24 separate salts. Each salt is generated by using the index of tile from board and the main salt who is generated using the server seed, client seed and the nonce. Each output is multiplied by the number of possible unique tiles still remaining on the board. This is done by subtracting the number of tiles remaining by 1 for each iteration game result generated using the corresponding output provided. The location of the mine is plotted using a grid position from left to right, top to bottom.
The fisher-yates shuffle implementation is utilised to prevent duplicate possible hits being generated. Between 1 and 24 game results are used, based on the settings chosen.
Each roll can be verified using this formula as soon as you have revealed your server seed for the previous rolls. The published unhashed server seeds can be checked by simply applying the SHA-256 function to it, this will produce the previously published hashed version of the server seed, which was made visible to you before any roll using it was ever made. Each user can check the integrity of every roll made using this information.
var crypto = require('crypto');
var roll_server_seed = '2c3eea4603280f3cadfb0046b248e7b756930b0b6886997ac73f96d478c823f3';
var roll_client_seed = '0b3eeb63c10796f00e3faff36207b369';
var roll_nonce = 43;
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
No data found
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 server seed in any time. You cannot see the original server seed, yet you will be able to check that it was unmodified later after regenerating the server seed.
Client seed is generated first time for user, same way like server seed. As the client seed affects every roll result, changing it to any seed of your choice at any time means you can ensure that it's impossible for us to manipulate the result.
However, the SHA-256 function we use to generate the roll is deterministic, if the client seed is combined with the same server seed, it will generate exactly the same roll result every time. This could be used to abuse the system, so we use something called a 'nonce' which prevents this from being abusable. Each roll done using the same server seed & client seed pair will also be paired with a different nonce, which is simply a number starting at 0 and incremented by 1 for each roll done.
The nonce is based on numbers that we can't manipulate (they naturally increment 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 this hex string to a number.
A tower game is generated with 10 separate salts. Each salt is generated by using the index of stage from board and the main salt who is generated using the server seed, client seed and the nonce. We apply for each output a modulus of 3 to this number, giving us a number in the range of 0-2, which represent the index of tile for a wrong move. The location of the tile is plotted using a grid position from bottom to top, left to right.
Each roll can be verified using this formula as soon as you have revealed your server seed for the previous rolls. The published unhashed server seeds can be checked by simply applying the SHA-256 function to it, this will produce the previously published hashed version of the server seed, which was made visible to you before any roll using it was ever made. Each user can check the integrity of every roll made using this information.
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
Roll
No data found
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 server seed in any time. You cannot see the original server seed, yet you will be able to check that it was unmodified later after regenerating the server seed.
Client seed is generated first time for user, same way like server seed. As the client seed affects every roll result, changing it to any seed of your choice at any time means you can ensure that it's impossible for us to manipulate the result.
However, the SHA-256 function we use to generate the roll is deterministic, if the client seed is combined with the same server seed, it will generate exactly the same roll result every time. This could be used to abuse the system, so we use something called a 'nonce' which prevents this from being abusable. Each roll done using the same server seed & client seed pair will also be paired with a different nonce, which is simply a number starting at 0 and incremented by 1 for each roll done.
The nonce is based on numbers that we can't manipulate (they naturally increment 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 this hex string to a number.
A plinko game is generated with 14 separate salts. Each salt is generated by using the index of stage from board and the main salt who is generated using the server seed, client seed and the nonce. We apply for each output a modulus of 2 to this number, giving us a number in the range of 0-1, which represent the next move of ball (left = 0 or right = 1).
Each roll can be verified using this formula as soon as you have revealed your server seed for the previous rolls. The published unhashed server seeds can be checked by simply applying the SHA-256 function to it, this will produce the previously published hashed version of the server seed, which was made visible to you before any roll using it was ever made. Each user can check the integrity of every roll made using this information.
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
No data found