]> zoso.dev Git - libnemo.git/commitdiff
RNG directly instead of from Entropy. Tweak blake hashing call. Clarify some var...
authorChris Duncan <chris@zoso.dev>
Mon, 2 Dec 2024 06:34:08 +0000 (22:34 -0800)
committerChris Duncan <chris@zoso.dev>
Mon, 2 Dec 2024 06:34:08 +0000 (22:34 -0800)
src/lib/pow.ts
src/main.ts

index 38e9782fa01233b29f0deded01bd397a0015beea..2be8a41d865ecb678dc377f8e4b1436bf7f790bb 100644 (file)
@@ -2,9 +2,12 @@
 // SPDX-License-Identifier: GPL-3.0-or-later
 
 import { Blake2b } from './blake2b.js'
-import { Entropy } from './entropy.js'
 
 const p = () => {
+  const NONCE_BYTES = 8
+  const RECEIVE_THRESHOLD = 'fffffe0000000000'
+  const SEND_THRESHOLD = 'fffffff800000000'
+
   /**
   * Listens for messages from a calling function.
   */
@@ -18,18 +21,23 @@ const p = () => {
     postMessage(buf, [buf])
   })
 
-  function find (hash: string, threshold: string) {
-    let nonce = null
+  async function find (hash: string, threshold: string = SEND_THRESHOLD) {
+    let count = 0
+    let result = null
     do {
-      const e: Entropy = new Entropy(16)
-      const bytes: Uint8Array = parseHex(`${e.hex}${hash}`)
-      const result: string = new Blake2b(16).update(bytes).digest('hex') as string
-      const delta = BigInt(`0x${result}`) - BigInt(`0x${threshold}`)
-      if (delta >= 0) {
-        nonce = result
+      count++
+      const nonce: Uint8Array = new Uint8Array(NONCE_BYTES)
+      crypto.getRandomValues(nonce)
+      const test: string = new Blake2b(NONCE_BYTES)
+        .update(nonce)
+        .update(parseHex(hash))
+        .digest('hex') as string
+      if (count % 1000 === 0) console.log(`${count} hashes...`)
+      if (BigInt(`0x${test}`) >= BigInt(`0x${threshold}`)) {
+        result = nonce
       }
-    } while (nonce == null)
-    return nonce
+    } while (result == null)
+    return result
   }
 
   function parseHex (hex: string) {
index d836cecf7a7d714c978193b3284a482c49ac24c1..98f034e33a515d4602f8b64c48100df55e89d2f5 100644 (file)
@@ -3,10 +3,11 @@
 
 import { Account } from './lib/account.js'
 import { SendBlock, ReceiveBlock, ChangeBlock } from './lib/block.js'
+import { Pow } from './lib/pow.js'
 import { Rpc } from './lib/rpc.js'
 import { Rolodex } from './lib/rolodex.js'
 import { Safe } from './lib/safe.js'
 import Tools from './lib/tools.js'
 import { Bip44Wallet, Blake2bWallet, LedgerWallet } from './lib/wallet.js'
 
-export { Account, SendBlock, ReceiveBlock, ChangeBlock, Rpc, Rolodex, Safe, Tools, Bip44Wallet, Blake2bWallet, LedgerWallet }
+export { Account, SendBlock, ReceiveBlock, ChangeBlock, Pow, Rpc, Rolodex, Safe, Tools, Bip44Wallet, Blake2bWallet, LedgerWallet }