Skip to content

feat: incentives update #1214

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 21 commits into from
Closed

Conversation

MinisculeTarantula
Copy link
Collaborator

Motivation:

This is a draft PR outlining possible incentives-related changes for a significant incentives system revamp.
There are two main goals with the chosen direction:

  1. Build a more flexible Incentives system
  2. Maximally decouple changes to Programmatic Incentives from other software releases, to accelerate and unblock development of future incentives features

The first iteration of Programmatic Incentives achieved a few goals. It is extremely simple, with essentially no governance overhead, while incentivizing staking in and acting as an Operator within EigenLayer.
However, it is maximally inflexible, necessitating action on the level of a smart contract upgrade (or at minimum, new deployment and multisig + timelock actions) to make any modifications. The next iteration of Programmatic Incentives aims to insert flexibility in the appropriate places. In particular:

  • Smaller or more routine changes should necessitate only straightforward on-chain operations. As examples, this could include modifying the split going to different incentives substreams, or changing the rate at which a particular token is being incentivized relative to other tokens.
  • Introducing new “incentives types” should necessitate only a sidecar release at worst. As an example, this could include introducing a new incentive type to target Unique Stake specifically.
  • Smart contract upgrades – particularly to high-value contracts like the RewardsCoordinator and the EIGEN token itself – should be used as a last resort.

This PR is somewhat of a thought exercise / for illustrative purposes, and not necessarily intended to be an end-product.
At the time of being opened (March 5, 2025) it lacks all testing and contains notable TODOs.

Modifications:

We introduce a governed and fairly flexible on-chain structure for managing changes to incentives which involve solely shifting the balance of incentives distributions, i.e. for driving additional or fewer incentives toward specific staked tokens or towards a specific substream of incentives (which is distributed according to existing programmatic logic).

Additionally, minor, flexible interface and logic changes are made to RewardsCoordinator, to enable medium-complexity changes which introduce new types of incentives distribution logic to be accomplished primarily via a minor Sidecar release, and no longer necessitate a core smart contract upgrade. As part of this update, the Sidecar will need to index and process new events emitted by the RewardsCoorindator.

The primary new contract is the ProgrammaticIncentivesConfig, which will allow the Incentives Council to:

  1. Define inflationary substreams, which will each be directed at a specific address, and accumulate a fraction of the total rate of inflation over time
  2. Whitelist / blacklist AVSs from the PI system
  3. Whitelist / blacklist AVS rewards tokens from the PI system
  4. Create and modify vectors used to define how tokens (technically, token Strategies) are weighted against one-another.

Result:

This proposes a serious overhaul to the PI system. See above for more details :)

needs comments, fixes, etc

at the moment this just a start on several inflation + incentives related ideas
ProgrammaticIncentivesConfig now has significantly more functionality

RewardAllStakersDistributor added, which programmatically distributes EIGEN incentives
via minting new EIGEN tokens and calling
the RewardsCoordinator.createRewardsForAllEarners(...) function

top-level explanatory comments added to most contracts
- add access control hierarchy to TokenInflationNexus --
owner > streamCreator > substream edit access

- define NormalizedStream struct + add related functions to StreamMath lib

- it's likely possible to redefine structs to unify this library more / deduplicate functions.
I suspect this will be unsustainable in its current state.
remove many of the older ideas, and begin work on interface definition updates
- absorb bulk of TokenInflationNexus into ProgrammaticIncentivesConfig

- single inflationary stream with fixed rate matching current rate

- associated interface changes
needs comments, fixes, etc

at the moment this just a start on several inflation + incentives related ideas
ProgrammaticIncentivesConfig now has significantly more functionality

RewardAllStakersDistributor added, which programmatically distributes EIGEN incentives
via minting new EIGEN tokens and calling
the RewardsCoordinator.createRewardsForAllEarners(...) function

top-level explanatory comments added to most contracts
- add access control hierarchy to TokenInflationNexus --
owner > streamCreator > substream edit access

- define NormalizedStream struct + add related functions to StreamMath lib

- it's likely possible to redefine structs to unify this library more / deduplicate functions.
I suspect this will be unsustainable in its current state.
remove many of the older ideas, and begin work on interface definition updates
- absorb bulk of TokenInflationNexus into ProgrammaticIncentivesConfig

- single inflationary stream with fixed rate matching current rate

- associated interface changes
rename: stream.lastUpdated => stream.lastUpdatedTimestamp

change the usage to be a timestamp (i.e. measured in seconds)
 instead of measured in terms of TIMESCALE

this should eliminate a potential source of confusion
adds a bit of complexity but deals with cases where a TIMESCALE is 'missed'

also provides a route for having the initial distribution stretch into the past / start at a definite time in the future, if so desired
- reduces the validation needed in the sidecar

- new IncentivesDistributed event also added

- new PAUSED_INCENTIVES_DISTRIBUTION flag implemented
@github-actions github-actions bot added the ✨ Enhancement New feature or request. label Mar 5, 2025
@bowenli86 bowenli86 deleted the branch dev May 1, 2025 21:30
@bowenli86 bowenli86 closed this May 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Enhancement New feature or request.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants