Skip to content

Commit 87cf729

Browse files
authored
Merge pull request #383 from blocknative/fix/hardware-wallet-reset
Fix: Hardware Wallet Reset
2 parents 39da588 + 43c568c commit 87cf729

File tree

2 files changed

+40
-16
lines changed

2 files changed

+40
-16
lines changed

src/modules/select/wallets/ledger.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ function ledger(options: LedgerOptions & { networkId: number }): WalletModule {
2121
svg: svg || ledgerIcon,
2222
iconSrc,
2323
wallet: async (helpers: Helpers) => {
24-
const { BigNumber, networkName } = helpers
24+
const { BigNumber, networkName, resetWalletState } = helpers
2525

2626
const provider = await ledgerProvider({
2727
rpcUrl,
2828
networkId,
2929
LedgerTransport,
3030
BigNumber,
31-
networkName
31+
networkName,
32+
resetWalletState
3233
})
3334

3435
return {
@@ -66,6 +67,10 @@ async function ledgerProvider(options: {
6667
LedgerTransport: any
6768
BigNumber: any
6869
networkName: (id: number) => string
70+
resetWalletState: (options?: {
71+
disconnected: boolean
72+
walletName: string
73+
}) => void
6974
}) {
7075
const { default: createProvider } = await import('./providerEngine')
7176
const { generateAddresses, isValidPath } = await import('./hd-wallet')
@@ -76,7 +81,14 @@ async function ledgerProvider(options: {
7681
const ethUtil = await import('ethereumjs-util')
7782
const buffer = await import('buffer')
7883

79-
const { networkId, rpcUrl, LedgerTransport, BigNumber, networkName } = options
84+
const {
85+
networkId,
86+
rpcUrl,
87+
LedgerTransport,
88+
BigNumber,
89+
networkName,
90+
resetWalletState
91+
} = options
8092

8193
let dPath = ''
8294
let addressToPath = new Map()
@@ -139,10 +151,8 @@ async function ledgerProvider(options: {
139151

140152
function disconnect() {
141153
transport && transport.close()
142-
dPath = ''
143-
addressToPath = new Map()
144-
enabled = false
145154
provider.stop()
155+
resetWalletState({ disconnected: true, walletName: 'Ledger' })
146156
}
147157

148158
async function setPath(path: string, custom?: boolean) {

src/modules/select/wallets/trezor.ts

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,16 @@ function trezor(options: TrezorOptions & { networkId: number }): WalletModule {
2323
svg: svg || trezorIcon,
2424
iconSrc,
2525
wallet: async (helpers: Helpers) => {
26-
const { BigNumber, networkName } = helpers
26+
const { BigNumber, networkName, resetWalletState } = helpers
2727

2828
const provider = await trezorProvider({
2929
rpcUrl,
3030
networkId,
3131
email,
3232
appUrl,
3333
BigNumber,
34-
networkName
34+
networkName,
35+
resetWalletState
3536
})
3637

3738
return {
@@ -70,14 +71,27 @@ async function trezorProvider(options: {
7071
rpcUrl: string
7172
BigNumber: any
7273
networkName: (id: number) => string
74+
resetWalletState: (options?: {
75+
disconnected: boolean
76+
walletName: string
77+
}) => void
7378
}) {
7479
const TrezorConnectLibrary = await import('trezor-connect')
7580
const EthereumTx = await import('ethereumjs-tx')
7681
const ethUtil = await import('ethereumjs-util')
7782

7883
const { default: TrezorConnect, DEVICE_EVENT, DEVICE } = TrezorConnectLibrary
7984

80-
const { networkId, email, appUrl, rpcUrl, BigNumber, networkName } = options
85+
const {
86+
networkId,
87+
email,
88+
appUrl,
89+
rpcUrl,
90+
BigNumber,
91+
networkName,
92+
resetWalletState
93+
} = options
94+
8195
let dPath = ''
8296

8397
let addressToPath = new Map()
@@ -93,13 +107,6 @@ async function trezorProvider(options: {
93107
appUrl
94108
})
95109

96-
TrezorConnect.on(DEVICE_EVENT, (event: any) => {
97-
if (event.type === DEVICE.DISCONNECT) {
98-
enabled = false
99-
addressToPath = new Map()
100-
}
101-
})
102-
103110
const provider = createProvider({
104111
getAccounts: (callback: any) => {
105112
getAccounts()
@@ -134,6 +141,13 @@ async function trezorProvider(options: {
134141
rpcUrl
135142
})
136143

144+
TrezorConnect.on(DEVICE_EVENT, (event: any) => {
145+
if (event.type === DEVICE.DISCONNECT) {
146+
provider.stop()
147+
resetWalletState({ disconnected: true, walletName: 'Trezor' })
148+
}
149+
})
150+
137151
provider.setPath = setPath
138152
provider.dPath = dPath
139153
provider.enable = enable

0 commit comments

Comments
 (0)