From 58e41d95fd1e3bf772b78944800e390ad7fde2e0 Mon Sep 17 00:00:00 2001 From: michalsmiarowski Date: Tue, 22 Aug 2023 16:45:42 +0200 Subject: [PATCH] Add a possibility to reveal multiple transactions Add a possibility to reveal multiple transactions send to the same BTC deposit address. In such case the user should use `/tBTC/mint/continue` url to initiate the minting of each subsequent transaction after he revealed the first one. --- src/store/tbtc/effects.ts | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/store/tbtc/effects.ts b/src/store/tbtc/effects.ts index ef0ab3b47..945dd984e 100644 --- a/src/store/tbtc/effects.ts +++ b/src/store/tbtc/effects.ts @@ -78,20 +78,31 @@ export const findUtxoEffect = async ( continue } - // UTXOs returned from `findAllUnspentTransactionOutputs` are in - // reversed order so we have to get the last element of the `utxos` - // array to get the oldest utxo related to this deposit address. - const utxo = utxos.pop()! - - // Check if deposit is revealed. - const deposit = await forkApi.pause( - listenerApi.extra.threshold.tbtc.getRevealedDeposit(utxo) - ) + let utxo = utxos[0] + let areAllDepositRevealed = true + + // We have to find the first utxo that is revealed. The UTXOs returned + // from `findAllUnspentTransactionOutputs` are in reversed order so + // that's why we start our search from the last elements of the `utxos`. + // If all deposits are revealed then we just use the first utxo (which + // should be the most recent transaction) + for (let i = utxos.length - 1; i >= 0; i--) { + // Check if deposit is revealed. + const deposit = await forkApi.pause( + listenerApi.extra.threshold.tbtc.getRevealedDeposit(utxos[i]) + ) + const isDepositRevealed = deposit.revealedAt !== 0 - const isDepositRevealed = deposit.revealedAt !== 0 + if (!isDepositRevealed) { + utxo = utxos[i] + areAllDepositRevealed = false + break + } + } - if (isDepositRevealed) { - // Deposit already revealed, force start from step 1 and remove deposit data. + if (areAllDepositRevealed) { + // All deposits are already revealed. Force start from step 1 and + // remove deposit data. removeDataForAccount( depositor, JSON.parse(