feat(incentives): add deploy scripts#1699
Merged
0xClandestine merged 2 commits intorelease-dev/incentive-councilfrom Jan 21, 2026
Merged
feat(incentives): add deploy scripts#16990xClandestine merged 2 commits intorelease-dev/incentive-councilfrom
0xClandestine merged 2 commits intorelease-dev/incentive-councilfrom
Conversation
ypatil12
reviewed
Jan 14, 2026
b7a78d0 to
051a5b9
Compare
**Motivation:** We need to support Rewards v2.2 : - Rewards that are linear to allocated unique stake (Needs to be both retroactive and future-looking). - Rewards that are linear to total stake (Needs to be both retroactive and future-looking). TDD: https://www.notion.so/eigen-labs/PRD-Rewards-v2-2-Operator-Set-Rewards-with-Unique-Total-Stake-28513c11c3e080cbb856e41ddc6362f5 **Modifications:** Updates in `RewardsCoordinator`: - New `createUniqueStakeRewardsSubmission` function with `UniqueStakeRewardsSubmissionCreated` event emission - New `PAUSED_UNIQUE_STAKE_REWARDS_SUBMISSION` constant - New `isUniqueStakeRewardsSubmissionHash` mapping - New `createTotalStakeRewardsSubmission` function with `TotalStakeRewardsSubmissionCreated` event emission - New `PAUSED_TOTAL_STAKE_REWARDS_SUBMISSION` constant - New `isTotalStakeRewardsSubmissionHash` mapping - Updated storage gap to 33 slots (from 35 slots) Updated Bindings **Result:** Support for Rewards v2.2
9e2cae4 to
32df02d
Compare
elhajin
reviewed
Jan 14, 2026
add deploy scripts cleanup more checks make fmt rebase error wip correct ms fix fix fix fix
cf9a9ed to
80c924e
Compare
d040988
into
release-dev/incentive-council
9 of 21 checks passed
eigenmikem
added a commit
that referenced
this pull request
Mar 2, 2026
# v1.12.0 Incentive Council (ELIP-012) ## Release Manager @0xClandestine # Overview **Core Features** - **EmissionsController**: Mints EIGEN at a fixed inflation rate per epoch and distributes via gauge weights (bips 0-10,000) - **Permissionless Trigger**: Anyone can call `pressButton()` to process epoch emissions—no trusted keeper required - **5 Distribution Types**: - `RewardsForAllEarners` — Protocol-wide rewards for all delegated stake - `OperatorSetTotalStake` — Rewards proportional to total stake in operator set - `OperatorSetUniqueStake` — Rewards proportional to unique stake allocations - `EigenDA` — Special pathway for EigenDA (pre-OperatorSets AVS) - `Manual` — Off-chain computed distributions sent directly to Incentives Committee - **Silent Failure Handling**: Distribution failures don't block other distributions (except reentrancy/OOG attacks) - **Protocol Fee Mechanism**: Opt-in 20% fee on reward submissions in RewardsCoordinator - Disabled by default (backward compatible) - Submitters opt-in via `setOptInForProtocolFee()` - Fee recipient configurable by owner **Governance & Roles** - **Protocol Council**: Sets Incentives Committee address via `setIncentiveCouncil()` - **Incentives Committee**: - Configure distributions: `addDistribution()`, `updateDistribution()` - Receive swept tokens via `sweep()` - **AVSs**: Must grant EmissionsController permission for OperatorSet distributions **Key Design Points** - **Epoch-Based**: EIGEN minted once per epoch at `EMISSIONS_INFLATION_RATE` - **Future-Only Updates**: Distributions can only be added/updated for future epochs - **Immutable Config**: Inflation rate, start time, and epoch length set at deployment - **Pausable**: Both `pressButton()` and `sweep()` respect `PAUSED_TOKEN_FLOWS` flag - **Missed Epochs Skipped**: No accumulation—if `pressButton()` isn't called during an epoch, those emissions are permanently lost # Changelog - feat(incentives): add interface [#1678](#1678) - feat(incentives): add implementation [#1681](#1681) - feat(incentives): add protocol fee [#1691](#1691) - feat(incentives): add deploy scripts [#1699](#1699) - fix: internal review changes [#1703](#1703) - feat: add EigenDA rewards submission type [#1705](#1705) # Scope **New Contracts:** - `EmissionsController.sol` — Main implementation - `EmissionsControllerStorage.sol` — Storage layout - `IEmissionsController.sol` — Interface **Modified Contracts:** - `RewardsCoordinator.sol` — Added protocol fee mechanism and `createEigenDARewardsSubmission()` - `RewardsCoordinatorStorage.sol` — Added `PROTOCOL_FEE_BIPS`, `isOptedInForProtocolFee`, `feeRecipient`, `emissionsController` --------- Co-authored-by: Rajath Alex <rajathalex@gmail.com> Co-authored-by: eigenmikem <michael.muehl@eigenlabs.org> Co-authored-by: ELHAJ <124453227+elhajin@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
0xClandestine
added a commit
that referenced
this pull request
Mar 5, 2026
# v1.12.0 Incentive Council (ELIP-012) ## Release Manager @0xClandestine # Overview **Core Features** - **EmissionsController**: Mints EIGEN at a fixed inflation rate per epoch and distributes via gauge weights (bips 0-10,000) - **Permissionless Trigger**: Anyone can call `pressButton()` to process epoch emissions—no trusted keeper required - **5 Distribution Types**: - `RewardsForAllEarners` — Protocol-wide rewards for all delegated stake - `OperatorSetTotalStake` — Rewards proportional to total stake in operator set - `OperatorSetUniqueStake` — Rewards proportional to unique stake allocations - `EigenDA` — Special pathway for EigenDA (pre-OperatorSets AVS) - `Manual` — Off-chain computed distributions sent directly to Incentives Committee - **Silent Failure Handling**: Distribution failures don't block other distributions (except reentrancy/OOG attacks) - **Protocol Fee Mechanism**: Opt-in 20% fee on reward submissions in RewardsCoordinator - Disabled by default (backward compatible) - Submitters opt-in via `setOptInForProtocolFee()` - Fee recipient configurable by owner **Governance & Roles** - **Protocol Council**: Sets Incentives Committee address via `setIncentiveCouncil()` - **Incentives Committee**: - Configure distributions: `addDistribution()`, `updateDistribution()` - Receive swept tokens via `sweep()` - **AVSs**: Must grant EmissionsController permission for OperatorSet distributions **Key Design Points** - **Epoch-Based**: EIGEN minted once per epoch at `EMISSIONS_INFLATION_RATE` - **Future-Only Updates**: Distributions can only be added/updated for future epochs - **Immutable Config**: Inflation rate, start time, and epoch length set at deployment - **Pausable**: Both `pressButton()` and `sweep()` respect `PAUSED_TOKEN_FLOWS` flag - **Missed Epochs Skipped**: No accumulation—if `pressButton()` isn't called during an epoch, those emissions are permanently lost # Changelog - feat(incentives): add interface [#1678](#1678) - feat(incentives): add implementation [#1681](#1681) - feat(incentives): add protocol fee [#1691](#1691) - feat(incentives): add deploy scripts [#1699](#1699) - fix: internal review changes [#1703](#1703) - feat: add EigenDA rewards submission type [#1705](#1705) # Scope **New Contracts:** - `EmissionsController.sol` — Main implementation - `EmissionsControllerStorage.sol` — Storage layout - `IEmissionsController.sol` — Interface **Modified Contracts:** - `RewardsCoordinator.sol` — Added protocol fee mechanism and `createEigenDARewardsSubmission()` - `RewardsCoordinatorStorage.sol` — Added `PROTOCOL_FEE_BIPS`, `isOptedInForProtocolFee`, `feeRecipient`, `emissionsController`
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation:
This upgrade improves programmatic incentives for the EigenLayer protocol through a new EmissionsController that gives the Incentive Council flexible control over EIGEN token emissions and distribution. It also adds fee functionality to the RewardsCoordinator to support protocol fees.
Modifications:
Result:
EmissionsController becomes the sole bEIGEN minter, and RewardsCoordinator has opt-in fees.