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 ee50666c64
commit fa811dcfc7
+17 -11
View File
@@ -332,22 +332,28 @@ async function verifyTransactionOnChain(
}
}
// Check if block is finalized
const finalizedHash = await api.rpc.chain.getFinalizedHead()
const finalizedHeader = await api.rpc.chain.getHeader(finalizedHash)
const finalizedNumber = finalizedHeader.number.toNumber()
// Wait for block finalization (poll every 6s, max 60s)
const POLL_INTERVAL = 6000
const MAX_WAIT = 60000
const startTime = Date.now()
if (found.blockNumber > finalizedNumber) {
return {
valid: false,
error: 'Transaction not yet finalized. Please wait a few more blocks.'
while (Date.now() - startTime < MAX_WAIT) {
const finalizedHash = await api.rpc.chain.getFinalizedHead()
const finalizedHeader = await api.rpc.chain.getHeader(finalizedHash)
const finalizedNumber = finalizedHeader.number.toNumber()
if (found.blockNumber <= finalizedNumber) {
console.log(`Block #${found.blockNumber} finalized (finalized head: #${finalizedNumber})`)
return { valid: true, actualAmount, from }
}
console.log(`Waiting for finalization: block #${found.blockNumber}, finalized: #${finalizedNumber}`)
await new Promise(r => setTimeout(r, POLL_INTERVAL))
}
return {
valid: true,
actualAmount,
from
valid: false,
error: 'Transaction block did not finalize within 60 seconds. Please try verifying again.'
}
} catch (error) {