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; };