Skip to content

Commit 4f960b1

Browse files
authored
feat(ethers5): add Trezor connector for EVM chains (#5739)
1 parent 79d4d5e commit 4f960b1

5 files changed

Lines changed: 559 additions & 18 deletions

File tree

packages/adapters/bitcoin/src/connectors/TrezorConnector/index.ts

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -591,15 +591,27 @@ export class TrezorConnector extends ProviderEventEmitter implements BitcoinConn
591591
return
592592
}
593593

594-
await getTrezorConnect().init({
595-
manifest: {
596-
email: 'support@reown.com',
597-
appUrl: typeof window === 'undefined' ? 'https://reown.com' : window.location.origin,
598-
appName: 'Reown AppKit'
599-
},
600-
lazyLoad: true,
601-
popup: true
602-
})
594+
try {
595+
await getTrezorConnect().init({
596+
manifest: {
597+
email: 'support@reown.com',
598+
appUrl: typeof window === 'undefined' ? 'https://reown.com' : window.location.origin,
599+
appName: 'Reown AppKit'
600+
},
601+
lazyLoad: true,
602+
popup: true
603+
})
604+
} catch (error) {
605+
/*
606+
* Trezor Connect is a page-global singleton: the host app (or another
607+
* connector) may have initialized it first, which init() reports as an
608+
* error even though the instance is fully usable.
609+
*/
610+
const message = error instanceof Error ? error.message : String(error)
611+
if (!message.toLowerCase().includes('already initialized')) {
612+
throw error
613+
}
614+
}
603615

604616
this.initialized = true
605617

packages/adapters/ethers5/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"@reown/appkit-scaffold-ui": "workspace:*",
2727
"@reown/appkit-utils": "workspace:*",
2828
"@reown/appkit-wallet": "workspace:*",
29+
"@trezor/connect-web": "9.7.3",
2930
"@walletconnect/universal-provider": "2.23.7",
3031
"valtio": "2.1.7"
3132
},

packages/adapters/ethers5/src/client.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { ConstantsUtil, PresetsUtil } from '@reown/appkit-common'
1515
import {
1616
AdapterBlueprint,
1717
AssetController,
18+
type ChainAdapterConnector,
1819
ChainController,
1920
type CombinedProvider,
2021
type Connector,
@@ -42,6 +43,7 @@ import {
4243
} from '@reown/appkit-utils/ethers'
4344
import type { W3mFrameProvider } from '@reown/appkit-wallet'
4445

46+
import { TrezorConnector } from './connectors/TrezorConnector/index.js'
4547
import { Ethers5Methods } from './utils/Ethers5Methods.js'
4648

4749
export interface EIP6963ProviderDetail {
@@ -273,6 +275,15 @@ export class Ethers5Adapter extends AdapterBlueprint {
273275
})
274276
}
275277
})
278+
279+
const trezorConnector = TrezorConnector.getWallet({
280+
requestedChains: this.getCaipNetworks(),
281+
requestedCaipNetworkId: ChainController.getActiveCaipNetwork(CommonConstantsUtil.CHAIN.EVM)
282+
?.caipNetworkId
283+
})
284+
if (trezorConnector) {
285+
this.addConnector(trezorConnector as unknown as ChainAdapterConnector)
286+
}
276287
}
277288

278289
private async disconnectAll() {

0 commit comments

Comments
 (0)