Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

implement request log crawler for consolidation & withdrawal request transactions #141

Open
wants to merge 25 commits into
base: master
Choose a base branch
from

Conversation

pk910
Copy link
Member

@pk910 pk910 commented Oct 8, 2024

This PR adds log crawlers and matchers for the pectra consolidation & withdrawal system contracts.

Both system contracts emit basic log events before queuing incoming operations.
Operations are then dequeued and passed to the beacon chain where they get included in a block as consolidation & withdrawal requests.
Consolidation & withdrawal requests are already tracked by dora.
This PR aims to extend the available request information with further transaction details coming from the execution layer.
So dora can not only show the operation details, but also the origin (tx hash, sender, etc.) on the execution chain.

To achieve this, I've implemented two routines for each request type:

  1. consolidation/withdrawal tx indexer:
    This routine crawls the system contract logs from the execution layer.
    The emitted events are processed in order starting from the deploy block, to keep track of the contract queue length internally.
    For each event, dora persists the transaction details, including the operation details, sender + target addresses and the dequeue block number (calculated based on queue length & static dequeue rate).

transaction details are stored in a separate database entity as they may exist before the corresponding beacon operation gets added to the database and vice versa.

  1. consolidation/withdrawal matcher:
    This routine tries to match up the separate request transaction & request operation entities.
    It uses the calculated dequeue block number from the transaction entities and loads the corresponding request operations from the slot that includes the el block with that number.
    The matcher routine tries to match each transaction once, ensuring only synchronized block ranges are processed.
    This might leave some late orphaned operations unmatched, but it's an acceptable trade-off compared to processing all unmatched beacon operations over and over again, as some transaction details for orphaned blocks might just not be available anymore.
    For matching requests, the transaction hash is added to the beacon operation entity.

I've also extended the consolidations & withdrawal requests pages to display the matched tx hash (and link it to an el explorer if available).
Additional transaction details are available via a popover:
image

@pk910 pk910 marked this pull request as ready for review October 10, 2024 17:59
@pk910 pk910 requested a review from skylenet October 14, 2024 21:43
handlers/el_consolidations.go Outdated Show resolved Hide resolved
indexer/execution/consolidation_indexer.go Outdated Show resolved Hide resolved
indexer/execution/consolidation_indexer.go Outdated Show resolved Hide resolved
// create contract indexer for the consolidation contract
ci.indexer = newContractIndexer(
indexer,
ci.logger.WithField("routine", "crawler"),
Copy link
Member

Choose a reason for hiding this comment

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

Could be good to use different logger identifiers for the different contract indexers. e.g. For this one:
ci.logger.WithField("contract-indexer", "consolidations"),

And for the withdrawal one:
ci.logger.WithField("contract-indexer", "withdrawals"),

And for the deposits one:
ci.logger.WithField("contract-indexer", "deposits"),

Same for the matchers. Replace WithField("routine", "matcher") with something more specific to the matcher.

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.

2 participants