Skip to content

Conversation

ypatil12
Copy link
Collaborator

Motivation:

Clean up readability of CrossChainRegistry

Modifications:

  • Add hasActiveGenerationReservation modifier
  • Remove the isDelete parameter from setter functions
  • Simplify removeGenerationReservation

Result:

Cleaner + More Auditable Code

@ypatil12 ypatil12 changed the title refactor: cross chain registry refactor: CrossChainRegistry Jun 10, 2025
@ypatil12 ypatil12 requested a review from 0xrajath June 10, 2025 16:31
Comment on lines 136 to 146
// Clear all storage for the operator set
// 1. Remove the operator table calculator
delete _operatorTableCalculators[operatorSetKey];
// 2. Remove the operator set config
delete _operatorSetConfigs[operatorSetKey];
// 3. Remove all transport destinations
delete _transportDestinations[operatorSetKey];
Copy link
Collaborator

@0xrajath 0xrajath Jun 10, 2025

Choose a reason for hiding this comment

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

Sooo. One thought around this is that we should emit an event for each of these deletion changes. Currently that's not captured (the internal setters handled that earlier)

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 talk to @bowenli86 about the events here

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Updated to have events

// Check final state based on isDelete flag
if (!isDelete) {
// For normal removal, at least one destination should remain
require(_transportDestinations[operatorSetKey].length() > 0, RequireAtLeastOneTransportDestination());
Copy link
Collaborator

Choose a reason for hiding this comment

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

This check needs to exist while deleting the transport destinations right? i.e we need atleast one chain.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Good catch, added back: 8a779c7

Comment on lines 77 to 80
event TransportDestinationRemoved(OperatorSet operatorSet, uint256 chainID);

/// @notice Emitted when transport destinations are removed, when a generation reservation is removed
event TransportDestinationsRemoved(OperatorSet operatorSet);
Copy link
Collaborator

Choose a reason for hiding this comment

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

Is it weird to have 2 similar events here?

Copy link
Collaborator Author

@ypatil12 ypatil12 Jun 10, 2025

Choose a reason for hiding this comment

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

We've changed naming - TransportDestinationChainRemoved/Added. Preserved above

@ypatil12 ypatil12 force-pushed the refactor/cross-chain-registry branch from 3dad6a5 to f1775d4 Compare June 10, 2025 23:18
@ypatil12 ypatil12 marked this pull request as ready for review June 10, 2025 23:19
@ypatil12 ypatil12 force-pushed the refactor/cross-chain-registry branch from c330a08 to 5935f2f Compare June 11, 2025 13:48
@ypatil12 ypatil12 merged commit 518c1ec into release-dev/multichain Jun 11, 2025
9 checks passed
@ypatil12 ypatil12 deleted the refactor/cross-chain-registry branch June 11, 2025 17:20
ypatil12 added a commit that referenced this pull request Jun 28, 2025
**Motivation:**

Clean up readability of CrossChainRegistry

**Modifications:**

- Add `hasActiveGenerationReservation` modifier
- Remove the `isDelete` parameter from setter functions
- Simplify `removeGenerationReservation`

**Result:**

Cleaner + More Auditable Code
@ypatil12 ypatil12 mentioned this pull request Jul 1, 2025
ypatil12 added a commit that referenced this pull request Jul 1, 2025
**Motivation:**

Clean up readability of CrossChainRegistry

**Modifications:**

- Add `hasActiveGenerationReservation` modifier
- Remove the `isDelete` parameter from setter functions
- Simplify `removeGenerationReservation`

**Result:**

Cleaner + More Auditable Code
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:**

Clean up readability of CrossChainRegistry

**Modifications:**

- Add `hasActiveGenerationReservation` modifier
- Remove the `isDelete` parameter from setter functions
- Simplify `removeGenerationReservation`

**Result:**

Cleaner + More Auditable Code
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.

2 participants