Skip to content

Commit bbb3faa

Browse files
committed
chore: parallellize keychain and queryPromise
Ticket: CAAS-7
1 parent e2d5977 commit bbb3faa

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

modules/sdk-core/src/bitgo/wallet/wallet.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2176,7 +2176,7 @@ export class Wallet implements IWallet {
21762176
}
21772177

21782178
// Doing a sanity check for password here to avoid doing further work if we know it's wrong
2179-
const keychains = await this.getKeychainsAndValidatePassphrase({
2179+
const keychainPromise = this.getKeychainsAndValidatePassphrase({
21802180
reqId: params.reqId,
21812181
walletPassphrase: params.walletPassphrase,
21822182
customSigningFunction: params.customSigningFunction,
@@ -2192,10 +2192,20 @@ export class Wallet implements IWallet {
21922192
} else {
21932193
txPrebuildQuery = params.prebuildTx ? Promise.resolve(params.prebuildTx) : this.prebuildTransaction(params);
21942194
}
2195-
2196-
// the prebuild can be overridden by providing an explicit tx
2197-
const txPrebuild = (await txPrebuildQuery) as PrebuildTransactionResult;
2198-
2195+
let keychains: Keychain[];
2196+
let txPrebuild: PrebuildTransactionResult;
2197+
try {
2198+
[keychains, txPrebuild] = (await Promise.all([keychainPromise, txPrebuildQuery])) as [
2199+
Keychain[],
2200+
PrebuildTransactionResult
2201+
];
2202+
} catch (err) {
2203+
if (err || (err instanceof Error && err.message.includes('unable to decrypt keychain'))) {
2204+
throw new Error('unable to decrypt keychain with the given wallet passphrase');
2205+
} else {
2206+
throw new Error(`Failed to process transaction: ${err.message}`);
2207+
}
2208+
}
21992209
try {
22002210
await this.baseCoin.verifyTransaction({
22012211
txParams: { ...txPrebuild.buildParams, ...params },

0 commit comments

Comments
 (0)