]> zoso.dev Git - libnemo.git/commitdiff
w
authorChris Duncan <chris@zoso.dev>
Sat, 9 Nov 2024 08:53:33 +0000 (00:53 -0800)
committerChris Duncan <chris@zoso.dev>
Sat, 9 Nov 2024 08:53:33 +0000 (00:53 -0800)
src/lib/ckd.ts
src/lib/pool.ts
test/derive-accounts.test.mjs

index f7e2d050d9ee7c7b6fe4baabb7e8131c70c804c4..67e1a2835973ce213f4f619801bf63cf0d4dfccc 100644 (file)
@@ -13,7 +13,7 @@ import type { Ledger } from './ledger.js'
 * @param {number} index - Index of the account
 * @returns {Promise<Account>}
 */
-onmessage = async (event) => {
+globalThis.onmessage = async (event) => {
        let result = null
        const { type, seed, index } = event.data
        switch (type) {
index a07087c3ba5ce85cc498fa8abeb00a64f10a8597..e5afa1b9fc11671e93a6c22b38c6998c9949f3bf 100644 (file)
@@ -2,6 +2,12 @@
 // SPDX-License-Identifier: GPL-3.0-or-later
 
 const Worker = globalThis.Worker ?? (await import('node:worker_threads')).Worker
+
+type Thread = {
+       worker: Worker,
+       tasks: any[],
+       isAvailable: boolean
+}
 /**
 * Assigns a Web Worker to process data. Creates a new one if none are available.
 *
@@ -11,16 +17,16 @@ const Worker = globalThis.Worker ?? (await import('node:worker_threads')).Worker
 * @returns {boolean} True if the data was signed by the public key's matching private key
 */
 export class Pool {
-       #threads
+       #threads: Thread[] = new Array()
        #url
 
        constructor (url: string | URL) {
                this.#url = new URL(url, import.meta.url)
                this.#threads = [...Array(navigator.hardwareConcurrency)]
-               this.#threads.forEach(slot => {
-                       slot = {
+               this.#threads = this.#threads.map(() => {
+                       return {
                                worker: new Worker(this.#url),
-                               tasks: [],
+                               tasks: new Array(),
                                get isAvailable () { return this.tasks.length === 0 }
                        }
                })
@@ -29,7 +35,7 @@ export class Pool {
        async work (data: object): Promise<any> {
                return new Promise((resolve) => {
                        const thread = this.#threads.reduce((curr, next) => {
-                               next.tasks.length < curr.tasks.length
+                               return (next.tasks.length < curr.tasks.length)
                                        ? next
                                        : curr
                        })
index 1b0864e35b2c4f7f602a77211ff30fd5891b23b2..0765017d555a793e2a72d8537789a0b5406986c4 100644 (file)
@@ -12,11 +12,11 @@ const skip = true
 \r
 // WARNING: Do not send any funds to the test vectors below\r
 // Test vectors from https://docs.nano.org/integration-guides/key-management/ and elsewhere\r
-describe('derive child accounts from the same seed', async () => {\r
+describe('derive child accounts from the same seed', async function () {\r
        const wallet = await Bip44Wallet.fromSeed(NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)\r
        await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
 \r
-       it('should derive the first account from the given BIP-44 seed', async function () {\r
+       await it('should derive the first account from the given BIP-44 seed', async function () {\r
                const accounts = await wallet.accounts()\r
 \r
                assert.equal(accounts.length, 1)\r
@@ -25,7 +25,7 @@ describe('derive child accounts from the same seed', async () => {
                assert.equal(accounts[0].address, NANO_TEST_VECTORS.ADDRESS_0)\r
        })\r
 \r
-       it('should derive low indexed accounts from the given BIP-44 seed', async function () {\r
+       await it('should derive low indexed accounts from the given BIP-44 seed', async function () {\r
                const accounts = await wallet.accounts(1, 2)\r
 \r
                assert.equal(accounts.length, 2)\r
@@ -37,7 +37,7 @@ describe('derive child accounts from the same seed', async () => {
                assert.equal(accounts[1].address, NANO_TEST_VECTORS.ADDRESS_2)\r
        })\r
 \r
-       it('should derive high indexed accounts from the given seed', async function () {\r
+       await it('should derive high indexed accounts from the given seed', async function () {\r
                const accounts = await wallet.accounts(0x70000000, 0x700000ff)\r
 \r
                assert.equal(accounts.length, 0x100)\r
@@ -50,7 +50,7 @@ describe('derive child accounts from the same seed', async () => {
                }\r
        })\r
 \r
-       it('should derive accounts for a BLAKE2b wallet', async function () {\r
+       await it('should derive accounts for a BLAKE2b wallet', async function () {\r
                const bwallet = await Blake2bWallet.create(NANO_TEST_VECTORS.PASSWORD)\r
                await bwallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
                const lowAccounts = await bwallet.accounts(0, 2)\r
@@ -90,7 +90,7 @@ describe('Ledger device accounts', { skip: true }, async () => {
 })\r
 \r
 describe('child key derivation performance', { skip }, async () => {\r
-       it('performance test of BIP-44 ckd', async function () {\r
+       await it('performance test of BIP-44 ckd', async function () {\r
                const wallet = await Bip44Wallet.create(NANO_TEST_VECTORS.PASSWORD)\r
                await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
 \r
@@ -99,7 +99,7 @@ describe('child key derivation performance', { skip }, async () => {
                assert.equal(accounts.length, 0x8000)\r
        })\r
 \r
-       it('performance test of BLAKE2b ckd', async function () {\r
+       await it('performance test of BLAKE2b ckd', async function () {\r
                const wallet = await Blake2bWallet.create(NANO_TEST_VECTORS.PASSWORD)\r
                await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
 \r