Skip to content

Releases: Layr-Labs/eigenlayer-contracts

v1.7.0-rc.0: Multichain

10 Jul 18:10
c724f2b
Compare
Choose a tag to compare
Pre-release

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 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.

🚀 New Features – Highlight major new functionality

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 to keep operator stakes fresh

Changelog

  • fix: multichain deploy scripts PR #1510
  • test: multichain integration tests PR #1528
  • fix: multichain clarity updates PR #1527
  • refactor: table calc interface PR #1525
  • docs: update README for v1.5.0 & v1.6.0 PR #1526
  • docs: update ecdsa vc func
  • docs: fix ordering of cv funcs
  • chore: use bps_denominator in ecdsa cv
  • chore: domain separator no chain id doc
  • chore: use uint256 for index
  • chore: is spent
  • fix: cert verifier typo
  • fix: by hash docs consistency
  • refactor: cleaner reverts for ECDSACertificateVerifier PR #1521
  • docs: clear up certificate verification PR #1515
  • docs: add final audit reports
  • feat: key data reverse lookup PR #1520
  • fix: remove unused constants and add gap PR #1519
  • refactor: remove unnecessary signature validation and change param name PR #1509
  • docs: update CHANGELOG PR #1514
  • docs(redistribution-changes): cleanup PR #1513
  • test(redistribution-changes): passing PR #1511
  • fix: strategy manager gap PR #1508
  • refactor: remove redistribution delay PR #1485
  • docs(audit): note upgrade rescue flow PR #1467
  • fix(audit): assert redistribution recipient != burn address PR #1466
  • fix(audit): more reentrancy checks PR #1450
  • fix(audit): out-of-gas issue PR #1459
  • chore: add final moocow audit
  • docs: changelog PR #1504
  • feat: multichain deploy scripts PR #1487
  • feat: operator table updater pauser PR #1501
  • feat: add publishMetadataURI PR #1492
  • refactor: globalRootConfirmerSet -> generator PR #1500
  • fix: circular dependency for initial global root update PR #1499
  • chore: remove stale bindings PR #1498
  • fix: zero length PR #1490
  • docs: multichain docs PR #1488
  • refactor: remove table calculators PR #1493
  • refactor: KeyRegistry unit testing PR #1482
  • feat: disable root PR #1481
  • refactor: ECDSATableCalculator testing PR #1479
  • refactor: operators can deregister keys if not slashable PR #1480
  • refactor: ECDSACertificateVerifier testing PR #1478
  • refactor: Bn254CertificateVerifierUnitTests PR #1476
  • feat: ecdsa table calculator PR #1473
  • feat: ecdsacv views PR #1475
  • refactor: BN254OperatorTableCalculator PR #1463
  • feat: add referenceBlockNumber PR #1472
  • feat: release manager PR #1469
  • feat: ecdsa cert verifier PR #1470
  • feat: add view function for getGlobalConfirmerSetReferenceTimestamp PR #1471
  • chore: add helper view function PR #1465
  • chore: add sig digest functions to interface PR #1464
  • refactor: CrossChainRegistry PR #1457
  • fix: global table update message hash PR #1460
  • refactor: sig verification into library PR #1455
  • fix: OperatorTableUpdater encoding PR #1456
  • chore: add latest referenceTimestamp to OTC interface PR #1454
  • chore: bindings PR #1452
  • feat: add operator table updater to CCR PR #1451
  • chore: multichain deploy scripts PR #1449
  • feat: cross chain registry PR #1439
  • chore: update BN254CertificateVerifier PR #1447
  • feat: bn254 operator table contracts PR #1429
  • feat: KeyRegistrar PR #1421
  • feat: operator table updater PR #1436
  • feat: bn254 certificate verifier PR #1431
  • chore: bindings + interface update PR #1438
  • chore: update multichain interfaces PR #1433
  • feat: multi chain interfaces PR #1423

New Contributors

Full Changelog: v1.6.0...v1.7.0-rc.0

v1.6.0

02 Jul 16:06
Compare
Choose a tag to compare
v1.6.0 Pre-release
Pre-release

v1.6.0 Moocow and ELIP5

