From bd774b3eb8926379360c7c10f678595120035181 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Thu, 17 Sep 2020 15:27:42 +0200 Subject: [PATCH] launchpad-ledger: Store HD paths in LedgerSigner --- packages/launchpad-ledger/src/demo/node.ts | 4 ++-- packages/launchpad-ledger/src/demo/web.ts | 4 ++-- packages/launchpad-ledger/src/ledgersigner.ts | 23 ++++++------------- .../launchpad-ledger/types/ledgersigner.d.ts | 10 +++----- 4 files changed, 14 insertions(+), 27 deletions(-) diff --git a/packages/launchpad-ledger/src/demo/node.ts b/packages/launchpad-ledger/src/demo/node.ts index 0024167181..ef3b3bb16e 100644 --- a/packages/launchpad-ledger/src/demo/node.ts +++ b/packages/launchpad-ledger/src/demo/node.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { toBase64 } from "@cosmjs/encoding"; -import { makeSignBytes, StdFee, StdSignature } from "@cosmjs/launchpad"; +import { makeCosmoshubPath, makeSignBytes, StdFee, StdSignature } from "@cosmjs/launchpad"; import { LedgerSigner } from "../ledgersigner"; @@ -14,7 +14,7 @@ const defaultSequence = "0"; const signer = new LedgerSigner({ testModeAllowed: true, - accountNumbers: [0, 1, 2, 10], + hdPaths: [makeCosmoshubPath(0), makeCosmoshubPath(1), makeCosmoshubPath(2), makeCosmoshubPath(10)], }); export async function getAccounts(): Promise< diff --git a/packages/launchpad-ledger/src/demo/web.ts b/packages/launchpad-ledger/src/demo/web.ts index 51ee535bab..e656a871bb 100644 --- a/packages/launchpad-ledger/src/demo/web.ts +++ b/packages/launchpad-ledger/src/demo/web.ts @@ -1,5 +1,5 @@ import { toBase64, toUtf8 } from "@cosmjs/encoding"; -import { AccountData } from "@cosmjs/launchpad"; +import { AccountData, makeCosmoshubPath } from "@cosmjs/launchpad"; import { LedgerSigner } from "../ledgersigner"; @@ -34,7 +34,7 @@ function createMessage(accountNumber: number, address: string): string { const signer = new LedgerSigner({ testModeAllowed: true, - accountNumbers: [0, 1, 2], + hdPaths: [makeCosmoshubPath(0), makeCosmoshubPath(1), makeCosmoshubPath(2)], }); window.updateMessage = (accountNumber: number) => { diff --git a/packages/launchpad-ledger/src/ledgersigner.ts b/packages/launchpad-ledger/src/ledgersigner.ts index 3a1ac73b03..da6892ae03 100644 --- a/packages/launchpad-ledger/src/ledgersigner.ts +++ b/packages/launchpad-ledger/src/ledgersigner.ts @@ -1,3 +1,4 @@ +import { HdPath } from "@cosmjs/crypto"; import { AccountData, encodeSecp256k1Signature, @@ -6,25 +7,16 @@ import { StdSignature, } from "@cosmjs/launchpad"; -import { LaunchpadLedger } from "./launchpadledger"; - -export interface LedgerSignerOptions { - readonly accountNumbers?: readonly number[]; - readonly prefix?: string; - readonly testModeAllowed?: boolean; -} +import { LaunchpadLedger, LaunchpadLedgerOptions } from "./launchpadledger"; export class LedgerSigner implements OfflineSigner { private readonly ledger: LaunchpadLedger; - private readonly accountNumbers: readonly number[]; + private readonly hdPaths: readonly HdPath[]; private accounts?: readonly AccountData[]; - constructor({ accountNumbers = [0], ...restOptions }: LedgerSignerOptions = {}) { - this.accountNumbers = accountNumbers; - this.ledger = new LaunchpadLedger({ - ...restOptions, - hdPaths: accountNumbers.map(makeCosmoshubPath), - }); + constructor(options: LaunchpadLedgerOptions = {}) { + this.hdPaths = options.hdPaths || [makeCosmoshubPath(0)]; + this.ledger = new LaunchpadLedger(options); } public async getAccounts(): Promise { @@ -51,8 +43,7 @@ export class LedgerSigner implements OfflineSigner { } const accountForAddress = accounts[accountIndex]; - const accountNumber = this.accountNumbers[accountIndex]; - const hdPath = makeCosmoshubPath(accountNumber); + const hdPath = this.hdPaths[accountIndex]; const signature = await this.ledger.sign(message, hdPath); return encodeSecp256k1Signature(accountForAddress.pubkey, signature); } diff --git a/packages/launchpad-ledger/types/ledgersigner.d.ts b/packages/launchpad-ledger/types/ledgersigner.d.ts index 3b9e11ee26..1ebfdcdd51 100644 --- a/packages/launchpad-ledger/types/ledgersigner.d.ts +++ b/packages/launchpad-ledger/types/ledgersigner.d.ts @@ -1,14 +1,10 @@ import { AccountData, OfflineSigner, StdSignature } from "@cosmjs/launchpad"; -export interface LedgerSignerOptions { - readonly accountNumbers?: readonly number[]; - readonly prefix?: string; - readonly testModeAllowed?: boolean; -} +import { LaunchpadLedgerOptions } from "./launchpadledger"; export declare class LedgerSigner implements OfflineSigner { private readonly ledger; - private readonly accountNumbers; + private readonly hdPaths; private accounts?; - constructor({ accountNumbers, ...restOptions }?: LedgerSignerOptions); + constructor(options?: LaunchpadLedgerOptions); getAccounts(): Promise; sign(address: string, message: Uint8Array): Promise; }