Author

Topic: BetKing.io Crash Game Seeding Event (Read 212 times)

hero member
Activity: 1344
Merit: 507
October 11, 2018, 08:59:20 AM
#3
Why does this justify to open another thread while forum rules say only one thread per site?
copper member
Activity: 2562
Merit: 2510
Spear the bees
October 11, 2018, 08:04:13 AM
#2
We are launching our own version of what people call Crash games, made popular by Bustabit, at https://betking.io

We use the same provably fair system as Bustabit.

I'll quote RHavar throughout this post.


Starting with a secret I've generated a chain of 10,000,000 SHA256 hashes. Each element is the hash of the lowercase, hexadecimal string representation of the previous hash.


The hash of the BetKing chain's last  element is 863165db9a59e5720b3ea5659313e1f8c0546d3ef113d0959cb076cc79eec244.

Every game maps to a hash in the chain: The 10,000,000th element of the chain is the hash of game #1 and the first element in the chain is the hash of game #10,000,000. To verify that a hash belongs to a game #n, simply hash it n times and compare the result with the terminating hash.

To calculate a game's result from its hash:
Code:
const crypto = require("crypto")

function gameResult(seed, salt) {
  const nBits = 52 // number of most significant bits to use

  // 1. HMAC_SHA256(key=salt, message=seed)
  const hmac = crypto.createHmac("sha256", salt)
  hmac.update(seed)
  seed = hmac.digest("hex")

  // 2. r = 52 most significant bits
  seed = seed.slice(0, nBits/4)
  const r = parseInt(seed, 16)

  // 3. X = r / 2^52
  let X = r / Math.pow(2, nBits) // uniformly distributed in [0; 1)

  // 4. X = 99 / (1-X)
  X = 99 / (1 - X)

  // 5. return max(trunc(X), 100)
  const result = Math.floor(X)
  return Math.max(1, result / 100)
}


Before being used to calculate the corresponding result, each game hash is salted with the lowercase, hexadecimal string representation of the hash of a bitcoin block that has not been mined yet, proving that I have not deliberately picked a chain that is unfavorable for players.

The block we will use is bitcoin block 545340

Quoted for future reference. Also archived. https://archive.is/I9QXR
member
Activity: 210
Merit: 11
October 11, 2018, 08:03:19 AM
#1
We are launching our own version of what people call Crash games, made popular by Bustabit, at https://betking.io

We use the same provably fair system as Bustabit.

I'll quote RHavar throughout this post.


Starting with a secret I've generated a chain of 10,000,000 SHA256 hashes. Each element is the hash of the lowercase, hexadecimal string representation of the previous hash.


The hash of the BetKing chain's last  element is 863165db9a59e5720b3ea5659313e1f8c0546d3ef113d0959cb076cc79eec244.

Every game maps to a hash in the chain: The 10,000,000th element of the chain is the hash of game #1 and the first element in the chain is the hash of game #10,000,000. To verify that a hash belongs to a game #n, simply hash it n times and compare the result with the terminating hash.

To calculate a game's result from its hash:
Code:
const crypto = require("crypto")

function gameResult(seed, salt) {
  const nBits = 52 // number of most significant bits to use

  // 1. HMAC_SHA256(key=salt, message=seed)
  const hmac = crypto.createHmac("sha256", salt)
  hmac.update(seed)
  seed = hmac.digest("hex")

  // 2. r = 52 most significant bits
  seed = seed.slice(0, nBits/4)
  const r = parseInt(seed, 16)

  // 3. X = r / 2^52
  let X = r / Math.pow(2, nBits) // uniformly distributed in [0; 1)

  // 4. X = 99 / (1-X)
  X = 99 / (1 - X)

  // 5. return max(trunc(X), 100)
  const result = Math.floor(X)
  return Math.max(1, result / 100)
}


Before being used to calculate the corresponding result, each game hash is salted with the lowercase, hexadecimal string representation of the hash of a bitcoin block that has not been mined yet, proving that I have not deliberately picked a chain that is unfavorable for players.

The block we will use is bitcoin block 545340

It would be great if someone could quote this post, before the block is mined, to prove I didn't edit it in future
Jump to: