gaybook/static/proof-of-work.js

33 lines
1 KiB
JavaScript
Raw Permalink Normal View History

2023-06-01 09:48:52 +00:00
const generateButton = document.getElementById("generate-pow");
generateButton.style.display = "block";
const usernameField = document.getElementById("username");
const messageField = document.getElementById("message");
const powField = document.getElementById("proof-of-work");
const hash = (message) =>
crypto.subtle.digest("SHA-1",
(new TextEncoder()).encode(message)
);
const isValidHash = (hashBuffer) =>
Array.from(new Uint8Array(hashBuffer))
.map(byte => byte.toString(16).padStart(2, "0"))
.join("").startsWith("00000");
const messageBase = () => usernameField.value + "\0" + messageField.value + "\0";
generateButton.onclick = async (event) => {
event.preventDefault();
const base = messageBase();
let currentNonce = 0;
powField.disabled = true;
powField.value = "Generating... Please wait";
console.log("Starting PoW generation, this may take a while....");
while (!isValidHash(await hash(base + currentNonce)))
++currentNonce;
console.log("Done!");
powField.value = currentNonce;
powField.disabled = false;
};