3
3
import type { Messenger } from '@metamask/base-controller' ;
4
4
import { mnemonicPhraseToBytes } from '@metamask/key-tree' ;
5
5
import type { KeyringAccount } from '@metamask/keyring-api' ;
6
- import { EthAccountType , SolAccountType } from '@metamask/keyring-api' ;
6
+ import { BtcAccountType , EthAccountType , SolAccountType , TrxAccountType } from '@metamask/keyring-api' ;
7
7
import { KeyringTypes , type KeyringObject } from '@metamask/keyring-controller' ;
8
8
9
9
import type { MultichainAccountServiceOptions } from './MultichainAccountService' ;
10
10
import { MultichainAccountService } from './MultichainAccountService' ;
11
- import type { NamedAccountProvider } from './providers' ;
11
+ import { BTC_ACCOUNT_PROVIDER_NAME , BtcAccountProvider , TRX_ACCOUNT_PROVIDER_NAME , TrxAccountProvider , type NamedAccountProvider } from './providers' ;
12
12
import { AccountProviderWrapper } from './providers/AccountProviderWrapper' ;
13
13
import {
14
14
EVM_ACCOUNT_PROVIDER_NAME ,
@@ -59,6 +59,18 @@ jest.mock('./providers/SolAccountProvider', () => {
59
59
SolAccountProvider : jest . fn ( ) ,
60
60
} ;
61
61
} ) ;
62
+ jest . mock ( './providers/BtcAccountProvider' , ( ) => {
63
+ return {
64
+ ...jest . requireActual ( './providers/BtcAccountProvider' ) ,
65
+ BtcAccountProvider : jest . fn ( ) ,
66
+ } ;
67
+ } ) ;
68
+ jest . mock ( './providers/TrxAccountProvider' , ( ) => {
69
+ return {
70
+ ...jest . requireActual ( './providers/TrxAccountProvider' ) ,
71
+ TrxAccountProvider : jest . fn ( ) ,
72
+ } ;
73
+ } ) ;
62
74
63
75
type Mocks = {
64
76
KeyringController : {
@@ -72,6 +84,8 @@ type Mocks = {
72
84
} ;
73
85
EvmAccountProvider : MockAccountProvider ;
74
86
SolAccountProvider : MockAccountProvider ;
87
+ BtcAccountProvider : MockAccountProvider ;
88
+ TrxAccountProvider : MockAccountProvider ;
75
89
} ;
76
90
77
91
function mockAccountProvider < Provider extends NamedAccountProvider > (
@@ -126,6 +140,8 @@ function setup({
126
140
} ,
127
141
EvmAccountProvider : makeMockAccountProvider ( ) ,
128
142
SolAccountProvider : makeMockAccountProvider ( ) ,
143
+ BtcAccountProvider : makeMockAccountProvider ( ) ,
144
+ TrxAccountProvider : makeMockAccountProvider ( ) ,
129
145
} ;
130
146
131
147
// Required for the `assert` on `MultichainAccountWallet.createMultichainAccountGroup`.
@@ -165,6 +181,8 @@ function setup({
165
181
// force it here.
166
182
EvmAccountProvider . NAME = EVM_ACCOUNT_PROVIDER_NAME ;
167
183
SolAccountProvider . NAME = SOL_ACCOUNT_PROVIDER_NAME ;
184
+ BtcAccountProvider . NAME = BTC_ACCOUNT_PROVIDER_NAME ;
185
+ TrxAccountProvider . NAME = TRX_ACCOUNT_PROVIDER_NAME ;
168
186
169
187
mockAccountProvider < EvmAccountProvider > (
170
188
EvmAccountProvider ,
@@ -178,6 +196,18 @@ function setup({
178
196
accounts ,
179
197
SolAccountType . DataAccount ,
180
198
) ;
199
+ mockAccountProvider < BtcAccountProvider > (
200
+ BtcAccountProvider ,
201
+ mocks . BtcAccountProvider ,
202
+ accounts ,
203
+ BtcAccountType . P2wpkh ,
204
+ ) ;
205
+ mockAccountProvider < TrxAccountProvider > (
206
+ TrxAccountProvider ,
207
+ mocks . TrxAccountProvider ,
208
+ accounts ,
209
+ TrxAccountType . Eoa ,
210
+ ) ;
181
211
}
182
212
183
213
const serviceMessenger = getMultichainAccountServiceMessenger ( messenger ) ;
@@ -214,6 +244,26 @@ describe('MultichainAccountService', () => {
214
244
timeoutMs : 3000 ,
215
245
} ,
216
246
} ,
247
+ [ BTC_ACCOUNT_PROVIDER_NAME ] : {
248
+ discovery : {
249
+ timeoutMs : 5000 ,
250
+ maxAttempts : 4 ,
251
+ backOffMs : 2000 ,
252
+ } ,
253
+ createAccounts : {
254
+ timeoutMs : 3000 ,
255
+ } ,
256
+ } ,
257
+ [ TRX_ACCOUNT_PROVIDER_NAME ] : {
258
+ discovery : {
259
+ timeoutMs : 5000 ,
260
+ maxAttempts : 4 ,
261
+ backOffMs : 2000 ,
262
+ } ,
263
+ createAccounts : {
264
+ timeoutMs : 3000 ,
265
+ } ,
266
+ } ,
217
267
} ;
218
268
219
269
const { mocks, serviceMessenger } = setup ( {
@@ -229,6 +279,14 @@ describe('MultichainAccountService', () => {
229
279
serviceMessenger ,
230
280
providerConfigs [ SolAccountProvider . NAME ] ,
231
281
) ;
282
+ expect ( mocks . BtcAccountProvider . constructor ) . toHaveBeenCalledWith (
283
+ serviceMessenger ,
284
+ providerConfigs [ BtcAccountProvider . NAME ] ,
285
+ ) ;
286
+ expect ( mocks . TrxAccountProvider . constructor ) . toHaveBeenCalledWith (
287
+ serviceMessenger ,
288
+ providerConfigs [ TrxAccountProvider . NAME ] ,
289
+ ) ;
232
290
} ) ;
233
291
234
292
it ( 'allows optional configs for some providers' , ( ) => {
@@ -246,6 +304,26 @@ describe('MultichainAccountService', () => {
246
304
timeoutMs : 3000 ,
247
305
} ,
248
306
} ,
307
+ [ BTC_ACCOUNT_PROVIDER_NAME ] : {
308
+ discovery : {
309
+ timeoutMs : 5000 ,
310
+ maxAttempts : 4 ,
311
+ backOffMs : 2000 ,
312
+ } ,
313
+ createAccounts : {
314
+ timeoutMs : 3000 ,
315
+ } ,
316
+ } ,
317
+ [ TRX_ACCOUNT_PROVIDER_NAME ] : {
318
+ discovery : {
319
+ timeoutMs : 5000 ,
320
+ maxAttempts : 4 ,
321
+ backOffMs : 2000 ,
322
+ } ,
323
+ createAccounts : {
324
+ timeoutMs : 3000 ,
325
+ } ,
326
+ } ,
249
327
// No `EVM_ACCOUNT_PROVIDER_NAME`, cause it's optional in this test.
250
328
} ;
251
329
@@ -262,6 +340,14 @@ describe('MultichainAccountService', () => {
262
340
serviceMessenger ,
263
341
providerConfigs [ SolAccountProvider . NAME ] ,
264
342
) ;
343
+ expect ( mocks . BtcAccountProvider . constructor ) . toHaveBeenCalledWith (
344
+ serviceMessenger ,
345
+ providerConfigs [ BtcAccountProvider . NAME ] ,
346
+ ) ;
347
+ expect ( mocks . TrxAccountProvider . constructor ) . toHaveBeenCalledWith (
348
+ serviceMessenger ,
349
+ providerConfigs [ TrxAccountProvider . NAME ] ,
350
+ ) ;
265
351
} ) ;
266
352
} ) ;
267
353
0 commit comments