From cadb28d6b364e68e43a06f7a9b8a31797afbd920 Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Sat, 5 Sep 2020 04:37:47 -0400 Subject: [PATCH] Fixed LedgerSigner sendTransaction (#936). --- packages/hardware-wallets/src.ts/ledger.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/hardware-wallets/src.ts/ledger.ts b/packages/hardware-wallets/src.ts/ledger.ts index cd50c50688..933c0ded46 100644 --- a/packages/hardware-wallets/src.ts/ledger.ts +++ b/packages/hardware-wallets/src.ts/ledger.ts @@ -94,13 +94,22 @@ export class LedgerSigner extends ethers.Signer { } async signTransaction(transaction: ethers.providers.TransactionRequest): Promise { - const tx = transaction = await ethers.utils.resolveProperties(transaction); - const unsignedTx = ethers.utils.serializeTransaction(tx).substring(2); - + const tx = await ethers.utils.resolveProperties(transaction); + const baseTx: ethers.utils.UnsignedTransaction = { + chainId: (tx.chainId || undefined), + data: (tx.data || undefined), + gasLimit: (tx.gasLimit || undefined), + gasPrice: (tx.gasPrice || undefined), + nonce: (tx.nonce ? ethers.BigNumber.from(tx.nonce).toNumber(): undefined), + to: (tx.to || undefined), + value: (tx.value || undefined), + }; + + const unsignedTx = ethers.utils.serializeTransaction(baseTx).substring(2); const sig = await this._retry((eth) => eth.signTransaction(this.path, unsignedTx)); - return ethers.utils.serializeTransaction(tx, { - v: sig.v, + return ethers.utils.serializeTransaction(baseTx, { + v: ethers.BigNumber.from("0x" + sig.v).toNumber(), r: ("0x" + sig.r), s: ("0x" + sig.s), });