// Init array var known_blocks = [ 'WHALE201810', 'BLOCK21E800', 'HURRICANE_1', 'SEGWIT', 'SEGWIT_LOCK', 'BCC', 'BIP_91_LOCK', 'HALVING_2', 'WHALE201311', 'HALVING_1', 'PIZZA', 'TOPISTO', 'LEET', 'LUCIFER', 'THE_ANSWER', 'GENESIS' ]; var liste_blocks = { 'WHALE201810' : '0000000000000000000f9f2dadfb8f312572183272802cbfcc4ff95b4ee6777d', 'BLOCK21E800' : '00000000000000000021e800c1e8df51b22c1588e5a624bea17e9faa34b2dc4a', 'HURRICANE_1' : '0000000000000000000fe6d521a187a5523d5cef6f6c178923ff82ffe5a0f372', 'SEGWIT' : '000000000000000000cbeff0b533f8e1189cf09dfbebf57a8ebe349362811b80', 'SEGWIT_LOCK' : '0000000000000000012e6060980c6475a9a8e62a1bf44b76c5d51f707d54522c', 'BCC' : '00000000000000000019f112ec0a9982926f1258cdcc558dd7c3b7e5dc7fa148', 'BIP_91_LOCK' : '0000000000000000015411ca4b35f7b48ecab015b14de5627b647e262ba0ec40', 'HALVING_2' : '000000000000000002cce816c0ab2c5c269cb081896b7dcb34b8422d6b74ffa1', 'WHALE201311' : '0000000000000001bc7156dd1183c87859b326affa3a5cdd157e809537f0b284', 'HALVING_1' : '000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e', 'PIZZA' : '00000000006de085dadb3ec413ef074022fe781121b467e98960280dd246bb00', 'TOPISTO' : '000000000a73e64735a2b75c97ea674950a9018da1420d01328a918c9ff9852c', 'LEET' : '000000008bf44a528a09d203203a6a97c165cf53a92ecc27aed0b49b86a19564', 'LUCIFER' : '00000000fc5b3c76f27f810ee775e480ae7fd604fd196b2d8da4257fcd39f4f9', 'THE_ANSWER' : '00000000314e90489514c787d615cea50003af2023796ccdd085b6bcc1fa28f5', 'GENESIS' : '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f' }; var flag_nav = true; var classes = ['bg-grey-even','bg-grey-odd']; var cur_class = 0; var cur_height = []; var cur_methode = 'hasard'; function precisionRound(number) { var precision = 4; var factor = Math.pow(10, precision); return Math.round((number/100000000) * factor) / factor; } function getblockNameFromHash(hash) { sHash = String(hash); known_blocks.forEach(function(item){ if (sHash == String(liste_blocks[item])) return item; }); return ''; } function addInfoForBlock(block) { var height = '300px'; var contenu = ''; var downloadingImage = new Image(); cur_height.push(block.height); cur_class = 1 - cur_class; blockName = getblockNameFromHash(block.hash); if (blockName != '') blockName = ' ( '+blockName+' )'; contenu += '

block '+block.height+blockName+'

'; contenu += ' '; //contenu += ' '; //contenu += ' '; contenu += ' '; contenu += ' '; contenu += ' '; contenu += ' '; contenu += ' '; contenu += ' '; contenu += ' '; contenu += '
hash'+block.hash+'
index'+block.block_index+'
timestamp'+block.time+'
nonce'+block.nonce+'
nb tx'+block.n_tx+'
outputs'+precisionRound(block.topisto_outputs).toFixed(4)+'
inputs'+precisionRound(block.topisto_inputs).toFixed(4)+'
fees'+precisionRound(block.topisto_fees).toFixed(4)+'
reward'+precisionRound(block.topisto_reward).toFixed(4)+'
'; $('#info_'+block.height).html(contenu); downloadingImage.onload = function(){ $('#img_'+block.height).attr('src', this.src); //$('#img_'+block.height).attr('height', height); //$('#img_'+block.height).attr('width','auto'); flag_nav = true; }; downloadingImage.src = 'images/block_image.php?methode='+cur_methode+'&hash='+block.hash; return true; } function addDivForBlock(block_height) { var contenu = ''; contenu += '
'; contenu += '
'; contenu += '
'; contenu += '

