Skip to content

Commit

Permalink
fix: remove ledger clear signing (#2661)
Browse files Browse the repository at this point in the history
* fix: remove ledger clear signing

* Update eth-ledger-keyring.ts
  • Loading branch information
heisenberg-2077 authored Dec 6, 2024
1 parent c045c3f commit a88a0dc
Showing 1 changed file with 31 additions and 41 deletions.
72 changes: 31 additions & 41 deletions src/background/service/keyring/eth-ledger-keyring.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit a88a0dc

Please sign in to comment.