Skip to content

Conversation

@ashwinrava
Copy link
Member

@ashwinrava ashwinrava commented Jan 5, 2026

Adds error logging when CCTP burn events that were published to the finalizer haven't been finalized on the destination chain within the expected timeframe.

Changes

  • Added checkForUnfinalizedBurnEvents() method to CctpFinalizerService
  • Queries for CctpFinalizerJob records older than 30 minutes but younger than 24 hours (so we don't infinitely log for old/expired/unnecessary unprocessed records)
  • Checks if corresponding MessageReceived exists on destination chain (matched by sourceDomain + nonce)
  • Logs error with notificationPath: "across-indexer-error" if no mint found (triggers Slack/PagerDuty alert)

Testing

Ran indexer locally and set up DB for a completed and pending job:

2026-01-05 19:37:24 [�[34mdebug�[39m]: {
  "at": "CctpFinalizerService#checkForUnfinalizedBurnEvents",
  "message": "Burn event has been finalized",
  "sourceChainId": "137",
  "destinationChainId": 8453,
  "burnTransactionHash": "0xcaf5a690c6267a00c96f7e700ad0e28fecc69f5dc5c02b78f7a9d4f543c696c3",
  "bot-identifier": "NO_BOT_ID",
  "run-identifier": "b45b4ab8-a7fe-46dc-921f-2f8981b3c648"
}
2026-01-05 19:37:24 [�[31merror�[39m]: {
  "at": "CctpFinalizerService#checkForUnfinalizedBurnEvents",
  "message": "CCTP burn event has not been finalized after 67207 minutes",
  "notificationPath": "across-indexer-error",
  "sourceChainId": "137",
  "destinationChainId": 42161,
  "burnTransactionHash": "0xa33f31ede12c361b97b2b4e8f5b525190e67efae5e3d54ec3aa87baef811a36e",
  "burnBlockNumber": 77454018,
  "amount": "1000000",
  "depositor": "0x9A8f92a830A5cB89a3816e3D267CB7791c16b04D",
  "mintRecipient": "0x9A8f92a830A5cB89a3816e3D267CB7791c16b04D",
  "sourceDomain": 7,
  "nonce": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "jobCreatedAt": "2025-11-20T03:30:17.294Z",
  "elapsedMinutes": 67207,
  "bot-identifier": "NO_BOT_ID",
  "run-identifier": "b45b4ab8-a7fe-46dc-921f-2f8981b3c648"
}

Copy link
Contributor

@melisaguevara melisaguevara left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good. Just one nit.

Copy link
Contributor

@amateima amateima left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason this isn't in a separate service? It feels conceptually different from the finalization publishing logic. Could be cleaner as its own monitoring service

@amateima amateima self-requested a review January 6, 2026 14:33
Comment on lines 318 to 319
.where("job.createdAt < :minAgeTime", { minAgeTime })
.andWhere("job.createdAt > :maxAgeTime", { maxAgeTime })
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: for increased readability I'd format this to smth like

  • "now() - job.createdAt > interval '30 minutes'"
  • "now() - job.createdAt < interval '24 hours'"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in 25ae6f8.

@ashwinrava ashwinrava merged commit dc8d337 into stage Jan 8, 2026
5 of 6 checks passed
@ashwinrava ashwinrava deleted the ashwin/alert-unfinalized-burns branch January 8, 2026 16:34
@ashwinrava ashwinrava mentioned this pull request Jan 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants