]> zoso.dev Git - libnemo.git/commitdiff
Move performance tests to separate file. Move warning about sending funds to test...
authorChris Duncan <chris@zoso.dev>
Mon, 18 Nov 2024 21:48:07 +0000 (13:48 -0800)
committerChris Duncan <chris@zoso.dev>
Mon, 18 Nov 2024 21:48:07 +0000 (13:48 -0800)
src/lib/wallet.ts
test/TEST_VECTORS.js
test/create-wallet.test.mjs
test/derive-accounts.test.mjs
test/import-wallet.test.mjs
test/lock-unlock-wallet.mjs
test/performance.test.mjs [new file with mode: 0644]
test/refresh-accounts.test.mjs
test/sign-blocks.test.mjs

index b180edbba3e9929db4a07b385b788b54243bb0f2..f2a79b9fb62384417b5fe844720e49096aed34ca 100644 (file)
@@ -59,6 +59,17 @@ abstract class Wallet {
 \r
        /**\r
        * Retrieves accounts from a wallet using its child key derivation function.\r
+       * Defaults to the first account at index 0.\r
+       *\r
+       * Note: The wallet index of a given requested account might not correlate with\r
+       * its index in the returned array.\r
+       *\r
+       * For example, calling `await wallet.accounts(5)` will return the sixth\r
+       * account of the wallet in the first array element position at index 0.\r
+       *\r
+       * A shorthand way of getting one specific account could be\r
+       * `const account = (await wallet.accounts(N))[0]` where N is the wallet index\r
+       * of the desired account.\r
        *\r
        * @param {number} from - Start index of secret keys. Default: 0\r
        * @param {number} to - End index of secret keys. Default: `from`\r
@@ -107,7 +118,8 @@ abstract class Wallet {
        }\r
 \r
        /**\r
-       * Refreshes wallet account balances, frontiers, and representatives from the current state on the network.\r
+       * Refreshes wallet account balances, frontiers, and representatives from the\r
+       * current state on the network.\r
        *\r
        * A successful response will set these properties on each account.\r
        *\r
index 32bfdf965508ab396c5a396f52154d4989dd7690..b3cbeac791489531289a8f2a05a2e440830a1903 100644 (file)
@@ -1,6 +1,17 @@
 // SPDX-FileCopyrightText: 2024 Chris Duncan <chris@zoso.dev>
 // SPDX-License-Identifier: GPL-3.0-or-later
 
+/**
+* WARNING      WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+*
+* Do not send any funds to the test vectors below!
+*
+* Sources:
+*      https://docs.nano.org/integration-guides/key-management/
+*      https://github.com/trezor/python-mnemonic/blob/master/vectors.json
+*      https://tools.nanos.cc/?tool=seed
+*/
+
 export const GENESIS_ADDRESS = 'nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3'
 export const RAW_MAX = '340282366920938463463374607431768211455'
 export const SUPPLY_MAX = '133248297920938463463374607431768211455'
index b1ba84b32e10325ed450ae75f2174006f325ae22..f07dbf22a8f4cde6e08f09dc3a9bacda54594456 100644 (file)
@@ -9,10 +9,7 @@ import { strict as assert } from 'assert'
 import { NANO_TEST_VECTORS } from './TEST_VECTORS.js'\r
 import { Bip44Wallet, Blake2bWallet, LedgerWallet } from '../dist/main.js'\r
 \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('creating a new wallet', async () => {\r
-\r
        it('BIP-44 wallet with random entropy', async () => {\r
                const wallet = await Bip44Wallet.create(NANO_TEST_VECTORS.PASSWORD)\r
                await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
@@ -60,21 +57,3 @@ describe('creating a new wallet', async () => {
                assert.ok(wallet)\r
        })\r
 })\r
-\r
-describe('wallet generation performance', { skip: true }, async () => {\r
-       it('performance test creating BIP-44 wallets', async () => {\r
-               const wallets = []\r
-               for (let i = 0x100; i > 0; i--) {\r
-                       wallets.push(await Bip44Wallet.create(NANO_TEST_VECTORS.PASSWORD))\r
-               }\r
-               assert.equal(wallets.length, 0x100)\r
-       })\r
-\r
-       it('performance test creating BLAKE2b wallets', async () => {\r
-               const wallets = []\r
-               for (let i = 0x100; i > 0; i--) {\r
-                       wallets.push(await Blake2bWallet.create(NANO_TEST_VECTORS.PASSWORD))\r
-               }\r
-               assert.equal(wallets.length, 0x100)\r
-       })\r
-})\r
index d35f5461de42be0e4a85ffe7443b804248620ae3..226a875ae771ac6c2b62b0e2f0015b21a3b20468 100644 (file)
@@ -9,13 +9,11 @@ import { strict as assert } from 'assert'
 import { NANO_TEST_VECTORS } from './TEST_VECTORS.js'\r
 import { Bip44Wallet, Blake2bWallet, LedgerWallet } from '../dist/main.js'\r
 \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
        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
+       it('should derive the first account from the given BIP-44 seed', async () => {\r
                const accounts = await wallet.accounts()\r
 \r
                assert.equal(accounts.length, 1)\r
@@ -24,7 +22,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
+       it('should derive low indexed accounts from the given BIP-44 seed', async () => {\r
                const accounts = await wallet.accounts(1, 2)\r
 \r
                assert.equal(accounts.length, 2)\r
@@ -36,7 +34,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
+       it('should derive high indexed accounts from the given seed', async () => {\r
                const accounts = await wallet.accounts(0x70000000, 0x700000ff)\r
 \r
                assert.equal(accounts.length, 0x100)\r
@@ -49,7 +47,7 @@ describe('derive child accounts from the same seed', async () => {
                }\r
        })\r
 \r
-       it('should derive accounts for a BLAKE2b wallet', async function () {\r
+       it('should derive accounts for a BLAKE2b wallet', async () => {\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
@@ -74,12 +72,9 @@ describe('derive child accounts from the same seed', async () => {
                        assert.ok(a.index != null)\r
                }\r
        })\r
-})\r
-\r
-describe('Ledger device accounts', { skip: true }, async () => {\r
-       const wallet = await LedgerWallet.create()\r
 \r
-       it('should fetch the first account from a Ledger device', async function () {\r
+       it('should fetch the first account from a Ledger device', { skip: true }, async () => {\r
+               const wallet = await LedgerWallet.create()\r
                const accounts = await wallet.accounts()\r
 \r
                assert.equal(accounts.length, 1)\r
@@ -87,23 +82,3 @@ describe('Ledger device accounts', { skip: true }, async () => {
                assert.ok(accounts[0].address)\r
        })\r
 })\r
-\r
-describe('child key derivation performance', { skip: true }, async () => {\r
-       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
-               const accounts = await wallet.accounts(0, 0x7fff)\r
-\r
-               assert.equal(accounts.length, 0x8000)\r
-       })\r
-\r
-       it('performance test of BLAKE2b ckd', async () => {\r
-               const wallet = await Blake2bWallet.create(NANO_TEST_VECTORS.PASSWORD)\r
-               await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)\r
-\r
-               const accounts = await wallet.accounts(0, 0x7fff)\r
-\r
-               assert.equal(accounts.length, 0x8000)\r
-       })\r
-})\r
index 30bc54276c8a6fbcce8c5fee6b9ae4c9370a173e..1ac1954a93f90b681c5c87b8699fb48395a1e47e 100644 (file)
@@ -9,8 +9,6 @@ import { strict as assert } from 'assert'
 import { BIP32_TEST_VECTORS, CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS, TREZOR_TEST_VECTORS } from './TEST_VECTORS.js'\r
 import { Account, Bip44Wallet, Blake2bWallet } from '../dist/main.js'\r
 \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('import wallet with test vectors test', () => {\r
        it('should successfully import a wallet with the official Nano test vectors mnemonic', async () => {\r
                const wallet = await Bip44Wallet.fromMnemonic(NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
index a67089fed3b6cbe090e0584e6587bcd84c4f3d48..e75b1097bacecf767d6052599549436211113cba 100644 (file)
@@ -11,8 +11,6 @@ import { Bip44Wallet, Blake2bWallet } from '../dist/main.js'
 \r
 const skip = false\r
 \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('locking and unlocking a Bip44Wallet', { skip }, async () => {\r
        it('should succeed with a password', async () => {\r
                const wallet = await Bip44Wallet.fromMnemonic(NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD)\r
diff --git a/test/performance.test.mjs b/test/performance.test.mjs
new file mode 100644 (file)
index 0000000..d7bd28e
--- /dev/null
@@ -0,0 +1,50 @@
+// SPDX-FileCopyrightText: 2024 Chris Duncan <chris@zoso.dev>
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+'use strict'
+
+import './GLOBALS.mjs'
+import { describe, it } from 'node:test'
+import { strict as assert } from 'assert'
+import { NANO_TEST_VECTORS } from './TEST_VECTORS.js'
+import { Bip44Wallet, Blake2bWallet } from '../dist/main.js'
+
+const skip = true
+
+describe('wallet generation performance', { skip }, async () => {
+       it('performance test creating BIP-44 wallets', async () => {
+               const wallets = []
+               for (let i = 0x80; i > 0; i--) {
+                       wallets.push(await Bip44Wallet.create(NANO_TEST_VECTORS.PASSWORD))
+               }
+               assert.equal(wallets.length, 0x80)
+       })
+
+       it('performance test creating BLAKE2b wallets', async () => {
+               const wallets = []
+               for (let i = 0x80; i > 0; i--) {
+                       wallets.push(await Blake2bWallet.create(NANO_TEST_VECTORS.PASSWORD))
+               }
+               assert.equal(wallets.length, 0x80)
+       })
+})
+
+describe('child key derivation performance', { skip }, async () => {
+       it('performance test of BIP-44 ckd', async () => {
+               const wallet = await Bip44Wallet.create(NANO_TEST_VECTORS.PASSWORD)
+               await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+
+               const accounts = await wallet.accounts(0, 0x7fff)
+
+               assert.equal(accounts.length, 0x8000)
+       })
+
+       it('performance test of BLAKE2b ckd', async () => {
+               const wallet = await Blake2bWallet.create(NANO_TEST_VECTORS.PASSWORD)
+               await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
+
+               const accounts = await wallet.accounts(0, 0x7fff)
+
+               assert.equal(accounts.length, 0x8000)
+       })
+})
index 9dc71ccfc00d2dc5a84803e0f0c7e7fdac4a49b8..52636acfadbf0f449a5f5c6bf6ab2863333f6725 100644 (file)
@@ -9,9 +9,6 @@ import { strict as assert } from 'assert'
 import { NANO_TEST_VECTORS } from './TEST_VECTORS.js'
 import { Account, Bip44Wallet, Rpc } from '../dist/main.js'
 
-// WARNING: Do not send any funds to the test vectors below
-// Test vectors from https://docs.nano.org/integration-guides/key-management/ and elsewhere
-
 const wallet = await Bip44Wallet.fromSeed(NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED)
 await wallet.unlock(NANO_TEST_VECTORS.PASSWORD)
 const node = new Rpc(process.env.NODE_URL, process.env.API_KEY_NAME, process.env.API_KEY_VALUE)
index 06b179093d7c77047f2ebc586b754bdd53d1a2dd..e1e676b1425478a3b9b933af47412e3a942392e6 100644 (file)
@@ -9,8 +9,6 @@ import { strict as assert } from 'assert'
 import { NANO_TEST_VECTORS } from './TEST_VECTORS.js'\r
 import { SendBlock, ReceiveBlock, ChangeBlock } from '../dist/main.js'\r
 \r
-// WARNING: Do not send any funds to the test vectors below\r
-// Test vectors from https://docs.nano.org/integration-guides/key-management/\r
 describe('valid blocks', async () => {\r
        it('should not allow negative balances', async () => {\r
                assert.throws(() => {\r