Release Manager

@wadealexc @bowenli86

Highlights

🚀 New Features

  • New APIs supporting Pectra's validator consolidation and withdrawal features: EigenPod.requestConsolidation(...) and EigenPod.requestWithdrawal(...)
  • New getters to support Pectra APIs: EigenPod.getConsolidationRequestFee() and EigenPod.getWithdrawalRequestFee()
  • Added 4 new events to EigenPod.sol to track consolidation and withdrawal requests
  • Added 2 new events to Eigen.sol to track token wraps/unwraps with BackingEigen

📌 Deprecations

  • Removed EigenPod.GENESIS_TIME() getter. This method, though public, has been unused for over a year.

🔧 Improvements

  • When finalizing an EigenPod checkpoint (proofsRemaining == 0), the contract will store the finalized checkpoint in storage. This can be queried via EigenPod.currentCheckpoint(). Starting a new checkpoint will overwrite this previously-finalized checkpoint.
  • Added semver to Eigen
  • Signatures of a few EigenPod events are changed to match the rest events and take validator pubkey hash instead of validator index, which standardized EigenPod events signature

🐛 Bug Fixes

  • For Hoodi, updates fixes ethPOS deposit contract to point to 0x00000000219ab540356cBB839Cbe05303d7705Fa

Changelog

  • feat: merge Moocow and ELIP5 into main PR #1425
  • docs: proper markdown PR #1435
  • docs: update readme
  • chore: update testnet addresses for redistribution PR #1428
  • chore: remove User_M2.t.sol
  • feat: update EIGEN binding
  • chore: resolve conflicts in upgrade.json
  • chore: update harness class formatting
  • chore: complete v1.6.0 changelog
  • chore: changelog and bindings
  • test: add more script tests for Eigen and standardize semver
  • feat: add semver to eigen PR #1371
  • feat: add TokenWrapped and TokenUnwrapped events in Eigen for observability PR #1356
  • feat: change eigenpod events to use pubkeyHash over index
  • feat: release scripts for moocow and elip5
  • feat: currentCheckpoint now returns finalized checkpoint
  • feat: implement consolidation and withdrawal requests
  • chore: update eigenpod and eigen impls addresses in holesky and hoodi by @bowenli86 in #1448
  • chore: add multisend parser to scripts directory by @nadir-akhtar in #1486
  • docs: update version matrix by @ypatil12 in #1491
  • chore: MOOCOW audit fixes by @wadealexc in #1496

Full Changelog: v1.5.0...v1.6.0

v1.5.0

07 Jul 20:11
Compare
Choose a tag to compare
v1.5.0 Pre-release
Pre-release

v1.5.0 Redistribution

Release Manager

@0xClandestine @ypatil12

Highlights

🚀 New features

  • Redistribution is a feature that gives Service Builders a means to not just burn, but repurpose slashed funds.
  • We introduce a new operatorSet creation mechanism: AllocationManager.createRedistributingOperatorSets, which allows slashed funds to be redistributed to a RedistributionRecipient. Note: The redistribution recipient can be set only once and is immutable.
  • All slashed funds now follow a two-step process. During a slash, we increase burn or redistributable shares. A cronjob then handles the actual redistribution or burning of these shares.
  • The original createOperatorSets function still exists. This function creates operatorSets whose slashed funds will eventually be burned. There is no mechanism to convert an operatorSet to be redistributing.
  • See ELIP-006 for a full description.

📌 Future Deprecations

  • The pre-redistribution burn pathway StrategyManager.decreaseBurnableShares will be deprecated in an upgrade after the redistribution release. This function can still be used to burn shares that have been slashed at any point prior to the redistribution upgrade.

🛠️ Security Updates

  • The slashing of burned funds is no longer instantaneous. All slashed funds (burned or redistributed) now go through a two-step process where shares are first marked for burning/redistribution, then processed by a cronjob. The burning or redistribution of slashed funds can be paused by the PauserMultisig.

