Loading
×
{{ $t('gamemodes.roulette.bonusJackpot') }}
{{ $t('gamemodes.roulette.howDoesItWork') }}
{{ $t('gamemodes.roulette.bonusPotAmount') }}
{{ $t('gamemodes.roulette.roundId') }} #{{ roulette.roundId }}
{{ $t('gamemodes.roulette.previousRolls') }}
{{ $tc('gamemodes.roulette.usersHitBonus', roulette.gray.bets.length + roulette.green.bets.length + roulette.blue.bets.length) }}
{{ $t('gamemodes.roulette.potValuedAt', { amount: website.balanceFormat(roulette.bonusPotAmount) }) }}
1
14
2
13
3
12
4
0
11
5
10
6
9
7
8
{{ $t('pages.fairness.terms.publicSeed') }}
{{ roulette.fairness.publicSeed }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'gray' ? '+' : roulette.colorWon && roulette.colorWon !== 'gray' ? '-' : '' }} {{ website.balanceFormat(roulette.gray.myBet) }}
{{ $t('gamemodes.roulette.highestGray') }}
{{ roulette.gray.highestBet.lvl }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'gray' ? '+' : roulette.colorWon && roulette.colorWon !== 'gray' ? '-' : '' }} {{ website.balanceFormat(roulette.gray.highestBet.amount) }}
{{ $tc('gamemodes.roulette.bets', roulette.gray.bets.length) }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'gray' ? '+' : roulette.colorWon && roulette.colorWon !== 'gray' ? '-' : '' }} {{ rouletteGet_TotalAmount('gray') }}
{{ bet.lvl }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'gray' ? '+' : roulette.colorWon && roulette.colorWon !== 'gray' ? '-' : '' }} {{ website.balanceFormat(bet.amount) }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'green' ? '+' : roulette.colorWon && roulette.colorWon !== 'green' ? '-' : '' }} {{ website.balanceFormat(roulette.green.myBet) }}
{{ $t('gamemodes.roulette.highestGreen') }}
{{ roulette.green.highestBet.lvl }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'green' ? '+' : roulette.colorWon && roulette.colorWon !== 'green' ? '-' : '' }} {{ website.balanceFormat(roulette.green.highestBet.amount) }}
{{ $tc('gamemodes.roulette.bets', roulette.green.bets.length) }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'green' ? '+' : roulette.colorWon && roulette.colorWon !== 'green' ? '-' : '' }} {{ rouletteGet_TotalAmount('green') }}
{{ bet.lvl }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'green' ? '+' : roulette.colorWon && roulette.colorWon !== 'green' ? '-' : '' }} {{ website.balanceFormat(bet.amount) }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'blue' ? '+' : roulette.colorWon && roulette.colorWon !== 'blue' ? '-' : '' }} {{ website.balanceFormat(roulette.blue.myBet) }}
{{ $t('gamemodes.roulette.highestBlue') }}
{{ roulette.blue.highestBet.lvl }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'blue' ? '+' : roulette.colorWon && roulette.colorWon !== 'blue' ? '-' : '' }} {{ website.balanceFormat(roulette.blue.highestBet.amount) }}
{{ $tc('gamemodes.roulette.bets', roulette.blue.bets.length) }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'blue' ? '+' : roulette.colorWon && roulette.colorWon !== 'blue' ? '-' : '' }} {{ rouletteGet_TotalAmount('blue') }}
{{ bet.lvl }}
{{ roulette.colorWon && roulette.colorWon === 'bonus' ? '' : roulette.colorWon && roulette.colorWon === 'blue' ? '+' : roulette.colorWon && roulette.colorWon !== 'blue' ? '-' : '' }} {{ website.balanceFormat(bet.amount) }}
{{ replacePromo(card.username, 'chat') }}
+{{ website.balanceFormat(card.raffle_price) }}
{{ $tc('gamemodes.raffles.pendingWinnings', raffles.pendingWinnings.length) }}
{{ $t('gamemodes.raffles.noPendingWinnings') }}

