🔄 Changes Summary
Enable the AggSender to work with multiple validator nodes in a committee-based validation system. The implementation includes validator services, multisig committee management, certificate validation improvements, and enhanced gRPC communication protocols.
Multisig Committee Support:
- Added
MultisigCommitteetype to manage signer sets and enforce signature thresholds. - Signers are represented as
SignerInfostructs with both address and URL for improved context and error reporting. - Committee construction validates non-empty membership and non-zero threshold, preventing misconfiguration.
- Dynamic signer management: methods for adding signers, duplicate checks by address and URL.
Aggsender Validator Refactor:
- The Aggsender certificate validation flow was refactored to integrate multisig logic.
- The multisig validation logic is applicable to both
PPandFEPcertificates. - Certificate validation now checks for contiguous certificates, last L2 block, and settlement status using new queries.
- Import bridge exit proof verification is handled via new logic using
verifyClaimProofs, ensuring only valid proofs pass.
Certificate Metadata removal:
- It is gone from the agglayer and therefore it is not sent anymore from the aggsender either.
- Only thing worth noting is that, when calculating
CertificateID, instead of metadata field, which was used previously, we now useZeroHash.
- Only thing worth noting is that, when calculating
Smart contracts integration:
- AggchainFEP contract: Removed querying of
TrustedSequenceraddress and rely on the signers committee instead - AggchainBase contract: Retrieve the multisig committee from the
AggchainBasecontract
Agglayer integration:
- Invoke the
GetNetworkStateAPI from agglayer to get the latest settled imported bridge exit info. - Multisig is populated into the certificate and sent to the Agglayer's
SendCertificategRPC endpoint
⚠️ Breaking Changes
- 🛠️ Config: Make sure that
Modeon theValidatorandAggSenderare the same. - 🔌 API/CLI:
aggkitversion (v0.7.0) that supportsmultisigwill now require updated contracts to run. At least versionv12.1.0-rc.3ofagglayer-contracts, and a new version ofagglayerwhich supportsmultisig, which is thev0.4.0ofagglayer. - 🗑️ Deprecated Features: Aggsender Phase II validator signing logic
📋 Config Updates
- Added
AggSender.RequireCommitteeMembershipCheck = falseparameter, which defines if a check onaggsender proposerstartup will be performed to see if the proposer is in themultisigcommittee. - Added
Validator.RequireCommitteeMembershipCheck = {{AggSender.RequireCommitteeMembershipCheck}}parameter, which defines if a check onaggsender validatorstartup will be performed to see if the validator is in themultisigcommittee. - Added
Validator.Mode = "PessimisticProof"parameter, which acts the same as theAggSender.Mode. It tells the validator that the network is aPPnetwork or anFEPnetwork. It has to be the same as onaggsender proposer. - Added
Validator.FEPConfig.SovereignRollupAddr = "{{AggSender.SovereignRollupAddr}}" parameter which is the address of theAggchainFEP` rollup on L1 for given network for which validator is running. - Added
Validator.FEPConfig.RequireNoBlockGap = {{AggSender.RequireNoFEPBlockGap}}, which acts the same as the given paremeter onAggSender(proposer) config, and tells the validator if gaps in blocks in certificates are allowed inFEP` network.
[AggSender]
RequireCommitteeMembershipCheck = false
[Validator]
# PessimisticProof or AggchainProof
Mode = "PessimisticProof"
RequireCommitteeMembershipCheck = {{AggSender.RequireCommitteeMembershipCheck}}
[Validator.FEPConfig]
SovereignRollupAddr = "{{AggSender.SovereignRollupAddr}}"
RequireNoBlockGap = "{{AggSender.RequireNoFEPBlockGap}}"What's Changed
- fix: [integration] optional
AggchainDatafield treatment by @Stefan-Ethernal in #985 - fix: failed to validate the certificate by @Stefan-Ethernal in #989
- fix: aggsender proposer override multisig committee URL by @joanestebanr in #984
Full Changelog: v0.7.0-beta2...v0.7.0-beta3