33 lines
No EOL
1 KiB
JavaScript
33 lines
No EOL
1 KiB
JavaScript
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;
|
|
}; |