##// END OF EJS Templates
Use shared workers for favorites update script
Use shared workers for favorites update script

File last commit:

r1462:dde38eed default
r1463:437271ff default
Show More
proof_of_work.js
63 lines | 1.7 KiB | application/javascript | JavascriptLexer
neko259
Added PoW instead of 30-second captcha
r1428 var POW_COMPUTING_TIMEOUT = 2;
var POW_HASH_LENGTH = 16;
neko259
Make pow script be a shared worker
r1462 var hasher;
neko259
Added PoW instead of 30-second captcha
r1428
neko259
Make pow script be a shared worker
r1462
function computeHash(iteration, guess, target, payload, timestamp, hasher, port) {
neko259
Added PoW instead of 30-second captcha
r1428 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
};
neko259
Make pow script be a shared worker
r1462 port.postMessage(data);
neko259
Added PoW instead of 30-second captcha
r1428 } else {
//console.log("Iteration: ", iteration);
//console.log("Guess: ", guess);
//console.log("Target: ", target);
setTimeout(function() {
neko259
Make pow script be a shared worker
r1462 computeHash(iteration, guess, target, payload, timestamp, hasher, port);
neko259
Added PoW instead of 30-second captcha
r1428 }, POW_COMPUTING_TIMEOUT);
}
}
neko259
Make pow script be a shared worker
r1462 function doWork(message, hasher, difficulty, port) {
neko259
Added PoW instead of 30-second captcha
r1428 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() {
neko259
Make pow script be a shared worker
r1462 computeHash(iteration, guess, target, payload, timestamp, hasher, port);
neko259
Added PoW instead of 30-second captcha
r1428 }, POW_COMPUTING_TIMEOUT);
}
neko259
Make pow script be a shared worker
r1462 onconnect = function(e) {
var port = e.ports[0];
port.start();
port.onmessage = function(e) {
var difficulty = e.data.difficulty;
importScripts(e.data.hasher);
var hasher = CryptoJS.SHA256;
self.doWork(e.data.msg, hasher, difficulty, port);
};
}