Bjorn_Blockchain



Offline



Activity: 449

Merit: 250



Belief in the immutable.







Sr. MemberActivity: 449Merit: 250Belief in the immutable. Re: Posting for new business transparency, site coming soon .... May 08, 2017, 11:01:55 PM #2





2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.



3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.





The reference code (javascript) is as follows:



The method to create the hash chain is simply sha256:

Code: 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 game multiplier:



Code: 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:



Code: 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 c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.

1) We have generated a chain of 10 million sha256 hashes, starting with a server secret that has been repeatedly fed the output of sha256 back into itself 10 million times. The sha256 of the final hash in the chain is: c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75, by publicising it here we are preventing any ability to pick an alternate sha256 chain.2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.The reference code (javascript) is as follows:The method to create the hash chain is simply sha256:The method to convert a game hash, mix it with the picked client seed to a game multiplier:The chain could be generated with code such as:Using our chosen starting serverSeed, the hash terminating the chain is. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.

get your politics on! https://coinhub.news for crypto news, podcasts, reddit, bitcointalk and more! https://www.krediblepolitics.com get your politics on!

DiCE1904



Offline



Activity: 1117

Merit: 1002







LegendaryActivity: 1117Merit: 1002 Re: Posting for new business transparency, site coming soon .... May 08, 2017, 11:26:28 PM #3 Quote from: Bjorn_Blockchain on May 08, 2017, 11:01:55 PM





2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.



3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.





The reference code (javascript) is as follows:



The method to create the hash chain is simply sha256:

Code: 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 game multiplier:



Code: 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:



Code: 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 c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.



1) We have generated a chain of 10 million sha256 hashes, starting with a server secret that has been repeatedly fed the output of sha256 back into itself 10 million times. The sha256 of the final hash in the chain is: c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75, by publicising it here we are preventing any ability to pick an alternate sha256 chain.2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.The reference code (javascript) is as follows:The method to create the hash chain is simply sha256:The method to convert a game hash, mix it with the picked client seed to a game multiplier:The chain could be generated with code such as:Using our chosen starting serverSeed, the hash terminating the chain is. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.

Saved Saved http://7iaarlalctluvr32uj5f57an67ilibem6dulbscokbvt4spsipmq.b32.i2p/

Official Thead: Official Thead: https://bitcointalk.org/index.php?topic=5095329.0

EvilDave



Offline



Activity: 854

Merit: 1000









Hero MemberActivity: 854Merit: 1000 Re: Posting for new business transparency, site coming soon .... May 08, 2017, 11:38:54 PM #4 Quote from: DiCE1904 on May 08, 2017, 11:26:28 PM Quote from: Bjorn_Blockchain on May 08, 2017, 11:01:55 PM





2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.



3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.





The reference code (javascript) is as follows:



The method to create the hash chain is simply sha256:

Code: 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 game multiplier:



Code: 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:



Code: 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 c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.



1) We have generated a chain of 10 million sha256 hashes, starting with a server secret that has been repeatedly fed the output of sha256 back into itself 10 million times. The sha256 of the final hash in the chain is: c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75, by publicising it here we are preventing any ability to pick an alternate sha256 chain.2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.The reference code (javascript) is as follows:The method to create the hash chain is simply sha256:The method to convert a game hash, mix it with the picked client seed to a game multiplier:The chain could be generated with code such as:Using our chosen starting serverSeed, the hash terminating the chain is. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.

Saved

Saved

Quoted by me, and all. Hi, BTT peeps Quoted by me, and all. Hi, BTT peeps Nulli Dei, nulli Reges, solum NXT

Love your money: www.nxt.org www.ardorplatform.org

www.nxter.org www.nxtfoundation.org

kryptopojken



Offline



Activity: 768

Merit: 532







Hero MemberActivity: 768Merit: 532 Re: Posting for new business transparency, site coming soon .... May 09, 2017, 06:51:01 AM #6 Quote from: Bjorn_Blockchain on May 08, 2017, 11:01:55 PM





2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.



3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.





The reference code (javascript) is as follows:



The method to create the hash chain is simply sha256:

Code: 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 game multiplier:



Code: 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:



Code: 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 c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.



1) We have generated a chain of 10 million sha256 hashes, starting with a server secret that has been repeatedly fed the output of sha256 back into itself 10 million times. The sha256 of the final hash in the chain is: c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75, by publicising it here we are preventing any ability to pick an alternate sha256 chain.2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.The reference code (javascript) is as follows:The method to create the hash chain is simply sha256:The method to convert a game hash, mix it with the picked client seed to a game multiplier:The chain could be generated with code such as:Using our chosen starting serverSeed, the hash terminating the chain is. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.

Quoted Quoted

Bassica



Offline



Activity: 280

Merit: 250







Sr. MemberActivity: 280Merit: 250 Re: Posting for new business transparency, site coming soon .... May 09, 2017, 04:54:20 PM #7 Quote from: Bjorn_Blockchain on May 08, 2017, 11:01:55 PM





2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.



3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.





The reference code (javascript) is as follows:



The method to create the hash chain is simply sha256:

Code: 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 game multiplier:



Code: 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:



Code: 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 c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.



1) We have generated a chain of 10 million sha256 hashes, starting with a server secret that has been repeatedly fed the output of sha256 back into itself 10 million times. The sha256 of the final hash in the chain is: c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75, by publicising it here we are preventing any ability to pick an alternate sha256 chain.2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.The reference code (javascript) is as follows:The method to create the hash chain is simply sha256:The method to convert a game hash, mix it with the picked client seed to a game multiplier:The chain could be generated with code such as:Using our chosen starting serverSeed, the hash terminating the chain is. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.

Quoted Quoted

ether19



Offline



Activity: 532

Merit: 250



BTC. ETC. EOS







Sr. MemberActivity: 532Merit: 250BTC. ETC. EOS Re: Posting for new business transparency, site coming soon .... May 10, 2017, 09:41:53 AM #9 Quote from: Bjorn_Blockchain on May 08, 2017, 11:01:55 PM





2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.



3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.





The reference code (javascript) is as follows:



The method to create the hash chain is simply sha256:

Code: 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 game multiplier:



Code: 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:



Code: 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 c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.



1) We have generated a chain of 10 million sha256 hashes, starting with a server secret that has been repeatedly fed the output of sha256 back into itself 10 million times. The sha256 of the final hash in the chain is: c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75, by publicising it here we are preventing any ability to pick an alternate sha256 chain.2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.The reference code (javascript) is as follows:The method to create the hash chain is simply sha256:The method to convert a game hash, mix it with the picked client seed to a game multiplier:The chain could be generated with code such as:Using our chosen starting serverSeed, the hash terminating the chain is. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.

quoted quoted

458Italia



Offline



Activity: 14

Merit: 0







NewbieActivity: 14Merit: 0 Re: Posting for new business transparency, site coming soon .... May 10, 2017, 04:51:58 PM #10 Quote from: Bjorn_Blockchain on May 08, 2017, 11:01:55 PM





2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.



3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.





The reference code (javascript) is as follows:



The method to create the hash chain is simply sha256:

Code: 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 game multiplier:



Code: 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:



Code: 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 c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.



1) We have generated a chain of 10 million sha256 hashes, starting with a server secret that has been repeatedly fed the output of sha256 back into itself 10 million times. The sha256 of the final hash in the chain is: c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75, by publicising it here we are preventing any ability to pick an alternate sha256 chain.2) Parabolic will play through that chain of hashes, in reverse order, and use the hashes to determine the crash point in a probably fair manner.3) To avoid criticism that the Bitcoin address 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 a Bitcoin block that hasn't yet been mined: block 465525.The reference code (javascript) is as follows:The method to create the hash chain is simply sha256:The method to convert a game hash, mix it with the picked client seed to a game multiplier:The chain could be generated with code such as:Using our chosen starting serverSeed, the hash terminating the chain is. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be c56c9fe892bd23ff6d20da0b505c86db9acecb6a257a2b79b23dfface1d4ea75.

Sweeeeeeeeeeet! Sweeeeeeeeeeet!