{{ $tc('gamemodes.raffles.activeRaffles', raffles.currentRaffles.length) }}
{{ website.balanceFormat(raf.itemPrice) }}
{{ raf.name }}
{{ raf.wear }}
{{ (raf.winnerUser && raf.showWinner) ? $t('gamemodes.raffles.closed') : (raf.winnerUser && !raf.showWinner) ? $t('gamemodes.raffles.rolling') : $t('gamemodes.raffles.waiting') }} {{ raf.sslots.length + '/' + raf.slots }}
{{ replacePromo(card.username, 'chat') }}
{{ card.amount > 0 ? '+' + website.balanceFormat(card.amount) : website.balanceFormat(card.amount) }}
{{ getCardNumber(card, 'letter') }}
{{ $t('gamemodes.blackjack.blackjackPays.1') }}
{{ $t('gamemodes.blackjack.blackjackPays.2') }}
{{ $t('gamemodes.blackjack.dealerGot') }}
{{ blackjack.dealer.totalFormatted }}
{{ $t('gamemodes.blackjack.selectAction') }}
{{ $t('gamemodes.blackjack.waitingForDealer') }}...
{{ $t('pages.fairness.terms.publicSeed') }}
{{ blackjack.fairness.publicSeed }}
{{ $t('pages.fairness.terms.secretHash') }}
{{ blackjack.fairness.secretHash }}
{{ blackjack.gameResult }}
{{ blackjack.player.totalFormatted }}
{{ $t('gamemodes.blackjack.youGot') }}
{{ getCardNumber(card, 'letter') }}
{{ $t('gamemodes.blackjack.selectBetAmount') }}
{{ $t('gamemodes.blackjack.orTypeHere') }}
{{ $t('pages.fairness.terms.publicSeed') }}
{{ blackjack.fairness.publicSeed }}
{{ $t('pages.fairness.terms.secretHash') }}
{{ blackjack.fairness.secretHash }}
{{ $t('others.atStake') }}
{{ $t('pages.deposit.tabs.eth.description') }}
{{ $t('pages.deposit.qrCode.title') }}
{{ $t('pages.deposit.qrCode.description') }}
{{ $t('others.note') }}:
{{ $t('pages.deposit.tabs.btc.description') }}
{{ $t('pages.deposit.qrCode.title') }}
{{ $t('pages.deposit.qrCode.description') }}
{{ $t('others.note') }}:
{{ $t('pages.withdraw.withdrawWith', { method: 'ETH' }) }}
{{ $t('pages.withdraw.tabs.eth.description') }}
{{ $t('pages.withdraw.tabs.eth.steps.1') }} *
$
=
{{ $t('pages.withdraw.tabs.eth.steps.1') }}
{{ $t('others.note') }}:

Provably fair
Roulette
Raffles
Blackjack
Roulette provably fair

To prove that roulette rolls are fair, we use 3 different, predetermined inputs to calculate each roulette round's outcome.

With the following, we can prove that roulette rolls have been determined ahead of time and are not tampered with (i.e. rigged) upon round start

To get the result for a round, you'll need three things:

  1. The "public seed" — This is a string of random letters and numbers
  2. The "secret" (alternatively: "private seed" or "server seed") — This is a string of random letters and numbers. It is generated at the same time as the public seed
  3. The round's ID

The difference between the public seed and the secret lies in when it's made public:

Private/Public seed

The public seed is made available as soon as it's generated. It is public right from the beginning.

The secret is kept, well, secret until it's not being used anymore.

However, to prove that it doesn't change during the time we're using it to generate roll results, it's SHA512 hash is published as soon the secret is being used.

Checking roll results

Using the example implementation below, you can generate the roll results yourself:

// Node.js 12+
const provablyFair = require("@bountygg/provably-fair");

// transforms a hex-encoded hash to the result of a roll
function getRollResultFromHash(hash) {
	const spinNumber = parseInt(hash.substr(0, 8), 16);
	return Math.abs(spinNumber) % 15;
}

// tying it together:
const roundId = 12345; // change this to the round id you want to get the result for
const rouletteSecret = "aVeryLongString"; // change this to the secret used for that round
const roulettePublicSeed = "anotherVeryLongString"; // change this to the public seed used for that round

