-
Notifications
You must be signed in to change notification settings - Fork 19
feat: validation and signing of GERs on aggsender-validator
#1317
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
base: develop
Are you sure you want to change the base?
Conversation
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.
Pull Request Overview
This PR adds validation and signing of Global Exit Roots (GERs) on the aggsender-validator. The implementation introduces a new gRPC endpoint ValidateGER that validates GERs against the L1 GlobalExitRootManager contract before signing them. The validation checks if a GER exists on the L1 contract at a specified block finality level.
Key Changes:
- New
ValidateGERgRPC endpoint for validating and signing GERs - Added
L1GERQuerierto check GER existence on L1 GlobalExitRootManager contract - Extended validator interfaces and implementations (
LocalValidator,RemoteValidator) with GER validation support - Configuration updates to support GER validation with block finality settings
Reviewed Changes
Copilot reviewed 31 out of 32 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
aggsender/validator/validator_service.go |
Adds ValidateGER gRPC endpoint handler for validating and signing GERs |
aggsender/validator/validate_certificate.go |
Implements ValidateGER method in CertificateValidator to check GER existence on L1 |
aggsender/validator/local_validator.go |
Adds ValidateAndSignGER method that validates GERs without signing (returns empty signature) |
aggsender/validator/remote_validator.go |
Adds ValidateAndSignGER method with signature validation and extracts common validateSignature helper |
aggsender/validator/validator_client.go |
Adds client method ValidateGER for calling the new gRPC endpoint |
aggsender/query/ger_query.go |
Implements L1GERDataQuerier to query L1 contract for GER existence; renames GERQuerier to L2GERQuerier |
aggsender/validator/config.go |
Adds GERValidateConfig with GlobalExitRootL1Addr and BlockFinality configuration |
aggsender/types/interfaces.go |
Adds new interfaces L1GERQuerier and AgglayerGER; updates validator interfaces with GER methods |
cmd/run.go |
Wires up L1GERQuerier when creating the aggsender validator |
aggsender/aggsender.go |
Creates L1GERQuerier instance for local validator initialization |
config/default.go |
Adds GlobalExitRootL1 configuration parameter to AggSender config |
aggsender/validator/proto/v1/validator.proto |
Updates ValidateGERRequest to use FixedBytes32 type for GER field |
aggsender/validator/proto/v1/*.pb.go |
Regenerated protobuf code with updated generator versions |
buf.lock |
Updates agglayer and interop dependency commits |
aggsender/mocks/*.go |
Adds/updates mocks for new interfaces (L1GERQuerier, AgglayerGER, etc.) |
9d39297 to
36a9399
Compare
12aec7e to
d5c87f5
Compare
|


🔄 Changes Summary
This PR adds the validation of
GlobalExitRootsonaggsender-validatorthat want to be injected by anaggoracle.For this purpose, a new
gRPCendpoint is added on the validator, called/aggkit.aggsender.validator.v1.AggsenderValidator/ValidateGER:If the given
GERexists on theL1GlobalExitRootManagercontract, for a given block finality, the validator will sign theGER, and return a signature. Otherwise, it will fail, and return an error.NA
📋 Config Updates
GlobalExitRootL1param in theAggSenderconfig which represents the address of theglobal exit root managercontract on L1.GERValidateConfigsection to theValidatorwhich is comprised of these parameters:GlobalExitRootL1Addr- address of theglobal exit root managercontract onL1.BlockFinality- which represents the block finality for which we injectglobal exit roots. This should be the same as onAggoracle(for example, Latest/-6 blocks).✅ Testing
aggkitCI🐞 Issues