Skip to content

Conversation

@ypatil12
Copy link
Collaborator

@ypatil12 ypatil12 commented May 30, 2025

Motivation:

Add all multi chain interfaces for easier development.

Modifications:

Adds the following:

  • IBN254CertificateVerifier (implements IBaseCertificateVerifier)
  • IECDSACertificateVerifier (implements IBaseCertificateVerifier)
  • IBN254TableCalculator
  • IECDSATableCalculator
  • IOperatorTableUpdater
  • ICrossChainRegistry

Result:

Multichain interfaces. Pending adding of OperatorTableCalculator

@ypatil12 ypatil12 force-pushed the feat/multichain-interfaces branch from ee0ce16 to 80c71f9 Compare May 30, 2025 22:44
@ypatil12 ypatil12 changed the base branch from release-dev/crosschain to release-dev/multichain May 30, 2025 22:48
@8sunyuan
Copy link
Contributor

8sunyuan commented Jun 2, 2025

Change uint96 values to uint256. Also are removing the operator table bytes view functions?

@ypatil12
Copy link
Collaborator Author

ypatil12 commented Jun 2, 2025

Change uint96 values to uint256. Also are removing the operator table bytes view functions?

4f9b2bc cc @8sunyuan

@8sunyuan 8sunyuan merged commit fa58d89 into release-dev/multichain Jun 2, 2025
9 checks passed
@8sunyuan 8sunyuan deleted the feat/multichain-interfaces branch June 2, 2025 15:50
Comment on lines +20 to +24
/// @notice Emitted when the owner of an operatorSet is updated
event OperatorSetOwnerUpdated(OperatorSet operatorSet, address owner);

/// @notice Emitted when the max staleness period of an operatorSet is updated
event MaxStalenessPeriodUpdated(OperatorSet operatorSet, uint32 maxStalenessPeriod);
Copy link
Collaborator

Choose a reason for hiding this comment

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

Thoughts on splitting up the avs and operatorSetId and having them as indexed fields for easier offchain filtering through event topics?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Will leave that to @bowenli86 , currently we use operatorSet where applicable

Copy link
Contributor

Choose a reason for hiding this comment

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

OperatorSet in log is avs + id, we should be good for now


/// @notice A base interface that verifies certificates for a given operatorSet
/// @notice This is a base interface that all curve certificate verifiers (eg. BN254, ECDSA) must implement
/// @dev A single `CertificateVerifier` can be used for ONLY 1 operatorSet
Copy link
Collaborator

Choose a reason for hiding this comment

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

I'm assuming this @dev comment is outdated? It's going to be a singleton contract right?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Correct

}

/// @notice An interface for verifying BN254 certificates
/// @notice This implements a base interface that all curve certificate verifiers (eg. BN254, ECDSA) must implement
Copy link
Collaborator

Choose a reason for hiding this comment

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

@notice seems to be wrong here.

Comment on lines +4 to +7
import "src/contracts/libraries/OperatorSetLib.sol";
import "src/contracts/interfaces/ICrossChainRegistry.sol";
import "src/contracts/interfaces/IBaseCertificateVerifier.sol";
import "src/contracts/interfaces/IBN254TableCalculator.sol";
Copy link
Collaborator

@0xrajath 0xrajath Jun 2, 2025

Choose a reason for hiding this comment

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

Thinking out loud here. For all these files, should these imports be relative imports? I've had trouble compiling contracts when the dependent lib (i.e in this case eigenlayer-contracts) has absolute imports instead of relative imports. the remappings seem to break.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Ya, can update

}

/// @notice An interface for verifying ECDSA certificates
/// @notice This implements a base interface that all curve certificate verifiers (eg. BN254, ECDSA) must implement
Copy link
Collaborator

Choose a reason for hiding this comment

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

@notice seems to be wrong.

Comment on lines +29 to +30
IECDSACertificateVerifierTypes,
IBN254CertificateVerifierTypes,
Copy link
Collaborator

Choose a reason for hiding this comment

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

