From 43775f3606db5afa26df05d0663a6f56d8825af0 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Mon, 3 Aug 2026 23:39:35 -0700 Subject: [PATCH] Fix testing password versus mnemonic salt. --- test/VECTORS.mjs | 31 ++++++------ test/test.blocks.mjs | 28 +++++------ test/test.create-wallet.mjs | 18 +++---- test/test.derive-accounts.mjs | 51 +++++++++---------- test/test.import-wallet.mjs | 92 +++++++++++++++++----------------- test/test.lock-unlock.mjs | 47 ++++++++--------- test/test.refresh-accounts.mjs | 50 +++++++++--------- test/test.runner-check.mjs | 4 +- test/test.tools.mjs | 6 +-- test/test.wallet-sign.mjs | 14 +++--- 10 files changed, 169 insertions(+), 172 deletions(-) diff --git a/test/VECTORS.mjs b/test/VECTORS.mjs index d2e8c80..da2ffe3 100644 --- a/test/VECTORS.mjs +++ b/test/VECTORS.mjs @@ -2,22 +2,23 @@ //! 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/the-basics/#seed -* https://docs.nano.org/integration-guides/key-management/#test-vectors -* https://docs.nano.org/integration-guides/key-management/#creating-transactions -* https://github.com/trezor/python-mnemonic/blob/master/vectors.json -* https://tools.nanos.cc/?tool=seed -* https://github.com/BLAKE2/BLAKE2/blob/master/testvectors/blake2b-kat.txt -* https://github.com/emilbayes/blake2b/blob/master/test-vectors.json#L514-L577 -*/ + * 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/the-basics/#seed + * https://docs.nano.org/integration-guides/key-management/#test-vectors + * https://docs.nano.org/integration-guides/key-management/#creating-transactions + * https://github.com/trezor/python-mnemonic/blob/master/vectors.json + * https://tools.nanos.cc/?tool=seed + * https://github.com/BLAKE2/BLAKE2/blob/master/testvectors/blake2b-kat.txt + * https://github.com/emilbayes/blake2b/blob/master/test-vectors.json#L514-L577 + */ export const GENESIS_ADDRESS = 'nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3' export const MAX_RAW = 0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFFn export const MAX_SUPPLY = 133_248_297_920_938_463_463_374_607_431_768_211_455n +export const TEST_PASSWORD = crypto.randomUUID() export const NANO_TEST_VECTORS = Object.freeze({ // from nano.org python sample code @@ -29,7 +30,7 @@ export const NANO_TEST_VECTORS = Object.freeze({ // from nano.org test vectors MNEMONIC: 'edge defense waste choose enrich upon flee junk siren film clown finish luggage leader kid quick brick print evidence swap drill paddle truly occur', - PASSWORD: crypto.randomUUID(), + MNEMONIC_SALT: 'some password', BIP39_SEED: '0DC285FDE768F7FF29B66CE7252D56ED92FE003B605907F7A4F683C3DC8586D34A914D3C71FC099BB38EE4A59E5B081A3497B7A323E90CC68F67B5837690310C', PRIVATE_0: '3BE4FC2EF3F3B7374E6FC4FB6E7BB153F8A2998B3B3DAB50853EABE128024143', @@ -81,7 +82,7 @@ export const NANO_TEST_VECTORS = Object.freeze({ }) export const TREZOR_TEST_VECTORS = Object.freeze({ - PASSWORD: 'TREZOR', + MNEMONIC_SALT: 'TREZOR', ENTROPY_0: "0000000000000000000000000000000000000000000000000000000000000000", MNEMONIC_0: "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art", diff --git a/test/test.blocks.mjs b/test/test.blocks.mjs index a82a52d..0ec641a 100644 --- a/test/test.blocks.mjs +++ b/test/test.blocks.mjs @@ -1,11 +1,9 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -'use strict' - import { Block, Rpc, Wallet } from 'libnemo' import { assert, click, isNode, suite, test } from './GLOBALS.mjs' -import { CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS } from './VECTORS.mjs' +import { CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS, TEST_PASSWORD } from './VECTORS.mjs' await Promise.all([ suite('Block processing', async () => { @@ -104,12 +102,12 @@ await Promise.all([ }), suite('Block signing using official test vectors', async () => { - const { ADDRESS_0, BIP39_SEED, BLAKE2B_ADDRESS_1, BLAKE2B_PUBLIC_1, BLAKE2B_SEED, OPEN_BLOCK, PASSWORD, PUBLIC_0, PRIVATE_0, RECEIVE_BLOCK, SEND_BLOCK } = NANO_TEST_VECTORS + const { ADDRESS_0, BIP39_SEED, BLAKE2B_ADDRESS_1, BLAKE2B_PUBLIC_1, BLAKE2B_SEED, OPEN_BLOCK, PUBLIC_0, PRIVATE_0, RECEIVE_BLOCK, SEND_BLOCK } = NANO_TEST_VECTORS const { EXODUS, LEDGER_NANOS } = CUSTOM_TEST_VECTORS await test('sign open block with BLAKE2b wallet', async () => { - const wallet = await Wallet.load('BLAKE2b', PASSWORD, BLAKE2B_SEED) - await assert.resolves(wallet.unlock(PASSWORD)) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, BLAKE2B_SEED) + await assert.resolves(wallet.unlock(TEST_PASSWORD)) const block = new Block(BLAKE2B_ADDRESS_1, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative) .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance) @@ -125,8 +123,8 @@ await Promise.all([ }) await test('sign open block with BIP-44 wallet', async () => { - const wallet = await Wallet.load('BIP-44', PASSWORD, BIP39_SEED) - await assert.resolves(wallet.unlock(PASSWORD)) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, BIP39_SEED) + await assert.resolves(wallet.unlock(TEST_PASSWORD)) const block = new Block(ADDRESS_0, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative) .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance) @@ -142,8 +140,8 @@ await Promise.all([ }) await test('sign open block with Exodus wallet', async () => { - const wallet = await Wallet.load('Exodus', PASSWORD, EXODUS.BIP39_SEED_0) - await assert.resolves(wallet.unlock(PASSWORD)) + const wallet = await Wallet.load('Exodus', TEST_PASSWORD, EXODUS.BIP39_SEED_0) + await assert.resolves(wallet.unlock(TEST_PASSWORD)) const block = new Block(EXODUS.ADDRESS_0, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative) .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance) @@ -159,8 +157,8 @@ await Promise.all([ }) await test('fail to sign open block with wallet without user activation', { skip: isNode }, async () => { - const wallet = await Wallet.load('BIP-44', PASSWORD, BIP39_SEED) - await assert.resolves(wallet.unlock(PASSWORD)) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, BIP39_SEED) + await assert.resolves(wallet.unlock(TEST_PASSWORD)) const block = new Block(ADDRESS_0, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative) .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance) @@ -171,7 +169,7 @@ await Promise.all([ }) await test('fail to sign open block with wallet when locked', async () => { - const wallet = await Wallet.load('BIP-44', PASSWORD, BIP39_SEED) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, BIP39_SEED) const block = new Block(ADDRESS_0, '0', OPEN_BLOCK.previous, OPEN_BLOCK.representative) .receive(OPEN_BLOCK.link, OPEN_BLOCK.balance) @@ -234,8 +232,8 @@ await Promise.all([ }) await test('sign Ledger-derived open block', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, LEDGER_NANOS.MNEMONIC) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, LEDGER_NANOS.MNEMONIC) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.equal(account.publicKey, LEDGER_NANOS.PUBLIC_0) assert.equal(account.address, LEDGER_NANOS.ADDRESS_0) diff --git a/test/test.create-wallet.mjs b/test/test.create-wallet.mjs index 3400960..dda8f56 100644 --- a/test/test.create-wallet.mjs +++ b/test/test.create-wallet.mjs @@ -5,22 +5,20 @@ import { Wallet } from 'libnemo' import { assert, suite, test } from './GLOBALS.mjs' -import { NANO_TEST_VECTORS } from './VECTORS.mjs' +import { TEST_PASSWORD } from './VECTORS.mjs' await Promise.all([ suite('Create wallets', async () => { - const { PASSWORD } = NANO_TEST_VECTORS - await test('destroy BIP-44 wallet before unlocking', async () => { - const wallet = await Wallet.create('BIP-44', PASSWORD) + const wallet = await Wallet.create('BIP-44', TEST_PASSWORD) await assert.resolves(wallet.destroy()) - await assert.rejects(wallet.unlock(PASSWORD)) + await assert.rejects(wallet.unlock(TEST_PASSWORD)) }) await test('BIP-44 wallet with random entropy', async () => { - const wallet = await Wallet.create('BIP-44', PASSWORD) - await wallet.unlock(PASSWORD) + const wallet = await Wallet.create('BIP-44', TEST_PASSWORD) + await wallet.unlock(TEST_PASSWORD) assert.ok('id' in wallet) assert.ok(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(wallet.id)) @@ -40,8 +38,8 @@ await Promise.all([ }) await test('BLAKE2b wallet with random entropy', async () => { - const wallet = await Wallet.create('BLAKE2b', PASSWORD) - await wallet.unlock(PASSWORD) + const wallet = await Wallet.create('BLAKE2b', TEST_PASSWORD) + await wallet.unlock(TEST_PASSWORD) assert.ok('id' in wallet) assert.ok(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(wallet.id)) @@ -64,7 +62,7 @@ await Promise.all([ const invalidArgs = [null, true, false, 0, 1, 2, { foo: 'bar' }] for (const arg of invalidArgs) { //@ts-expect-error - await assert.rejects(Wallet.create('BIP-44', PASSWORD, arg)) + await assert.rejects(Wallet.create('BIP-44', TEST_PASSWORD, arg)) } }) diff --git a/test/test.derive-accounts.mjs b/test/test.derive-accounts.mjs index 3a40b28..de7a935 100644 --- a/test/test.derive-accounts.mjs +++ b/test/test.derive-accounts.mjs @@ -5,14 +5,14 @@ import { Wallet } from 'libnemo' import { assert, suite, test } from './GLOBALS.mjs' -import { CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS } from './VECTORS.mjs' +import { CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS, TEST_PASSWORD } from './VECTORS.mjs' await Promise.all([ suite('Derive accounts from BIP-44 wallet', async () => { await test('derive the first account from the given BIP-44 seed', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.equal(account.publicKey, NANO_TEST_VECTORS.PUBLIC_0) @@ -26,8 +26,8 @@ await Promise.all([ }) await test('derive low indexed accounts from the given BIP-44 seed', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.accounts(1, 2) assert.equal(accounts.size, 2) @@ -46,8 +46,8 @@ await Promise.all([ }) await test('derive high indexed accounts from the given BIP-44 seed', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.accounts(0x70000000, 0x7000000f) assert.equal(accounts.size, 0x10) @@ -62,9 +62,9 @@ await Promise.all([ }) await test('derive from restored BIP-44 wallet', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) const restored = await Wallet.restore(wallet.id) - await restored.unlock(NANO_TEST_VECTORS.PASSWORD) + await restored.unlock(TEST_PASSWORD) const account = await restored.account() assert.equal(account.publicKey, NANO_TEST_VECTORS.PUBLIC_0) @@ -82,8 +82,8 @@ await Promise.all([ suite('Derive accounts from BLAKE2b wallet', async () => { await test('derive the second account from the given BLAKE2b seed', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account(1) assert.equal(account.publicKey, NANO_TEST_VECTORS.BLAKE2B_PUBLIC_1) @@ -100,8 +100,8 @@ await Promise.all([ }) await test('derive low indexed accounts from the given BLAKE2b seed', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.accounts(2, 3) assert.equal(accounts.size, 2) @@ -120,8 +120,8 @@ await Promise.all([ }) await test('derive high indexed accounts from the given BLAKE2b seed', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.accounts(0x70000000, 0x7000000f) assert.equal(accounts.size, 0x10) @@ -136,9 +136,9 @@ await Promise.all([ }) await test('derive from restored BLAKE2b wallet', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, NANO_TEST_VECTORS.BLAKE2B_SEED) const restored = await Wallet.restore(wallet.id) - await restored.unlock(NANO_TEST_VECTORS.PASSWORD) + await restored.unlock(TEST_PASSWORD) const account = await restored.account(1) assert.equal(account.publicKey, NANO_TEST_VECTORS.BLAKE2B_PUBLIC_1) @@ -154,12 +154,11 @@ await Promise.all([ }), suite('Derive accounts from Exodus wallet', async () => { - const { PASSWORD } = NANO_TEST_VECTORS const { ADDRESS_0, ADDRESS_1, BIP39_SEED_0, BIP39_SEED_1, PUBLIC_0, PUBLIC_1 } = CUSTOM_TEST_VECTORS.EXODUS await test('derive the first account from the given Exodus seed', async () => { - const wallet = await Wallet.load('Exodus', PASSWORD, BIP39_SEED_0) - await wallet.unlock(PASSWORD) + const wallet = await Wallet.load('Exodus', TEST_PASSWORD, BIP39_SEED_0) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.equal(account.publicKey, PUBLIC_0) @@ -173,8 +172,8 @@ await Promise.all([ }) await test('derive low indexed accounts from the given Exodus seed', async () => { - const wallet = await Wallet.load('Exodus', PASSWORD, BIP39_SEED_1) - await wallet.unlock(PASSWORD) + const wallet = await Wallet.load('Exodus', TEST_PASSWORD, BIP39_SEED_1) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.accounts(1, 2) assert.equal(accounts.size, 2) @@ -195,8 +194,8 @@ await Promise.all([ }) await test('derive high indexed accounts from the given Exodus seed', async () => { - const wallet = await Wallet.load('Exodus', PASSWORD, BIP39_SEED_0) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('Exodus', TEST_PASSWORD, BIP39_SEED_0) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.accounts(0x70000000, 0x7000000f) assert.equal(accounts.size, 0x10) @@ -211,9 +210,9 @@ await Promise.all([ }) await test('derive from restored Exodus wallet', async () => { - const wallet = await Wallet.load('Exodus', PASSWORD, BIP39_SEED_0) + const wallet = await Wallet.load('Exodus', TEST_PASSWORD, BIP39_SEED_0) const restored = await Wallet.restore(wallet.id) - await restored.unlock(PASSWORD) + await restored.unlock(TEST_PASSWORD) const account = await restored.account() assert.equal(account.publicKey, PUBLIC_0) diff --git a/test/test.import-wallet.mjs b/test/test.import-wallet.mjs index 669856a..ec4ac65 100644 --- a/test/test.import-wallet.mjs +++ b/test/test.import-wallet.mjs @@ -5,14 +5,14 @@ import { Account, Wallet } from 'libnemo' import { assert, suite, test } from './GLOBALS.mjs' -import { BIP32_TEST_VECTORS, CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS, TREZOR_TEST_VECTORS } from './VECTORS.mjs' +import { CUSTOM_TEST_VECTORS, NANO_TEST_VECTORS, TEST_PASSWORD, TREZOR_TEST_VECTORS } from './VECTORS.mjs' await Promise.all([ suite('Import wallets', async () => { await test('nano.org BIP-44 test vector mnemonic', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.ok(await wallet.verify(NANO_TEST_VECTORS.MNEMONIC)) @@ -25,8 +25,8 @@ await Promise.all([ }) await test('nano.org BIP-44 test vector seed with no mnemonic', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.ok('mnemonic' in wallet) @@ -41,8 +41,8 @@ await Promise.all([ }) await test('Trezor-derived BIP-44 entropy for 12-word mnemonic', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_0) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_0) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.MNEMONIC_0)) @@ -54,8 +54,8 @@ await Promise.all([ }) await test('Trezor-derived BIP-44 entropy for 15-word mnemonic', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_1) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_1) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.MNEMONIC_1)) @@ -67,8 +67,8 @@ await Promise.all([ }) await test('Trezor-derived BIP-44 entropy for 18-word mnemonic', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_2) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_2) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.MNEMONIC_2)) @@ -80,8 +80,8 @@ await Promise.all([ }) await test('Trezor-derived BIP-44 entropy for 21-word mnemonic', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_3) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, CUSTOM_TEST_VECTORS.MNEMONIC_3) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.MNEMONIC_3)) @@ -93,8 +93,8 @@ await Promise.all([ }) await test('BIP-44 zero-string entropy', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_0, TREZOR_TEST_VECTORS.PASSWORD) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_0, TREZOR_TEST_VECTORS.MNEMONIC_SALT) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.accounts(0, 3) assert.ok('mnemonic' in wallet) @@ -114,8 +114,8 @@ await Promise.all([ }) await test('BLAKE2b zero-string seed', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_0) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_0) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.accounts(0, 3) assert.ok('mnemonic' in wallet) @@ -137,8 +137,8 @@ await Promise.all([ }) await test('Trezor-derived BLAKE2b test vectors verified with third-party libraries', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_1) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_1) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.accounts(0, 1) assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.MNEMONIC_1)) @@ -160,15 +160,15 @@ await Promise.all([ }) await test('BLAKE2b seed creates identical wallet as its derived mnemonic', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_2) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_2) + await wallet.unlock(TEST_PASSWORD) const walletAccount = await wallet.account() assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.MNEMONIC_2)) assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.ENTROPY_2)) - const imported = await Wallet.load('BLAKE2b', TREZOR_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_2) - await imported.unlock(TREZOR_TEST_VECTORS.PASSWORD) + const imported = await Wallet.load('BLAKE2b', TREZOR_TEST_VECTORS.MNEMONIC_SALT, TREZOR_TEST_VECTORS.MNEMONIC_2) + await imported.unlock(TREZOR_TEST_VECTORS.MNEMONIC_SALT) const importedAccount = await imported.account() assert.ok(await imported.verify(TREZOR_TEST_VECTORS.MNEMONIC_2)) @@ -180,8 +180,8 @@ await Promise.all([ }) await test('BLAKE2b mnemonic for maximum seed value', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_3) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.MNEMONIC_3) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.ok(account instanceof Account) @@ -194,27 +194,27 @@ await Promise.all([ }) await test('Reject invalid seed', async () => { - await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, '6CAF5A42BB8074314AAE20295975ECE663BE7AAD945A73613D193B0CC41C797')) - await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, '6CAF5A42BB8074314AAE20295975ECE663BE7AAD945A73613D193B0CC41C79701')) - await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0.replaceAll(/./g, 'x'))) + await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, '6CAF5A42BB8074314AAE20295975ECE663BE7AAD945A73613D193B0CC41C797')) + await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, '6CAF5A42BB8074314AAE20295975ECE663BE7AAD945A73613D193B0CC41C79701')) + await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0.replaceAll(/./g, 'x'))) }) await test('Reject invalid length seed', async () => { - await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED + 'f'), + await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED + 'f'), `Expected a ${NANO_TEST_VECTORS.BIP39_SEED.length}-character seed, but received ${NANO_TEST_VECTORS.BIP39_SEED.length + 1}-character string.`) - await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED.slice(0, -1)), + await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED.slice(0, -1)), `Expected a ${NANO_TEST_VECTORS.BIP39_SEED.length}-character seed, but received ${NANO_TEST_VECTORS.BIP39_SEED.length - 1}-character string.`) }) await test('Reject seed containing non-hex characters', async () => { - await assert.rejects(Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.SEED_0.replace(/./, 'g')), + await assert.rejects(Wallet.load('BIP-44', TEST_PASSWORD, TREZOR_TEST_VECTORS.SEED_0.replace(/./, 'g')), 'Seed contains invalid hexadecimal characters.') - await assert.rejects(Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1.replace(/./, 'g')), + await assert.rejects(Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1.replace(/./, 'g')), 'Seed contains invalid hexadecimal characters.') }) await test('Import BIP-44 wallet from storage using a wallet-generated ID', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) const restored = await Wallet.restore(wallet.id) assert.ok('mnemonic' in restored) @@ -224,7 +224,7 @@ await Promise.all([ await assert.rejects(restored.verify(NANO_TEST_VECTORS.MNEMONIC)) await assert.rejects(restored.verify(NANO_TEST_VECTORS.BIP39_SEED)) - await restored.unlock(NANO_TEST_VECTORS.PASSWORD) + await restored.unlock(TEST_PASSWORD) assert.ok(await restored.verify(NANO_TEST_VECTORS.MNEMONIC)) assert.ok(await restored.verify(NANO_TEST_VECTORS.BIP39_SEED)) @@ -234,7 +234,7 @@ await Promise.all([ }) await test('Import BLAKE2B wallet from storage using a wallet-generated ID', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0) const restored = await Wallet.restore(wallet.id) assert.ok('mnemonic' in restored) @@ -244,7 +244,7 @@ await Promise.all([ await assert.rejects(restored.verify(TREZOR_TEST_VECTORS.MNEMONIC_0)) await assert.rejects(restored.verify(TREZOR_TEST_VECTORS.ENTROPY_0)) - await restored.unlock(NANO_TEST_VECTORS.PASSWORD) + await restored.unlock(TEST_PASSWORD) assert.ok(await restored.verify(TREZOR_TEST_VECTORS.MNEMONIC_0)) assert.ok(await restored.verify(TREZOR_TEST_VECTORS.ENTROPY_0)) @@ -254,7 +254,7 @@ await Promise.all([ }) await test('export wallet IDs from storage and reimport them', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) const backups = await Wallet.backup() assert.ok(backups.some(record => record.id === wallet.id)) @@ -266,7 +266,7 @@ await Promise.all([ assert.ok(restored.mnemonic === undefined) assert.ok(restored.seed === undefined) - await restored.unlock(NANO_TEST_VECTORS.PASSWORD) + await restored.unlock(TEST_PASSWORD) assert.ok(await restored.verify(NANO_TEST_VECTORS.MNEMONIC)) assert.ok(await restored.verify(NANO_TEST_VECTORS.BIP39_SEED)) @@ -276,7 +276,7 @@ await Promise.all([ }) await test('restore wallets without referencing IDs', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) const backups = await Wallet.backup() assert.ok(backups.some(record => record.id === wallet.id)) @@ -290,7 +290,7 @@ await Promise.all([ assert.ok(restoredWallet.mnemonic === undefined) assert.ok(restoredWallet.seed === undefined) - await restoredWallet.unlock(NANO_TEST_VECTORS.PASSWORD) + await restoredWallet.unlock(TEST_PASSWORD) assert.ok(await restoredWallet.verify(NANO_TEST_VECTORS.MNEMONIC)) assert.ok(await restoredWallet.verify(NANO_TEST_VECTORS.BIP39_SEED)) @@ -302,8 +302,8 @@ await Promise.all([ }) await test('load account from legacy address', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() const legacy = new Account(NANO_TEST_VECTORS.ADDRESS_0.replace('nano_', 'xrb_')) @@ -315,8 +315,8 @@ await Promise.all([ }) await test('nano.org Exodus test vector mnemonic', async () => { - const wallet = await Wallet.load('Exodus', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_0) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('Exodus', TEST_PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_0) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_0)) @@ -329,8 +329,8 @@ await Promise.all([ }) await test('zero entropy Exodus test vector mnemonic', async () => { - const wallet = await Wallet.load('Exodus', NANO_TEST_VECTORS.PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_1) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('Exodus', TEST_PASSWORD, CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_1) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() assert.ok(await wallet.verify(CUSTOM_TEST_VECTORS.EXODUS.MNEMONIC_1)) diff --git a/test/test.lock-unlock.mjs b/test/test.lock-unlock.mjs index c45d39c..3ee7df2 100644 --- a/test/test.lock-unlock.mjs +++ b/test/test.lock-unlock.mjs @@ -5,20 +5,20 @@ import { Account, Wallet } from 'libnemo' import { assert, suite, test } from './GLOBALS.mjs' -import { NANO_TEST_VECTORS, TREZOR_TEST_VECTORS } from './VECTORS.mjs' +import { NANO_TEST_VECTORS, TEST_PASSWORD, TREZOR_TEST_VECTORS } from './VECTORS.mjs' await Promise.all([ suite('Lock and unlock wallets', async () => { await test('locking and unlocking a BIP-44 wallet with a password', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) assert.ok('mnemonic' in wallet) assert.ok('seed' in wallet) assert.ok(wallet.mnemonic === undefined) assert.ok(wallet.seed === undefined) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + await wallet.unlock(TEST_PASSWORD) assert.ok(await wallet.verify(NANO_TEST_VECTORS.MNEMONIC)) assert.ok(await wallet.verify(NANO_TEST_VECTORS.BIP39_SEED)) @@ -27,11 +27,11 @@ await Promise.all([ }) await test('change the password on a BIP-44 wallet', async () => { - const wallet = await Wallet.load('BIP-44', '', NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC) let isLocked = wallet.isLocked wallet.addEventListener('locked', () => isLocked = true) wallet.addEventListener('unlocked', () => isLocked = false) - await wallet.unlock('') + await wallet.unlock(TEST_PASSWORD) assert.ok('mnemonic' in wallet) assert.ok('seed' in wallet) @@ -41,11 +41,12 @@ await Promise.all([ assert.ok(await wallet.verify(NANO_TEST_VECTORS.BIP39_SEED)) assert.equal(false, isLocked) - await wallet.update(NANO_TEST_VECTORS.PASSWORD) + const newPassword = crypto.randomUUID() + await wallet.update(newPassword) wallet.lock() await new Promise(r => setTimeout(r, 1_000)) assert.equal(true, isLocked) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + await wallet.unlock(newPassword) assert.ok('mnemonic' in wallet) assert.ok('seed' in wallet) @@ -58,8 +59,8 @@ await Promise.all([ }) await test('fail to unlock a BIP-44 wallet with different passwords', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) + await wallet.unlock(TEST_PASSWORD) wallet.lock() await assert.rejects(wallet.verify(NANO_TEST_VECTORS.MNEMONIC)) @@ -69,7 +70,7 @@ await Promise.all([ assert.ok(wallet.mnemonic === undefined) assert.ok(wallet.seed === undefined) - await assert.rejects(wallet.unlock(TREZOR_TEST_VECTORS.PASSWORD), 'Failed to unlock wallet') + await assert.rejects(wallet.unlock(TREZOR_TEST_VECTORS.MNEMONIC_SALT), 'Failed to unlock wallet') assert.ok('mnemonic' in wallet) assert.ok('seed' in wallet) assert.ok(wallet.mnemonic === undefined) @@ -81,8 +82,8 @@ await Promise.all([ }) await test('fail to unlock a BIP-44 wallet with invalid input', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) + await wallet.unlock(TEST_PASSWORD) await assert.rejects(wallet.unlock(), 'Failed to unlock wallet') //@ts-expect-error @@ -92,14 +93,14 @@ await Promise.all([ }) await test('locking and unlocking a BLAKE2b wallet with a password', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_0) assert.ok('mnemonic' in wallet) assert.ok('seed' in wallet) assert.ok(wallet.mnemonic === undefined) assert.ok(wallet.seed === undefined) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + await wallet.unlock(TEST_PASSWORD) assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.MNEMONIC_0)) assert.ok(await wallet.verify(TREZOR_TEST_VECTORS.ENTROPY_0)) @@ -108,9 +109,9 @@ await Promise.all([ }) await test('fail to unlock a BLAKE2b wallet with different passwords', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1) - await assert.rejects(wallet.unlock(TREZOR_TEST_VECTORS.PASSWORD), 'Failed to unlock wallet') + await assert.rejects(wallet.unlock(TREZOR_TEST_VECTORS.MNEMONIC_SALT), 'Failed to unlock wallet') assert.ok('mnemonic' in wallet) assert.ok('seed' in wallet) assert.ok(wallet.mnemonic === undefined) @@ -122,7 +123,7 @@ await Promise.all([ }) await test('fail to unlock a BLAKE2b wallet with no input', async () => { - const wallet = await Wallet.load('BLAKE2b', NANO_TEST_VECTORS.PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1) + const wallet = await Wallet.load('BLAKE2b', TEST_PASSWORD, TREZOR_TEST_VECTORS.ENTROPY_1) await assert.rejects(wallet.unlock(), 'Failed to unlock wallet') //@ts-expect-error @@ -133,9 +134,9 @@ await Promise.all([ await test('wallet automatic lock resets after user activity', { skip: false }, async () => { console.log('Starting autolock test...') - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) assert.equal(true, wallet.isLocked) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + await wallet.unlock(TEST_PASSWORD) assert.equal(false, wallet.isLocked) assert.ok(await wallet.verify(NANO_TEST_VECTORS.MNEMONIC)) @@ -189,9 +190,9 @@ await Promise.all([ }) await test('configure 10-second autolock', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) assert.equal(true, wallet.isLocked) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + await wallet.unlock(TEST_PASSWORD) assert.equal(false, wallet.isLocked) await wallet.config({ timeout: 10 }) @@ -226,9 +227,9 @@ await Promise.all([ }) await test('fail to configure invalid autolock times', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.MNEMONIC, NANO_TEST_VECTORS.MNEMONIC_SALT) assert.equal(true, wallet.isLocked) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + await wallet.unlock(TEST_PASSWORD) assert.equal(false, wallet.isLocked) //@ts-expect-error diff --git a/test/test.refresh-accounts.mjs b/test/test.refresh-accounts.mjs index a08750a..9757028 100644 --- a/test/test.refresh-accounts.mjs +++ b/test/test.refresh-accounts.mjs @@ -5,7 +5,7 @@ import { Account, Wallet, Rpc } from 'libnemo' import { assert, env, suite, test } from './GLOBALS.mjs' -import { NANO_TEST_VECTORS } from './VECTORS.mjs' +import { NANO_TEST_VECTORS, TEST_PASSWORD } from './VECTORS.mjs' const rpc = new Rpc(env.NODE_URL ?? '', env.API_KEY_NAME) @@ -13,8 +13,8 @@ await Promise.all([ suite('Refreshing account info', { skip: false }, async () => { await test('fetch balance, frontier, and representative', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() await account.refresh(rpc) @@ -38,8 +38,8 @@ await Promise.all([ }) await test('throw when refreshing unopened account', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account(0x7fffffff) await assert.rejects(account.refresh(rpc), 'Account not found') @@ -48,8 +48,8 @@ await Promise.all([ }) await test('throw when referencing invalid account index', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) await assert.rejects(wallet.account(0x80000000), 'Invalid child key index 0x80000000') @@ -57,8 +57,8 @@ await Promise.all([ }) await test('throw with invalid node', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const invalidNode = new Rpc('http://invalid.com') const account = await wallet.account() @@ -71,8 +71,8 @@ await Promise.all([ suite('Fetch next unopened account', { skip: false }, async () => { await test('return correct account from test vector', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.unopened(rpc) assert.exists(account) @@ -83,8 +83,8 @@ await Promise.all([ }) await test('return successfully for small batch size', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.unopened(rpc, 1) assert.exists(account) @@ -95,8 +95,8 @@ await Promise.all([ }) await test('return successfully for large batch size', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.unopened(rpc, 100) assert.exists(account) @@ -107,8 +107,8 @@ await Promise.all([ }) await test('should throw on invalid node URL', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) //@ts-expect-error await assert.rejects(wallet.unopened()) @@ -125,8 +125,8 @@ await Promise.all([ }) await test('should throw on invalid batch size', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) //@ts-expect-error await assert.rejects(wallet.unopened(rpc, null)) @@ -145,8 +145,8 @@ await Promise.all([ suite('Refreshing wallet accounts', { skip: false }, async () => { await test('get balance, frontier, and representative for one account', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.refresh(rpc) const account = accounts.get(0) @@ -159,8 +159,8 @@ await Promise.all([ }) await test('should get balance, frontier, and representative for multiple accounts', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const accounts = await wallet.refresh(rpc, 0, 2) assert.equal(accounts.size, 3) @@ -179,8 +179,8 @@ await Promise.all([ }) await test('should handle failure gracefully', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) await assert.resolves(wallet.refresh(rpc, 0, 20)) diff --git a/test/test.runner-check.mjs b/test/test.runner-check.mjs index 9be1653..fffc60a 100644 --- a/test/test.runner-check.mjs +++ b/test/test.runner-check.mjs @@ -20,7 +20,7 @@ if (!isNode) { console.assert(failures.some(call => /.*promise should fail.*/.test(call)) === true, `bad promise not errored`) console.assert(passes.some(call => /.*promise should fail.*/.test(call)) === false, 'bad promise logged') - await test('async should pass', async () => {}) + await test('async should pass', async () => { }) console.assert(failures.some(call => /.*async should pass.*/.test(call)) === false, 'good async errored') console.assert(passes.some(call => /.*async should pass.*/.test(call)) === true, 'good async not logged') @@ -28,7 +28,7 @@ if (!isNode) { console.assert(failures.some(call => /.*async should fail.*/.test(call)) === true, 'bad async not errored') console.assert(passes.some(call => /.*async should fail.*/.test(call)) === false, 'bad async logged') - await test('function should pass', () => {}) + await test('function should pass', () => { }) console.assert(failures.some(call => /.*function should pass.*/.test(call)) === false, 'good function errored') console.assert(passes.some(call => /.*function should pass.*/.test(call)) === true, 'good function not logged') diff --git a/test/test.tools.mjs b/test/test.tools.mjs index ed40572..a9ffbc3 100644 --- a/test/test.tools.mjs +++ b/test/test.tools.mjs @@ -5,7 +5,7 @@ import { Rpc, Tools, Wallet } from 'libnemo' import { assert, click, env, suite, test } from './GLOBALS.mjs' -import { MAX_RAW, MAX_SUPPLY, NANO_TEST_VECTORS } from './VECTORS.mjs' +import { MAX_RAW, MAX_SUPPLY, NANO_TEST_VECTORS, TEST_PASSWORD } from './VECTORS.mjs' const rpc = new Rpc(env?.NODE_URL ?? '', env?.API_KEY_NAME) @@ -137,8 +137,8 @@ await Promise.all([ }) await test('sweeper fails gracefully for ineligible accounts', { skip: true }, async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const results = await Tools.sweep(rpc, wallet, NANO_TEST_VECTORS.ADDRESS_1) assert.exists(results) diff --git a/test/test.wallet-sign.mjs b/test/test.wallet-sign.mjs index c6f1d6a..a579c7b 100644 --- a/test/test.wallet-sign.mjs +++ b/test/test.wallet-sign.mjs @@ -5,15 +5,15 @@ import { Account, Block, Tools, Wallet } from 'libnemo' import { assert, click, suite, test } from './GLOBALS.mjs' -import { NANO_TEST_VECTORS } from './VECTORS.mjs' +import { NANO_TEST_VECTORS, TEST_PASSWORD } from './VECTORS.mjs' await Promise.all([ suite('sign with Wallet', async () => { await test('sign an arbitrary string', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() const data = crypto.randomUUID() let signature = '' @@ -31,8 +31,8 @@ await Promise.all([ }) await test('verify Block signature using the correct public key', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() const sendBlock = await new Block(account.address, '5618869000000000000000000000000', '92BA74A7D6DC7557F3EDA95ADC6341D51AC777A0A6FF0688A5C492AB2B2CB40D', 'nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou') .send('nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p', '2000000000000000000000000000000') @@ -49,8 +49,8 @@ await Promise.all([ }) await test('reject Block signature using the wrong public key', async () => { - const wallet = await Wallet.load('BIP-44', NANO_TEST_VECTORS.PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) - await wallet.unlock(NANO_TEST_VECTORS.PASSWORD) + const wallet = await Wallet.load('BIP-44', TEST_PASSWORD, NANO_TEST_VECTORS.BIP39_SEED) + await wallet.unlock(TEST_PASSWORD) const account = await wallet.account() const sendBlock = await new Block(account.address, '5618869000000000000000000000000', '92BA74A7D6DC7557F3EDA95ADC6341D51AC777A0A6FF0688A5C492AB2B2CB40D', 'nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou') .send('nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p', '2000000000000000000000000000000') -- 2.52.0