Releases: Layr-Labs/eigenlayer-middleware
v1.0.3-testnet-slashing
Slashing Release Features and Changes
The code is being released for testnet in an unaudited and untested state and will be entering an audit as we prepare for the mainnet slashing release
Overview
- ELIPs on Slashing/OperatorSets/UAM
- EigenLayer UAM integration and removal of dependency on the ServiceManager for proxying calls. #357
- For existing AVSs that have deployed a ServiceManager, it is highly recommended to set your account identifier in the UAM as the old ServiceManager address even if the contract no longer becomes the entrypoint for calls between the AVS middleware contracts and the core EigenLayer contracts.
- The current implementation of middleware expects the following setup of UAM.
SlashingRegistryCoordinator
being able to callAllocationManager.createOperatorSets
AllocationManager.deregisterFromOperatorSets
(for force deregistration)
StakeRegistry
being able to callAllocationManager.addStrategiesToOperatorSet
AllocationManager.removeStrategiesFromOperatorSet
SlasherBase
being able to callAllocationManager.slashOperator
RegistryCoordinator
&SlashingRegistryCoordinator
#361- The
RegistryCoordinator
now inherits from theSlashingRegistryCoordinator
while maintaining backwards compatability of interfaces. Reasoning for this change is detailed below. - The
RegistryCoordinator
has been updated to enable OperatorSet mode. What this means is that newly created quorums will result in calling the AllocationManager to create the respective OperatorSet. This implies a different operator registration/deregistration flow where theRegistryCoordinator
implements theIAVSRegistrar
interface to support calls from the AllocationManager in the EigenLayer protocol. - Newly developing AVSs should ignore the RegistryCoordinator and simply use the
SlashingRegistryCoordinator
as this by default initializes to OperatorSet mode without the legacy Operator registration/deregistration interfaces. - Already deployed AVSs with existing quorums should use the
RegistryCoordinator
for backwards compatibility of legacy quorums. For existing AVSs who wish to migrate to OperatorSets, they need to firstenableOperatorSets()
to enable OperatorSet mode and create OperatorSet quorums. They can then calldisableM2QuorumRegistration()
to begin to deprecate legacy quorum registration. Operators are always allowed to deregister from legacy quorums.
- The
SlashingBase
and templates are added in/slashers
directory. These contracts are meant to be inherited with AVS slashing logic specific to your needs.StakeRegistry
reads from theAllocationManager
to get slashable stake for newly createdStakeType.TOTAL_SLASHABLE
quorums.- Solidity version bump
0.8.12
->0.8.27
as well as custom errors with require checks. - Added storage gaps to the
EjectionManager
contract. This is a breaking change for any deployed contract that has inherited and added additional storage previously.
Migration Guide
For StakeRegistry Users
-
Update imports for new interfaces to import structs from
IStakeRegistryTypes
:- Replace
StakeUpdate
withIStakeRegistryTypes.StakeUpdate
- Replace
StrategyParams
withIStakeRegistryTypes.StrategyParams
- Replace
StakeType
withIStakeRegistryTypes.StakeType
- Replace
-
Update stake tracking functionality:
- Support for both delegated and slashable stake types per quorum
- New stake history tracking with block number indexing
- Stake weight calculation with strategy multipliers
-
Handle new quorum initialization:
initializeDelegatedStakeQuorum
for total delegated stake trackinginitializeSlashableStakeQuorum
for slashable stake with lookahead period- Strategy params and minimum stake requirements per quorum
-
Implement new stake query features:
- Get stake at specific block numbers and indices
- Query stake history length and updates
- Get current and historical total stake per quorum
- Support for strategy params management
For ISocketUpdater Users
- Remove all usage of ISocketUpdater interface
- Update socket update functionality to use IRegistryCoordinator
- Update event listeners to use OperatorSocketUpdate from IRegistryCoordinatorEvents
For ECDSAStakeRegistry Users
- Update imports for now interfaces:
ECDSAStakeRegistryStorage
IECDSAStakeRegistry
IECDSAStakeRegistryTypes
- Rename any calls to
getLastestOperatorSigningKey
togetLatestOperatorSigningKey
- Update type references:
- Replace
Quorum
withIECDSAStakeRegistryTypes.Quorum
- Replace
StrategyParams
withIECDSAStakeRegistryTypes.StrategyParams
- Replace
- Review parameter names in function calls if using explicit naming ie, function({name: param, name2} to ensure they match the new convention
For RegistryCoordinator Users
-
Update imports for new interfaces to import structs from the
IRegistryCoordinatorTypes
:- Replace
OperatorStatus
withIRegistryCoordinatorTypes.OperatorStatus
- Replace
OperatorInfo
withIRegistryCoordinatorTypes.OperatorInfo
- Replace
QuorumBitmapUpdate
withIRegistryCoordinatorTypes.QuorumBitmapUpdate
- Replace
OperatorSetParam
withIRegistryCoordinatorTypes.OperatorSetParam
- Replace
OperatorKickParam
withIRegistryCoordinatorTypes.OperatorKickParam
- Replace
-
Update operator registration flow:
- M2 quorum registration checks
- New operator sets functionality
-
Handle new registration restrictions:
- Checks for
m2QuorumsDisabled
flag - Validate operator set mode
- Checks for
-
Update deregistration logic:
- M2 quorum-specific checks
-
Implement new operator set features:
- Support for enabling/disabling operator sets
- Handle M2 quorum registration states
For BLSSignatureChecker Users
-
Update imports for new interfaces to import structs from the
IBLSSignatureCheckerTypes
:- Replace
NonSignerInfo
withIBLSSignatureCheckerTypes.NonSignerInfo
- Replace
NonSignerStakesAndSignature
withIBLSSignatureCheckerTypes.NonSignerStakesAndSignature
- Replace
QuorumStakeTotals
withIBLSSignatureCheckerTypes.QuorumStakeTotals
- Replace
-
Update event handling:
- Import events from
IBLSSignatureCheckerEvents
- Update event emissions to match interface definitions
- Import events from
For BLSApkRegistry Users
-
Update imports for new interfaces to import structs from the
IBLSApkRegistryTypes
:- Replace
ApkUpdate
withIBLSApkRegistryTypes.ApkUpdate
- Replace
PubkeyRegistrationParams
withIBLSApkRegistryTypes.PubkeyRegistrationParams
- Replace
-
Update event handling:
- Import events from
IBLSApkRegistryEvents
- Import events from
For IndexRegistry Users
- Update imports for new interfaces:
IndexRegistry
IIndexRegistryEvents
IIndexRegistryTypes
- Update type references:
- Replace
QuorumUpdate
withIIndexRegistryTypes.QuorumUpdate
- Replace
OperatorUpdate
withIIndexRegistryTypes.OperatorUpdate
- Replace
Full Changelog: v0.5.4-mainnet-rewards-v2...v1.0.3-testnet-slashing
v0.5.4-mainnet-rewards-v2
What's Changed
- feat: automated ejector by @0x0aa0 in #146
- chore: bump forge-std and remove ds-test dependency by @stevennevins in #227
- feat: ejector allowlist mapping by @0x0aa0 in #226
- feat: return operators ejected by @0x0aa0 in #228
- Use uint32 for number of ejected operators by @jianoaix in #232
- feat: service manager payments by @8sunyuan in #242
- fix: service manager spacing by @8sunyuan in #244
- chore: rename audit report for clarity and consistency with core by @wadealexc in #245
- feat: batch operator id conversions by @0x0aa0 in #248
- fix: vm assume too many rejections by @stevennevins in #247
- feat: reregistration delay by @0x0aa0 in #246
- feat: ecdsa service manager by @stevennevins in #234
- fix: add init function for staleStakesForbidden in BLSSignatureChecker by @stevennevins in #251
- feat: update payments release to core-contracts release by @8sunyuan in #254
- fix: multiple rangepayments with same token by @8sunyuan in #257
- test: fix flaky fuzz tests hitting the default operator by @stevennevins in #256
- chore: update license by @ChaoticWalrus in #259
- feat: ecdsa key rotation by @stevennevins in #252
- fix: storage gap by @stevennevins in #261
- feat:
paymentInitiator
role inServiceManagerBase
by @diyahir in #260 - chore: refactor with RewardsCoordinator by @8sunyuan in #262
- chore: rewards release submodule by @8sunyuan in #264
- fix: deprecated struct field for earning receiver by @stevennevins in #265
- perf: refactor to modifiers to use internal functions by @stevennevins in #272
- perf: refactor index registry to use internal functions for modifier by @stevennevins in #269
- perf: refactor apk modifiers to use internal functions by @stevennevins in #268
- perf: refactor modifiers to use internal functions for stake registry by @stevennevins in #266
- fix: service manager storage layout by @0x0aa0 in #275
- feat: reward initiator for ECDSAServiceManagerBase by @Gajesh2007 in #274
- Fix: minor typos in iservicemanager by @samlaf in #278
- fix: correct index get operator restakable strategies by @stevennevins in #280
- chore: update dev to eigenlayer contracts dev by @shrimalmadhur in #282
- EjectionManager overflow fix by @0x0aa0 in #290
- feat: update core contracts submodule for mainnet rewards by @8sunyuan in #297
- build: update core submodule to new release by @8sunyuan in #298
- add overrides by @gpsanant in #302
- onchain socket by @0x0aa0 in #307
- chore: bump dependency with core to v0.4.3-mainnet-rewards-programmatic-incentives by @stevennevins in #314
- feat: ejection policy change by @0x0aa0 in #313
- feat: Rewards v2 by @0xrajath in #315
- ejector fix by @0x0aa0 in #322
- ejector owner by @0x0aa0 in #326
- test: socket registry by @0x0aa0 in #327
- docs: fix typos and add note that large array may cause revert by @nadir-akhtar in #323
- fix: Rewards v2 audit fixes by @0xrajath in #346
- docs: rewards v2 audit report by @0xrajath in #356
- remove socket migration by @0x0aa0 in #359
Full Changelog: v0.4.3-mainnet-rewards...v0.5.4-mainnet-rewards-v2
v0.4.3-mainnet-rewards
What's Changed
- Add mainnet table to docs by @0x0aa0 in #224
- Update LICENSE by @gpsanant in #285
- chore: bump mainnet to mainnet rewards v0.4.3 by @stevennevins in #330
Full Changelog: v0.1.3-mainnet-m2+pragma-change...v0.4.3-mainnet-rewards
v0.2.1-mainnet-rewards
What's Changed
Full Changelog: v0.2.0-mainnet-rewards...v0.2.1-mainnet-rewards
v0.2.0-mainnet-rewards
What's Changed
Creating an up-to-date release tag to match with the eigenlayer-contracts latest mainnet release.
- Fix: minor typos in iservicemanager by @samlaf in #278
- fix: correct index get operator restakable strategies by @stevennevins in #280
- chore: update dev to eigenlayer contracts dev by @shrimalmadhur in #282
- EjectionManager overflow fix by @0x0aa0 in #290
- feat: update core contracts submodule for mainnet rewards by @8sunyuan in #297
Full Changelog: v0.2.1-holesky-rewards...v0.2.0-mainnet-rewards
v0.2.1-holesky-rewards
What's Changed
Creating new Rewards release to include storage layout fix in #275
- perf: refactor to modifiers to use internal functions by @stevennevins in #272
- perf: refactor index registry to use internal functions for modifier by @stevennevins in #269
- perf: refactor apk modifiers to use internal functions by @stevennevins in #268
- perf: refactor modifiers to use internal functions for stake registry by @stevennevins in #266
- fix: service manager storage layout by @0x0aa0 in #275
- feat: reward initiator for ECDSAServiceManagerBase by @Gajesh2007 in #274
New Contributors
- @Gajesh2007 made their first contribution in #274
Full Changelog: v0.2.0-holesky-rewards...v0.2.1-holesky-rewards
v0.2.0-holesky-rewards
What's Changed
A wide number of changes have been added to the middleware contracts, most of which below are still under active development. This release is meant for the integration of rewards into the EigenLayer Holesky Testnet where AVSs can submit rewards to their operators and delegated stakers through the new RewardsCoordinator
contract.
- feat: ecdsa basic registry by @stevennevins in #194
- docs: finally things are reasonable again by @wadealexc in #214
- chore: switch library license from BSL to MIT by @ChaoticWalrus in #217
- Delete unused deploy scripts by @samlaf in #219
- chore: less restrictive pragma by @stevennevins in #216
- chore: less restrictive pragma (#216) by @ChaoticWalrus in #223
- Add mainnet table to docs by @0x0aa0 in #224
- feat: automated ejector by @0x0aa0 in #146
- chore: bump forge-std and remove ds-test dependency by @stevennevins in #227
- feat: ejector allowlist mapping by @0x0aa0 in #226
- feat: return operators ejected by @0x0aa0 in #228
- Use uint32 for number of ejected operators by @jianoaix in #232
- feat: service manager payments by @8sunyuan in #242
- fix: service manager spacing by @8sunyuan in #244
- chore: rename audit report for clarity and consistency with core by @wadealexc in #245
- feat: batch operator id conversions by @0x0aa0 in #248
- fix: vm assume too many rejections by @stevennevins in #247
- feat: reregistration delay by @0x0aa0 in #246
- feat: ecdsa service manager by @stevennevins in #234
- fix: add init function for staleStakesForbidden in BLSSignatureChecker by @stevennevins in #251
- feat: update payments release to core-contracts release by @8sunyuan in #254
- fix: multiple rangepayments with same token by @8sunyuan in #257
- test: fix flaky fuzz tests hitting the default operator by @stevennevins in #256
- chore: update license by @ChaoticWalrus in #259
- feat: ecdsa key rotation by @stevennevins in #252
- fix: storage gap by @stevennevins in #261
- feat:
paymentInitiator
role inServiceManagerBase
by @diyahir in #260 - chore: refactor with RewardsCoordinator by @8sunyuan in #262
- chore: rewards release submodule by @8sunyuan in #264
- fix: deprecated struct field for earning receiver by @stevennevins in #265
New Contributors
Full Changelog: v0.1.2-holesky-init-deployment...v0.2.0-holesky-rewards
v0.2.0-rc2-holesky-preprod-rewards
What's Changed
For the rewards release, main changes in this pre-release is the refactor of the ServiceManagerBase
to use a ServiceManagerBaseStorage
contract to follow the same pattern as other core and middleware contracts utilizing storage. The payments release has been renamed to rewards with updated interfaces
- test: fix flaky fuzz tests hitting the default operator by @stevennevins in #256
- chore: update license by @ChaoticWalrus in #259
- feat: ecdsa key rotation by @stevennevins in #252
- fix: storage gap by @stevennevins in #261
- feat:
paymentInitiator
role inServiceManagerBase
by @diyahir in #260 - chore: refactor with RewardsCoordinator by @8sunyuan in #262
New Contributors
Full Changelog: v0.2.0-rc1-holesky-preprod-payments...v0.2.0-rc2-holesky-preprod-rewards
v0.2.0-rc1-holesky-preprod-payments
What's Changed
Full Changelog: v0.2.0-rc0-holesky-preprod-payments...v0.2.0-rc1-holesky-preprod-payments
v0.2.0-rc0-holesky-preprod-payments
Changes
- Adds
payForRange
function toServiceManagerBase
and updateseigenlayer-contracts
submodule for the payments release. - EjectionManager contract
- Updates to ECDSA based contracts (WIP)
- Fix in
BLSSignatureChecker
to removestaleStakesForbidden
being set in constructor
Full changelog: v0.1.3-mainnet-m2+pragma-change...4ad5c85