|
1 | | -import { IWallet } from '../wallet'; |
| 1 | +import { Wallet, IWallet } from '../wallet'; |
2 | 2 | import { MessageStandardType } from '../utils'; |
3 | 3 | import { MidnightMessageProvider } from './midnightMessageProvider'; |
4 | 4 | import { IMessageProvider, MessageInfo } from './iMessageProvider'; |
@@ -27,17 +27,25 @@ async function bulkSignAccountBasedMessagesWithProvider( |
27 | 27 | const failedAddresses: string[] = []; |
28 | 28 | const txRequests: Record<string, unknown>[] = []; |
29 | 29 |
|
| 30 | + // Gather all messages to process (flatten all batches) |
| 31 | + let allMessages: MessageInfo[] = []; |
30 | 32 | let messages: MessageInfo[] = await provider.getMessagesAndAddressesToSign(); |
31 | 33 | while (messages.length > 0) { |
32 | | - // Sign/build all messages in parallel |
33 | | - const results = await Promise.all( |
34 | | - messages.map((messageInfo) => signOrBuildMessage(wallet, messageInfo, messageStandardType, walletPassphrase)) |
35 | | - ); |
36 | | - // Process results and update counters |
37 | | - processResults(results, txRequests, failedAddresses); |
38 | | - // Get next batch of messages |
| 34 | + allMessages = allMessages.concat(messages); |
39 | 35 | messages = await provider.getMessagesAndAddressesToSign(); |
40 | 36 | } |
| 37 | + |
| 38 | + // Extract wallet constructor params |
| 39 | + const { bitgo, baseCoin, _wallet: walletData } = wallet as Wallet; |
| 40 | + |
| 41 | + // Process all messages in parallel, each with a new Wallet instance |
| 42 | + const results = await Promise.all( |
| 43 | + allMessages.map(async (messageInfo) => { |
| 44 | + const newWallet = new Wallet(bitgo, baseCoin, walletData); |
| 45 | + return signOrBuildMessage(newWallet, messageInfo, messageStandardType, walletPassphrase); |
| 46 | + }) |
| 47 | + ); |
| 48 | + processResults(results, txRequests, failedAddresses); |
41 | 49 | return { failedAddresses, txRequests }; |
42 | 50 | } |
43 | 51 |
|
|
0 commit comments