diff --git a/src/store/tbtc/effects.ts b/src/store/tbtc/effects.ts index ef0ab3b47..8022c5fcb 100644 --- a/src/store/tbtc/effects.ts +++ b/src/store/tbtc/effects.ts @@ -78,20 +78,34 @@ 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 not revealed. The UTXOs + // returned from `findAllUnspentTransactionOutputs` are in reversed + // order so we have to start our search from the last element of the + // `utxos` so that we search them in the order they were done. We go + // through all of them up to the first one to find the oldest UTXO that + // is not revealed. + // 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(