Bitcoin Forum
February 25, 2018, 10:16:01 AM *
News: Latest stable version of Bitcoin Core: 0.15.1  [Torrent].
 
   Home   Help Search Donate Login Register  
Pages: [1]
  Print  
Author Topic: busteth.com probably fair seeding evet  (Read 101 times)
fulluser
Member
**
Offline Offline

Activity: 110
Merit: 10


View Profile
September 17, 2017, 03:21:21 AM
 #1

Disclaimer: I was hired by busteth.com to make this seeding event and therefore set up the provably fair system on the game. I will not be part of the team that will manage this site.

This will reuse the idea posted by Ryan and used for Bustabit.

  • A chain of 10 million 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: 75cbd770ca8fb67eca373b80b0fde7decca0e953ba201d895ba64b6029c889fa, by publicizing it here we are preventing any ability to pick an alternate sha256 chain.
  • SteemCrashwill 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 a Ethereum  block that hasn't yet been mined: block 4,283,000.

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 money pot 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 final hash is: ', terminatingHash);


Using our chosen starting serverSeed, the hash terminating the chain is 75cbd770ca8fb67eca373b80b0fde7decca0e953ba201d895ba64b6029c889fa. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be 75cbd770ca8fb67eca373b80b0fde7decca0e953ba201d895ba64b6029c889fa
1519553761
Hero Member
*
Offline Offline

Posts: 1519553761

View Profile Personal Message (Offline)

Ignore
1519553761
Reply with quote  #2

1519553761
Report to moderator
1519553761
Hero Member
*
Offline Offline

Posts: 1519553761

View Profile Personal Message (Offline)

Ignore
1519553761
Reply with quote  #2

1519553761
Report to moderator
Automated Bitcoin Fork Extraction Tool WE DO TOUGH WALLETS: BCH | BTG | BCD | SBTC | UBTC | B2X | BCX | BTF Electrum 2FA, Trezor, Ledger, SegWit, Bech32
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
1519553761
Hero Member
*
Offline Offline

Posts: 1519553761

View Profile Personal Message (Offline)

Ignore
1519553761
Reply with quote  #2

1519553761
Report to moderator
1519553761
Hero Member
*
Offline Offline

Posts: 1519553761

View Profile Personal Message (Offline)

Ignore
1519553761
Reply with quote  #2

1519553761
Report to moderator
RHavar
Legendary
*
Offline Offline

Activity: 1232
Merit: 1047



View Profile
September 17, 2017, 03:27:12 AM
 #2

I've created an archive of the details:
http://archive.is/6lqXb

and quoting the message to prevent editing.

Please note, this is not an endorsement of the site (I have never heard of it until just now). I am just quoting it to prevent editing

Disclaimer: I was hired by busteth.com to make this seeding event and therefore set up the provably fair system on the game. I will not be part of the team that will manage this site.

This will reuse the idea posted by Ryan and used for Bustabit.

  • A chain of 10 million 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: 75cbd770ca8fb67eca373b80b0fde7decca0e953ba201d895ba64b6029c889fa, by publicizing it here we are preventing any ability to pick an alternate sha256 chain.
  • SteemCrashwill 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 a Ethereum  block that hasn't yet been mined: block 4,283,000.

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 money pot 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 final hash is: ', terminatingHash);


Using our chosen starting serverSeed, the hash terminating the chain is 75cbd770ca8fb67eca373b80b0fde7decca0e953ba201d895ba64b6029c889fa. That is to say, the first game's hash played under the new provably fair scheme, when hashed will be 75cbd770ca8fb67eca373b80b0fde7decca0e953ba201d895ba64b6029c889fa
Pages: [1]
  Print  
 
Jump to:  

Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!