|
| 1 | +# v1.9.0 Slashing UX Improvements |
| 2 | + |
| 3 | +## Release Manager |
| 4 | + |
| 5 | +@ypatil12 @eigenmikem @0xclandestine |
| 6 | + |
| 7 | +# Overview |
| 8 | + |
| 9 | +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. |
| 10 | + |
| 11 | +The below release notes cover Core Contracts. |
| 12 | + |
| 13 | +## Highlights |
| 14 | + |
| 15 | +🚀 New Features |
| 16 | + |
| 17 | +- 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](../docs/core/AllocationManager.md#contract-architecture). |
| 18 | +- 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. |
| 19 | +- 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). |
| 20 | + |
| 21 | +⛔ Breaking Changes |
| 22 | + |
| 23 | +- 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: |
| 24 | + - 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 |
| 25 | + - If there are multiple slashers set in the `PermissionController`, the first address will be set as the slasher |
| 26 | +- 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`. |
| 27 | + |
| 28 | +📌 Deprecations |
| 29 | + |
| 30 | +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. |
| 31 | + |
| 32 | +| Function | MigrateTo | Notes | |
| 33 | +| -------- | -------- | -------- | |
| 34 | +| `createOperatorSets(avs, CreateSetParams[])` | `createOperatorSets(address avs, CreateSetParamsV2[])` | New function takes in a slasher address | |
| 35 | +| `createRedistributingOperatorSets(avs, CreateSetParams[], redistributionRecipients[])` | `createRedistributingOperatorSets(avs, CreateSetParamsV2[], redistributionRecipients[])` | New function takes in a slasher address | |
| 36 | + |
| 37 | +🔧 Improvements |
| 38 | + |
| 39 | +- Added a non-revert `_canCall` in the `PermissionControllerMixin` for space savings. This function is used in the `AllocationManager` and `DelegationManager`. |
| 40 | +- The allocation delay for a newly created operator is active immediately. This allows operators to make allocations instantly after registering in the core. |
| 41 | +- 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](https://github.com/Layr-Labs/eigenlayer-contracts/pull/1502) for more information. |
| 42 | + |
| 43 | + |
| 44 | +# Changelog |
| 45 | + |
| 46 | +- feat: re-enable forge fmt + foundry v1.5.0 [PR #1669](https://github.com/layr-labs/eigenlayer-contracts/pull/1669) |
| 47 | +- feat: substitute calcSlashedAmount for scaleForBurning [PR #1502](https://github.com/layr-labs/eigenlayer-contracts/pull/1502) |
| 48 | +- fix: `v1.9.0` upgrade script [PR #1666](https://github.com/layr-labs/eigenlayer-contracts/pull/1666) |
| 49 | +- feat: `v1.9.0` upgrade scripts + reusable upgrade helpers [PR #1665](https://github.com/layr-labs/eigenlayer-contracts/pull/1665) |
| 50 | +- chore: update interface natspec for DM [PR #1664](https://github.com/layr-labs/eigenlayer-contracts/pull/1664) |
| 51 | +- feat: slashing commitments [PR #1645](https://github.com/layr-labs/eigenlayer-contracts/pull/1645) |
| 52 | +- feat: remove semver + minor optimizations [PR #1654](https://github.com/layr-labs/eigenlayer-contracts/pull/1654) |
| 53 | +- feat: split `AllocationManager` [PR #1643](https://github.com/layr-labs/eigenlayer-contracts/pull/1643) |
| 54 | +- feat: add protocol registry [PR #1655](https://github.com/layr-labs/eigenlayer-contracts/pull/1655) |
| 55 | +- feat: instant alloc delay from dm [PR #1646](https://github.com/layr-labs/eigenlayer-contracts/pull/1646) |
| 56 | +- chore: remove holesky [PR #1662](https://github.com/layr-labs/eigenlayer-contracts/pull/1662) |
| 57 | +- chore: hardcode foundry ci to v1.3.5 [PR #1658](https://github.com/layr-labs/eigenlayer-contracts/pull/1658) |
| 58 | +- chore: hardcode foundry to v1.3.5 in ci [PR #1657](https://github.com/layr-labs/eigenlayer-contracts/pull/1657) |
| 59 | +- feat(audit): publish Hourglass + Multichain + RMS audit reports [PR #1644](https://github.com/layr-labs/eigenlayer-contracts/pull/1644) |
| 60 | +- docs: add transport frequency for multichain [PR #1642](https://github.com/layr-labs/eigenlayer-contracts/pull/1642) |
| 61 | +- chore: update readMe for multichain/hourglass [PR #1637](https://github.com/layr-labs/eigenlayer-contracts/pull/1637) |
0 commit comments