diff --git a/src/background/service/keyring/eth-ledger-keyring.ts b/src/background/service/keyring/eth-ledger-keyring.ts index a009733219f..73d5bb64958 100644 --- a/src/background/service/keyring/eth-ledger-keyring.ts +++ b/src/background/service/keyring/eth-ledger-keyring.ts @@ -2,7 +2,7 @@ import * as ethUtil from 'ethereumjs-util'; import * as sigUtil from 'eth-sig-util'; import TransportWebHID from '@ledgerhq/hw-transport-webhid'; import Transport from '@ledgerhq/hw-transport'; -import LedgerEth from '@ledgerhq/hw-app-eth'; +import LedgerEth, { ledgerService } from '@ledgerhq/hw-app-eth'; import { is1559Tx } from '@/utils/transaction'; import { TransactionFactory, @@ -317,7 +317,12 @@ class LedgerBridgeKeyring { const hdPath = await this.unlockAccountByAddress(address); await this.makeApp(true); try { - const res = await this.app!.signTransaction(hdPath, rawTxHex); + const resolution = await ledgerService.resolveTransaction( + rawTxHex, + {}, + {} + ); + const res = await this.app!.signTransaction(hdPath, rawTxHex, resolution); const newOrMutatedTx = handleSigning(res); const valid = newOrMutatedTx.verifySignature(); if (valid) { @@ -403,45 +408,30 @@ class LedgerBridgeKeyring { try { await this.makeApp(true); - let res: { - v: number; - s: string; - r: string; - }; - - // https://github.com/LedgerHQ/ledger-live/blob/5bae039273beeeb02d8640d778fd7bf5f7fd3776/libs/coin-evm/src/hw-signMessage.ts#L68C7-L79C10 - try { - res = await this.app!.signEIP712Message(hdPath, data); - } catch (e) { - const shouldFallbackOnHashedMethod = - 'statusText' in e && e.statusText === 'INS_NOT_SUPPORTED'; - if (!shouldFallbackOnHashedMethod) throw e; - - const { - domain, - types, - primaryType, - message, - } = sigUtil.TypedDataUtils.sanitizeData(data); - const domainSeparatorHex = sigUtil.TypedDataUtils.hashStruct( - 'EIP712Domain', - domain, - types, - isV4 - ).toString('hex'); - const hashStructMessageHex = sigUtil.TypedDataUtils.hashStruct( - primaryType as string, - message, - types, - isV4 - ).toString('hex'); - - res = await this.app!.signEIP712HashedMessage( - hdPath, - domainSeparatorHex, - hashStructMessageHex - ); - } + const { + domain, + types, + primaryType, + message, + } = sigUtil.TypedDataUtils.sanitizeData(data); + const domainSeparatorHex = sigUtil.TypedDataUtils.hashStruct( + 'EIP712Domain', + domain, + types, + isV4 + ).toString('hex'); + const hashStructMessageHex = sigUtil.TypedDataUtils.hashStruct( + primaryType as string, + message, + types, + isV4 + ).toString('hex'); + + const res = await this.app!.signEIP712HashedMessage( + hdPath, + domainSeparatorHex, + hashStructMessageHex + ); let v = res.v.toString(16); if (v.length < 2) {