Bitcoin Forum

Economy => Gambling discussion => Topic started by: devans on January 24, 2017, 12:53:44 AM



Title: flinch.io – provably fair salt choosing event
Post by: devans on January 24, 2017, 12:53:44 AM
flinch.io (https://flinch.io) is an upcoming Bitcoin game that will be introduced within the next few weeks. Our provably fair system is based on the excellent work of blockage, dooglus, espringe and RHavar. It requires picking a public salt that I demonstrably cannot know yet, which I'll do in this post.

If you'd like to help me out, please quote the text after the break. Thanks!



Starting with a secret value I have generated a chain of 15,000,000 SHA256 hashes. Each element is the hash of the binary 256-bit value of the previous hash, not of its hex-encoded string representation. The hash of the final element in the chain is 90b299d1122020f324bdfd62d680d74d2bb90c0679e1503fd97a2c1a475aae18.

Every game maps to a hash in the chain: The 15,000,000th element of the chain is the hash of game #1 and the first element in the chain is the hash of game #15,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.

Each game's result is determined by its hash:
Code:
// GameResult calculates the corresponding crash point for a game hash and salt.
//
// Crash points have two decimal places, so a result of 1234 is interpreted as
// 12.34x. The largest possible result is 6966505673588736.
func GameResult(seed, salt []byte) uint64 {
const nBits = 46 // number of most significant bits to use

// 1. HMAC_SHA256(key=salt, message=seed
hmacHash := hmac.New(sha256.New, salt)
hmacHash.Write(seed)
seed = hmacHash.Sum(nil)

// 2. r = 46 most significant bits
seedInt := new(big.Int).SetBytes(seed)
seedInt.Rsh(seedInt, sha256.Size*8-nBits)
r := seedInt.Uint64()

// 3. X = r / 2^46
X := float64(r) / math.Pow(2, 46) // uniformly distributed in [0; 1)

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

// 5. return max(trunc(X), 100)
result := uint64(X)
if result == 99 {
return 100
}
return result
}
Since JavaScript is more widespread than Go, I've also created a Node.js version of the reference function (https://gist.github.com/playflinch/e9cfdb67c0ee89a18d8f290f98457f98#file-game-js).

Before being used to calculate its game's result, each game hash is salted with the hash of Bitcoin block (#450,719) in its binary form. This block has not been mined yet, which proves that I could not have deliberately picked a hash chain that is unfavorable for players.


Title: Re: flinch.io – provably fair salt choosing event
Post by: RHavar on January 24, 2017, 01:18:07 AM
Interesting! Looks good.

Quoting to prevent editing. And also archived it here: https://archive.is/9w0SF


flinch.io (https://flinch.io) is an upcoming Bitcoin game that will be introduced within the next few weeks. Our provably fair system is based on the excellent work of blockage, dooglus, espringe and RHavar. It requires picking a public salt that I demonstrably cannot know yet, which I'll do in this post.

If you'd like to help me out, please quote the text after the break. Thanks!



Starting with a secret value I have generated a chain of 15,000,000 SHA256 hashes. Each element is the hash of the binary 256-bit value of the previous hash, not of its hex-encoded string representation. The hash of the final element in the chain is 90b299d1122020f324bdfd62d680d74d2bb90c0679e1503fd97a2c1a475aae18.

Every game maps to a hash in the chain: The 15,000,000th element of the chain is the hash of game #1 and the first element in the chain is the hash of game #15,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.

Each game's result is determined by its hash:
Code:
// GameResult calculates the corresponding crash point for a game hash and salt.
//
// Crash points have two decimal places, so a result of 1234 is interpreted as
// 12.34x. The largest possible result is 6966505673588736.
func GameResult(seed, salt []byte) uint64 {
const nBits = 46 // number of most significant bits to use

// 1. HMAC_SHA256(key=salt, message=seed
hmacHash := hmac.New(sha256.New, salt)
hmacHash.Write(seed)
seed = hmacHash.Sum(nil)

// 2. r = 46 most significant bits
seedInt := new(big.Int).SetBytes(seed)
seedInt.Rsh(seedInt, sha256.Size*8-nBits)
r := seedInt.Uint64()

// 3. X = r / 2^46
X := float64(r) / math.Pow(2, 46) // uniformly distributed in [0; 1)

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

// 5. return max(trunc(X), 100)
result := uint64(X)
if result == 99 {
return 100
}
return result
}
Since JavaScript is more widespread than Go, I've also created a Node.js version of the reference function (https://gist.github.com/playflinch/e9cfdb67c0ee89a18d8f290f98457f98#file-game-js).

Before being used to calculate its game's result, each game hash is salted with the hash of Bitcoin block (#450,719) in its binary form. This block has not been mined yet, which proves that I could not have deliberately picked a hash chain that is unfavorable for players.


Title: Re: flinch.io – provably fair salt choosing event
Post by: devans on January 30, 2017, 01:01:44 PM
Thanks for helping out!

Block #450,719 with hash 0000000000000000017c1aa67eb63bffab5c9de9e76f15b51fccda2208a42637 has been mined. This value in its binary form is the salt that will be used to calculate all game results.

I will announce the game on the Gambling board in the next few days.


Title: Re: flinch.io – provably fair salt choosing event
Post by: traderethereum on January 30, 2017, 01:05:56 PM
welcome aboard in gambling business sir, i see that your sites is almost to get launch, i am waiting for the launch and i am curious about your sites. with the launch of your sites, we can have another sites to playing gambling, have a good success to you and your sites and i hope that your sites will always online and makes visitor enjoy while their playing.


Title: Re: flinch.io – provably fair salt choosing event
Post by: devans on February 01, 2017, 11:24:28 PM
welcome aboard in gambling business sir, i see that your sites is almost to get launch, i am waiting for the launch and i am curious about your sites. with the launch of your sites, we can have another sites to playing gambling, have a good success to you and your sites and i hope that your sites will always online and makes visitor enjoy while their playing.

Thank you. flinch.io (https://flinch.io) is now open. You can read more about it in its announcement thread (https://bitcointalk.org/index.php?topic=1774678.0).


Title: Re: flinch.io – provably fair salt choosing event
Post by: ShitSticks on March 02, 2017, 03:22:47 PM
Great site!