Skip to content

Releases: Layr-Labs/eigenlayer-contracts

v1.12.0 Rewards 2.2, Duration Vaults, and Incentive Council

24 Mar 17:22
d302f65

Choose a tag to compare

Release Manager

@eigenmikem

Overview

This release combines three parallel release tracks into a single core contracts upgrade: Rewards 2.2, Duration Vaults, and Incentive Council. Together, these changes expand the rewards system with Operator Set-native reward flows, introduce a new time-bound vault primitive for AVSs, and replace the legacy programmatic incentives flow with a more flexible emissions system governed by the Incentive Council.
The below release notes cover Core Contracts.

Highlights

🚀 New Features

  • Rewards v2.2 adds two new Operator Set-scoped rewards flows to RewardsCoordinator: createUniqueStakeRewardsSubmission and createTotalStakeRewardsSubmission. These let AVSs submit rewards that are automatically weighted by either unique allocated stake or total delegated stake within an Operator Set.
  • Rewards v2.2 supports both retroactive and forward-looking reward programs for Operator Sets, with rewards durations extended up to 2 years.
  • Incentive Council introduces a new EmissionsController contract for programmatic EIGEN emissions. It replaces the legacy ActionGenerator-style flow with configurable distributions that can be added, updated, disabled, and processed on a per-epoch basis.
  • The new EmissionsController supports multiple distribution types, including rewards for all earners, Operator Set total stake rewards, Operator Set unique stake rewards, EigenDA rewards, and manual distributions.
  • Duration Vaults introduce a new DurationVaultStrategy, deployable through StrategyFactory, for time-bound restaking commitments such as insurance-style pools.
  • A duration vault acts as its own operator, registers to a single Operator Set, accepts deposits during an open window, locks stake for a fixed duration, and then enables withdrawals after maturity or arbitrator-triggered early exit.
  • Multiple duration vaults can now exist for the same underlying token, enabling AVSs to create more than one time-bound strategy configuration per asset.

⛔ Breaking Changes

  • Programmatic incentives now flow through EmissionsController instead of the legacy ActionGenerator-style model. Tooling or operational workflows built around the previous incentives architecture should migrate to the new distribution-based model.
  • IRewardsCoordinator has expanded to support Operator Set rewards, protocol fee configuration, and EmissionsController integration. Integrations that consume the contract ABI directly should refresh to the new interface.

📌 Deprecations

  • The legacy ActionGenerator-style programmatic incentives flow is superseded by EmissionsController and the Incentive Council distribution model.
  • AVSs that want Operator Set-native auto-weighted rewards should migrate to createUniqueStakeRewardsSubmission and createTotalStakeRewardsSubmission rather than relying only on earlier AVS-wide or operator-directed patterns.

🔧 Improvements

  • Added beforeAddShares and beforeRemoveShares strategy hooks, enabling lifecycle-aware strategies such as DurationVaultStrategy.
  • RewardsCoordinator now supports optional protocol fees through a configurable fee recipient and per-submitter opt-in, allowing protocol fees to be taken from eligible reward submissions without changing the existing submission flow for non-participating submitters.
  • Operator reward routing is more flexible with the addition of setOperatorSetSplit, which allows operators to set reward splits at the Operator Set level rather than only globally or AVS-wide.
  • StrategyFactory now supports a dedicated duration vault beacon and tracks deployed duration vaults by underlying token.
  • Duration vaults include lifecycle-aware protections around deposits and withdrawals, including delegation checks, per-deposit and total TVL caps, lock-state enforcement, and best-effort deallocation/deregistration on maturity so users are not blocked from exiting if external cleanup fails.
  • Duration vault initialization sets operator reward splits to 0%, so vault rewards flow entirely to delegated stakers by default.

What's Changed

Full Changelog: v1.9.0...v1.12.0

v1.9.0 Slashing UX Improvements

16 Jan 16:43
80b74fa

Choose a tag to compare

v1.9.0 Slashing UX Improvements

Release Manager

@ypatil12 @eigenmikem @0xClandestine

Overview

The Slashing UX improvement release is a tech debt-focused release that improves key parts of the Eigenlayer Core UX. This release will upgrade every core contract.

The below release notes cover Core Contracts.

Highlights

🚀 New Features

  • The AllocationManager has been split into two contracts to address size limitations of the contract. The main contract handles state-mutating operations, while AllocationManagerView handles all read-only view functions. This is not a breaking change for introspection as previous introspection calls fallback to delegateCall into the AllocationManagerView contract.. For more information, see the contract architecture.
  • The ProtocolRegistry is a new contract that stores all proxy contract addresses, global semver, and has the ability to pause the entire protocol. This contract will be deployed on all chains.
  • Two new createOperatorSets functions (for redistributing and non redistributing operatorSets) have been added that take in a slasher address. This address is the only address that can slash an operatorSet. Changing the address is behind a ALLOCATION_CONFIGURATION_DELAY (17.5 days on mainnet).

⛔ Breaking Changes

  • The slasher permissions are set and stored in the AllocationManager instead of the PermissionController. Only one address can slash an operatorSet; the address is initially set upon creation of the operatorSet. OperatorSets created prior to this release will have their slasher migrated based on the following rules:
    • If there is no slasher set or the slasher in the PermissionController is the 0 address, the AVS address will be set as the slasher
    • If there are multiple slashers set in the PermissionController, the first address will be set as the slasher
  • Semver (SemverMixin.sol) has been removed from all contracts, except from those that inherit the SignatureUtilsMixin. The version of the core protocol can be introspected via the ProtocolRegistry.

📌 Deprecations

The old createOperatorSets functions in the leftmost column will be deprecated in Q2 2026 in favor of the newly specified functions. The old functions do not pass in a slasher. The new functions do pass in a slasher. If the old function is used, the slasher of the operatorSet is set to the avs address.

Function MigrateTo Notes
createOperatorSets(avs, CreateSetParams[]) createOperatorSets(address avs, CreateSetParamsV2[]) New function takes in a slasher address
createRedistributingOperatorSets(avs, CreateSetParams[], redistributionRecipients[]) createRedistributingOperatorSets(avs, CreateSetParamsV2[], redistributionRecipients[]) New function takes in a slasher address

🔧 Improvements

  • Added a non-revert _canCall in the PermissionControllerMixin for space savings. This function is used in the AllocationManager and DelegationManager.
  • The allocation delay for a newly created operator is active immediately. This allows operators to make allocations instantly after registering in the core.
  • The internal SlashingLib.scaleForBurning function has been deprecated in favor of SlashingLib.calcSlashedAmount, standardizing the calculation of slashed shares across the withdrawal queue and storage. See PR #1502 for more information.

What's Changed

Full Changelog: v1.8.1...v1.9.0

v1.9.0-rc.0: Slashing UX Improvements

10 Dec 18:38
1564be7

Choose a tag to compare

Pre-release

v1.9.0 Slashing UX Improvements

Release Manager

@ypatil12 @eigenmikem @0xClandestine

Overview

The Slashing UX improvement release is a tech debt-focused release that improves key parts of the Eigenlayer Core UX. This release will upgrade every core contract.

The below release notes cover Core Contracts.

Highlights

🚀 New Features

  • The AllocationManager has been split into two contracts to address size limitations of the contract. The main contract handles state-mutating operations, while AllocationManagerView handles all read-only view functions. This is not a breaking change for introspection as previous introspection calls fallback to delegateCall into the AllocationManagerView contract.. For more information, see the contract architecture.
  • The ProtocolRegistry is a new contract that stores all proxy contract addresses, global semver, and has the ability to pause the entire protocol. This contract will be deployed on all chains.
  • Two new createOperatorSets functions (for redistributing and non redistributing operatorSets) have been added that take in a slasher address. This address is the only address that can slash an operatorSet. Changing the address is behind a ALLOCATION_CONFIGURATION_DELAY (17.5 days on mainnet).

