fix: wait for block finalization in verify-deposit instead of failing

Replace hard fail on unfinalized blocks with a retry loop that polls
every 6 seconds up to 60 seconds. The TX is already fully verified via
events at this point — we just wait for GRANDPA finality before crediting.
This commit is contained in:
2026-02-23 22:09:46 +03:00
parent a50a5dbffb
commit 646e388b28
+14 -8
View File
@@ -332,22 +332,28 @@ async function verifyTransactionOnChain(
} }
} }
// Check if block is finalized // Wait for block finalization (poll every 6s, max 60s)
const POLL_INTERVAL = 6000
const MAX_WAIT = 60000
const startTime = Date.now()
while (Date.now() - startTime < MAX_WAIT) {
const finalizedHash = await api.rpc.chain.getFinalizedHead() const finalizedHash = await api.rpc.chain.getFinalizedHead()
const finalizedHeader = await api.rpc.chain.getHeader(finalizedHash) const finalizedHeader = await api.rpc.chain.getHeader(finalizedHash)
const finalizedNumber = finalizedHeader.number.toNumber() const finalizedNumber = finalizedHeader.number.toNumber()
if (found.blockNumber > finalizedNumber) { if (found.blockNumber <= finalizedNumber) {
return { console.log(`Block #${found.blockNumber} finalized (finalized head: #${finalizedNumber})`)
valid: false, return { valid: true, actualAmount, from }
error: 'Transaction not yet finalized. Please wait a few more blocks.'
} }
console.log(`Waiting for finalization: block #${found.blockNumber}, finalized: #${finalizedNumber}`)
await new Promise(r => setTimeout(r, POLL_INTERVAL))
} }
return { return {
valid: true, valid: false,
actualAmount, error: 'Transaction block did not finalize within 60 seconds. Please try verifying again.'
from
} }
} catch (error) { } catch (error) {