To establish transparency, Bitcarra is using the provably fair concept to eliminate external intervention in the results of all the games that we are providing on the platform. Since the blockchain is immutable, players will also be able to verify all the historical game multipliers through a public algorithm.
The current date and time as of this posting are
28/08/2021 10:00 (GMT +8), and the current Bitcoin block is
697905. For the salt, we will commit to using the lowercase, the hexadecimal string representation of the hash from block
697929, which will only be mined approximately 4 hours away (i.e. mining rate of 10 min/block) in the future. Since the future blocks have not been mined, we would not have been able to deliberately select a block with a hash that could be favorable to us. The 17 initial salts will be based on the subsequent blocks, each sampled three blocks apart. For example, the first block in consideration is 697929, the subsequent block for the following game will be 697932, and so on.
For every game, we have pre-generated a chain of 5,000,000 SHA-256 hashes. Each element is the hash of the lowercase, hexadecimal string representation of the previous hash. Their respective terminating hashes are presented below:
No | Bitcarra Games | Terminating Hash |
1 | Dual Crash Game D1 | 21732a6b15e3927a10403e234b60ebe90305cd42869b67fe42787c13e4166a59 |
2 | Dual Crash Game D2 | 7d70a68836a897db950d3c9a09598b22999661d028b6757495a96713b565472f |
3 | Dual Crash Game D3 | 4cada73e2bd7851c4fa68702e57984b0af306cbc904e319f2502caaa78193f3b |
4 | Dual Crash Game D4 | e15139141a2f3fb6090d68cfd92fc88459b6c3efd5f7db838f5588f8ab299604 |
5 | Dual Crash Game D5 | e40379973d02b968d11c2657ba70694c22e084f15f34d06883215f04a5b29afb |
6 | Dual Crash Game D6 | 62f47c8170b34037d1c5ffe5423a523c75338162033d1d44de2316b2c3fa729c |
7 | Dual Crash Game D7 | 591511fac4dcb0ababe7bae25bf60fb3505a4774ae8760edfce06d8020d6dc4d |
8 | Dual Crash Game D8 | 0704f8635d94ea2154159498c012640685e02be9ddd2101ea42fd6d7bc99c17e |
9 | Dual Crash Game D9 | 53f11ae4ac147f2e486626548bc65e124bc267a0fb3a6c0e9e21c325314146b8/td] |
10 | Dual Crash Game D10 | 953a848d472a72a992b2a5cb2acd1df051953aaef85bfdf291a0978c16caa679 |
11 | Dual Crash Game D11 | 2327b17f74a435176478acf9116ce32af9aca11c6b5be870fd090d4dce1e98be |
12 | Dual Crash Game D12 | 1667e180280d95abc3f57f574bb1942571da60f78912d9fe61785bba5a886f48 |
13 | Single Crash Game S1 | 4cda5e6d1237af68cca28f38f4ab744dd1d6439b2e3d16a7c5b03ff676592092 |
14 | Single Crash Game S2 | cdd2e03da8fe4fda82d1e95dfb1f88d606aa7f42b5332cc7eeb18f17af116ff0 |
15 | Single Crash Game S3 | 636b9b7bbbfe000820db4c497bd8ff8a18f9e5e62dfd68c6958bc0a1a13ad826 |
16 | Single Crash Game S4 | ffc97f599db4b04f29d1ed588969aceb771d30bf5c7ed04fdfd85e253adf23b5 |
17 | Classic Crash Game C1 | 614546bdbe297a0c838559efd65dec9a2b6af73cb99a5ba5cd58067a07ab1de0 |
To get the results of the games, these are our implementations of how we use the hashes.
Implementation of the Single Crash Game is as follows:
export function getMultiplier(seed, salt, offset = 2.5) {
const nBits = 52;
const hmac = HmacSHA256(seed, salt);
seed = hmac.toString(enchex);
seed = seed.slice(0, nBits / 4);
const r = parseInt(seed, 16);
let X = r / Math.pow(2, nBits);
X = (100 - offset) / (1 - X);
const result = Math.floor(X);
return Math.max(1, result / 100);
};
Implementation of the Dual Crash Game is as follows:
export function getDual(seed, salt) {
const nBits = 40; // number of most bits to use per number
const nChars = nBits / 4; // number of hex characters per number
const hmac = CryptoJS.HmacSHA256(seed, salt);
seed = hmac.toString(CryptoJS.enc.Hex);
// Extract 6 slices from the hash
const hexNumbers = [];
for (let i = 0; i < 6; i++) {
const number = seed.slice(i * nChars, nChars * (i + 1));
hexNumbers.push(number);
}
// Convert 6 slices to a number between 0-9
return hexNumbers
.map(n => parseInt(n, 16) * 10)
.map(n => n / Math.pow(2, nBits))
.map(Math.floor);
};
Implementation of the Classic Crash Game is as follows:
export function getClassic(seed, salt, offset = 1) {
const nBits = 52;
const hmac = HmacSHA256(seed, salt);
seed = hmac.toString(enchex);
seed = seed.slice(0, nBits / 4);
const r = parseInt(seed, 16);
let X = r / Math.pow(2, nBits);
X = (100 - offset) / (1 - X);
const result = Math.floor(X);
return Math.max(1, result / 100);
};
For more information about the Bitcoin block being mined, you can also log on to
https://www.blockchain.com/btc/blocks