All our games are built on a provably fair foundation, ensuring complete transparency and verifiability of every game outcome. This system allows players to independently verify that game results are fair and have not been manipulated.
Every game starts with a pre-generated game hash that is displayed before the game begins. This hash serves as proof that the outcome was predetermined and cannot be changed after you see it. The hash is based on a randomly generated seed.
Once a game starts, we select a non-mined EOS blockchain block. The block number is made public immediately, ensuring full transparency before it is mined. When the block is mined, we retrieve its transaction hash (transaction ID).
The transaction ID is combined with the pre-generated game hash and any additional game-specific data. This combined string is then hashed using SHA-512. From the resulting hash, we extract the first 16 characters and convert them into an integer, which determines the game outcome.
For single-player games, we also provide the seed on the end of the game which is what the game hash was generated from. This allows players to verify the game hash itself.
Test our provably fair algorithms with real examples. Each tab below contains the algorithm explanation, code implementation, and an interactive form where you can input your own values to see how the outcomes are calculated.
You can verify any game result by:
All algorithms use standard cryptographic functions (SHA-512) and are deterministic, meaning the same inputs will always produce the same outputs.
Our provably fair system ensures:
This system guarantees that neither the house nor players can manipulate game outcomes, creating a truly fair gaming environment.
A Solana-based casino with 100% fair and transparent gameplay, secured by provably fair EOS blockchain calculations. Earn daily Scratch Cards for a chance to win Solana. By creating an account, you agree to our Terms and Conditions.
Solpengu.com is owned and operated by HTDS Ltd. registration number: 000049872, registered address: Quijano & Associates (Belize) Limited of 56 Daly Street, Belize City, Belize District, Belize. Solpengu.com is licensed and regulated by the Government of the Autonomous Island of Anjouan and operates under License No. ALSI-202508041-F12.
// All of these parameters is required. AMOUNT_X is amount of total wager of each side. Since percentage is based on total wager on each side.
// These variables can be found either in your game history or from the end result provided on the end of the game.
// You can also grab fresh sample data from the Provable Fair page.
const GAME_HASH = "";
const TRANSACTION_ID = "";
const GAME_ID = "";
const AMOUNT_SOLPENGU = 0.1;
const AMOUNT_SNOWFOX = 0.1;
async function getCoinFlipSide(gameHash, transactionId, gameId, amountSolpengu, amountSnowfox) {
const combinedInput = `${gameHash}${transactionId}${gameId}`;
const finalHash = await hash(combinedInput);
const hashString = typeof finalHash === 'string' ? finalHash : Array.from(finalHash, byte => byte.toString(16).padStart(2, '0')).join('');
const hashSubstring = hashString.substring(0, Math.min(16, hashString.length));
console.log("Hash pre-computed: %s", hashSubstring);
const hashValue = BigInt("0x" + hashSubstring);
const mod = BigInt(10000000);
console.log("Hashed value: %s, bet on solpengu: %s SOL, bet on snowfox: %s SOL.", hashValue, amountSolpengu, amountSnowfox);
const ticketsSolpengu = BigInt(Math.round(amountSolpengu * Number(mod)));
const ticketsSnowfox = BigInt(Math.round(amountSnowfox * Number(mod)));
const totalBetAmount = ticketsSolpengu + ticketsSnowfox;
if (totalBetAmount <= 0n) {
return 'UNKNOWN';
}
const randomValue = hashValue % totalBetAmount;
const wonSide = randomValue < ticketsSolpengu ? "SOLPENGU" : "SNOWFOX";
console.log("Ticket: #%s, won side: %s", randomValue, wonSide);
return wonSide;
}
async function hash(input) {
const encoder = new TextEncoder();
const data = encoder.encode(input);
const hashBuffer = await crypto.subtle.digest('SHA-512', data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
}
getCoinFlipSide(GAME_HASH, TRANSACTION_ID, GAME_ID, AMOUNT_SOLPENGU, AMOUNT_SNOWFOX);// All of these parameters is required. AMOUNT_X is amount of total wager of each side. Since percentage is based on total wager on each side.
// These variables can be found either in your game history or from the end result provided on the end of the game.
// You can also grab fresh sample data from the Provable Fair page.
const GAME_HASH = "";
const TRANSACTION_ID = "";
const GAME_ID = "";
const AMOUNT_SOLPENGU = 0.1;
const AMOUNT_SNOWFOX = 0.1;
async function getCoinFlipSide(gameHash, transactionId, gameId, amountSolpengu, amountSnowfox) {
const combinedInput = `${gameHash}${transactionId}${gameId}`;
const finalHash = await hash(combinedInput);
const hashString = typeof finalHash === 'string' ? finalHash : Array.from(finalHash, byte => byte.toString(16).padStart(2, '0')).join('');
const hashSubstring = hashString.substring(0, Math.min(16, hashString.length));
console.log("Hash pre-computed: %s", hashSubstring);
const hashValue = BigInt("0x" + hashSubstring);
const mod = BigInt(10000000);
console.log("Hashed value: %s, bet on solpengu: %s SOL, bet on snowfox: %s SOL.", hashValue, amountSolpengu, amountSnowfox);
const ticketsSolpengu = BigInt(Math.round(amountSolpengu * Number(mod)));
const ticketsSnowfox = BigInt(Math.round(amountSnowfox * Number(mod)));
const totalBetAmount = ticketsSolpengu + ticketsSnowfox;
if (totalBetAmount <= 0n) {
return 'UNKNOWN';
}
const randomValue = hashValue % totalBetAmount;
const wonSide = randomValue < ticketsSolpengu ? "SOLPENGU" : "SNOWFOX";
console.log("Ticket: #%s, won side: %s", randomValue, wonSide);
return wonSide;
}
async function hash(input) {
const encoder = new TextEncoder();
const data = encoder.encode(input);
const hashBuffer = await crypto.subtle.digest('SHA-512', data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
}
getCoinFlipSide(GAME_HASH, TRANSACTION_ID, GAME_ID, AMOUNT_SOLPENGU, AMOUNT_SNOWFOX);