COMPUTING ...

'; contenu += '
'; contenu += '
'; contenu += '
'; contenu += ' '; contenu += '
'; contenu += '
'; contenu += '
'; contenu += '
'; $('#blockchain').append(contenu); return true; } function addDivForVoid() { var contenu = ''; contenu += '
'; contenu += '
'; contenu += '
'; contenu += '

the VOID ...

'; contenu += '
'; contenu += '
'; contenu += '
'; contenu += ' '; contenu += '
'; contenu += '
'; contenu += '
'; contenu += '
'; $('#blockchain').append(contenu); return true; } function toggleForwardBtn() { if (cur_height.length < 3) { $('#fast_forward_btn').removeClass('btn-success'); $('#fast_forward_btn').addClass('btn-secondary'); $('#btn-forward').removeClass('btn-info'); $('#btn-forward').addClass('btn-secondary'); } else { $('#fast_forward_btn').removeClass('btn-secondary'); $('#fast_forward_btn').addClass('btn-success'); $('#btn-forward').removeClass('btn-secondary'); $('#btn-forward').addClass('btn-info'); } return true; } function gotoBlock(block_name) { $(document).scrollTop( $("#explorer").offset().top ); // Bloquer la navigation pendant le calcul if (!flag_nav) { window.alert('A block image is currently computed, please wait ...'); return false; } flag_nav = false; if (block_name == 'NEXT') { flag_nav = true; // Supprimer un block if (cur_height.length < 3) { window.alert('No Next Block, you are at '+$('#blockSelector').val()+' block !'); return false; } liste_blocks['PREVIOUS'] = liste_blocks['BLOCK_'+cur_height[cur_height.length-1]]; cur_height.pop(); toggleForwardBtn(); $('#block_'+cur_height[cur_height.length-2]).slideDown(400, function() { // Animation complete. $('#blockchain').children('div:last').remove(); cur_class = 1 - cur_class; }); } else { // Ajouter un block addDivForBlock(cur_height[cur_height.length-1] - 1); // Décaler d'un block vers le haut if (cur_height.length > 1) $('#block_'+cur_height[cur_height.length-2]).slideUp(); block_hash = ''; if (block_name != 'LAST') block_hash = '?block_hash='+liste_blocks[block_name]; $.getJSON('data/getBlockInfo.php'+block_hash, function( data ) { liste_blocks['PREVIOUS'] = data.prev; liste_blocks['BLOCK_'+data.height] = data.hash; addInfoForBlock(data); toggleForwardBtn(); }); } return true; } function ajouterPreviousBlock() { // Bloquer la navigation pendant le calcul if (!flag_nav) return false; flag_nav = false; // Ajouter un div addDivForBlock(cur_height[cur_height.length-1] - 1); // Mettre les infos du block_hash = '?block_hash='+liste_blocks['PREVIOUS']; $.getJSON('data/getBlockInfo.php'+block_hash, function( data ) { liste_blocks['PREVIOUS'] = data.prev; liste_blocks['BLOCK_'+data.height] = data.hash; addInfoForBlock(data); }); } function initBlockchain(block_name) { $(document).scrollTop( $("#explorer").offset().top ); $('#blockchain').html(''); cur_height = []; cur_class = 0; flag_nav = true; block_hash = ''; if (block_name != 'LAST') block_hash = '?block_hash='+liste_blocks[block_name]; $.getJSON('data/getBlockInfo.php'+block_hash, function( data ) { addDivForBlock(data.height); addInfoForBlock(data); liste_blocks['PREVIOUS'] = data.prev; if (data.prev != '0000000000000000000000000000000000000000000000000000000000000000') gotoBlock('PREVIOUS'); else addDivForVoid(); }); return true; } function blockSelectorChange() { initBlockchain($('#blockSelector').val()); $('#fast_forward_btn').attr('data-original-title', $('#blockSelector').val()); } function initBlockSelector() { // Init the selector var select = $('#blockSelector'); if (select.length < 2) { $.each(liste_blocks, function (key, text) { select.append(new Option(key, key)); }); } } function initBlockExplorer(leblock) { initBlockSelector(); if (cur_height.length == 0) initBlockchain('LAST'); return true; } $(document).ready(function(){ blockchainListener.addBlockHook(initBlockExplorer); });