Skip to content

Comments

feat: [WIP] Interop roots watcher#741

Closed
Artemka374 wants to merge 36 commits intomainfrom
afo/interop-watcher
Closed

feat: [WIP] Interop roots watcher#741
Artemka374 wants to merge 36 commits intomainfrom
afo/interop-watcher

Conversation

@Artemka374
Copy link
Contributor

@Artemka374 Artemka374 commented Dec 21, 2025

Summary

Add a subcomponent for watching interop roots, composing interop system transactions and sending them down transaction stream.

TODO:
[ ] - Add config value for interop mode(GW or L1)
[ ] - Add persistence to watcher

Breaking Changes

  • Who is affected? (e.g. protocol in general, EN users, main node)
  • What exactly is breaking? (changed DB schema or wiring protocol, added configs)
  • Are there migration steps required for consumers?
  • Links to any related docs / migration guides.

Rollout Instructions

  • Order of operations (deploy backend, then clients, etc).
  • Monitoring / alerting to watch during rollout.
  • Rollback plan (what to revert, how to mitigate if things go wrong).
    -->

@github-actions
Copy link

github-actions bot commented Dec 21, 2025

Test results

172 tests   172 ✅  17m 18s ⏱️
 26 suites    0 💤
  1 files      0 ❌

Results for commit 3d81567.

♻️ This comment has been updated with latest results.

Comment on lines +59 to +60
.from_block(from_block)
.to_block(to_block)
Copy link
Contributor

Choose a reason for hiding this comment

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

Are you sure that get_logs will work with an arbitrary block range? I recall eth-watcher in Era having complex logic to handle the corresponding errors in a similar situation.


let interop_roots_envelope = InteropRootsEnvelope::from_interop_roots(interop_roots);

self.output.send(interop_roots_envelope).await?;
Copy link
Contributor

Choose a reason for hiding this comment

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

An error here corresponds to the disconnected receiver (i.e., on normal or abnormal node shutdown). Correspondingly, it would make more sense to exit the component normally in this case.

let filter = Filter::new()
.from_block(from_block)
.to_block(to_block)
.address(self.contract_address)
Copy link
Contributor

Choose a reason for hiding this comment

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

Future work: Is there a way to check the address on construction, e.g. by invoking some getter in the contract? This could prevent misconfigurations etc.

Base automatically changed from afo/interop-tx-interface to main January 9, 2026 12:29
@Artemka374 Artemka374 closed this Jan 21, 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.

3 participants