From b70b03530a5ad207fec587df6123da59545f5581 Mon Sep 17 00:00:00 2001 From: Alessandro Rezzi Date: Thu, 7 Mar 2024 14:40:21 +0100 Subject: [PATCH] fix tx shield creation error handling (#315) --- scripts/dashboard/Dashboard.vue | 11 ++++++--- scripts/wallet.js | 41 +++++++++++++++++++++------------ 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/scripts/dashboard/Dashboard.vue b/scripts/dashboard/Dashboard.vue index f61b4ce2f..caaaa60e9 100644 --- a/scripts/dashboard/Dashboard.vue +++ b/scripts/dashboard/Dashboard.vue @@ -440,9 +440,14 @@ async function send(address, amount, useShieldInputs) { transferAmount.value = ''; // Create and send the TX - await wallet.createAndSendTransaction(getNetwork(), address, nValue, { - useShieldInputs, - }); + try { + await wallet.createAndSendTransaction(getNetwork(), address, nValue, { + useShieldInputs, + }); + } catch (e) { + console.error(e); + createAlert('warning', e); + } } /** diff --git a/scripts/wallet.js b/scripts/wallet.js index 75d7d151f..4f0486758 100644 --- a/scripts/wallet.js +++ b/scripts/wallet.js @@ -15,7 +15,7 @@ import { Database } from './database.js'; import { RECEIVE_TYPES } from './contacts-book.js'; import { Account } from './accounts.js'; import { fAdvancedMode } from './settings.js'; -import { bytesToHex, hexToBytes, startBatch } from './utils.js'; +import { bytesToHex, hexToBytes, sleep, startBatch } from './utils.js'; import { strHardwareName } from './ledger.js'; import { UTXO_WALLET_STATE } from './mempool.js'; import { getEventEmitter } from './event_bus.js'; @@ -1025,20 +1025,31 @@ export class Wallet { const value = transaction.shieldOutput[0]?.value || transaction.vout[0].value; - const { hex } = await this.#shield.createTransaction({ - address: - transaction.shieldOutput[0]?.address || - this.getAddressesFromScript(transaction.vout[0].script) - .addresses[0], - amount: value, - blockHeight: getNetwork().cachedBlockCount, - useShieldInputs: transaction.vin.length === 0, - utxos: this.#getUTXOsForShield(), - transparentChangeAddress: this.getNewAddress(1)[0], - }); - clearInterval(periodicFunction); - getEventEmitter().emit('shield-transaction-creation-update', 0.0, true); - return transaction.fromHex(hex); + try { + const { hex } = await this.#shield.createTransaction({ + address: + transaction.shieldOutput[0]?.address || + this.getAddressesFromScript(transaction.vout[0].script) + .addresses[0], + amount: value, + blockHeight: getNetwork().cachedBlockCount, + useShieldInputs: transaction.vin.length === 0, + utxos: this.#getUTXOsForShield(), + transparentChangeAddress: this.getNewAddress(1)[0], + }); + return transaction.fromHex(hex); + } catch (e) { + // sleep a full period of periodicFunction + await sleep(500); + throw new Error(e); + } finally { + clearInterval(periodicFunction); + getEventEmitter().emit( + 'shield-transaction-creation-update', + 0.0, + true + ); + } } /**