-
Notifications
You must be signed in to change notification settings - Fork 26
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
base: master
Are you sure you want to change the base?
Conversation
// create contract indexer for the consolidation contract | ||
ci.indexer = newContractIndexer( | ||
indexer, | ||
ci.logger.WithField("routine", "crawler"), |
There was a problem hiding this comment.
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.
6db6d73
to
ca6a836
Compare
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:
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.
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: