dev
dart 33 lines 1.15 KB
Raw
1 import 'dart:async';
2
3 import 'package:cw_core/hardware/hardware_account_data.dart';
4 import 'package:cw_core/hardware/hardware_wallet_service.dart';
5 import 'package:trezor_connect/trezor_connect.dart';
6
7 class EVMChainTrezorService extends HardwareWalletService {
8 EVMChainTrezorService(this.connect, {this.chainId = 1});
9
10 final TrezorConnect connect;
11 final int chainId;
12
13 @override
14 Future<List<HardwareAccountData>> getAvailableAccounts({int index = 0, int limit = 5}) async {
15 final indexRange = List.generate(limit, (i) => i + index);
16
17 final requestParams = <TrezorGetAddressParams>[];
18 for (final i in indexRange) {
19 final derivationPath = "m/44'/60'/$i'/0/0";
20 requestParams.add(TrezorGetAddressParams(path: derivationPath));
21 }
22 final accounts = await connect.ethereumGetAddressBundle(requestParams);
23
24 return accounts
25 ?.map((account) => HardwareAccountData(
26 address: account.address,
27 accountIndex: account.path[2] - 0x80000000, // unharden the path to get the index
28 derivationPath: account.serializedPath,
29 ))
30 .toList() ??
31 [];
32 }
33 }