const hash = provablyFair.getHash(
	`${rouletteSecret}-${roulettePublicSeed}-${currentRoundId}`
);

const result = getRollResultFromHash(hash);
Secret * Public Seed Round IDs
{{ roulette.fairness.seedHistory[roulette.fairness.seedHistory.indexOf(data) + 1] ? roulette.fairness.seedHistory[roulette.fairness.seedHistory.indexOf(data) + 1] .max_id + 1 : "..." }} - {{ data.max_id }}
* Hashed secret Unhashed secret
Raffles provably fair
Checking raffles results

Using the example implementation below, you can generate raffles round results yourself:

// Node.js 12+
const provablyFair = require("@bountygg/provably-fair");
const ChanceJs = require("chance");

// this is secret until the round starts (it's SHA512 gets displayed instead!)
const secret = "aVeryLongStringOfRandomLettersAndNumbers";
// how many slots are there?
const slotCount = 5;

// this gets called as soon as the round starts
// use the serial number in the random.org response to
// verify this part isn't being cherry-picked
const {
    response: randomOrgResponse,
    value: randomOrgSalt
} = await provablyFair.getThirdPartySalt();

const fullSeed = `${secret}-${randomOrgSalt}`;

const winningSlot = ChanceJs(fullSeed).integer({
    min: 0,
    max: slotCount - 1 // slots start at index 0
});
// slots in frontend are shown with +1 number more. In frontend, blue (slot 0 in backend), is shown as 1. Have that in mind when verifying rounds
Enter Raffle ID
Blackjack provably fair
Checking blackjack results

Using the example implementation below, you can generate blackjack round results yourself:

// Node.js 12+
const provablyFair = require("@bountygg/provably-fair");
const ChanceJs = require("chance");

// this is your client seed, that you can change whenever you want
const clientSeed = "aVeryLongStringOfRandomLettersAndNumbers";

// this two inputs are getting generated from our side
const publicSeed = provablyFair.getRandomBytes(24, "hex");
const secret = provablyFair.getRandomBytes(24, "hex");

const fullSeed = `${publicSeed}-${secret}-${clientSeed}:${nonce}`;

const randomCardNumber = new Chance(fullSeed).integer({
	min: 1,
	max: 52
});
Client Seed
Enter BlackJack ID
BlackJack Card Indexes
const cards = {
    0: "TwoOfDiamonds", 1: "TwoOfHearts", 2: "TwoOfSpades", 3: "TwoOfClubs", 
    4: "ThreeOfDiamonds", 5: "ThreeOfHearts", 6: "ThreeOfSpades", 7: "ThreeOfClubs", 
    8: "FourOfDiamonds", 9: "FourOfHearts", 10: "FourOfSpades", 11: "FourOfClubs", 
    12: "FiveOfDiamonds", 13: "FiveOfHearts", 14: "FiveOfSpades", 15: "FiveOfClubs", 
    16: "SixOfDiamonds", 17: "SixOfHearts", 18: "SixOfSpades", 19: "SixOfClubs", 
    20: "SevenOfDiamonds", 21: "SevenOfHearts", 22: "SevenOfSpades", 23: "SevenOfClubs", 
    24: "EightOfDiamonds", 25: "EightOfHearts", 26: "EightOfSpades", 27: "EightOfClubs", 
    28: "NineOfDiamonds", 29: "NineOfHearts", 30: "NineOfSpades", 31: "NineOfClubs", 
    32: "TenOfDiamonds", 33: "TenOfHearts", 34: "TenOfSpades", 35: "TenOfClubs", 
    36: "JackOfDiamonds", 37: "JackOfHearts", 38: "JackOfSpades", 39: "JackOfClubs", 
    40: "QueenOfDiamonds", 41: "QueenOfHearts", 42: "QueenOfSpades", 43: "QueenOfClubs", 
    44: "KingOfDiamonds", 45: "KingOfHearts", 46: "KingOfSpades", 47: "KingOfClubs", 
    48: "AceOfDiamonds", 49: "AceOfHearts", 50: "AceOfSpades", 51: "AceOfClubs"
}