-
Notifications
You must be signed in to change notification settings - Fork 339
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
feat: slashing release #679
base: dev
Are you sure you want to change the base?
Conversation
f2a7515
to
f0873d1
Compare
9f91f03
to
b9fe3e5
Compare
This comment was marked as spam.
This comment was marked as spam.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review on alloc/dealloc
Would it be bad / hard / undesirable to enforce this ordering on the checkpoints history level? I would suggest that if an attempt is made to push an entry with a timestamp that is earlier than the timestamp of the previous entry, either (a) it's simply not allowed or (b) the new entry has its timestamp modified to match (or be 1 higher? not sure if the ascending ordering you have is strict or non-strict). Perhaps some option (c) could work where you keep the original timestamp but overwrite the intentions of the other entry? IDK if that would be incompatible with other aspects of the storage model though. I was initially thinking option (b) was the most logical but modifying entries before pushing them can be messy, especially if the entry or its contents is used elsewhere (e.g. if the timestamp is emitted in events, its hard to make sure the event emits the correct timestamp when you have conditional logic for modifying it). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor slashing comments
678f212
to
e70e85d
Compare
f04ad2b
to
f819336
Compare
|
* feat: add `MAX_OPERATOR_SET_STRATEGY_LIST_LENGTH` - and constrain opsets to contain no more than `MAX_OPERATOR_SET_STRATEGY_LIST_LENGTH` strategies * refactor: review changes
|
Per Alex: we can remove avsDirectory from the DelegationManager interface, constructor, and immutable variables. |
@@ -95,34 +148,18 @@ interface IEigenPodManager is IPausable { | |||
* Likewise, when a withdrawal is completed, this "deficit" is decreased and the withdrawal amount is decreased; We can think of this | |||
* as the withdrawal "paying off the deficit". | |||
*/ | |||
function podOwnerShares(address podOwner) external view returns (int256); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This function name is still mentioned in docs/core/EigenPod.md
and docs/core/EigenPodManager.md
[ref]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/docs are still a WIP. Will address this
* refactor: add `strategies` back to `SlashingParams` * refactor: review changes * refactor: review changes * feat: `SingleItemArrayLib` -> `ArrayLib` - adds sorting - adds array type conversions * fix: sort * refactor: final review changes
|
rename |
* chore: remove unused contract immutables * chore: rename internal function for clarity * fix: storage gap on avsd * chore: alm renaming and cleanup * chore: remove unused errors and interfaces * feat: add view function for opSet inclusion * chore: fmt
|
* feat: alm tests chore: move custom errors to sep branch chore: forge fmt src/contracts fix: ci and bindings chore: dmgr error tweaks chore: error tweaks for consistency and clarity feat: bump oz version (#755) * feat: bump oz version -> 0.4.9 - also moved remappings -> foundry.toml - removes remappings.txt * bindings --------- Co-authored-by: gpsanant <[email protected]> test: custom errors passing (#783) * test: custom errors AVSDir * test: custom errors IPausable * test: custom errors Delegation * test: custom errors EigenPodManager * test: custom errors EigenPod * test: custom errors Pausable * test: custom errors RewardsCoordinator * test: custom errors IStrategy * test: custom errors StrategyManager * test: custom errors DelegationManager * test: custom errors refactor: review reconciliation refactor: review reconciliation refactor: review reconciliation chore: forge fmt src/contracts fix: compile feat: squashed slashing for devnet chore: forge fmt src/contracts fix: ci and bindings chore: dmgr error tweaks chore: error tweaks for consistency and clarity feat: bump oz version (#755) * feat: bump oz version -> 0.4.9 - also moved remappings -> foundry.toml - removes remappings.txt * bindings --------- Co-authored-by: gpsanant <[email protected]> test: custom errors passing (#783) * test: custom errors AVSDir * test: custom errors IPausable * test: custom errors Delegation * test: custom errors EigenPodManager * test: custom errors EigenPod * test: custom errors Pausable * test: custom errors RewardsCoordinator * test: custom errors IStrategy * test: custom errors StrategyManager * test: custom errors DelegationManager * test: custom errors refactor: review reconciliation refactor: review reconciliation refactor: review reconciliation chore: forge fmt src/contracts feat: slashing * chore: pending delay calc cleanup * chore: storage pointer cleanup * eigenpods slashing updates (#745) * squash yet again * change again * update checkpoint struct * feat: AllocationManager Storage Simplification (#787) * feat: cleanup * feat: add helper func * fix: simplification * chore: clean up magnitude info usage and type conversions * refactor: review changes * fix: order struct params by size * fix: correct and simplify calc for slashed pending magnitude * fix: storage gap * feat: cleanup * chore: remove some type conversion bs and minor formatting * chore: clean up free magnitude logic * chore: rename pending deallocations and fix stack too deep * feat: slashing magnitudes cleanup (#786) * refactor: slashing magnitudes cleanup * refactor: assert `bipToSlash` is bounded * assert `bipsToSlash` is lte 100% and gt 0%. * refactor: move `isOperatorSlashable` -> AVSD * refactor: batch validate opsets on allocations - adds `AVSD.isOperatorSetBatch(operatorSets)` * feat: add pausing to ALM * refactor: remove single use helper - removes `_getLatestTotalMagnitude(operator, strategy)` * refactor: rename `ALLOCATION_DELAY_CONFIGURATION_DELAY` * refactor: remove `Slasher` * refactor: move constants + immutables to storage contracts * refactor: custom errors `RewardsCoordinatorStorage` * chore: dependency cleanup * fix: remove unused internal getter * chore: batch validate operator sets and minor cleanup * fix: fix stack too deep and compiler errors --------- Co-authored-by: wadealexc <[email protected]> feat: dm cleanup (#788) Co-authored-by: wadealexc <[email protected]> Revert "feat: dm cleanup (#788)" (#799) This reverts commit c27004e. fix: compiles (#800) fix: refactor (#801) * fix: refactor * default was history * reline * rename rename test: generally compiling + AVSM unit tests compiling chore: forge fmt src/contracts add events, fix bugs, abstract better (#806) * fix bugs, add events, cleanup * wrap conditional * fmt * only one slash per timestamp test(wip): generally compiling update docs (#804) fix: revert change to event feat: am refactor add to wads to slash cleanup refactor: change totalMagnitude to maxMagnitude * condense slashOperator params * some struct field renaming remove unused eigenpod storage chore: storage report (#809) * chore: storage report * patch eigenpod --------- Co-authored-by: gpsanant <[email protected]> feat: eip712 fixes (#808) * feat: use OZ SignatureChecker * feat: add `SignatureUtils` mixin * refactor: cleanup * feat: make storage report * storage report --------- Co-authored-by: gpsanant <[email protected]> test: slashing tests passing (#812) fix: merge issues update events refactor: rename total magnitudes to max magnitudes * various formatting and cleanup * standardize allocation manager getter functions * update and improve commenting refactor: reorder functions to match interface fix: remove memory overwrite bug in delegation manager chore: forge fmt refactor: clean up getDepositedShare logic chore: remove old oz + forge update foundry-rs/forge-std feat: replace getSlashableMagnitudes with general purpose allocation info query Feat: SM/StrategyBase Unit Tests + Formatting (#813) refactor: delegation manager refactors test: AllocationManager progress feat: change event names feat: update doc fix: compile test: AllocationManager progress fix: tests progress add Strategy <> OperatorSet mapping in storage, and APIs and events (#814) * feat: add strategy to operator set mapping with corresponding functions and events * fix: update * fix: remove pagination of getStrategiesInOperatorSet * fix: update * fix: compiles * fix: add checks * fix: address -> IStrategy * fix: storage gap --------- Co-authored-by: gpsanant <[email protected]> Slashing: DM Happy Path Test Cases (#815) * test: basic dm tests * test: start on share increase/decrease delegated shares tests * test: add DM unit tests passing except queue/complete * test: undelegate tests * test: queue withdrawals * test: completed DM happy path test cases * fix: compilation, rebase errors * chore: format Add view funcs (#816) * fix: add new view funcs * fix: update docs test: fix avsD tests (#817) chore: format fix: from scratch deploy feat: add shares to slashing event Slashing: Modify Allocations Happy Path Tests (#821) * refactor: add test contract per func * test: modify allocations * chore: format slashing: allocation delay happy path tests (#822) feat: wadSlashed (#820) Slashing: Clear Modification Queue Happy Path Tests (#823) test: basic allocation tests (#824) feat: inheritdoc refactor: alm test cleanup test: multiple allocations, only one slashed test: one pending alloc, slash test: revert bound refactor so tests pass Slashing: Add additional happy path AM test cases (#828) * test: happy path AM tests * chore: format Slashing: Get all tests passing (#829) * test: all tests passing * fix: mainnet integration test comment out Fix misset storage gaps (#831) * fix: misset storage gaps from #814 * fix: update gap to account for previous refactor fix: update coverage yml name (#833) Fix: Single Deallocation Queue (#827) * test: base regression * test: regression * fix: remove console * test: logs * test: add actual regression * fix: use a single deallocation queue * fix: comments * refactor: use deallocation queue everywhere * fix: address test comments * fix: test comment Feat: Update legacy withdrawal timestamp param to legacy withdrawal check (#836) * fix: make comment on timestamp clearer * chore: format Feat: Public Devnet Deploy (#838) * feat: slashing public devnet * fix: filepath * test: validation * fix: add test * fix: test fix: compile chore: format feat: add shares to queue event (#847) * feat: add shares to queue event * fix: submodule * chore: rename feat: named mapping params (#848) * feat: named mapping params * refactor: natspec * refactor: natspec * chore: forge fmt * refactor: nits chore: new storage (#851) Gpsanant/current stakes (#846) * feat: add getCurrent * chore: fmt * chore: storoage report * chore: new storage slashing: cleanup (#842) * chore: cleanup * chore: comments and add legacy view * chore: complete => clear * chore: reorder require check * fix: round up for slashed magnitudes * chore: nits and legacy complete withdrawals * feat: allow alloc delay 0 and fix tests * chore: clarify comment * chore: fmt * fix: fork test * chore: nits * test: roundup slashed magnitudes slashing: fully slashed strategies (#850) * feat: handling fully slashed scenarios * fix: unit test descriptions * fix: nits EigenPod/EPM Happy Path Test Cases (#857) * test: fix epm and ep unit tests * fix: remove unused contracts * test: get basic slash integration working * test: get ep integration tests passing * test: add rounding down test * chore: add TODO * chore: formatting * test: fix additional slash tests * chore: remove fork tests * fix: address comments * test: fix check on `withdrawSharesAsTokens` slashing: revert timestamps delegation (#861) * fix: back to blocks for withdrawals * refactor: queued legacy withdrawals are extended refactor: optimize pausable (#854) * refactor: optimize pausable * chore: forge fmt * refactor: nits * chore: make storage-report * fix: rebase * refactor: review changes - check pauser reg is non-zero on construction * fix: ci feat: small delegation refactors (#866) * refactor: small refactor to move duplicate expiry checks into signature utils * refactor: improve clarity of fully-slashed logic * refactor: improve readability of operator slashed amount calculation * todo: off-by-one error in test due to rounding issue * fix: correct amount of shares slashed * wip: comment out test so michael gets to it in his pr slashing: change queue withdrawal input to deposit shares (#869) * feat: queue withdraw uses deposit shares * fix: tests and removed old test files * chore: forge ftm * test: redelegate shares from rounding * chore: remove unused import feat: remove delegate to by signature (#871) feat: track staker withdrawals (#864) * feat: track staker withdrawals * chore: forge fmt * feat: track staker withdrawals * chore: forge fmt * fix: `pendingWithdrawals` arrangement * fix: ci Fix: Flaky DM Test (#875) * fix: test * fix: remove log feat: move operator set functionality to alm (#860) * feat: move operator set functionality to alm * feat: clarify registration states * fix: allow operators to deallocate from strategies that are not in operator set * fix: add enumeration for operator allocations * feat: remove deallocations on deregistration * chore: cleanup src/test (#863) * feat: add configurable avs registrar * feat: remove bloated getters * feat: use existing set method to get set values * test: avsd alm refactor (#867) * test: ALM compiling + but not passing * test(wip): avsd alm refactor * chore: update forge-std * fix: compile * test(wip): avsd passing * nit: cleanup * test: get alm tests passing * test: fix delegation tests * feat: add lib `Random` * test: add allocation enumeration checks to tests * test: reg/dereg + use `Random` * refactor: small refactor to reuse getters * test: `addStrategiesToOperatorSet` - also adds missing state mutation checks on previous tests * test: `removeStrategiesFromOperatorSet` * test: `createOperatorSets` * test: `setAVSRegistrar` --------- Co-authored-by: wadealexc <[email protected]> * feat: add AVS metadata URI to ALM * chore: update comments * chore: address comments fix: change to sharesToWithdraw (#878) * fix: change to sharesToWithdraw * fix: test feat: add tasks to prepare chain state ready for slashing (#868) * feat: add tasks to prepare chain state ready for slashing * feat: add queueWithdrawal and completeWithdrawal tasks * fix: extract addresses from output after deploy * fix: upgrade scripts to account for AVS/ALM operatorSet changes * fix: add additional deposit * fix: add additional slashing between withdrawal queued and completed * fix: update slashing on top of alex/avsd-alm-refactor * chore: correct readme and formatting * fix: PascalCase contract names and update forge-std * feat: replace console with emit * feat: remove additional use of console --------- Co-authored-by: wadealexc <[email protected]> test: slashing todos (#880) * test(wip): todos * test: remove unused utils * feat: foundry `sparse_mode=true` * test(wip): todos * test(wip): todos * test(wip): todos * test(wip): todos * test(wip): todos * fix: cherry-pick errors * fix: forge-std * test(wip): todos feat: add getMinimumSlashableStake (#889) * feat: add getMinimumSlashableStake * fix: only account for deallocation when calculating minimum slashable refactor: pull beacon chain slashing out of slashing lib (#876) * fix: correctly update dsf when increasing delegation * fix: fix bug where we modify an array while iterating over it * chore: address review nits * refactor: minor refactors for codesize * refactor(nit): function ordering * fix: only check input lengths when receiving tokens * refactor: remove callstack indirection when completing a withdrawal * chore: update comment test: slashing test todos (#885) * test(wip): todos * chore: remove lcov * test(wip): remaining alm todos * test: final todos * test(wip): todos * chore: remove lcov feat: burn erc20s on slashing (#881) * refactor: pull beacon chain slashing out of slashing lib * feat: initial draft for sync slashing * fix: existing tests * fix: cumulative shares and fmt * fix: missing operator key in mapping * refactor: cumulative scaled shares * chore: cleanup * chore: storage report * fix: rename and beacon strategy * fix: rebase * fix: rounding * test: happy path test cases for burn erc20s * fix: address comments * test: timing regression test and comments * fix: slashable shares in queue amount * refactor: burn refactor (#897) * refactor: remove unused return values from _insert * also removes safe cast * refactor: pull unrelated operations out and condense library method usage * test: additional unit test with multiple withdrawals --------- Co-authored-by: wadealexc <[email protected]> Co-authored-by: Alex <[email protected]> test: DelegationManager unit tests (#886) * feat: initial draft for sync slashing * refactor: cumulative scaled shares * feat: initial draft for sync slashing * fix: cumulative shares and fmt * chore: cleanup src/test * fix: delegation tests * test: rebased and refactored tests fix: rebase tests test: delegation unit refactoring fix: rounding tests fix: continue fixing delegation tests * test: include fuzz underflow tests * fix: tests and rebase * chore: comment nit * fix: failing ci test: fix env requirement (#899) * fix: remove env required * fix: use envOr * fix: remove env from CI for being required fix: compile warnings (#900) fix: slashing local deploy (#898) * feat: local deploy * fix: transfer ownership * fix: comment test: slashing integration framework (#894) * feat: add `AVS` user * test(wip): slashing integration * test(wip): slashing integration * test(wip): slashing integration * test(wip): slashing integration * fix: make tracing useful * test(wip): slashing integration * fix: toStringWad * fix: eigenpods * test(wip): slashing integration * refactor: revert change * test(review): changes * fix: compile * test(review): changes * refactor: improve logging * refactor: review changes * fix: roll in `modifyAllocations` * fix: roll in `modifyAllocations` * refactor: review changes * refactor: add back pause constants --------- Co-authored-by: Yash Patil <[email protected]> refactor: EigenPods and beacon chain slashing (#892) * refactor: eigenpod and beacon chain slashing * checkpoints are not deleted on completion, saving gas when creating a new checkpoint * refactor: pull bcsf out of delegationManager * chore: formatting * refactor: rename withdrawableRestakedExecutionLayerGwei * maintains old interface, only state variable is renamed * this is to reduce line length when using this variable * refactor: remove branching and slashing math from eigenpod * fix: clean up balance update conditions and ensure shares==0 is handled * refactor: remove input validation and explicitly document assumptions * fix: tests and roundup (#901) * chore: address feedback * chore: address feedback again * chore: cleanup EPM withdrawSharesAsTokens --------- Co-authored-by: Michael Sun <[email protected]> refactor: remove deprecated methods (#903) * refactor: rename parameter to be more accurate * refactor: remove deprecated methods from dm * refactor: remove operator details usage * chore: nit word test: `withdrawSharesAsTokens` regression (#904) * fix: commented out integration * test: call into EP for withdrawing as tokens chore: remove unnecessary delegate checks (#908) * feat: remove checks on approver/operator sender on delegate * chore: update interface feat: user access management (#870) * feat: unified access management fix: test/compile chore: use helper func in modifier chore: remove extra * test: add UAM to unit tests * refactor: delegate -> appointee * refactor: setAdmin -> addAdmin * fix: prevent 0 admins * refactor: bitshift encode/decode * feat: short-circuit _checkCanCall * test: basic reversability * feat: admin 2-step fix: remove external call * chore: fix compile/test * feat: use opSet length as avs check * chore: format * refactor: getoperatorsetcount * fix: msg.sender in delegatoinapproverupdated * chore: format fix: modify allocation tests + effect block fix: push more fixes test: add more tests fix: events test: add slashing check helpers (greg) (#910) * refactor(wip): alm unit tests * fix: am tests passing --------- Co-authored-by: clandestine.eth <[email protected]> test: allocation test refactor test: fix slashing tests fix: test/compile chore: format * fix: tests * chore: remove unnecessary fixes * chore: bindings * chore: format * chore: uncommented tests * chore: assert number of logs to emit * chore: use expectedSlashableStake naming * chore: spacing * chore: add additional test * chore: remove unused test * chore: remove operator not registered * fix: event * chore: make types cleaner in RC unit tests * fix: broken test --------- Co-authored-by: clandestine.eth <[email protected]>
* feat: update RC for UAM * chore: format * chore: inherit errors in test file
* fix: compile dev * fix: fixed compile (#830) --------- Co-authored-by: haike0513 <[email protected]> feat: storage report (#753) chore: move custom errors to sep branch chore: forge fmt src/contracts fix: ci and bindings chore: dmgr error tweaks chore: error tweaks for consistency and clarity feat: bump oz version (#755) * feat: bump oz version -> 0.4.9 - also moved remappings -> foundry.toml - removes remappings.txt * bindings --------- Co-authored-by: gpsanant <[email protected]> test: custom errors passing (#783) * test: custom errors AVSDir * test: custom errors IPausable * test: custom errors Delegation * test: custom errors EigenPodManager * test: custom errors EigenPod * test: custom errors Pausable * test: custom errors RewardsCoordinator * test: custom errors IStrategy * test: custom errors StrategyManager * test: custom errors DelegationManager * test: custom errors refactor: review reconciliation refactor: review reconciliation refactor: review reconciliation chore: forge fmt src/contracts fix: compile feat: squashed slashing for devnet chore: forge fmt src/contracts fix: ci and bindings chore: dmgr error tweaks chore: error tweaks for consistency and clarity feat: bump oz version (#755) * feat: bump oz version -> 0.4.9 - also moved remappings -> foundry.toml - removes remappings.txt * bindings --------- Co-authored-by: gpsanant <[email protected]> test: custom errors passing (#783) * test: custom errors AVSDir * test: custom errors IPausable * test: custom errors Delegation * test: custom errors EigenPodManager * test: custom errors EigenPod * test: custom errors Pausable * test: custom errors RewardsCoordinator * test: custom errors IStrategy * test: custom errors StrategyManager * test: custom errors DelegationManager * test: custom errors refactor: review reconciliation refactor: review reconciliation refactor: review reconciliation chore: forge fmt src/contracts feat: slashing * chore: pending delay calc cleanup * chore: storage pointer cleanup * eigenpods slashing updates (#745) * squash yet again * change again * update checkpoint struct * feat: AllocationManager Storage Simplification (#787) * feat: cleanup * feat: add helper func * fix: simplification * chore: clean up magnitude info usage and type conversions * refactor: review changes * fix: order struct params by size * fix: correct and simplify calc for slashed pending magnitude * fix: storage gap * feat: cleanup * chore: remove some type conversion bs and minor formatting * chore: clean up free magnitude logic * chore: rename pending deallocations and fix stack too deep * feat: slashing magnitudes cleanup (#786) * refactor: slashing magnitudes cleanup * refactor: assert `bipToSlash` is bounded * assert `bipsToSlash` is lte 100% and gt 0%. * refactor: move `isOperatorSlashable` -> AVSD * refactor: batch validate opsets on allocations - adds `AVSD.isOperatorSetBatch(operatorSets)` * feat: add pausing to ALM * refactor: remove single use helper - removes `_getLatestTotalMagnitude(operator, strategy)` * refactor: rename `ALLOCATION_DELAY_CONFIGURATION_DELAY` * refactor: remove `Slasher` * refactor: move constants + immutables to storage contracts * refactor: custom errors `RewardsCoordinatorStorage` * chore: dependency cleanup * fix: remove unused internal getter * chore: batch validate operator sets and minor cleanup * fix: fix stack too deep and compiler errors --------- Co-authored-by: wadealexc <[email protected]> feat: dm cleanup (#788) Co-authored-by: wadealexc <[email protected]> Revert "feat: dm cleanup (#788)" (#799) This reverts commit c27004e. fix: compiles (#800) fix: refactor (#801) * fix: refactor * default was history * reline * rename rename test: generally compiling + AVSM unit tests compiling chore: forge fmt src/contracts add events, fix bugs, abstract better (#806) * fix bugs, add events, cleanup * wrap conditional * fmt * only one slash per timestamp test(wip): generally compiling update docs (#804) fix: revert change to event feat: am refactor add to wads to slash cleanup refactor: change totalMagnitude to maxMagnitude * condense slashOperator params * some struct field renaming remove unused eigenpod storage chore: storage report (#809) * chore: storage report * patch eigenpod --------- Co-authored-by: gpsanant <[email protected]> feat: eip712 fixes (#808) * feat: use OZ SignatureChecker * feat: add `SignatureUtils` mixin * refactor: cleanup * feat: make storage report * storage report --------- Co-authored-by: gpsanant <[email protected]> test: slashing tests passing (#812) fix: merge issues update events refactor: rename total magnitudes to max magnitudes * various formatting and cleanup * standardize allocation manager getter functions * update and improve commenting refactor: reorder functions to match interface fix: remove memory overwrite bug in delegation manager chore: forge fmt refactor: clean up getDepositedShare logic chore: remove old oz + forge update foundry-rs/forge-std feat: replace getSlashableMagnitudes with general purpose allocation info query Feat: SM/StrategyBase Unit Tests + Formatting (#813) refactor: delegation manager refactors test: AllocationManager progress feat: change event names feat: update doc fix: compile test: AllocationManager progress fix: tests progress add Strategy <> OperatorSet mapping in storage, and APIs and events (#814) * feat: add strategy to operator set mapping with corresponding functions and events * fix: update * fix: remove pagination of getStrategiesInOperatorSet * fix: update * fix: compiles * fix: add checks * fix: address -> IStrategy * fix: storage gap --------- Co-authored-by: gpsanant <[email protected]> Slashing: DM Happy Path Test Cases (#815) * test: basic dm tests * test: start on share increase/decrease delegated shares tests * test: add DM unit tests passing except queue/complete * test: undelegate tests * test: queue withdrawals * test: completed DM happy path test cases * fix: compilation, rebase errors * chore: format Add view funcs (#816) * fix: add new view funcs * fix: update docs test: fix avsD tests (#817) chore: format fix: from scratch deploy feat: add shares to slashing event Slashing: Modify Allocations Happy Path Tests (#821) * refactor: add test contract per func * test: modify allocations * chore: format slashing: allocation delay happy path tests (#822) feat: wadSlashed (#820) Slashing: Clear Modification Queue Happy Path Tests (#823) test: basic allocation tests (#824) feat: inheritdoc refactor: alm test cleanup test: multiple allocations, only one slashed test: one pending alloc, slash test: revert bound refactor so tests pass Slashing: Add additional happy path AM test cases (#828) * test: happy path AM tests * chore: format Slashing: Get all tests passing (#829) * test: all tests passing * fix: mainnet integration test comment out Fix misset storage gaps (#831) * fix: misset storage gaps from #814 * fix: update gap to account for previous refactor fix: update coverage yml name (#833) Fix: Single Deallocation Queue (#827) * test: base regression * test: regression * fix: remove console * test: logs * test: add actual regression * fix: use a single deallocation queue * fix: comments * refactor: use deallocation queue everywhere * fix: address test comments * fix: test comment Feat: Update legacy withdrawal timestamp param to legacy withdrawal check (#836) * fix: make comment on timestamp clearer * chore: format Feat: Public Devnet Deploy (#838) * feat: slashing public devnet * fix: filepath * test: validation * fix: add test * fix: test fix: compile chore: format feat: add shares to queue event (#847) * feat: add shares to queue event * fix: submodule * chore: rename feat: named mapping params (#848) * feat: named mapping params * refactor: natspec * refactor: natspec * chore: forge fmt * refactor: nits chore: new storage (#851) Gpsanant/current stakes (#846) * feat: add getCurrent * chore: fmt * chore: storoage report * chore: new storage slashing: cleanup (#842) * chore: cleanup * chore: comments and add legacy view * chore: complete => clear * chore: reorder require check * fix: round up for slashed magnitudes * chore: nits and legacy complete withdrawals * feat: allow alloc delay 0 and fix tests * chore: clarify comment * chore: fmt * fix: fork test * chore: nits * test: roundup slashed magnitudes slashing: fully slashed strategies (#850) * feat: handling fully slashed scenarios * fix: unit test descriptions * fix: nits EigenPod/EPM Happy Path Test Cases (#857) * test: fix epm and ep unit tests * fix: remove unused contracts * test: get basic slash integration working * test: get ep integration tests passing * test: add rounding down test * chore: add TODO * chore: formatting * test: fix additional slash tests * chore: remove fork tests * fix: address comments * test: fix check on `withdrawSharesAsTokens` slashing: revert timestamps delegation (#861) * fix: back to blocks for withdrawals * refactor: queued legacy withdrawals are extended refactor: optimize pausable (#854) * refactor: optimize pausable * chore: forge fmt * refactor: nits * chore: make storage-report * fix: rebase * refactor: review changes - check pauser reg is non-zero on construction * fix: ci feat: small delegation refactors (#866) * refactor: small refactor to move duplicate expiry checks into signature utils * refactor: improve clarity of fully-slashed logic * refactor: improve readability of operator slashed amount calculation * todo: off-by-one error in test due to rounding issue * fix: correct amount of shares slashed * wip: comment out test so michael gets to it in his pr slashing: change queue withdrawal input to deposit shares (#869) * feat: queue withdraw uses deposit shares * fix: tests and removed old test files * chore: forge ftm * test: redelegate shares from rounding * chore: remove unused import feat: remove delegate to by signature (#871) feat: track staker withdrawals (#864) * feat: track staker withdrawals * chore: forge fmt * feat: track staker withdrawals * chore: forge fmt * fix: `pendingWithdrawals` arrangement * fix: ci Fix: Flaky DM Test (#875) * fix: test * fix: remove log feat: move operator set functionality to alm (#860) * feat: move operator set functionality to alm * feat: clarify registration states * fix: allow operators to deallocate from strategies that are not in operator set * fix: add enumeration for operator allocations * feat: remove deallocations on deregistration * chore: cleanup src/test (#863) * feat: add configurable avs registrar * feat: remove bloated getters * feat: use existing set method to get set values * test: avsd alm refactor (#867) * test: ALM compiling + but not passing * test(wip): avsd alm refactor * chore: update forge-std * fix: compile * test(wip): avsd passing * nit: cleanup * test: get alm tests passing * test: fix delegation tests * feat: add lib `Random` * test: add allocation enumeration checks to tests * test: reg/dereg + use `Random` * refactor: small refactor to reuse getters * test: `addStrategiesToOperatorSet` - also adds missing state mutation checks on previous tests * test: `removeStrategiesFromOperatorSet` * test: `createOperatorSets` * test: `setAVSRegistrar` --------- Co-authored-by: wadealexc <[email protected]> * feat: add AVS metadata URI to ALM * chore: update comments * chore: address comments fix: change to sharesToWithdraw (#878) * fix: change to sharesToWithdraw * fix: test feat: add tasks to prepare chain state ready for slashing (#868) * feat: add tasks to prepare chain state ready for slashing * feat: add queueWithdrawal and completeWithdrawal tasks * fix: extract addresses from output after deploy * fix: upgrade scripts to account for AVS/ALM operatorSet changes * fix: add additional deposit * fix: add additional slashing between withdrawal queued and completed * fix: update slashing on top of alex/avsd-alm-refactor * chore: correct readme and formatting * fix: PascalCase contract names and update forge-std * feat: replace console with emit * feat: remove additional use of console --------- Co-authored-by: wadealexc <[email protected]> test: slashing todos (#880) * test(wip): todos * test: remove unused utils * feat: foundry `sparse_mode=true` * test(wip): todos * test(wip): todos * test(wip): todos * test(wip): todos * test(wip): todos * fix: cherry-pick errors * fix: forge-std * test(wip): todos feat: add getMinimumSlashableStake (#889) * feat: add getMinimumSlashableStake * fix: only account for deallocation when calculating minimum slashable refactor: pull beacon chain slashing out of slashing lib (#876) * fix: correctly update dsf when increasing delegation * fix: fix bug where we modify an array while iterating over it * chore: address review nits * refactor: minor refactors for codesize * refactor(nit): function ordering * fix: only check input lengths when receiving tokens * refactor: remove callstack indirection when completing a withdrawal * chore: update comment test: slashing test todos (#885) * test(wip): todos * chore: remove lcov * test(wip): remaining alm todos * test: final todos * test(wip): todos * chore: remove lcov feat: burn erc20s on slashing (#881) * refactor: pull beacon chain slashing out of slashing lib * feat: initial draft for sync slashing * fix: existing tests * fix: cumulative shares and fmt * fix: missing operator key in mapping * refactor: cumulative scaled shares * chore: cleanup * chore: storage report * fix: rename and beacon strategy * fix: rebase * fix: rounding * test: happy path test cases for burn erc20s * fix: address comments * test: timing regression test and comments * fix: slashable shares in queue amount * refactor: burn refactor (#897) * refactor: remove unused return values from _insert * also removes safe cast * refactor: pull unrelated operations out and condense library method usage * test: additional unit test with multiple withdrawals --------- Co-authored-by: wadealexc <[email protected]> Co-authored-by: Alex <[email protected]> test: DelegationManager unit tests (#886) * feat: initial draft for sync slashing * refactor: cumulative scaled shares * feat: initial draft for sync slashing * fix: cumulative shares and fmt * chore: cleanup src/test * fix: delegation tests * test: rebased and refactored tests fix: rebase tests test: delegation unit refactoring fix: rounding tests fix: continue fixing delegation tests * test: include fuzz underflow tests * fix: tests and rebase * chore: comment nit * fix: failing ci test: fix env requirement (#899) * fix: remove env required * fix: use envOr * fix: remove env from CI for being required fix: compile warnings (#900) fix: slashing local deploy (#898) * feat: local deploy * fix: transfer ownership * fix: comment test: slashing integration framework (#894) * feat: add `AVS` user * test(wip): slashing integration * test(wip): slashing integration * test(wip): slashing integration * test(wip): slashing integration * fix: make tracing useful * test(wip): slashing integration * fix: toStringWad * fix: eigenpods * test(wip): slashing integration * refactor: revert change * test(review): changes * fix: compile * test(review): changes * refactor: improve logging * refactor: review changes * fix: roll in `modifyAllocations` * fix: roll in `modifyAllocations` * refactor: review changes * refactor: add back pause constants --------- Co-authored-by: Yash Patil <[email protected]> refactor: EigenPods and beacon chain slashing (#892) * refactor: eigenpod and beacon chain slashing * checkpoints are not deleted on completion, saving gas when creating a new checkpoint * refactor: pull bcsf out of delegationManager * chore: formatting * refactor: rename withdrawableRestakedExecutionLayerGwei * maintains old interface, only state variable is renamed * this is to reduce line length when using this variable * refactor: remove branching and slashing math from eigenpod * fix: clean up balance update conditions and ensure shares==0 is handled * refactor: remove input validation and explicitly document assumptions * fix: tests and roundup (#901) * chore: address feedback * chore: address feedback again * chore: cleanup EPM withdrawSharesAsTokens --------- Co-authored-by: Michael Sun <[email protected]> refactor: remove deprecated methods (#903) * refactor: rename parameter to be more accurate * refactor: remove deprecated methods from dm * refactor: remove operator details usage * chore: nit word test: `withdrawSharesAsTokens` regression (#904) * fix: commented out integration * test: call into EP for withdrawing as tokens chore: remove unnecessary delegate checks (#908) * feat: remove checks on approver/operator sender on delegate * chore: update interface feat: user access management (#870) * feat: unified access management fix: test/compile chore: use helper func in modifier chore: remove extra * test: add UAM to unit tests * refactor: delegate -> appointee * refactor: setAdmin -> addAdmin * fix: prevent 0 admins * refactor: bitshift encode/decode * feat: short-circuit _checkCanCall * test: basic reversability * feat: admin 2-step fix: remove external call * chore: fix compile/test * feat: use opSet length as avs check * chore: format * refactor: getoperatorsetcount * fix: msg.sender in delegatoinapproverupdated * chore: format feat: working upgrade path for integration, pending eigenpod migration validation test: add eigenpod migration tests chore: update ci for eigenpod migration chore: update comment feat: withdrawal migration tests chore: remove unnecessary files changed fix: test fix: compile
|
* fix: unit tests after rebase * fix: tests after rebase * fix: decreaseDelegatedShares rounding also included some tests and fixed todos * test: fix complete withdrawal tests and fuzzing * chore: fmt * fix: event param * fix: rebase, add back redelegate unit tests
|
* test: slashing integration todos * refactor: review changes * fix: rebase * fix: flaky tests * fix: 0 address calls and evmrevert * fix: ci still failing tests * fix: `_rollBlocksForCompleteWithdrawal` - wasn't rolling far enough ahead to complete all withdrawals * refactor: `ExistingDeploymentParser` * fix: solhint --------- Co-authored-by: Michael Sun <[email protected]>
|
* feat: add min withdrawal delay blocks * chore: better comment * fix: flaky test * fix: make MIN_WITHDRAWAL_DELAY_BLOCKS internal * chore: comment
|
* feat: slashing upgrade script * fix: remove unneeded params and correctly pause before test * fix: remove deprecated methods --------- Co-authored-by: wadealexc <[email protected]>
|
Updated 12/09/2024
Contract Descriptions
AVSDirectory
New Core contract: AllocationManager! (basically the Slasher contract)
modifyAllocations
can be called by an operator to configure for a given operatorSet, the slashable proportions for each Strategies in the operatorSet. Ex. If an AVS operatorSet has stETH and rETH Strategies in their operatorSet, as an operator I can allocate 50% of my delegated stETH shares and 25% of my delegated rETH shares to be slashable by this operatorSet. An allocation can be thought of as the slashable proportion defined over the tuple (operator, operatorSet, Strategy).slashOperator
, called by an AVS, slashes an operator for the specific operatorSet. The AVS will pass in as calldata an array of Strategies and wadsToSlash respsectively to slash the operator for. Note that the Strategies passed in must already be in the operatorSet’s list of Strategies. This function slashes from current magnitude as well as queued deallocations. Whatever magnitude is slashed is also decremented from the maxMagnitude from the (operator, Strategy) tuple.encumberedMagnitude
value, increasing on any allocations, which can go up to a maximum of your maxMagnitude(by default maxMagnitude is 1e18, but decreases every time slashed).StrategyManager/EigenPodManager/DelegationManager - Changes to Deposits/Withdrawals
Shares are changed in a lot of ways with the introduction of Slashing with a lot more complex accounting, most of which can be found in SlashingLib.sol and the deposit/withdrawal flows. Below is an explanation on the types of 'shares' in the system.
depositShares
: These are the shares representing the amount of Strategy shares a staker has added to the system, either through deposits in the StrategyManager or positive shares increases in the EigenPodManager. Note that these can be compared 1:1 with the shares of the underlying Strategies. If you are delegated and deposit or you delegate with existing shares, then your operator shares will increase by the exact amount of these depositShares.The amount you can withdraw is dependent however on
withdrawableShares
, see more below...Location: StrategyManager -
stakerDepositShares
mappingEigenPodManager -
podOwnerDepositShares
mappingoperatorShares
: This is the delegated stake an operator has from all their delegated stakers; this can also be termed 'delegated' shares. An operator's operatorShares is also the summation of all their delegated stakers withdrawable shares. This is because operatorShares increase on each delegated staker deposit and decreases from withdrawals and slashed shares. The amount decreased from withdrawals are also scaled down depending on if any slashing has applied to the staker and their depositShares.Location: DelegationManager -
operatorShares
mappingwithdrawableShares
: This is the amount of withdrawable shares a staker can queue withdraw. Now if a staker is not delegated, then the following is truewithdrawableShares == depositShares
because they cannot be slashed. However if they are delegated to an operator and their operator got slashed while they had depositShares delegated to them, then their withdrawableShares are less than their depositShares. This value is not in storage but read by taking the staker's depositShares and scaling it down depending on if any slashing has affected their stake.Location: DelegationManager -
getWithdrawableShares()
function3a.
scaledShares
: You can see this instruct Withdrawal
when queuing a withdrawal. We calculatewithdrawableShares
by some clever scaling factors and accounting but one thing we want to ensure is that withdrawals are still slashable while in the queue. This is done by dividingwithdrawableShares
at queue time by the delegated operator's maxMagnitude, and upon completion multiplying it by the maxMagnitude at the earliest withdrawal completion time. This will account for the proportional amount of shares slashed and decrement from withdrawn shares accordingly.Since we read the maxMagnitude while queuing the withdrawal, this design is more for convenience and optimizing reads.
Note: If the strategy is the beaconChainStrategy this is also accounted for in a similar way.
Location: IDelegationManager -
struct Withdrawal
Additional Notes:
IShareManager
interfacedepositScalingFactor
is the k value used in the accounting docsstakerDepositShares
is soperatorShares
is opmaxMagnitude
is m read from the AllocationManagerthirdPartyTransfersForbidden
is removed entirely. This mapping will be deprecated and never read from again.TODOs:
Deposits/Withdraws of Shares [WIP]
Allocator Configuration [WIP]