⛔ Breaking Changes

  • The slasher permissions are set and stored in the AllocationManager instead of the PermissionController. Only one address can slash an operatorSet; the address is initially set upon creation of the operatorSet. OperatorSets created prior to this release will have their slasher migrated based on the following rules:
    • If there is no slasher set or the slasher in the PermissionController is the 0 address, the AVS address will be set as the slasher
    • If there are multiple slashers set in the PermissionController, the first address will be set as the slasher
  • Semver (SemverMixin.sol) has been removed from all contracts, except from those that inherit the SignatureUtilsMixin. The version of the core protocol can be introspected via the ProtocolRegistry.

📌 Deprecations

The old createOperatorSets functions in the leftmost column will be deprecated in Q2 2026 in favor of the newly specified functions. The old functions do not pass in a slasher. The new functions do pass in a slasher. If the old function is used, the slasher of the operatorSet is set to the avs address.

Function MigrateTo Notes
createOperatorSets(avs, CreateSetParams[]) createOperatorSets(address avs, CreateSetParamsV2[]) New function takes in a slasher address
createRedistributingOperatorSets(avs, CreateSetParams[], redistributionRecipients[]) createRedistributingOperatorSets(avs, CreateSetParamsV2[], redistributionRecipients[]) New function takes in a slasher address

🔧 Improvements

  • Added a non-revert _canCall in the PermissionControllerMixin for space savings. This function is used in the AllocationManager and DelegationManager.
  • The allocation delay for a newly created operator is active immediately. This allows operators to make allocations instantly after registering in the core.
  • The internal SlashingLib.scaleForBurning function has been deprecated in favor of SlashingLib.calcSlashedAmount, standardizing the calculation of slashed shares across the withdrawal queue and storage. See PR #1502 for more information.

What's Changed

Full Changelog: v1.8.1...v1.9.0-rc.0

v1.8.1: Multichain and Hourglass

24 Sep 19:35
31aade2

Choose a tag to compare

v1.8.1 MultiChain Hourglass Combined

Release Manager

@ypatil12 @eigenmikem @0xrajath

Multichain

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.

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

Hourglass

The Hourglass release consists of a framework that supports the creation of task-based AVSs. The task-based AVSs are enabled through a TaskMailbox core contract deployed to all chains that support a CertificateVerifier. Additionally AVSs deploy their TaskAVSRegistrar. 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 hourglass docs, core contract docs, and ELIP-010.

Highlights

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

🚀 New Features

Destination Chain Contracts

  • TaskMailbox: A core infrastructure contract that enables task-based AVS execution models. It provides a standardized way for AVSs to create tasks, have operators execute them, and submit verified results on-chain. The contract acts as a mailbox system where task creators post tasks with fees, and operators compete to execute and submit results with proper consensus verification.

What's Changed

Read more

v1.6.2

05 Sep 15:55

Choose a tag to compare

Updates bindings to remove merge conflicts on EigenPod.abi

Full Changelog: v1.6.1...v1.6.2

v1.6.1

29 Aug 17:47

Choose a tag to compare

v1.6.1 Electra Timing Fix

Fixes a bug on EigenPods regarding partial withdrawals for Electra. Please read the explainer for a detailed description of the bug. No action is needed and no customer funds are at risk.

Release Manager

@ypatil12 @nadir-akhtar @gpsanant @antojoseph

Highlights

🐛 Bug Fixes

  • Update the EigenPod.requestWithdrawal function to ensure that validators are pointed to the pod, matching the behavior of requestConsolidation

🔧 Improvements

  • Update the EigenPod.verifyWithdrawalCredentials function to only accept beaconTimestamps that are after the latestCheckpointTimestamp. This enables the eigenpod state machine to be easier to be reasoned about

Full Changelog: v1.6.0...v1.6.1

v1.8.0-testnet-final: Multichain and Hourglass

28 Aug 22:20
7ecc83c

Choose a tag to compare

v1.8.0-testnet-final

The below release notes cover the updated version release candidate for multichain and hourglass

Release Manager

@ypatil12 @eigenmikem @0xrajath