🔧 Improvements

  • The AllocationManager.slashOperator function now returns a slashId and array of shares to be burned/redistributed. The function selector remains the same.
  • OperatorSets now have a slashCount field, which returns the number of slashes completed by the operatorSet. This value only reflects the number of slashes after the redistribution upgrade.
  • StrategyBase returns an amountOut upon withdrawal to comply with standard ERC-4626 vaults.
  • The AllocationManager and DelegationManager no longer use ownable. Thus, they now inherit the Deprecated_OwnableUpgradeable mixin in its place to reduce codesize.

🐛 Bug Fixes

  • SemVerMixin is updated to only return the first character of majorVersion. We currently return 1. and will return 1 after this upgrade.

Changelog

  • feat(draft): AllocationManager redistribution support PR #1346
  • feat: redistribution upgrade script PR #1396
  • chore: bindings PR #1422
  • test: redistribution upgrade PR #1410
  • test: redistribution integration PR #1415
  • docs: redistribution PR #1409
  • chore: address redistribution nits PR #1420
  • chore: style updates PR #1416
  • perf: avoid binary search PR #1417
  • feat: release escrow by strategy PR #1412
  • refactor: review changes PR #1411
  • refactor: decreaseBurnOrRedistributableShares PR #1414
  • feat: deploy escrow in initiateSlashEscrow PR #1413
  • chore: update naming PR #1408
  • feat: simplify escrow delay; add convenience functions PR #1406
  • fix: enumerable map overwrite PR #1399
  • chore: decrease dm diff further PR #1404
  • test: full coverage SlashEscrowFactory + SlashEscrow PR #1403
  • chore: remove dm/alm code size optimizations PR #1398
  • chore: rename burnable -> burnOrRedistributable; fix storage gap; remove poc code PR #1397
  • chore: use internal getters; update isOperatorRedistributable PR #1401
  • fix: storage checker PR #1394
  • fix: review issues PR #1391
  • feat: escrow funds in unique clone contracts PR #1387
  • refactor: remove v prefix from SemVerMixin PR #1385
  • test(redistribution): add unit tests PR #1383
  • feat: add SlashingWithdrawalRouter PR #1358
  • feat: simplify removeDepositShares in StrategyManager PR #1373
  • feat(draft): AllocationManager redistribution support PR #1346
  • ci: add explicit permissions to workflows to mitigate security concerns PR #1392
  • ci: remove branch constraint for foundry coverage job
  • docs: add release managers to changelogs
  • docs: add templates for changelog and release notes PR #1382
  • docs: add doc for steps to write deploy scripts PR #1380
  • ci: add testnet envs sepolia and hoodi to validate-deployment-scripts PR #1378
  • docs: update MAINTENANCE to include practices of merging multiple release-dev branches
  • docs: updating readme for dead links, readability, new language, and more PR #1377
  • docs: bump deployment matrix to top of README PR #1376
  • ci: add CI to auto validate deployment scripts PR #1360
  • chore: update readme for v1.4.1 PR #1361
  • ci: add cron to auto remove stale branches PR #1348
  • chore: Update README for Holesky v1.4.2 release PR #1351
  • docs: remove fork-pr instructions from CONTRIBUTING.md and MAINTENANCE.md
  • ci: disable delete unauthorized branches
  • docs: update addresses for mainnet PR #1341
  • docs: enrich MAINTENANCE.md re: release branches PR #1340
  • ci: enable auto delete branch upon eigengit launch PR #1339
  • test(redistribution-changes): passing PR #1511
  • fix: strategy manager gap PR #1508
  • refactor: remove redistribution delay PR #1485
  • docs(audit): note upgrade rescue flow PR #1467
  • fix(audit): assert redistribution recipient != burn address PR #1466
  • fix(audit): more reentrancy checks PR #1450
  • fix(audit): out-of-gas issue PR #1459
  • fix(audit): assert redistribution recipient != burn address PR #1466
  • docs(audit): note upgrade rescue flow PR #1467
  • refactor: remove redistribution delay PR #1485
  • fix: strategy manager gap PR #1508
  • test(redistribution-changes): passing PR #1511
  • docs(redistribution-changes): cleanup PR #1513
  • docs: update CHANGELOG PR #1514
  • feat: redistribution upgrade scripts PR #1517

Full Changelog: v1.4.1...v1.5.0

v1.6.0-rc.0

03 Jun 19:04
c08c9e8
Compare
Choose a tag to compare
v1.6.0-rc.0 Pre-release
Pre-release

v1.6.0 Moocow and ELIP5

Release Manager

@wadealexc @bowenli86

Highlights

🚀 New Features

  • New APIs supporting Pectra's validator consolidation and withdrawal features: EigenPod.requestConsolidation(...) and EigenPod.requestWithdrawal(...)
  • New getters to support Pectra APIs: EigenPod.getConsolidationRequestFee() and EigenPod.getWithdrawalRequestFee()
  • Added 4 new events to EigenPod.sol to track consolidation and withdrawal requests
  • Added 2 new events to Eigen.sol to track token wraps/unwraps with BackingEigen

📌 Deprecations

  • Removed EigenPod.GENESIS_TIME() getter. This method, though public, has been unused for over a year.

🔧 Improvements

  • When finalizing an EigenPod checkpoint (proofsRemaining == 0), the contract will store the finalized checkpoint in storage. This can be queried via EigenPod.currentCheckpoint(). Starting a new checkpoint will overwrite this previously-finalized checkpoint.
  • Added semver to Eigen
  • Signatures of a few EigenPod events are changed to match the rest events and take validator pubkey hash instead of validator index, which standardized EigenPod events signature

🐛 Bug Fixes

  • For Hoodi, updates fixes ethPOS deposit contract to point to 0x00000000219ab540356cBB839Cbe05303d7705Fa

Changelog

  • feat: merge Moocow and ELIP5 into main PR #1425
  • docs: proper markdown PR #1435
  • docs: update readme
  • chore: update testnet addresses for redistribution PR #1428
  • chore: remove User_M2.t.sol
  • feat: update EIGEN binding
  • chore: resolve conflicts in upgrade.json
  • chore: update harness class formatting
  • chore: complete v1.6.0 changelog
  • chore: changelog and bindings
  • test: add more script tests for Eigen and standardize semver
  • feat: add semver to eigen PR #1371
  • feat: add TokenWrapped and TokenUnwrapped events in Eigen for observability PR #1356
  • feat: change eigenpod events to use pubkeyHash over index
  • feat: release scripts for moocow and elip5
  • feat: currentCheckpoint now returns finalized checkpoint
  • feat: implement consolidation and withdrawal requests

v1.5.0-rc.0

30 May 20:56
9a95f5a
Compare
Choose a tag to compare
v1.5.0-rc.0 Pre-release
Pre-release

v1.5.0 Redistribution

Release Manager

@0xClandestine @ypatil12

Highlights

🚀 New features

  • Redistribution is a feature that gives Service Builders a means to not just burn, but repurpose slashed funds.
  • We introduce a new operatorSet creation mechanism: AllocationManager.createRedistributingOperatorSets, which allows slashed funds to be redistributed to a RedistributionRecipient. Note: The redistribution recipient can be set only once and is immutable.
  • All slashed funds will now be routed to individual SlashEscrow contracts. The release of funds from escrow is gated by the SlashEscrowFactory. The SlashEscrowFactory deploys individual SlashEscrow contracts per slash, enforces a global delay for all escrowed funds, and handles pausing/unpausing of escrowed funds.
  • The original createOperatorSets function still exists. This function creates operatorSets whose slashed funds will eventually be burned. There is no mechanism to convert an operatorSet to be redistributing.
  • See ELIP-006 for a full description.

⛔ Breaking changes

📌 Future Deprecations

  • The pre-redistribution burn pathway StrategyManager.decreaseBurnableShares will be deprecated in an upgrade after the redistribution release. This function can still be used to burn shares that have been slashed at any point prior to the redistribution upgrade.

🛠️ Security Updates

  • The slashing of burned funds is no longer instantaneous. All slashed funds (burned or redistributed) now go through a 4-day escrow delay. The eventual burning or redistribution of slashed funds can be paused by the PauserMultisig.
  • The upgradability of the SlashEscrowFactory is controlled by the CommunityMultisig. The contract will have a separate ProxyAdmin from the rest of the EigenLayer core protocol. Each individual SlashEscrow contract is an immutable clone.

🔧 Improvements

  • The AllocationManager.slashOperator function now returns a slashId and array of shares to be burned/redistributed. The function selector remains the same.
  • OperatorSets now have a slashCount field, which returns the number of slashes completed by the operatorSet. This value only reflects the number of slashes after the redistribution upgrade.
  • StrategyBase returns an amountOut upon withdrawal to comply with standard ERC-4626 vaults.
  • The AllocationManager and DelegationManager no longer use ownable. Thus, they now inherit the Deprecated_OwnableUpgradeable mixin in its place to reduce codesize.

🐛 Bug Fixes

  • SemVerMixin is updated to only return the first character of majorVersion. We currently return 1. and will return 1 after this upgrade.

What's Changed

New Contributors

Full Changelog: v1.4.0-testnet-holesky...v1.5.0-rc.0

v1.4.1

01 May 19:40
d9a793e
Compare
Choose a tag to compare

Overview

This release brings Pectra Compatability to EigenPods. There are no breaking changes as part of this release. v1.3.0 of the proof generation CLI is forwards compatible with this release.

As part of the upgrade process, EigenPods will be paused for ~12 hours on mainnet. For a full list of updates, see our guide.

What's Changed

Full Changelog: v1.3.0...v1.4.1

v1.4.2

30 Apr 17:24
336cab3
Compare
Choose a tag to compare

Overview

This release reduces the following delay parameters on the Holesky testnet to enable faster iteration and testing:

  • ALLOCATION_CONFIGURATION_DELAY: reduced from 75 blocks (~15 minutes) to 30 blocks (~6 minutes)
  • DEALLOCATION_DELAY: reduced from 50 blocks (~10 minutes) to 25 blocks (~5 minutes)
  • MIN_WITHDRAWAL_DELAY_BLOCKS: reduced from 50 blocks (~10 minutes) to 25 blocks (~5 minutes)

⚠️ Note: This is a Holesky testnet-only upgrade.

What's Changed from v1.4.1

  • release: Reduce allocation configuration delay & min withdrawal delay on Holesky by @solimander #1343

Full Changelog: v1.4.1...v1.4.2

v1.3.0

03 Apr 20:37
9a9707b
Compare
Choose a tag to compare

Overview

This is the release for the upcoming EigenLayer mainnet slashing upgrade. It encompasses all functionality, testing, and audit changes.

For a full breakdown of breaking changes, please see our release notes for Operators/LRTs and AVSs.

What's Changed from the release candidate

What's Changed from v0.5.4

New Contributors

Full Changelog: v0.5.4...v1.3.0

v1.4.1-testnet-holesky

02 Apr 23:48
db0f582
Compare
Choose a tag to compare
Pre-release

Overview

This release includes changes from our Cantina Competition Audit. There are no breaking changes from v1.4.0.

The audit-related changes include the below PRs:

Full Changelog

Full Changelog: v1.4.0-testnet-holesky...v1.4.1-testnet-holeksy

v1.3.0-rc.0

06 Mar 21:46
db0f582
Compare
Choose a tag to compare
v1.3.0-rc.0 Pre-release
Pre-release

Overview

This is the release candidate for the upcoming EigenLayer mainnet slashing release. It encompasses changes from two external audits along with several testing upgrades.

Note: This release is the similar to our v1.4.0.tesnet-holesky release, except it does not include any Pectra compatibility changes. We anticipate slashing to be deployed on mainnet prior to the mainnet Pectra hard fork.

Breaking Changes

  • Require AVS Metadata Registration prior to Opset Creation #1025
  • Rename getQueuedWithdrawal -> queuedWithdrawals: #1133. getQueuedWithdrawal still exists, but changes the behavior of getQueuedWithdrawals.
  • Behavior of getMinimumSlashableStake: #1037
  • encumberedMagnitude getter: #1038
  • ISignatureUtils -> ISignatureUtilsMixin and ISignatureUtilsMixinTypes: #1015

What's Changed

New Contributors

Full Changelog: v0.5.4...v1.3.0