https://codepen.io/anon/pen/yjMKXv?editors=1011 SatoshiDice has several new addresses for BTC 2x: bc1qnr8jx8qj45pxxkhas22psgnfqdnjgah7grdzue [winning numbers (500000-999999)] 3x: bc1qt02xj5v5pq8u5jg067vnhreat6em2uc3gze3my [winning numbers (666667-999999)] 4x: bc1qhugm0lthxqx80mzfqymyxqzy3m0fx52yayz5vh [winning numbers (750000-999999)] 5x: bc1qeeaae4xesev67sndcu388s6u7akfpv0h6dgp6d [winning numbers (800000-999999)] 10x: bc1q42wc43an92tdlzr6n4ha3j3zvk8vjfecc4dume [winning numbers (900000-999999)] 20x: bc1qzlmh08wg82w9nuk39qrpuvlvk4tg57haga6l2f [winning numbers (950000-999999)] 40x: bc1qw5mgxjkqaaerxjf767gh773rrj9hnqllwp09ns [winning numbers (975000-999999)] 100x: bc1qacsuq4jclppq07dxssgrurnmnp34mw04vplzzs [winning numbers (990000-999999)] Send any amount of BTC to this address and have a (100/multipler)% chance to multiply your money. The max resolve bet is 0.19999999 BTC. If you send 1 BTC, it will generate 6 rolls and the result is then summed and resulting amount will be sent back. This is equivalent to betting 6 times. If you win, the money will be sent to the change address and if there is no change address, the first input address. Your winnings will be mutiple of your original bet minus 0.00001 btc for fees. The provably fair number is generated from blockhash of the tx + next blockhash + next blockhash + next blockhash + txid. The following script will generate the a number between 0 and 999999. Hex: 68747470733a2f2f636f646570656e2e696f2f616e6f6e2f70656e2f796a4d4b58763f656469746f72733d31303131 Ascii: https://codepen.io/anon/pen/yjMKXv?editors=1011 If you include the above hex in OP_RETURN your winnings will be edgeless, satoshi dice give you true odds for payout. (edge subjected to future change to 1%) Else SatoshiDice will only payout .98 * multipler for a 2% fee. Details: To generate the provably fair number, get the blockhash of the block that includes your transaction, concatenate with the next 3 block's blockhash concatenate with your txid Take the string generated and hash it with SHA-256. Take the first 5 digits of the SHA-256 and convert to decimal from base 16 Hexidecimal. If this number is less than 1,000,000 then this is the generated number. If not, take the next 5 and so on until the generated number under 1 million. Provably Fair: Because no one can predict the next blockhash without 50% of the mining power, it is safe that its generated randomly In order to cheat, one must mine the block that includes the gambling transaction and the next 3 block before broadcasting the gambling transaction. This is impossible to do. For a bet larger than 0.19999999 BTC for 2x multiplier, the satoshiDice will generate multiple rolls. Each roll from the first is by adding an nonce to the end of the txid starting with 1. Max payout is 0.4 BTC so max bet is 0.4/multipler To use the verifier code below, copy and paste entire thing into your browser console. Then call getBlockInfo with the parameters txid and your wager amount. getBlockInfo('5bc79366fc8e21105ad022c09e9a79834172eea3bf75d4a63750bc43d43faad0', 0.1, 2); which returns 218222 let main = 'https://api.blockcypher.com/v1/btc/main'; let maxbet = 0.4; function getBlockInfo(txid, wager, multiplier){ fetch(main + '/txs/' + txid).then((txdata) => txdata.json()).then(function(data){ fetch(main + '/blocks/' + (parseInt(data.block_height) + 1) + '?txstart=1&limit=1').then((txdata2) => txdata2.json()).then(function(data2){ fetch(main + '/blocks/' + (parseInt(data.block_height) + 2) + '?txstart=1&limit=1').then((txdata3) => txdata3.json()).then(function(data3){ setTimeout(function (){ //To stop API limits fetch(main + '/blocks/' + (parseInt(data.block_height) + 3) + '?txstart=1&limit=1').then((txdata4) => txdata4.json()).then(function(data4){ for(let i = 0; i < Math.floor(wager / (maxbet / multiplier)) + 1; i++){ if(i == 0) i = ''; provableRandomNum(data.block_hash + data2.hash + data3.hash + data4.hash, txid + i.toString()); } }); }, 1000); }); }); }); } async function sha256(message) { const msgBuffer = new TextEncoder('utf-8').encode(message); const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer); const hashArray = Array.from(new Uint8Array(hashBuffer)); const hashHex = hashArray.map(b => ('00' + b.toString(16)).slice(-2)).join(''); return hashHex; } async function provableRandomNum(blockhash, txid) { sha256(blockhash + txid).then(function(res) { for (let i = 0; i < 64 / 5; i++) { //transform hash into blocks of 5 and convert it to int from hex let result = parseInt(res.substring(i * 5, 5), 16); if (result < 1000000){ console.log(result); return; } } }); }

Author : asda

Tags   bitcoin gambling  

June 16, 2018

Edit 

Comments