]> zoso.dev Git - libnemo.git/commitdiff
Simplify ckd implementation with fewer allowed typings.
authorChris Duncan <chris@zoso.dev>
Fri, 29 Nov 2024 10:07:25 +0000 (02:07 -0800)
committerChris Duncan <chris@zoso.dev>
Fri, 29 Nov 2024 10:07:25 +0000 (02:07 -0800)
src/lib/wallet.ts

index 43e74ed677c5af77888382b7002282a67829796e..d8c4693673a698fa4a3585381708d8d2e9d4a9da 100644 (file)
@@ -49,7 +49,7 @@ abstract class Wallet {
                return ''\r
        }\r
 \r
-       abstract ckd (index: number | number[]): Promise<KeyPair> | Promise<KeyPair[]>\r
+       abstract ckd (index: number[]): Promise<KeyPair[]>\r
 \r
        constructor (seed?: string, mnemonic?: Bip39Mnemonic, id?: string) {\r
                if (this.constructor === Wallet) {\r
@@ -96,7 +96,6 @@ abstract class Wallet {
                }\r
                if (indexes.length > 0) {\r
                        let results = await this.ckd(indexes)\r
-                       if (!Array.isArray(results)) results = [results]\r
                        const data: any = []\r
                        results.forEach(r => data.push({ privateKey: hex.toBytes(r.privateKey as string), index: r.index }))\r
                        let now = performance.now()\r
@@ -426,13 +425,12 @@ export class Bip44Wallet extends Wallet {
        /**\r
        * Derives BIP-44 Nano account private keys.\r
        *\r
-       * @param {number} index - Index of the account\r
+       * @param {number[]} indexes - Indexes of the accounts\r
        * @returns {Promise<Account>}\r
        */\r
-       async ckd (index: number | number[]): Promise<KeyPair[]> {\r
-               if (!Array.isArray(index)) index = [index]\r
+       async ckd (indexes: number[]): Promise<KeyPair[]> {\r
                const data: any = []\r
-               index.forEach(i => data.push({ seed: this.seed, index: i }))\r
+               indexes.forEach(i => data.push({ seed: this.seed, index: i }))\r
                let now = performance.now()\r
                const privateKeys: KeyPair[] = await this.#pool.work(data)\r
                console.log(`ckd: ${-now + (now = performance.now())} ms`)\r
@@ -573,14 +571,12 @@ export class Blake2bWallet extends Wallet {
        /**\r
        * Derives BLAKE2b account private keys.\r
        *\r
-       * @param {number} index - Index of the account\r
+       * @param {number[]} indexes - Indexes of the accounts\r
        * @returns {Promise<Account>}\r
        */\r
-       async ckd (index: number | number[]): Promise<KeyPair[]> {\r
-               if (!Array.isArray(index)) index = [index]\r
-               const data: any = []\r
+       async ckd (indexes: number[]): Promise<KeyPair[]> {\r
                let now = performance.now()\r
-               const results = index.map(index => {\r
+               const results = indexes.map(index => {\r
                        const indexHex = index.toString(16).padStart(8, '0').toUpperCase()\r
                        const inputHex = `${this.seed}${indexHex}`.padStart(72, '0')\r
                        const inputArray = (inputHex.match(/.{1,2}/g) ?? []).map(h => parseInt(h, 16))\r
@@ -651,15 +647,20 @@ export class LedgerWallet extends Wallet {
        /**\r
        * Gets the public key for an account from the Ledger device.\r
        *\r
-       * @param {number} index - Index of the account\r
+       * @param {number[]} indexes - Indexes of the accounts\r
        * @returns {Promise<Account>}\r
        */\r
-       async ckd (index: number): Promise<KeyPair> {\r
-               const { status, publicKey } = await this.ledger.account(index)\r
-               if (status === 'OK' && publicKey != null) {\r
-                       return { publicKey, index }\r
+       async ckd (indexes: number[]): Promise<KeyPair[]> {\r
+               const results: KeyPair[] = []\r
+               for (const index of indexes) {\r
+                       const { status, publicKey } = await this.ledger.account(index)\r
+                       if (status === 'OK' && publicKey != null) {\r
+                               results.push({ publicKey, index })\r
+                       } else {\r
+                               throw new Error(`Error getting Ledger account: ${status}`)\r
+                       }\r
                }\r
-               throw new Error(`Error getting Ledger account: ${status}`)\r
+               return results\r
        }\r
 \r
        /**\r