Skip to content

Conversation

@ypatil12
Copy link
Collaborator

@ypatil12 ypatil12 commented Jun 25, 2025

Motivation:

We need deploy scripts for multichain

Modifications:

Adds a crossChainDeployLib from: #1474. This library uses createX for deterministic deployments. In order to keep the same address on all destinationChains, we deploy contracts from the same multisig on each chain.

Add testnet-base-sepolia to CI for deploy scripts.

Adds a deploy_globalRootConfirmerSet script. This script initiates a global root confirmer set (ie. generator) and updates the network.toml file used in the deploy scripts. It is only intended to be used on preprod and testnet.

To distinguish between a source and destination chain we add a SOURCE_CHAIN: bool and DESTINATION_CHAIN: bool to the Zeus Config. We skip parts of the deploy if a chain is not a source or destination.

Deploys the contracts in 5 steps

  1. deploySourceChain.s.sol: Deploys KeyRegistrar, ReleaseManager, CrossChainRegistry.
  2. deployDestinationChainProxies.s.sol: Deploys empty proxy contracts for OperatorTableUpdater, BN254CertificateVerifier, ECDSACertificateVerifier. Note: in order to have deterministic proxies, we need to ensure the initCode is the same. Thus, the implementation is the same emptyContract and the proxyAdmin is initially the multichainDeployerMultisig.
  3. deployDestinationChainImpls: Deploys implementations using EOA
  4. instantiateDestinationChainProxies: Upgrades the proxies to the actual implementations. Transfer proxy admin to the actual proxyAdmin
  5. configureCrossChainRegistry: Updates the crossChainRegistry on the SOURCE_CHAIN to whitelist proper chainIds

Result:

Deploy scripts

@ypatil12 ypatil12 force-pushed the feat/deploy-scripts branch from ac34269 to ebd2c17 Compare June 28, 2025 04:33
@ypatil12 ypatil12 requested a review from 0xClandestine June 28, 2025 04:35
@ypatil12 ypatil12 marked this pull request as ready for review June 28, 2025 04:35
@ypatil12 ypatil12 changed the title feat: deploy scripts feat: multichain deploy scripts Jun 28, 2025
@ypatil12 ypatil12 force-pushed the feat/deploy-scripts branch from 0edefd1 to 833d2d0 Compare June 28, 2025 15:13
@ypatil12 ypatil12 force-pushed the release-dev/multichain branch from 8c6266f to 421b314 Compare June 28, 2025 15:14
@ypatil12 ypatil12 force-pushed the feat/deploy-scripts branch 3 times, most recently from 9faccd3 to 371b300 Compare July 1, 2025 02:37
@ypatil12 ypatil12 changed the base branch from release-dev/multichain to feat/otc-pauser July 1, 2025 02:46
@ypatil12 ypatil12 force-pushed the feat/deploy-scripts branch from 82e927b to c9654a4 Compare July 1, 2025 02:46
Base automatically changed from feat/otc-pauser to release-dev/multichain July 1, 2025 17:37
@ypatil12 ypatil12 force-pushed the feat/deploy-scripts branch from e791666 to 0706a59 Compare July 1, 2025 17:41
@ypatil12 ypatil12 merged commit 06677bd into release-dev/multichain Jul 1, 2025
15 checks passed
@ypatil12 ypatil12 deleted the feat/deploy-scripts branch July 1, 2025 18:03
@ypatil12 ypatil12 mentioned this pull request Jul 1, 2025
ypatil12 added a commit that referenced this pull request Jul 1, 2025
**Motivation:**

We need deploy scripts for multichain 

**Modifications:**

Adds a `crossChainDeployLib` from:
#1474. This
library uses `createX` for deterministic deployments. In order to keep
the same address on all `destinationChains`, we deploy contracts from
the same multisig on each chain.

Add `testnet-base-sepolia` to CI for deploy scripts. 

Adds a `deploy_globalRootConfirmerSet` script. This script initiates a
global root confirmer set (ie. generator) and updates the `network.toml`
file used in the deploy scripts. It is only intended to be used on
`preprod` and `testnet`.

To distinguish between a source and destination chain we add a
`SOURCE_CHAIN: bool` and `DESTINATION_CHAIN: bool` to the Zeus Config.
We skip parts of the deploy if a chain is not a source or destination.

Deploys the contracts in 5 steps

1. `deploySourceChain.s.sol`: Deploys `KeyRegistrar`, `ReleaseManager`,
`CrossChainRegistry`.
2. `deployDestinationChainProxies.s.sol`: Deploys _empty_ proxy
contracts for `OperatorTableUpdater`, `BN254CertificateVerifier`,
`ECDSACertificateVerifier`. _Note: in order to have deterministic
proxies, we need to ensure the `initCode` is the same. Thus, the
implementation is the same `emptyContract` and the proxyAdmin is
initially the `multichainDeployerMultisig`_.
3. `deployDestinationChainImpls`: Deploys implementations using EOA
4. `instantiateDestinationChainProxies`: Upgrades the proxies to the
actual implementations. Transfer proxy admin to the actual `proxyAdmin`
5. `configureCrossChainRegistry`: Updates the `crossChainRegistry` on
the `SOURCE_CHAIN` to whitelist proper chainIds

**Result:**

Deploy scripts

---------

Co-authored-by: clandestine.eth <[email protected]>
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:**

We need deploy scripts for multichain 

**Modifications:**

Adds a `crossChainDeployLib` from:
#1474. This
library uses `createX` for deterministic deployments. In order to keep
the same address on all `destinationChains`, we deploy contracts from
the same multisig on each chain.

Add `testnet-base-sepolia` to CI for deploy scripts. 

Adds a `deploy_globalRootConfirmerSet` script. This script initiates a
global root confirmer set (ie. generator) and updates the `network.toml`
file used in the deploy scripts. It is only intended to be used on
`preprod` and `testnet`.

To distinguish between a source and destination chain we add a
`SOURCE_CHAIN: bool` and `DESTINATION_CHAIN: bool` to the Zeus Config.
We skip parts of the deploy if a chain is not a source or destination.

Deploys the contracts in 5 steps

1. `deploySourceChain.s.sol`: Deploys `KeyRegistrar`, `ReleaseManager`,
`CrossChainRegistry`.
2. `deployDestinationChainProxies.s.sol`: Deploys _empty_ proxy
contracts for `OperatorTableUpdater`, `BN254CertificateVerifier`,
`ECDSACertificateVerifier`. _Note: in order to have deterministic
proxies, we need to ensure the `initCode` is the same. Thus, the
implementation is the same `emptyContract` and the proxyAdmin is
initially the `multichainDeployerMultisig`_.
3. `deployDestinationChainImpls`: Deploys implementations using EOA
4. `instantiateDestinationChainProxies`: Upgrades the proxies to the
actual implementations. Transfer proxy admin to the actual `proxyAdmin`
5. `configureCrossChainRegistry`: Updates the `crossChainRegistry` on
the `SOURCE_CHAIN` to whitelist proper chainIds

**Result:**

Deploy scripts

---------

Co-authored-by: clandestine.eth <[email protected]>
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.

4 participants