Title: EthChase.io - Provably Fair Seeding Event
Post by: slimz on August 22, 2018, 08:22:19 AM
Welcome to the EthChase.io (https://www.ethchase.io) Provably Fair Seeding Event! EthChase is a licensed clone of the popular bitcoin game Bustabit, and is played with Ethereum. This will reuse the idea posted by Ryan and used for Bustabit v1. (https://bitcointalk.org/index.php?topic=922898.0) - A chain of 10 million (1e7) sha256 hashes was generated, starting with a Server Secret that has been repeatedly fed the output of sha256 hash back into itself 10 million times.
The final hash in the chain is: 6b811a0f7816f610564cd3738ad72e5007bd6161efaaac4ac5a6dd316a0cbaa8, by publicizing it here we are preventing any ability to pick an alternate sha256 chain. - EthChase.io will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point.
- To avoid criticism that the Server Secret used in step 1 was carefully chosen to generate lots of "bad" crash points, each hash in the chain will be salted with a client seed, which we have no control of.
The client seed will be the block hash of an Ethereum block that hasn't yet been mined: block 6200000 (https://etherscan.io/block/6200000)
The reference code (javascript) is as follows: The method to create the hash chain is simply sha256: function genGameHash(serverSeed) { return crypto.createHash('sha256').update(serverSeed).digest('hex'); } The method to convert a game hash, mix it with the picked client seed to a money pot multiplier: function crashPointFromHash(serverSeed, clientSeed) { function divisible(hash, mod) { // We will read in 4 hex at a time, but the first chunk might be a bit smaller // So ABCDEFGHIJ should be chunked like AB CDEF GHIJ var val = 0; var o = hash.length % 4; for (var i = o > 0 ? o - 4 : 0; i < hash.length; i += 4) { val = ((val << 16) + parseInt(hash.substring(i, i+4), 16)) % mod; }
return val === 0; }
var hash = crypto.createHmac('sha256', serverSeed).update(clientSeed).digest('hex');
/* In 1 of 101 games the game crashes instantly. */ if (divisible(hash, 101)) return 0;
/* Use the most significant 52-bit from the hash to calculate the crash point */ var h = parseInt(hash.slice(0,52/4),16); var e = Math.pow(2,52);
return Math.floor((100 * e - h) / (e - h)); } The chain could be generated with code such as: var serverSecret = 'If you knew this, you could steal all my money'; var clientSeed = '0000examplehash';
var gamesToGenerate = 1e7;
var serverSeed = serverSecret;
for (var game = gamesToGenerate; game > 0; --game) { serverSeed = genGameHash(serverSeed); console.log('Game ' + game + ' has a crash point of ' + (crashPointFromHash(serverSeed, clientSeed) / 100).toFixed(2) +'x', '\t\tHash: ' + serverSeed); }
var terminatingHash = genGameHash(serverSeed);
console.log('The terminating hash is: ', terminatingHash); Using our chosen starting serverSeed, the hash terminating the chain is 6b811a0f7816f610564cd3738ad72e5007bd6161efaaac4ac5a6dd316a0cbaa8. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be 6b811a0f7816f610564cd3738ad72e5007bd6161efaaac4ac5a6dd316a0cbaa8.
Title: Re: EthChase.io - Provably Fair Seeding Event
Post by: slimz on August 22, 2018, 08:35:31 AM
Here is an archive of this page as proof that it will not be edited: https://web.archive.org/web/20180822083048/https://bitcointalk.org/index.php?topic=4937001.0
Title: Re: EthChase.io - Provably Fair Seeding Event
Post by: devans on August 22, 2018, 09:36:41 AM
Welcome to the EthChase.io (https://www.ethchase.io) Provably Fair Seeding Event! EthChase is a licensed clone of the popular bitcoin game Bustabit, and is played with Ethereum. This will reuse the idea posted by Ryan and used for Bustabit v1. (https://bitcointalk.org/index.php?topic=922898.0) - A chain of 10 million (1e7) sha256 hashes was generated, starting with a Server Secret that has been repeatedly fed the output of sha256 hash back into itself 10 million times.
The final hash in the chain is: 6b811a0f7816f610564cd3738ad72e5007bd6161efaaac4ac5a6dd316a0cbaa8, by publicizing it here we are preventing any ability to pick an alternate sha256 chain. - EthChase.io will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point.
- To avoid criticism that the Server Secret used in step 1 was carefully chosen to generate lots of "bad" crash points, each hash in the chain will be salted with a client seed, which we have no control of.
The client seed will be the block hash of an Ethereum block that hasn't yet been mined: block 6200000 (https://etherscan.io/block/6200000)
The reference code (javascript) is as follows: The method to create the hash chain is simply sha256: function genGameHash(serverSeed) { return crypto.createHash('sha256').update(serverSeed).digest('hex'); } The method to convert a game hash, mix it with the picked client seed to a money pot multiplier: function crashPointFromHash(serverSeed, clientSeed) { function divisible(hash, mod) { // We will read in 4 hex at a time, but the first chunk might be a bit smaller // So ABCDEFGHIJ should be chunked like AB CDEF GHIJ var val = 0; var o = hash.length % 4; for (var i = o > 0 ? o - 4 : 0; i < hash.length; i += 4) { val = ((val << 16) + parseInt(hash.substring(i, i+4), 16)) % mod; }
return val === 0; }
var hash = crypto.createHmac('sha256', serverSeed).update(clientSeed).digest('hex');
/* In 1 of 101 games the game crashes instantly. */ if (divisible(hash, 101)) return 0;
/* Use the most significant 52-bit from the hash to calculate the crash point */ var h = parseInt(hash.slice(0,52/4),16); var e = Math.pow(2,52);
return Math.floor((100 * e - h) / (e - h)); } The chain could be generated with code such as: var serverSecret = 'If you knew this, you could steal all my money'; var clientSeed = '0000examplehash';
var gamesToGenerate = 1e7;
var serverSeed = serverSecret;
for (var game = gamesToGenerate; game > 0; --game) { serverSeed = genGameHash(serverSeed); console.log('Game ' + game + ' has a crash point of ' + (crashPointFromHash(serverSeed, clientSeed) / 100).toFixed(2) +'x', '\t\tHash: ' + serverSeed); }
var terminatingHash = genGameHash(serverSeed);
console.log('The terminating hash is: ', terminatingHash); Using our chosen starting serverSeed, the hash terminating the chain is 6b811a0f7816f610564cd3738ad72e5007bd6161efaaac4ac5a6dd316a0cbaa8. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be 6b811a0f7816f610564cd3738ad72e5007bd6161efaaac4ac5a6dd316a0cbaa8. Looks good 👍 Quoting for reference. Also, I confirm that Ethereum block 6200000 has not been mined yet and the current block is 6192588 at the time of this writing.
|