-
Notifications
You must be signed in to change notification settings - Fork 114
release: middlewareV2/multichain #496
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
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
**Motivation:** Initial interfaces for multi chain. **Modifications:** ***TableCalculator*** The separation here is designed to decouple - Curve-Specific Calculation - Generic Table Calculation Getters (applicable for all curve types) - Weighting. `IOperatorWeightCalculator` is a calculation contract that defines how to weigh stakes of an operatorSet. This contract may or may not be stateless. In practice, this can be an external contract or library. ```mermaid classDiagram IOperatorWeightCalculator <-- IOperatorTableCalculator : uses many IOperatorTableCalculator <|-- IECDSATableCalculator : implements IOperatorTableCalculator <|-- IBN254TableCalculator : implements class IOperatorWeightCalculator { +getOperatorWeights(OperatorSet) } class IOperatorTableCalculator { +setOperatorWeightCalculator(OperatorSet, IOperatorWeightCalculator) +calculateOperatorTableBytes(OperatorSet) returns (bytes) +getOperatorWeightCalculator(OperatorSet) returns (IOperatorWeightCalculator) } class IECDSATableCalculator { +calculateOperatorTable(OperatorSet) returns (ECDSAOperatorInfo[]) } class IBN254TableCalculator { +calculateOperatorTable(OperatorSet) returns (BN254OperatorSetInfo) +getOperatorInfos(OperatorSet) returns (BN254OperatorInfo[]) } ``` ***CertificateVerifier*** The `CertificateVerifier` decouples setting of the table and verification. See below: ```mermaid classDiagram ICertificateVerifier <|-- IBN254CertificateVerifier: implements IBN254TableManager <|-- IBN254CertificateVerifier: implements class ICertificateVerifier { <<interface>> +setOperatorTableUpdater(address) +setEjector(address) +setMaxOperatorTableStaleness(uint32) +operatorSet() returns (OperatorSet) +operatorTableUpdater() returns (address) +ejector() returns (address) +maxOperatorTableStaleness() returns (uint32) +latestReferenceTimestamp() returns (uint32) } class IBN254TableManager { <<interface>> +updateOperatorTable(OperatorSet, uint32, BN254OperatorSetInfo) +ejectOperators(OperatorSet, uint32, uint32[], BN254OperatorInfoWitness[]) } class IBN254CertificateVerifier { <<interface>> +verifyCertificate(BN254Certificate) returns (uint96[]) +verifyCertificateProportion(BN254Certificate, uint16[]) returns (bool) +verifyCertificateNominal(BN254Certificate, uint96[]) returns (bool) } ``` ***Migration Story*** We want a migration path to store all tables in a singleton core contract. In order to do so, we future-proofed the _transportation_ interface to pass in an `operatorSet` when updating an operatorTable. Permissions setting can be done by an EOA, so we don't need to make that forwards compatible. If all the tables live in a single contract, then for Bn254 caching, the verification must cache stakes in the singleton. **Result:** Initial Interfaces. I see these changing for the following reasons: - Encoding leafs with a salt - Table generation-based trusted operator table updates - Multiquorum sig support (but EigenDA can build their own)
**Motivation:** Redesigning to have a singleton CertificateVerifier that is deployed per destination chain where the AVSs utilizing this contract trust the `globalOperatorTableRoot` is valid and the EigenDA operatorSet which configures this in a timely basis. **Modifications:** - Combined the ECDSACertificateVerifier and the BN254CertificateVerifier interfaces into CertificateVerifier. - OperatorSet configuration parameters are now configured on the L1 via a `CrossChainRegistry` contract and transported by the following functions. - `ICertificateVerifier.updateECDSAOperatorTable` or `ICertificateVerifier.updateBN254OperatorTable` **Result:** Standarizing interface with a canonical CertVerifier contract and less deployment duplication from AVSs.
**Motivation:** We want to update the AVS registrar to be minimal & modular. **Modifications:** Add a new `AVSRegistrar` with first class support with the `KeyRegistrar`. We also have the following modules: 1. `SocketRegistry` 2. `AllowList` The above modules are _abstract_ and are inherited by `AVSRegistrars` in the `presets` folder: `AVSRegistrarWithAllowlist` and `AVSRegistrarWithSocket`. **Result:** Simple AVSRegistrar. Note that we are still pending on the `KeyRegistrar` interface update: Layr-Labs/eigenlayer-contracts#1421
**Motivation:** We need to pin the `eigenlayer-contracts` dependency to use the `release-dev/multichain` and pull the latest changes. **Modifications:** * Pinned `eigenlayer-contracts` dependency to use the `release-dev/multichain` in `.gitmodules` * Updated affected Mocks and tests (due to MOOCOW and Redistribution changes) **Result:** Middleware now has the latest `eigenlayer-contracts` multichain changes
**Motivation:** We need to pull in the latest ecdsa changes from the `eigenlayer-contracts` repo. **Modifications:** * Bumped up `eigenlayer-contracts` dependency * Fixed multiple build warnings. **Result:** Access to ECDSA changes in the Middleware repo.
**Motivation:** All interfaces for CertVerifier, TableCalc, and Registry are in core. **Modifications:** Remove interfaces **Result:** Cleaner code
**Motivation:** The `BN254` and `ECDSA` table calculators are AVS-deployed contracts. They should live in the middleware repo. **Modifications:** - Add `EDSATableCalculator.sol` - Add `BN254TableCalculator.sol` - Add tests for both & tree files **Result:** Proper separation of contracts
**Motivation:** The `AVSRegistrarAsIdentifier` had unnecessary imports **Modifications:** - Remove `Initializable` and `SocketRegistry` **Result:** Cleaner code
**Motivation:** We want interfaces for AVS registrars **Modifications:** Added: - `IAVSRegistrarWithSocket` - `IAVSRegistrarWithAllowlist` **Result:** Cleaner integration
**Motivation:** We want docs for middlewareV2/multichain **Modifications:** Add docs for: - `AVSRegistrar` - `ECDSACertificateVerifier` - `BN254CertificateVerifier` **Result:** Complete docs --------- Co-authored-by: Nadir Akhtar <nadir-akhtar@users.noreply.github.com>
**Motivation:** Update the interface in the table calculator for `getOperatorSetWeights` and `getOperatorWeights` **Modifications:** - `getOperatorWeights` -> `getOperatorSetWeights` - `getOperatorWeight` -> `getOperatorWeights`, and now returns an array of weights - Bump on core version and fix integration test setup **Result:** Correct code
**Motivation:** The AVS registrar was not properly initializing the AVS in core **Modifications:** - Made `avs` variable internal - Update `supportAVS` in `AVSRegistrarAsIdentifier` - Add a public view function for the avs **Result:** Correct code
**Motivation:** We need a changelog for middleware **Modifications:** Add changelog for multichain. Add contribution guideline **Result:** Working changelog
Update core submodule to same commit as `v1.7.0` release
nadir-akhtar
approved these changes
Jul 10, 2025
**Motivation:** Add tests for the implemented table calculators **Modifications:** Add tests for the `_getOperatorWeights` function **Result:** Sufficient coverage. More will be added in integration
Bring up coverage for ecdsa stake registry
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
v1.4.0 MultiChain/MiddlewareV2
The multichain/middlewareV2 release enables AVSs to launch their services and make verified Operator outputs available on any EVM chain, meeting their customers where they are. AVSs can specify custom operator weights to be transported to any destination chain. The release has 3 components:
The below release notes cover AVS Contracts. For more information on the end to end protocol, see our docs, core contract docs, and ELIP-008.
Release Manager
@ypatil12 @eigenmikem
Highlights
This multichain release only introduces new standards and contracts. As a result, there are no breaking changes or deprecations. All new contracts are in the middlewareV2 folder.
🚀 New Features – Highlight major new functionality
AVSRegistrar
: The primary interface for managing operator registration and deregistration within an AVS. It integrates with core EigenLayer contracts to ensure operators have valid keys and are properly registered in operator setsOperatorTableCalculator
: Responsible for calculating stake weights of operator. These stake weights are aggregated and transported using the Eigenlayer Multichain Protocol. In order to utilize the multichain protocol, an AVS MUST deploy anOperatorTableCalculator
and register it in theCrossChainRegistry
in EigenLayer core. See our core documentation for this process.🔧 Improvements – Enhancements to existing features.
KeyRegistrar
: Manages BLS and ECDSA signing keys. AVSs no longer have to deploy aBLSAPKRegistry
CertificateVerifier
: Handles signature verification for BLS and ECDSA keys. AVSs no longer have to deploy aBLSSignatureChecker
Changelog
eigenlayer-contracts
dependency PR #486