##// END OF EJS Templates
Merged with default branch
Merged with default branch

File last commit:

r1431:ead4e49c default
r1441:f2404e3c merge decentral
Show More
proof_of_work.js
54 lines | 1.5 KiB | application/javascript | JavascriptLexer
neko259
Added PoW instead of 30-second captcha
r1428 var POW_COMPUTING_TIMEOUT = 2;
var POW_HASH_LENGTH = 16;
function computeHash(iteration, guess, target, payload, timestamp, hasher) {
iteration += 1;
var hash = hasher(payload + iteration).toString();
guess = hash.substring(0, POW_HASH_LENGTH);
if (guess <= target) {
neko259
Fixed bug in PoW in Chrome. Recompiled translations after merging 2 different features (BB-83)
r1431 //console.log("Iteration: ", iteration);
//console.log("Guess: ", guess);
//console.log("Target: ", target);
neko259
Added PoW instead of 30-second captcha
r1428
var data = {
iteration: iteration,
timestamp: timestamp,
guess: guess
};
self.postMessage(data);
} else {
//console.log("Iteration: ", iteration);
//console.log("Guess: ", guess);
//console.log("Target: ", target);
setTimeout(function() {
computeHash(iteration, guess, target, payload, timestamp, hasher);
}, POW_COMPUTING_TIMEOUT);
}
}
function doWork(message, hasher, difficulty) {
var timestamp = Date.now();
var iteration = 0;
var payload = timestamp + message;
var target = parseInt(Math.pow(2, POW_HASH_LENGTH * 3) / difficulty).toString();
while (target.length < POW_HASH_LENGTH) {
target = '0' + target;
}
var guess = target + '0';
setTimeout(function() {
computeHash(iteration, guess, target, payload, timestamp, hasher);
}, POW_COMPUTING_TIMEOUT);
}
self.onmessage = function(e) {
var difficulty = e.data.difficulty;
importScripts(e.data.hasher);
var hasher = CryptoJS.SHA256;
self.doWork(e.data.msg, hasher, difficulty);
};