var difficulty = 5; // number of zeros required at front of hash var maximumNonce = 50000000; // limit the nonce to this so we don't mine too long var data = [];

// NOTE: Because there are 16 possible characters in a hex value, each time you increment // the difficulty by one you make the puzzle 16 times harder. In my testing, a difficulty // of 6 requires a maximumNonce well over 500,000,000.

///////////////////////// // global variable setup ///////////////////////// var pattern = ''; for (var x = 0; x < difficulty; x++) { pattern += '0'; }

// Generate data for (var i = 1; i <= 1000; i++) { data.push(i); }

///////////////////////// // functions /////////////////////////

function sha256(block, chain) { // calculate a SHA256 hash of the contents of the block return CryptoJS.SHA256(getText(block, chain)); }

function updateState(block, chain) { // set the well background red or green for this block if ($('#block' + block + 'chain' + chain + 'hash').val().substr(0, difficulty) === pattern) { $('#block' + block + 'chain' + chain + 'well').removeClass('well-error').addClass('well-success'); } else { $('#block' + block + 'chain' + chain + 'well').removeClass('well-success').addClass('well-error'); } }

function updateHash(block, chain) { // update the SHA256 hash value for this block $('#block' + block + 'chain' + chain + 'hash').val(sha256(block, chain)); updateState(block, chain); }

function updateChain(block, chain) { // update all blocks walking the chain from this block to the end for (var x = block; x <= 5; x++) { if (x > 1) { $('#block' + x + 'chain' + chain + 'previous').val($('#block' + (x - 1).toString() + 'chain' + chain + 'hash').val()); } updateHash(x, chain); } }

function mine(block, chain, isChain) { console.log("Here I start!"); var t0 = performance.now(); for (var x = 0; x <= maximumNonce; x++) { $('#block' + block + 'chain' + chain + 'nonce').val(x); $('#block' + block + 'chain' + chain + 'hash').val(sha256(block, chain)); if ($('#block' + block + 'chain' + chain + 'hash').val().substr(0, difficulty) === pattern) { if (isChain) { updateChain(block, chain); } else { updateState(block, chain); } break; } } var t1 = performance.now(); console.log("Call to someFunction took " + Math.floor(t1 - t0) + " milliseconds."); }

var totalMiningTime = 0; for (var i = 0; i < 300; i++) { for (var j = 0; j < data.length; j++) { mine(data[j], 1, false); } totalMiningTime += (t1 - t0); }

var averageMiningTime = totalMiningTime / 300; console.log("Average mining time: " + Math.floor(averageMiningTime) + " milliseconds")

在下列代码中修改给出完整代码和备注要求不需要依赖手工输入用编程的方式依次产生区块内的数据如下:1 2 3 999 1000共计1千个输入。进行300次挖矿并统计所消耗的平均时间。输出 数据+次数以及平均时间var difficulty = 5; number of zeros required at front of hashvar maximumNonce = 5000000

原文地址: https://www.cveoy.top/t/topic/hx0n 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录