Title: Refactor: Use new Wallet instances in parallel calls (COIN-5426) · Issue #6978 · BitGo/BitGoJS · GitHub
Open Graph Title: Refactor: Use new Wallet instances in parallel calls (COIN-5426) · Issue #6978 · BitGo/BitGoJS
X Title: Refactor: Use new Wallet instances in parallel calls (COIN-5426) · Issue #6978 · BitGo/BitGoJS
Description: Feature Description Refactor the bulkSignAccountBasedMessagesWithProvider function in modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts to ensure that new instances of Wallet are used for each parallel call. ...
Open Graph Description: Feature Description Refactor the bulkSignAccountBasedMessagesWithProvider function in modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts to ensure that new instances of ...
X Description: Feature Description Refactor the bulkSignAccountBasedMessagesWithProvider function in modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts to ensure that new instances of ...
Opengraph URL: https://github.com/BitGo/BitGoJS/issues/6978
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Refactor: Use new Wallet instances in parallel calls (COIN-5426)","articleBody":"## Feature Description\n\nRefactor the `bulkSignAccountBasedMessagesWithProvider` function in `modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts` to ensure that new instances of `Wallet` are used for each parallel call.\n\n- Extract constructor params from the original wallet instance.\n- For each message to be processed in parallel, instantiate a new `Wallet` object with the extracted params.\n- Perform signing/building using the new wallet instance per message.\n\nAlso, write comprehensive tests to verify the new behavior and cover edge cases.\n\n## Motivation\n\n- Prevent shared state issues or side effects when processing messages in parallel.\n- Align with COIN-5426 requirements.\n\n**File changed:**\n- modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts\n\n**Relevant diff:**\n```diff\ndiff --git a/modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts b/modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts\nindex 47f39c179..74584b055 100644\n--- a/modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts\n+++ b/modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts\n@@ -1,4 +1,4 @@\n-import { IWallet } from '../wallet';\n+import { Wallet, IWallet } from '../wallet';\n import { MessageStandardType } from '../utils';\n import { MidnightMessageProvider } from './midnightMessageProvider';\n import { IMessageProvider, MessageInfo } from './iMessageProvider';\n@@ -27,17 +27,25 @@ async function bulkSignAccountBasedMessagesWithProvider(\n const failedAddresses: string[] = [];\n const txRequests: Record\u003cstring, unknown\u003e[] = [];\n \n+ // Gather all messages to process (flatten all batches)\n+ let allMessages: MessageInfo[] = [];\n let messages: MessageInfo[] = await provider.getMessagesAndAddressesToSign();\n while (messages.length \u003e 0) {\n- // Sign/build all messages in parallel\n- const results = await Promise.all(\n- messages.map((messageInfo) =\u003e signOrBuildMessage(wallet, messageInfo, messageStandardType, walletPassphrase))\n- );\n- // Process results and update counters\n- processResults(results, txRequests, failedAddresses);\n- // Get next batch of messages\n+ allMessages = allMessages.concat(messages);\n messages = await provider.getMessagesAndAddressesToSign();\n }\n+\n+ // Extract wallet constructor params\n+ const { bitgo, baseCoin, _wallet: walletData } = wallet as Wallet;\n+\n+ // Process all messages in parallel, each with a new Wallet instance\n+ const results = await Promise.all(\n+ allMessages.map(async (messageInfo) =\u003e {\n+ const newWallet = new Wallet(bitgo, baseCoin, walletData);\n+ return signOrBuildMessage(newWallet, messageInfo, messageStandardType, walletPassphrase);\n+ })\n+ );\n+ processResults(results, txRequests, failedAddresses);\n return { failedAddresses, txRequests };\n }\n \n\n```\n\n### Action Items\n- Refactor to use new Wallet instances for each parallel operation as per above.\n- Write/modify tests to validate the new behavior and prevent regression.\n- Ensure robust error handling and maintain performance.\n","author":{"url":"https://github.com/bhavidhingra","@type":"Person","name":"bhavidhingra"},"datePublished":"2025-09-12T16:30:38.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/6978/BitGoJS/issues/6978"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:0f10f6c4-388b-6a1c-feef-b00022e87f67 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 9AD2:1B3FAE:10B17A7:156E60A:699099B1 |
| html-safe-nonce | 765e105166285161970c00b09b4ca4ae82e0cda8ed6709aec65df1931f743d01 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5QUQyOjFCM0ZBRToxMEIxN0E3OjE1NkU2MEE6Njk5MDk5QjEiLCJ2aXNpdG9yX2lkIjoiNTg4NTYxODA5NTIyNjEzMjkxMyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 08c159d9ce34587cd313f75955c977763c9258e72befa4aeddcf1268099ca1a2 |
| hovercard-subject-tag | issue:3411152885 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/BitGo/BitGoJS/6978/issue_layout |
| twitter:image | https://opengraph.githubassets.com/d88be9dd88a848d9549de68d4979a94c9b30244ef4c21f304ad03eb1b1e36b71/BitGo/BitGoJS/issues/6978 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/d88be9dd88a848d9549de68d4979a94c9b30244ef4c21f304ad03eb1b1e36b71/BitGo/BitGoJS/issues/6978 |
| og:image:alt | Feature Description Refactor the bulkSignAccountBasedMessagesWithProvider function in modules/sdk-core/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.ts to ensure that new instances of ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | bhavidhingra |
| hostname | github.com |
| expected-hostname | github.com |
| None | 42c603b9d642c4a9065a51770f75e5e27132fef0e858607f5c9cb7e422831a7b |
| turbo-cache-control | no-preview |
| go-import | github.com/BitGo/BitGoJS git https://github.com/BitGo/BitGoJS.git |
| octolytics-dimension-user_id | 6267684 |
| octolytics-dimension-user_login | BitGo |
| octolytics-dimension-repository_id | 20121980 |
| octolytics-dimension-repository_nwo | BitGo/BitGoJS |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 20121980 |
| octolytics-dimension-repository_network_root_nwo | BitGo/BitGoJS |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 3b33c5aedc9808f45bc5fcf0b1e4404cf749dac7 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width