Multichain

Highlights

⛔ Breaking Changes

  • The leaves of merkle trees used by the OperatorTableUpdater and BN254CertificateVerifier are now salted. The LeafCalculatorMixin is used by:
    • OperatorTableUpdater: To salt the operatorTableLeaf via calculateOperatorTableLeaf. This change is also reflected in the offchain transporter
    • BN254CertificateVerifier: To salt the operatorInfoLeaf via calculateOperatorInfoLeaf. BN254 OperatorSets MUST update their table calculators to use the new BN254TableCalculatorBase in the middleware repo
  • Nonsigners in the BN254CertificateVerifier are now sorted by operator index. See PR #1615. All offchain aggregators MUST sort nonsigners by operator index
  • The BN254CertificateVerifier now requires signatures over the referenceTimestamp via calculateCertificateDigest. See PR #1610

🛠️ Security Fixes

  • The merkle library has been updated to address minor audit issues. No breaking changes. See PR #1606
  • Audit fixes for the ReleaseManager. See PR #1608

🔧 Improvements

🐛 Bug Fixes

  • Add pagination for querying active generation reservations. See PR #1569
  • Fix race conditions on offchain table updates. See PR #1575
  • Remove restrictive check on ECDSA certificates required to be confirmed against the latest referenceTimestamp. See PR #1582

Hourglass

Highlights

🔧 Improvements

  • Support for signalling instant upgrades in ReleaseManager by setting upgradeByTime to 0. See PR #1608

🐛 Bug Fixes

  • Added NoReleases() custom error to isValidRelease() and getLatestUpgradeByTime() in ReleaseManager when there are no releases for a given operator set. See PR #1608
  • Added a MAX_TASK_SLA immutable to the TaskMailbox that will be set as DEALLOCATION_DELAY / 2 so that AVSs have half the Deallocation Delay to do any operator slashing in case of misbehavior. See PR #1604
  • Checking that block.timestamp + taskConfig.taskSLA <= operatorTableReferenceTimestamp + maxStaleness in the TaskMailbox during taskCreation so that a task cannot be created if its max response time breaches the staleness period of the certificate. See PR #1604
  • Updated the _validateBN254Certificate() check to only be for the (0,0) coordinate in the TaskMailbox. See PR #1604

What's Changed

Read more

v1.8.0-rc.0 : Hourglass

25 Jul 16:06

Choose a tag to compare

Pre-release

v1.8.0 Hourglass

The Hourglass release consists of a framework that supports the creation of task-based AVSs. The task-based AVSs are enabled through a TaskMailbox core contract deployed to all chains that support a CertificateVerifier. Additionally AVSs deploy their TaskAVSRegistrar. 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 core contract docs.

Release Manager

@0xrajath

Highlights

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

🚀 New Features

Destination Chain Contracts

  • TaskMailbox: A core infrastructure contract that enables task-based AVS execution models. It provides a standardized way for AVSs to create tasks, have operators execute them, and submit verified results on-chain. The contract acts as a mailbox system where task creators post tasks with fees, and operators compete to execute and submit results with proper consensus verification.

Changelog

  • fix: correct ecdsa message hash check PR #1563
  • fix: missing assume in fuzz test
  • fix: submitResult certificate checks PR #1557
  • chore: forge fmt
  • fix: certificate verifier interface changes
  • feat: hourglass zeus script PR #1546
  • fix: mock certificate verifiers PR #1545
  • feat: hourglass (task-based AVS framework) PR #1534
  • docs: changelog
  • fix: hourglass release upgrade semver
  • fix: deploy script

Full Changelog: v1.7.0-rc.4...v1.8.0-rc.0

v1.7.0-rc.4

23 Jul 17:22
b026c21

Choose a tag to compare

v1.7.0-rc.4 Pre-release
Pre-release

Updates multichain release with bindings

Full Changelog: v1.7.0-rc.3...v1.7.0-rc.4

v1.6.0

02 Jul 16:06
cf22b39

Choose a tag to compare

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