From cbb38f3c9a93044c19102b1cf975b94e06a06f61 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Fri, 18 Sep 2020 11:09:03 +0200 Subject: [PATCH] Pass account & address offsets to Ledger signing (#3712) --- packages/react-signer/src/TxSigned.tsx | 4 ++-- packages/react-signer/src/signers/LedgerSigner.ts | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/react-signer/src/TxSigned.tsx b/packages/react-signer/src/TxSigned.tsx index a069dcd99d..8464152599 100644 --- a/packages/react-signer/src/TxSigned.tsx +++ b/packages/react-signer/src/TxSigned.tsx @@ -135,10 +135,10 @@ async function wrapTx (api: ApiPromise, currentItem: QueueTx, { isMultiCall, mul async function extractParams (address: string, options: Partial, setQrState: (state: QrState) => void): Promise<['qr' | 'signing', KeyringPair | string, Partial]> { const pair = keyring.getPair(address); - const { meta: { isExternal, isHardware, isInjected, source } } = pair; + const { meta: { accountOffset, addressOffset, isExternal, isHardware, isInjected, source } } = pair; if (isHardware) { - return ['signing', address, { ...options, signer: new LedgerSigner() }]; + return ['signing', address, { ...options, signer: new LedgerSigner(accountOffset as number || 0, addressOffset as number || 0) }]; } else if (isExternal) { return ['qr', address, { ...options, signer: new QrSigner(setQrState) }]; } else if (isInjected) { diff --git a/packages/react-signer/src/signers/LedgerSigner.ts b/packages/react-signer/src/signers/LedgerSigner.ts index fcaed9600c..07716c1fe8 100644 --- a/packages/react-signer/src/signers/LedgerSigner.ts +++ b/packages/react-signer/src/signers/LedgerSigner.ts @@ -9,9 +9,17 @@ import { getLedger, registry } from '@polkadot/react-api'; let id = 0; export default class LedgerSigner implements Signer { + #accountOffset: number; + #addressOffset: number; + + constructor (accountOffset: number, addressOffset: number) { + this.#accountOffset = accountOffset; + this.#addressOffset = addressOffset; + } + public async signPayload (payload: SignerPayloadJSON): Promise { const raw = registry.createType('ExtrinsicPayload', payload, { version: payload.version }); - const { signature } = await getLedger().sign(raw.toU8a(true)); + const { signature } = await getLedger().sign(raw.toU8a(true), this.#accountOffset, this.#addressOffset); return { id: ++id, signature }; }