Out of curiousity. Why not have separate OperatorTableUpdaters for ECDSA and BN254 instead of clubbing them together here? What if you wanted to add a new curve in the future?

All the other contracts have them separated right?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Mainly because we want a single entity to update all types of tables

Copy link
Collaborator

Choose a reason for hiding this comment

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

I'm assuming a new curve will just be added to this contract then?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Yup

Comment on lines +6 to +8
interface IOperatorTableCalculator {
// TODO: implement, stub for now
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

What is this stub?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

The contract that returns the stake weights for all operators in an operatorSet

ypatil12 added a commit that referenced this pull request Jun 9, 2025
**Motivation:**

Add all multi chain interfaces for easier development. 

**Modifications:**

Adds the following:
- `IBN254CertificateVerifier` (implements `IBaseCertificateVerifier`)
- `IECDSACertificateVerifier` (implements `IBaseCertificateVerifier`)
- `IBN254TableCalculator`
- `IECDSATableCalculator`
- `IOperatorTableUpdater`
- `ICrossChainRegistry`

**Result:**

Multichain interfaces. Pending adding of `OperatorTableCalculator`
ypatil12 added a commit that referenced this pull request Jun 28, 2025
**Motivation:**

Add all multi chain interfaces for easier development. 

**Modifications:**

Adds the following:
- `IBN254CertificateVerifier` (implements `IBaseCertificateVerifier`)
- `IECDSACertificateVerifier` (implements `IBaseCertificateVerifier`)
- `IBN254TableCalculator`
- `IECDSATableCalculator`
- `IOperatorTableUpdater`
- `ICrossChainRegistry`

**Result:**

Multichain interfaces. Pending adding of `OperatorTableCalculator`
@ypatil12 ypatil12 mentioned this pull request Jul 1, 2025
ypatil12 added a commit that referenced this pull request Jul 1, 2025
**Motivation:**

Add all multi chain interfaces for easier development. 

**Modifications:**

Adds the following:
- `IBN254CertificateVerifier` (implements `IBaseCertificateVerifier`)
- `IECDSACertificateVerifier` (implements `IBaseCertificateVerifier`)
- `IBN254TableCalculator`
- `IECDSATableCalculator`
- `IOperatorTableUpdater`
- `ICrossChainRegistry`

**Result:**

Multichain interfaces. Pending adding of `OperatorTableCalculator`
ypatil12 added a commit that referenced this pull request Jul 1, 2025
# v1.7.0 Multi Chain

The multichain 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:

1. Core Contracts
2. AVS Contracts
3. Offchain Infrastructure

The below release notes cover Core Contracts. For more information on
the end to end protocol, see our [docs](../docs/multichain/README.md)
and
[ELIP-008](https://github.com/eigenfoundation/ELIPs/blob/main/ELIPs/ELIP-008.md).

## Release Manager

@ypatil12 @eigenmikem

## Highlights

This multichain release only introduces new standards and contracts. As
a result, there are no breaking changes or deprecations.

🚀 New Features

Source Chain Contracts
- `KeyRegistrar`: Manages cryptographic keys for operators across
different operator sets. It supports both ECDSA and BN254 key types and
ensures global uniqueness of keys across all operator sets
- `CrossChainRegistry`: Enables AVSs to register to have their operator
stakes transported to supported destination chains
- `ReleaseManager`: Provides a standardized way for AVSs to publish
software artifacts (binaries, docker images, etc.) that operators in
their operator sets should upgrade to by specified deadlines

Destination Chain Contracts
- `CertificateVerifier`: Proves the offchain execution of a task, via a
Certificate, by the operators of an operatorSet. Two types of key
material are supported: ECDSA and BN254
- `OperatorTableUpdater`: Updates operator tables in the
`CertificateVerifier` to have tasks validated against up-to-date
operator stake weights

🔧 Improvements – Enhancements to existing features.

- The multichain protocol has protocol-ized several AVS-deployed
contracts, enabling an simpler AVS developer experience. These include:
- `KeyRegistrar`: Manages BLS and ECDSA signing keys. AVSs no longer
have to deploy a `BLSAPKRegistry`
- `CertificateVerifier`: Handles signature verification for BLS and
ECDSA keys. AVSs no longer have to deploy a `BLSSignatureChecker`
- Offchain Multichain Transport: AVSs no longer have to maintain
[avs-sync](https://github.com/Layr-Labs/avs-sync) to keep operator
stakes fresh

## Changelog

- feat: multichain deploy scripts [PR
#1487](#1487)
- feat: operator table updater pauser [PR
#1501](#1501)
- feat: add `publishMetadataURI` [PR
#1492](#1492)
- refactor: `globalRootConfirmerSet` -> `generator` [PR
#1500](#1500)
- fix: circular dependency for initial global root update [PR
#1499](#1499)
- chore: remove stale bindings [PR
#1498](#1498)
- fix: zero length [PR
#1490](#1490)
- docs: multichain docs [PR
#1488](#1488)
- refactor: remove table calculators [PR
#1493](#1493)
- refactor: `KeyRegistry` unit testing [PR
#1482](#1482)
- feat: disable root [PR
#1481](#1481)
- refactor: `ECDSATableCalculator` testing [PR
#1479](#1479)
- refactor: operators can deregister keys if not slashable [PR
#1480](#1480)
- refactor: `ECDSACertificateVerifier` testing [PR
#1478](#1478)
- refactor: `Bn254CertificateVerifierUnitTests` [PR
#1476](#1476)
- feat: ecdsa table calculator [PR
#1473](#1473)
- feat: ecdsacv views [PR
#1475](#1475)
- refactor: `BN254OperatorTableCalculator` [PR
#1463](#1463)
- feat: add `referenceBlockNumber` [PR
#1472](#1472)
- feat: release manager [PR
#1469](#1469)
- feat: ecdsa cert verifier [PR
#1470](#1470)
- feat: add view function for `getGlobalConfirmerSetReferenceTimestamp`
[PR #1471](#1471)
- chore: add helper view function [PR
#1465](#1465)
- chore: add sig digest functions to interface [PR
#1464](#1464)
- refactor: `CrossChainRegistry` [PR
#1457](#1457)
- fix: global table update message hash [PR
#1460](#1460)
- refactor: sig verification into library [PR
#1455](#1455)
- fix: `OperatorTableUpdater` encoding [PR
#1456](#1456)
- chore: add latest `referenceTimestamp` to OTC interface [PR
#1454](#1454)
- chore: bindings [PR
#1452](#1452)
- feat: add operator table updater to CCR [PR
#1451](#1451)
- chore: multichain deploy scripts [PR
#1449](#1449)
- feat: cross chain registry [PR
#1439](#1439)
- chore: update BN254CertificateVerifier [PR
#1447](#1447)
- feat: bn254 operator table contracts [PR
#1429](#1429)
- feat: KeyRegistrar [PR
#1421](#1421)
- feat: operator table updater [PR
#1436](#1436)
- feat: bn254 certificate verifier [PR
#1431](#1431)
- chore: bindings + interface update [PR
#1438](#1438)
- chore: update multichain interfaces [PR
#1433](#1433)
- feat: multi chain interfaces [PR
#1423](#1423)
- docs: update version matrix [PR
#1491](#1491)
- chore: add multisend parser to scripts directory [PR
#1486](#1486)
- chore: update eigenpod and eigen impls addresses in holesky and hoodi
[PR #1448](#1448)
ypatil12 added a commit that referenced this pull request Jul 7, 2025
**Motivation:**

Add all multi chain interfaces for easier development. 

**Modifications:**

Adds the following:
- `IBN254CertificateVerifier` (implements `IBaseCertificateVerifier`)
- `IECDSACertificateVerifier` (implements `IBaseCertificateVerifier`)
- `IBN254TableCalculator`
- `IECDSATableCalculator`
- `IOperatorTableUpdater`
- `ICrossChainRegistry`

**Result:**

Multichain interfaces. Pending adding of `OperatorTableCalculator`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants