Skip to content
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

improve doc string for interface #944

Closed
wants to merge 11 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
feat: slashing release
0xClandestine authored and wadealexc committed Dec 6, 2024
commit fbeb5f1adffc3405feb49f09f0669f139d4c3ba0
2 changes: 1 addition & 1 deletion .github/workflows/certora-prover.yml
Original file line number Diff line number Diff line change
@@ -50,7 +50,7 @@ jobs:
- name: Install solc
run: |
pip install solc-select
solc-select use 0.8.12 --always-install
solc-select use 0.8.27 --always-install
- name: Verify rule ${{ matrix.params }}
run: |
bash ${{ matrix.params }}
26 changes: 15 additions & 11 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
@@ -26,19 +26,20 @@ jobs:
id: get_issue_number
with:
script: |
if (context.issue && context.issue.number) {
// Return issue number if present
return context.issue.number;
let issue_number;
// Attempt to find a pull request associated with the commit
const pullRequests = await github.rest.repos.listPullRequestsAssociatedWithCommit({
commit_sha: context.sha,
owner: context.repo.owner,
repo: context.repo.repo,
});
if (pullRequests.data.length > 0) {
issue_number = pullRequests.data[0].number;
} else {
// Otherwise return issue number from commit
return (
await github.rest.repos.listPullRequestsAssociatedWithCommit({
commit_sha: context.sha,
owner: context.repo.owner,
repo: context.repo.repo,
})
).data[0].number;
throw new Error('No associated issue or pull request found.');
}
return issue_number;
result-encoding: string
- name: Checkout code
uses: actions/checkout@v2
@@ -52,6 +53,9 @@ jobs:
version: nightly
- name: Run coverage
run: forge coverage --report lcov
env:
RPC_MAINNET: ${{ secrets.RPC_MAINNET }}
RPC_HOLESKY: ${{ secrets.RPC_HOLESKY }}
- name: Prune coverage report
run: lcov --remove ./lcov.info -o ./lcov.info.pruned 'src/test/*' 'script/*' '*Storage.sol' --ignore-errors inconsistent
- name: Generate reports
17 changes: 9 additions & 8 deletions .github/workflows/testinparallel.yml
Original file line number Diff line number Diff line change
@@ -39,7 +39,7 @@ jobs:
- name: Run Forge build
run: |
forge --version
forge build --sizes
forge build
id: build

- name: Run unit tests
@@ -56,10 +56,11 @@ jobs:
RPC_HOLESKY: ${{ secrets.RPC_HOLESKY }}
CHAIN_ID: ${{ secrets.CHAIN_ID }}

- name: Run integration mainnet fork tests
run: forge test --match-contract Integration
env:
FOUNDRY_PROFILE: "forktest"
RPC_MAINNET: ${{ secrets.RPC_MAINNET }}
RPC_HOLESKY: ${{ secrets.RPC_HOLESKY }}
CHAIN_ID: ${{ secrets.CHAIN_ID }}
# TODO: uncomment this item once we've added the proper upgrade tests
# - name: Run integration mainnet fork tests
# run: forge test --match-contract Integration
# env:
# FOUNDRY_PROFILE: "forktest"
# RPC_MAINNET: ${{ secrets.RPC_MAINNET }}
# RPC_HOLESKY: ${{ secrets.RPC_HOLESKY }}
# CHAIN_ID: ${{ secrets.CHAIN_ID }}
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -47,3 +47,7 @@ InheritanceGraph.png
surya_report.md

.idea

*state.json
deployed_strategies.json
populate_src*
6 changes: 0 additions & 6 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
[submodule "lib/openzeppelin-contracts-upgradeable"]
path = lib/openzeppelin-contracts-upgradeable
url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
[submodule "lib/ds-test"]
path = lib/ds-test
url = https://github.com/dapphub/ds-test
[submodule "lib/forge-std"]
path = lib/forge-std
url = https://github.com/foundry-rs/forge-std
[submodule "lib/openzeppelin-contracts"]
path = lib/openzeppelin-contracts
url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "lib/openzeppelin-contracts-v4.9.0"]
path = lib/openzeppelin-contracts-v4.9.0
url = https://github.com/OpenZeppelin/openzeppelin-contracts
1 change: 0 additions & 1 deletion .solhintignore
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
Slasher.sol
2 changes: 1 addition & 1 deletion certora/harnesses/DelegationManagerHarness.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.12;
pragma solidity ^0.8.27;

import "../../src/contracts/core/DelegationManager.sol";

2 changes: 1 addition & 1 deletion certora/harnesses/EigenPodHarness.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.12;
pragma solidity ^0.8.27;

import "../../src/contracts/pods/EigenPod.sol";

2 changes: 1 addition & 1 deletion certora/harnesses/EigenPodManagerHarness.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.12;
pragma solidity ^0.8.27;

import "../../src/contracts/pods/EigenPodManager.sol";

2 changes: 1 addition & 1 deletion certora/harnesses/PausableHarness.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.12;
pragma solidity ^0.8.27;

import "../../src/contracts/permissions/Pausable.sol";

85 changes: 0 additions & 85 deletions certora/harnesses/SlasherHarness.sol

This file was deleted.

2 changes: 1 addition & 1 deletion certora/harnesses/StrategyManagerHarness.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.12;
pragma solidity ^0.8.27;

import "../../src/contracts/core/StrategyManager.sol";

4 changes: 2 additions & 2 deletions certora/scripts/core/verifyDelegationManager.sh
Original file line number Diff line number Diff line change
@@ -3,12 +3,12 @@ then
RULE="--rule $2"
fi

solc-select use 0.8.12
solc-select use 0.8.27

certoraRun certora/harnesses/DelegationManagerHarness.sol \
lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol lib/openzeppelin-contracts/contracts/mocks/ERC1271WalletMock.sol \
src/contracts/pods/EigenPodManager.sol src/contracts/pods/EigenPod.sol src/contracts/strategies/StrategyBase.sol src/contracts/core/StrategyManager.sol \
src/contracts/core/Slasher.sol src/contracts/permissions/PauserRegistry.sol \
src/contracts/permissions/PauserRegistry.sol \
--verify DelegationManagerHarness:certora/specs/core/DelegationManager.spec \
--solc_via_ir \
--solc_optimize 1 \
4 changes: 2 additions & 2 deletions certora/scripts/core/verifyStrategyManager.sh
Original file line number Diff line number Diff line change
@@ -3,13 +3,13 @@ then
RULE="--rule $2"
fi

solc-select use 0.8.12
solc-select use 0.8.27

certoraRun certora/harnesses/StrategyManagerHarness.sol \
lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol lib/openzeppelin-contracts/contracts/mocks/ERC1271WalletMock.sol \
src/contracts/pods/EigenPodManager.sol src/contracts/pods/EigenPod.sol \
src/contracts/strategies/StrategyBase.sol src/contracts/core/DelegationManager.sol \
src/contracts/core/Slasher.sol src/contracts/permissions/PauserRegistry.sol \
src/contracts/permissions/PauserRegistry.sol \
--verify StrategyManagerHarness:certora/specs/core/StrategyManager.spec \
--solc_via_ir \
--solc_optimize 1 \
2 changes: 1 addition & 1 deletion certora/scripts/permissions/verifyPausable.sh
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@ then
RULE="--rule $2"
fi

solc-select use 0.8.12
solc-select use 0.8.27

certoraRun certora/harnesses/PausableHarness.sol \
src/contracts/permissions/PauserRegistry.sol \
4 changes: 2 additions & 2 deletions certora/scripts/pods/verifyEigenPod.sh
Original file line number Diff line number Diff line change
@@ -3,11 +3,11 @@ then
RULE="--rule $2"
fi

# solc-select use 0.8.12
# solc-select use 0.8.27

# certoraRun certora/harnesses/EigenPodHarness.sol \
# src/contracts/core/DelegationManager.sol src/contracts/pods/EigenPodManager.sol \
# src/contracts/core/Slasher.sol src/contracts/permissions/PauserRegistry.sol \
# src/contracts/permissions/PauserRegistry.sol \
# src/contracts/core/StrategyManager.sol \
# src/contracts/strategies/StrategyBase.sol \
# lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol \
4 changes: 2 additions & 2 deletions certora/scripts/pods/verifyEigenPodManager.sh
Original file line number Diff line number Diff line change
@@ -3,11 +3,11 @@ then
RULE="--rule $2"
fi

# solc-select use 0.8.12
# solc-select use 0.8.27

# certoraRun certora/harnesses/EigenPodManagerHarness.sol \
# src/contracts/core/DelegationManager.sol src/contracts/pods/EigenPod.sol src/contracts/strategies/StrategyBase.sol src/contracts/core/StrategyManager.sol \
# src/contracts/core/Slasher.sol src/contracts/permissions/PauserRegistry.sol \
# src/contracts/permissions/PauserRegistry.sol \
# --verify EigenPodManagerHarness:certora/specs/pods/EigenPodManager.spec \
# --optimistic_loop \
# --optimistic_fallback \
3 changes: 1 addition & 2 deletions certora/scripts/strategies/verifyStrategyBase.sh
Original file line number Diff line number Diff line change
@@ -3,13 +3,12 @@ then
RULE="--rule $2"
fi

solc-select use 0.8.12
solc-select use 0.8.27

certoraRun src/contracts/strategies/StrategyBase.sol \
lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol \
src/contracts/core/StrategyManager.sol \
src/contracts/permissions/PauserRegistry.sol \
src/contracts/core/Slasher.sol \
--verify StrategyBase:certora/specs/strategies/StrategyBase.spec \
--solc_via_ir \
--solc_optimize 1 \
14 changes: 2 additions & 12 deletions certora/specs/core/DelegationManager.spec
Original file line number Diff line number Diff line change
@@ -78,7 +78,7 @@ in this case, the end state is that:
isOperator(staker) == false,
delegatedTo(staker) != staker && delegatedTo(staker) != 0,
and isDelegated(staker) == true (redundant with above)
-only allowed when calling `delegateTo` or `delegateToBySignature`
-only allowed when calling `delegateTo`
2)
FROM not delegated AND not registered as an operator
@@ -172,7 +172,7 @@ rule cannotChangeDelegationWithoutUndelegating(address staker) {
}
}

// verifies that an undelegated address can only delegate when calling `delegateTo`, `delegateToBySignature` or `registerAsOperator`
// verifies that an undelegated address can only delegate when calling `delegateTo` or `registerAsOperator`
rule canOnlyDelegateWithSpecificFunctions(address staker) {
requireInvariant operatorsAlwaysDelegatedToSelf(staker);
// assume the staker begins as undelegated
@@ -192,16 +192,6 @@ rule canOnlyDelegateWithSpecificFunctions(address staker) {
} else {
assert (!isDelegated(staker), "staker delegated to inappropriate address?");
}
} else if (f.selector == sig:delegateToBySignature(address, address, ISignatureUtils.SignatureWithExpiry, ISignatureUtils.SignatureWithExpiry, bytes32).selector) {
address toDelegateFrom;
address operator;
require(operator != 0);
ISignatureUtils.SignatureWithExpiry stakerSignatureAndExpiry;
ISignatureUtils.SignatureWithExpiry approverSignatureAndExpiry;
bytes32 salt;
delegateToBySignature(e, toDelegateFrom, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, salt);
// TODO: this check could be stricter! need to filter when the block timestamp is appropriate for expiry and signature is valid
assert (!isDelegated(staker) || delegatedTo(staker) == operator, "delegateToBySignature bug?");
} else if (f.selector == sig:registerAsOperator(IDelegationManager.OperatorDetails, string).selector) {
IDelegationManager.OperatorDetails operatorDetails;
string metadataURI;
35 changes: 5 additions & 30 deletions docs/core/DelegationManager.md
Original file line number Diff line number Diff line change
@@ -112,7 +112,6 @@ Allows an Operator to emit an `OperatorMetadataURIUpdated` event. No other state
Stakers interact with the following functions to delegate their shares to an Operator:

* [`DelegationManager.delegateTo`](#delegateto)
* [`DelegationManager.delegateToBySignature`](#delegatetobysignature)

#### `delegateTo`

@@ -138,30 +137,6 @@ Allows the caller (a Staker) to delegate their shares to an Operator. Delegation
* The `operator` MUST already be an Operator
* If the `operator` has a `delegationApprover`, the caller MUST provide a valid `approverSignatureAndExpiry` and `approverSalt`

#### `delegateToBySignature`

```solidity
function delegateToBySignature(
address staker,
address operator,
SignatureWithExpiry memory stakerSignatureAndExpiry,
SignatureWithExpiry memory approverSignatureAndExpiry,
bytes32 approverSalt
)
external
```

Allows a Staker to delegate to an Operator by way of signature. This function can be called by three different parties:
* If the Operator calls this method, they need to submit only the `stakerSignatureAndExpiry`
* If the Operator's `delegationApprover` calls this method, they need to submit only the `stakerSignatureAndExpiry`
* If the anyone else calls this method, they need to submit both the `stakerSignatureAndExpiry` AND `approverSignatureAndExpiry`

*Effects*: See `delegateTo` above.

*Requirements*: See `delegateTo` above. Additionally:
* If caller is either the Operator's `delegationApprover` or the Operator, the `approverSignatureAndExpiry` and `approverSalt` can be empty
* `stakerSignatureAndExpiry` MUST be a valid, unexpired signature over the correct hash and nonce

---

### Undelegating and Withdrawing
@@ -275,9 +250,9 @@ For each strategy/share pair in the `Withdrawal`:

`Withdrawals` concerning `EigenPodManager` shares have some additional nuance depending on whether a withdrawal is specified to be received as tokens vs shares (read more about "why" in [`EigenPodManager.md`](./EigenPodManager.md)):
* `EigenPodManager` withdrawals received as shares:
* Shares ALWAYS go back to the originator of the withdrawal (rather than the `withdrawer` address).
* Shares are also delegated to the originator's Operator, rather than the `withdrawer's` Operator.
* Shares received by the originator may be lower than the shares originally withdrawn if the originator has debt.
* OwnedShares ALWAYS go back to the originator of the withdrawal (rather than the `withdrawer` address).
* OwnedShares are also delegated to the originator's Operator, rather than the `withdrawer's` Operator.
* OwnedShares received by the originator may be lower than the shares originally withdrawn if the originator has debt.
* `EigenPodManager` withdrawals received as tokens:
* Before the withdrawal can be completed, the originator needs to prove that a withdrawal occurred on the beacon chain (see [`EigenPod.verifyAndProcessWithdrawals`](./EigenPodManager.md#eigenpodverifyandprocesswithdrawals)).

@@ -288,10 +263,10 @@ For each strategy/share pair in the `Withdrawal`:
* See [`EigenPodManager.withdrawSharesAsTokens`](./EigenPodManager.md#eigenpodmanagerwithdrawsharesastokens)
* If `!receiveAsTokens`:
* For `StrategyManager` strategies:
* Shares are awarded to the `withdrawer` and delegated to the `withdrawer's` Operator
* OwnedShares are awarded to the `withdrawer` and delegated to the `withdrawer's` Operator
* See [`StrategyManager.addShares`](./StrategyManager.md#addshares)
* For the native beacon chain ETH strategy (`EigenPodManager`):
* Shares are awarded to `withdrawal.staker`, and delegated to the Staker's Operator
* OwnedShares are awarded to `withdrawal.staker`, and delegated to the Staker's Operator
* See [`EigenPodManager.addShares`](./EigenPodManager.md#eigenpodmanageraddshares)

*Requirements*:
2 changes: 1 addition & 1 deletion docs/core/EigenPod.md
Original file line number Diff line number Diff line change
@@ -150,7 +150,7 @@ Checkpoint proofs comprise the bulk of proofs submitted to an `EigenPod`. Comple
* when the pod has accumulated fees / partial withdrawals from validators
* whether any validators on the beacon chain have increased/decreased in balance

When a checkpoint is completed, shares are updated accordingly for each of these events. Shares can be withdrawn via the `DelegationManager` withdrawal queue (see [DelegationManager: Undelegating and Withdrawing](./DelegationManager.md#undelegating-and-withdrawing)), which means an `EigenPod's` checkpoint proofs also play an important role in allowing Pod Owners to exit funds from the system.
When a checkpoint is completed, shares are updated accordingly for each of these events. OwnedShares can be withdrawn via the `DelegationManager` withdrawal queue (see [DelegationManager: Undelegating and Withdrawing](./DelegationManager.md#undelegating-and-withdrawing)), which means an `EigenPod's` checkpoint proofs also play an important role in allowing Pod Owners to exit funds from the system.

_Important Notes:_
* `EigenPods` can only have **one active checkpoint** at a given time, and once started, checkpoints **cannot be cancelled** (only completed)
145 changes: 145 additions & 0 deletions docs/release/slashing/AVSDirectory.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# AVSDirectory

## Overview

The AVSDirectory contract is where registration relationships are defined between AVSs, operatorSets, and operators. Registration and deregistration are used in the protocol to activate and deactivate slashable stake allocations. They're also used to make the protocol more legible to external integrations.

The slashing release introduces the concept of operatorSets, which are simply an (address, uint32) pair that the define an AVS and an operator set ID. OperatorSets are used to group operators by different tasks and sets of tokens. For example, EigenDA has an ETH/LST operatorSet and an Eigen operatorSet. A bridge may have on operatorSet for all operators that serve a particular chain. Overall, operatorSets are mainly used for protocol legibility.

Functionality is provided for AVSs to migrate from an pre-operatorSet registration model to an operatorSet model. Direct to AVS registration is still supported for AVSs that have not migrated to the operatorSet model, but is slated to be deprecated soon in the future.

## `becomeOperatorSetAVS`
```solidity
/**
* @notice Sets the AVS as an operator set AVS, preventing legacy M2 operator registrations.
*
* @dev msg.sender must be the AVS.
*/
function becomeOperatorSetAVS() external;
```

AVSs call this to become an operator set AVS. Once an AVS becomes an operator set AVS, they can no longer register operators via the legacy M2 registration path. This is a seperate function to help avoid accidental migrations to the operator set AVS model.

## `createOperatorSets`
```solidity
/**
* @notice Called by an AVS to create a list of new operatorSets.
*
* @param operatorSetIds The IDs of the operator set to initialize.
*
* @dev msg.sender must be the AVS.
*/
function createOperatorSets(
uint32[] calldata operatorSetIds
) external;
```

AVSs use this function to create a list of new operator sets.They must call this function before they add any operators to the operator sets. The operator set IDs must be not already exist.

This can be called before the AVS becomes an operator set AVS. (TODO: we should make this so that it can only be called after the AVS becomes an operator set AVS?)

## `migrateOperatorsToOperatorSets`
```solidity
/**
* @notice Called by an AVS to migrate operators that have a legacy M2 registration to operator sets.
*
* @param operators The list of operators to migrate
* @param operatorSetIds The list of operatorSets to migrate the operators to
*
* @dev The msg.sender used is the AVS
* @dev The operator can only be migrated at most once per AVS
* @dev The AVS can no longer register operators via the legacy M2 registration path once it begins migration
* @dev The operator is deregistered from the M2 legacy AVS once migrated
*/
function migrateOperatorsToOperatorSets(
address[] calldata operators,
uint32[][] calldata operatorSetIds
) external;
```

AVSs that launched before the slashing release can use this function to migrate operators that have a legacy M2 registration to operator sets. Each operator can only be migrated once for the AVS and the AVS can no longer register operators via the legacy M2 registration path once it begins migration.

## `registerOperatorToOperatorSets`
```solidity
/**
* @notice Called by AVSs to add an operator to list of operatorSets.
*
* @param operator The address of the operator to be added to the operator set.
* @param operatorSetIds The IDs of the operator sets.
* @param operatorSignature The signature of the operator on their intent to register.
*
* @dev msg.sender is used as the AVS.
*/
function registerOperatorToOperatorSets(
address operator,
uint32[] calldata operatorSetIds,
ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature
) external;
```

AVSs use this function to add an operator to a list of operator sets. The operator's signature is required to confirm their intent to register. If the operator has a slashable stake allocation to the AVS, it takes effect when the operator is registered (and up to `DEALLOCATION_DELAY` seconds after the operator is deregistered).

The operator set must exist before the operator can be added to it and the AVS must be an operator set AVS.

## `deregisterOperatorFromOperatorSets`
```solidity
/**
* @notice Called by AVSs to remove an operator from an operator set.
*
* @param operator The address of the operator to be removed from the operator set.
* @param operatorSetIds The IDs of the operator sets.
*
* @dev msg.sender is used as the AVS.
*/
function deregisterOperatorFromOperatorSets(address operator, uint32[] calldata operatorSetIds) external;
```

AVSs use this function to remove an operator from an operator set. The operator is still slashable for its slashable stake allocation to the AVS until `DEALLOCATION_DELAY` seconds after the operator is deregistered.

The operator must be registered to the operator set before they can be deregistered from it.


## `forceDeregisterFromOperatorSets`
```solidity
/**
* @notice Called by an operator to deregister from an operator set
*
* @param operator The operator to deregister from the operatorSets.
* @param avs The address of the AVS to deregister the operator from.
* @param operatorSetIds The IDs of the operator sets.
* @param operatorSignature the signature of the operator on their intent to deregister or empty if the operator itself is calling
*
* @dev if the operatorSignature is empty, the caller must be the operator
* @dev this will likely only be called in case the AVS contracts are in a state that prevents operators from deregistering
*/
function forceDeregisterFromOperatorSets(
address operator,
address avs,
uint32[] calldata operatorSetIds,
ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature
) external;
```

Operators can use this function to deregister from an operator set without requiring the AVS to sign off on the deregistration. This function is intended to be used in cases where the AVS contracts are in a state that prevents operators from deregistering (either malicious or unintentional).

Operators can also deallocate their slashable stake allocation seperately to avoid slashing risk, so this function is mainly for external integrations to interpret the correct state of the protocol.

## `updateAVSMetadataURI`
```solidity
/**
* @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated.
*
* @param metadataURI The URI for metadata associated with an AVS.
*
* @dev Note that the `metadataURI` is *never stored* and is only emitted in the `AVSMetadataURIUpdated` event.
*/
function updateAVSMetadataURI(
string calldata metadataURI
) external;
```

This function allows an AVS to update the metadata URI associated with the AVS. The metadata URI is never stored on-chain and is only emitted in the `AVSMetadataURIUpdated` event.

## View Functions

See the [AVS Directory Inteface](../../../src/contracts/interfaces/IAVSDirectory.sol) for view functions.
169 changes: 169 additions & 0 deletions docs/release/slashing/AllocationManager.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
# AllocationManager

## Prerequisites

- [The Mechanics of Allocating and Slashing Unique Stake](https://forum.eigenlayer.xyz/t/the-mechanics-of-allocating-and-slashing-unique-stake/13870)

## Overview
The AllocationManager contract manages the allocation and reallocation of operators' slashable stake across various strategies and operator sets. It enforces allocation and deallocation delays and handles the slashing process initiated by AVSs.

## Parameterization

- `ALLOCATION_CONFIGURATION_DELAY`: The delay in seconds before allocations take effect.
- Mainnet: `21 days`. Very TBD
- Testnet: `1 hour`. Very TBD
- Public Devnet: `10 minutes`
- `DEALLOCATION_DELAY`: The delay in seconds before deallocations take effect.
- Mainnet: `17.5 days`. Slightly TBD
- Testnet: `3 days`. Very TBD
- Public Devnet: `1 days`

## `setAllocationDelay`

```solidity
/**
* @notice Called by operators or the delegation manager to set their allocation delay.
* @param operator The operator to set the delay on behalf of.
* @param delay The allocation delay in seconds.
*/
function setAllocationDelay(address operator, uint32 delay) external;
These functions allow operators to set their allocation delay. The first variant is called by the DelegationManager upon operator registration for all new operators created after the slashing release. The second variant is called by operators themselves to update their allocation delay or set it for the first time if they joined before the slashing release.
The allocation delay takes effect in `ALLOCATION_CONFIGURATION_DELAY` seconds.
The allocation delay can be any positive uint32.
The allocation delay's primary purpose is to give stakers delegated to an operator the chance to withdraw their stake before the operator can change the risk profile to something they're not comfortable with.
## `modifyAllocations`
```solidity
/**
* @notice struct used to modify the allocation of slashable magnitude to list of operatorSets
* @param strategy the strategy to allocate magnitude for
* @param expectedMaxMagnitude the expected max magnitude of the operator used to combat against race conditions with slashing
* @param operatorSets the operatorSets to allocate magnitude for
* @param magnitudes the magnitudes to allocate for each operatorSet
*/
struct MagnitudeAllocation {
IStrategy strategy;
uint64 expectedMaxMagnitude;
OperatorSet[] operatorSets;
uint64[] magnitudes;
}
/**
* @notice Modifies the propotions of slashable stake allocated to a list of operatorSets for a set of strategies
* @param allocations array of magnitude adjustments for multiple strategies and corresponding operator sets
* @dev Updates encumberedMagnitude for the updated strategies
* @dev msg.sender is used as operator
*/
function modifyAllocations(MagnitudeAllocation[] calldata allocations) external
```

This function is called by operators to adjust the proportions of their slashable stake allocated to different operator sets for different strategies.

The operator provides their expected max magnitude for each strategy they're adjusting the allocation for. This is used to combat race conditions with slashings for the strategy, which may result in larger than expected slashable proportions allocated to operator sets.

Each `(operator, operatorSet, strategy)` tuple can have at most 1 pending modification at a time. The function will revert is there is a pending modification for any of the tuples in the input.

The contract keeps track of the total magnitude in pending allocations, active allocations, and pending deallocations. This is called the **_encumbered magnitude_** for a strategy. The contract verifies that the allocations made in this call do not make the encumbered magnitude exceed the operator's max magnitude for the strategy. If the encumbered magnitude exceeds the max magnitude, the function reverts.

Any _allocations_ (i.e. increases in the proportion of slashable stake allocated to an AVS) take effect after the operator's allocation delay. The allocation delay must be set for the operator before they can call this function.

Any _deallocations_ (i.e. decreases in the proportion of slashable stake allocated to an AVS) take effect after `DEALLOCATION_DELAY` seconds. This enables AVSs enough time to update their view of stakes to the new proportions and have any tasks created against previous stakes to expire.

## `clearDeallocationQueue`

```solidity
/**
* @notice This function takes a list of strategies and adds all completable deallocations for each strategy,
* updating the encumberedMagnitude of the operator as needed.
*
* @param operator address to complete deallocations for
* @param strategies a list of strategies to complete deallocations for
* @param numToComplete a list of number of pending deallocations to complete for each strategy
*
* @dev can be called permissionlessly by anyone
*/
function clearDeallocationQueue(
address operator,
IStrategy[] calldata strategies,
uint16[] calldata numToComplete
) external;
```

This function is used to complete pending deallocations for a list of strategies for an operator. The function takes a list of strategies and the number of pending deallocations to complete for each strategy. For each strategy, the function completes pending deallocations if their effect timestamps have passed.

Completing a deallocation decreases the encumbered magnitude for the strategy, allowing them to make allocations with that magnitude. Encumbered magnitude must be decreased only upon completion because pending deallocations can be slashed before they are completable.

## `slashOperator`

```solidity
/**
* @notice Struct containing parameters to slashing
* @param operator the address to slash
* @param operatorSetId the ID of the operatorSet the operator is being slashed on behalf of
* @param strategies the set of strategies to slash
* @param wadToSlash the parts in 1e18 to slash, this will be proportional to the operator's
* slashable stake allocation for the operatorSet
* @param description the description of the slashing provided by the AVS for legibility
*/
struct SlashingParams {
address operator;
uint32 operatorSetId;
IStrategy[] strategies;
uint256 wadToSlash;
string description;
}
/**
* @notice Called by an AVS to slash an operator for given operatorSetId, list of strategies, and wadToSlash.
* For each given (operator, operatorSetId, strategy) tuple, bipsToSlash
* bips of the operatorSet's slashable stake allocation will be slashed
*
* @param operator the address to slash
* @param operatorSetId the ID of the operatorSet the operator is being slashed on behalf of
* @param strategies the set of strategies to slash
* @param wadToSlash the parts in 1e18 to slash, this will be proportional to the
* operator's slashable stake allocation for the operatorSet
* @param description the description of the slashing provided by the AVS for legibility
*/
function slashOperator(
SlashingParams calldata params
) external
```

This function is called by AVSs to slash an operator for a given operator set and list of strategies. The AVS provides the proportion of the operator's slashable stake allocation to slash for each strategy. The proportion is given in parts in 1e18 and is with respect to the operator's _current_ slashable stake allocation for the operator set (i.e. `wadsToSlash=5e17` means 50% of the operator's slashable stake allocation for the operator set will be slashed). The AVS also provides a description of the slashing for legibility by outside integrations.

Slashing is instant and irreversable. Slashed funds remain unrecoverable in the protocol but will be burned/redistributed in a future release. Slashing by one operatorSet does not effect the slashable stake allocation of other operatorSets for the same operator and strategy.

Slashing updates storage in a way that instantly updates all view functions to reflect the correct values.

## View Functions

### `getMinDelegatedAndSlashableOperatorSharesBefore`

```solidity
/**
* @notice returns the minimum operatorShares and the slashableOperatorShares for an operator, list of strategies,
* and an operatorSet before a given timestamp. This is used to get the shares to weight operators by given ones slashing window.
* @param operatorSet the operatorSet to get the shares for
* @param operators the operators to get the shares for
* @param strategies the strategies to get the shares for
* @param beforeTimestamp the timestamp to get the shares at
*/
function getMinDelegatedAndSlashableOperatorSharesBefore(
OperatorSet calldata operatorSet,
address[] calldata operators,
IStrategy[] calldata strategies,
uint32 beforeTimestamp
) external view returns (uint256[][] memory, uint256[][] memory)
```

This function returns the minimum operator shares and the slashable operator shares for an operator, list of strategies, and an operator set before a given timestamp. This is used by AVSs to pessimistically estimate the operator's slashable stake allocation for a given strategy and operator set within their slashability windows. If an AVS calls this function every week and creates tasks that are slashable for a week after they're created, then `beforeTimestamp` should be 2 weeks in the future to account for the latest task that may be created against stale stakes. More on this in new docs soon.

### Additional View Functions

See the [AllocationManager Interface](../../../src/contracts/interfaces/IAllocationManager.sol) for additional view functions.
32 changes: 16 additions & 16 deletions docs/storage-report/AVSDirectory.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|---------------------|------------------------------------------------------------------------------------------|------|--------|-------|--------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| _initializing | bool | 0 | 1 | 1 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| _owner | address | 51 | 0 | 20 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| _DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| avsOperatorStatus | mapping(address => mapping(address => enum IAVSDirectory.OperatorAVSRegistrationStatus)) | 152 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 153 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __gap | uint256[47] | 154 | 0 | 1504 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| _status | uint256 | 201 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| Name | Type | Slot | Offset | Bytes | Contract |
|-------------------------------|-----------------------------------------------------------------------------------------------|------|--------|-------|--------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| _initializing | bool | 0 | 1 | 1 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| _owner | address | 51 | 0 | 20 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __deprecated_pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __deprecated_DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| avsOperatorStatus | mapping(address => mapping(address => enum IAVSDirectoryTypes.OperatorAVSRegistrationStatus)) | 152 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 153 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __gap | uint256[41] | 154 | 0 | 1312 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| _status | uint256 | 195 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
| __gap | uint256[49] | 196 | 0 | 1568 | src/contracts/core/AVSDirectory.sol:AVSDirectory |
12 changes: 6 additions & 6 deletions docs/storage-report/AVSDirectoryStorage.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|---------------------|------------------------------------------------------------------------------------------|------|--------|-------|----------------------------------------------------------------|
| _DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage |
| avsOperatorStatus | mapping(address => mapping(address => enum IAVSDirectory.OperatorAVSRegistrationStatus)) | 1 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage |
| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 2 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage |
| __gap | uint256[47] | 3 | 0 | 1504 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage |
| Name | Type | Slot | Offset | Bytes | Contract |
|-------------------------------|-----------------------------------------------------------------------------------------------|------|--------|-------|----------------------------------------------------------------|
| __deprecated_DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage |
| avsOperatorStatus | mapping(address => mapping(address => enum IAVSDirectoryTypes.OperatorAVSRegistrationStatus)) | 1 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage |
| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 2 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage |
| __gap | uint256[41] | 3 | 0 | 1312 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage |
26 changes: 26 additions & 0 deletions docs/storage-report/AllocationManager.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|-----------------------------|------------------------------------------------------------------------------------------------------------------|------|--------|-------|------------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/AllocationManager.sol:AllocationManager |
| _initializing | bool | 0 | 1 | 1 | src/contracts/core/AllocationManager.sol:AllocationManager |
| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/AllocationManager.sol:AllocationManager |
| _owner | address | 51 | 0 | 20 | src/contracts/core/AllocationManager.sol:AllocationManager |
| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/AllocationManager.sol:AllocationManager |
| __deprecated_pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/AllocationManager.sol:AllocationManager |
| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/AllocationManager.sol:AllocationManager |
| _avsRegistrar | mapping(address => contract IAVSRegistrar) | 151 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| _operatorSets | mapping(address => struct EnumerableSet.UintSet) | 152 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| _operatorSetStrategies | mapping(bytes32 => struct EnumerableSet.AddressSet) | 153 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| _operatorSetMembers | mapping(bytes32 => struct EnumerableSet.AddressSet) | 154 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| _allocationDelayInfo | mapping(address => struct IAllocationManagerTypes.AllocationDelayInfo) | 155 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| registeredSets | mapping(address => struct EnumerableSet.Bytes32Set) | 156 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| allocatedSets | mapping(address => struct EnumerableSet.Bytes32Set) | 157 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| registrationStatus | mapping(address => mapping(bytes32 => struct IAllocationManagerTypes.RegistrationStatus)) | 158 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| allocatedStrategies | mapping(address => mapping(bytes32 => struct EnumerableSet.AddressSet)) | 159 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| allocations | mapping(address => mapping(bytes32 => mapping(contract IStrategy => struct IAllocationManagerTypes.Allocation))) | 160 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| _maxMagnitudeHistory | mapping(address => mapping(contract IStrategy => struct Snapshots.DefaultWadHistory)) | 161 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| encumberedMagnitude | mapping(address => mapping(contract IStrategy => uint64)) | 162 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| deallocationQueue | mapping(address => mapping(contract IStrategy => struct DoubleEndedQueue.Bytes32Deque)) | 163 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| __gap | uint256[37] | 164 | 0 | 1184 | src/contracts/core/AllocationManager.sol:AllocationManager |
| _status | uint256 | 201 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager |
| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/core/AllocationManager.sol:AllocationManager |
16 changes: 16 additions & 0 deletions docs/storage-report/AllocationManagerStorage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|------------------------|------------------------------------------------------------------------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------|
| _avsRegistrar | mapping(address => contract IAVSRegistrar) | 0 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| _operatorSets | mapping(address => struct EnumerableSet.UintSet) | 1 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| _operatorSetStrategies | mapping(bytes32 => struct EnumerableSet.AddressSet) | 2 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| _operatorSetMembers | mapping(bytes32 => struct EnumerableSet.AddressSet) | 3 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| _allocationDelayInfo | mapping(address => struct IAllocationManagerTypes.AllocationDelayInfo) | 4 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| registeredSets | mapping(address => struct EnumerableSet.Bytes32Set) | 5 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| allocatedSets | mapping(address => struct EnumerableSet.Bytes32Set) | 6 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| registrationStatus | mapping(address => mapping(bytes32 => struct IAllocationManagerTypes.RegistrationStatus)) | 7 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| allocatedStrategies | mapping(address => mapping(bytes32 => struct EnumerableSet.AddressSet)) | 8 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| allocations | mapping(address => mapping(bytes32 => mapping(contract IStrategy => struct IAllocationManagerTypes.Allocation))) | 9 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| _maxMagnitudeHistory | mapping(address => mapping(contract IStrategy => struct Snapshots.DefaultWadHistory)) | 10 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| encumberedMagnitude | mapping(address => mapping(contract IStrategy => uint64)) | 11 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| deallocationQueue | mapping(address => mapping(contract IStrategy => struct DoubleEndedQueue.Bytes32Deque)) | 12 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
| __gap | uint256[37] | 13 | 0 | 1184 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage |
52 changes: 28 additions & 24 deletions docs/storage-report/DelegationManager.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,28 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|-------------------------------|---------------------------------------------------------------|------|--------|-------|------------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _initializing | bool | 0 | 1 | 1 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _owner | address | 51 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/DelegationManager.sol:DelegationManager |
| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| operatorShares | mapping(address => mapping(contract IStrategy => uint256)) | 152 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _operatorDetails | mapping(address => struct IDelegationManager.OperatorDetails) | 153 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| delegatedTo | mapping(address => address) | 154 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| stakerNonce | mapping(address => uint256) | 155 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| delegationApproverSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 156 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| minWithdrawalDelayBlocks | uint256 | 157 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| pendingWithdrawals | mapping(bytes32 => bool) | 158 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| cumulativeWithdrawalsQueued | mapping(address => uint256) | 159 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __deprecated_stakeRegistry | address | 160 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager |
| strategyWithdrawalDelayBlocks | mapping(contract IStrategy => uint256) | 161 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __gap | uint256[39] | 162 | 0 | 1248 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _status | uint256 | 201 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/core/DelegationManager.sol:DelegationManager |
| Name | Type | Slot | Offset | Bytes | Contract |
|--------------------------------------------|----------------------------------------------------------------------------------------|------|--------|-------|------------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _initializing | bool | 0 | 1 | 1 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _owner | address | 51 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __deprecated_pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __deprecated_DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| operatorShares | mapping(address => mapping(contract IStrategy => uint256)) | 152 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _operatorDetails | mapping(address => struct IDelegationManagerTypes.OperatorDetails) | 153 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| delegatedTo | mapping(address => address) | 154 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __deprecated_stakerNonce | mapping(address => uint256) | 155 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| delegationApproverSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 156 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __deprecated_minWithdrawalDelayBlocks | uint256 | 157 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| pendingWithdrawals | mapping(bytes32 => bool) | 158 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| cumulativeWithdrawalsQueued | mapping(address => uint256) | 159 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __deprecated_stakeRegistry | address | 160 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __deprecated_strategyWithdrawalDelayBlocks | mapping(contract IStrategy => uint256) | 161 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _depositScalingFactor | mapping(address => mapping(contract IStrategy => struct DepositScalingFactor)) | 162 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _stakerQueuedWithdrawalRoots | mapping(address => struct EnumerableSet.Bytes32Set) | 163 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| queuedWithdrawals | mapping(bytes32 => struct IDelegationManagerTypes.Withdrawal) | 164 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _cumulativeScaledSharesHistory | mapping(address => mapping(contract IStrategy => struct Snapshots.DefaultZeroHistory)) | 165 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __gap | uint256[35] | 166 | 0 | 1120 | src/contracts/core/DelegationManager.sol:DelegationManager |
| _status | uint256 | 201 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager |
| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/core/DelegationManager.sol:DelegationManager |
32 changes: 18 additions & 14 deletions docs/storage-report/DelegationManagerStorage.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|-------------------------------|---------------------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------|
| _DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| operatorShares | mapping(address => mapping(contract IStrategy => uint256)) | 1 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| _operatorDetails | mapping(address => struct IDelegationManager.OperatorDetails) | 2 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| delegatedTo | mapping(address => address) | 3 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| stakerNonce | mapping(address => uint256) | 4 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| delegationApproverSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 5 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| minWithdrawalDelayBlocks | uint256 | 6 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| pendingWithdrawals | mapping(bytes32 => bool) | 7 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| cumulativeWithdrawalsQueued | mapping(address => uint256) | 8 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| __deprecated_stakeRegistry | address | 9 | 0 | 20 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| strategyWithdrawalDelayBlocks | mapping(contract IStrategy => uint256) | 10 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| __gap | uint256[39] | 11 | 0 | 1248 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| Name | Type | Slot | Offset | Bytes | Contract |
|--------------------------------------------|----------------------------------------------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------|
| __deprecated_DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| operatorShares | mapping(address => mapping(contract IStrategy => uint256)) | 1 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| _operatorDetails | mapping(address => struct IDelegationManagerTypes.OperatorDetails) | 2 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| delegatedTo | mapping(address => address) | 3 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| __deprecated_stakerNonce | mapping(address => uint256) | 4 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| delegationApproverSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 5 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| __deprecated_minWithdrawalDelayBlocks | uint256 | 6 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| pendingWithdrawals | mapping(bytes32 => bool) | 7 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| cumulativeWithdrawalsQueued | mapping(address => uint256) | 8 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| __deprecated_stakeRegistry | address | 9 | 0 | 20 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| __deprecated_strategyWithdrawalDelayBlocks | mapping(contract IStrategy => uint256) | 10 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| _depositScalingFactor | mapping(address => mapping(contract IStrategy => struct DepositScalingFactor)) | 11 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| _stakerQueuedWithdrawalRoots | mapping(address => struct EnumerableSet.Bytes32Set) | 12 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| queuedWithdrawals | mapping(bytes32 => struct IDelegationManagerTypes.Withdrawal) | 13 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| _cumulativeScaledSharesHistory | mapping(address => mapping(contract IStrategy => struct Snapshots.DefaultZeroHistory)) | 14 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
| __gap | uint256[35] | 15 | 0 | 1120 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage |
42 changes: 21 additions & 21 deletions docs/storage-report/EigenPod.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|-------------------------------------------------|----------------------------------------------------|------|--------|-------|------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/pods/EigenPod.sol:EigenPod |
| _initializing | bool | 0 | 1 | 1 | src/contracts/pods/EigenPod.sol:EigenPod |
| _status | uint256 | 1 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| __gap | uint256[49] | 2 | 0 | 1568 | src/contracts/pods/EigenPod.sol:EigenPod |
| podOwner | address | 51 | 0 | 20 | src/contracts/pods/EigenPod.sol:EigenPod |
| __deprecated_mostRecentWithdrawalTimestamp | uint64 | 51 | 20 | 8 | src/contracts/pods/EigenPod.sol:EigenPod |
| withdrawableRestakedExecutionLayerGwei | uint64 | 52 | 0 | 8 | src/contracts/pods/EigenPod.sol:EigenPod |
| __deprecated_hasRestaked | bool | 52 | 8 | 1 | src/contracts/pods/EigenPod.sol:EigenPod |
| __deprecated_provenWithdrawal | mapping(bytes32 => mapping(uint64 => bool)) | 53 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| _validatorPubkeyHashToInfo | mapping(bytes32 => struct IEigenPod.ValidatorInfo) | 54 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| __deprecated_nonBeaconChainETHBalanceWei | uint256 | 55 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| __deprecated_sumOfPartialWithdrawalsClaimedGwei | uint64 | 56 | 0 | 8 | src/contracts/pods/EigenPod.sol:EigenPod |
| activeValidatorCount | uint256 | 57 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| lastCheckpointTimestamp | uint64 | 58 | 0 | 8 | src/contracts/pods/EigenPod.sol:EigenPod |
| currentCheckpointTimestamp | uint64 | 58 | 8 | 8 | src/contracts/pods/EigenPod.sol:EigenPod |
| checkpointBalanceExitedGwei | mapping(uint64 => uint64) | 59 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| _currentCheckpoint | struct IEigenPod.Checkpoint | 60 | 0 | 64 | src/contracts/pods/EigenPod.sol:EigenPod |
| proofSubmitter | address | 62 | 0 | 20 | src/contracts/pods/EigenPod.sol:EigenPod |
| __gap | uint256[36] | 63 | 0 | 1152 | src/contracts/pods/EigenPod.sol:EigenPod |
| Name | Type | Slot | Offset | Bytes | Contract |
|-------------------------------------------------|---------------------------------------------------------|------|--------|-------|------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/pods/EigenPod.sol:EigenPod |
| _initializing | bool | 0 | 1 | 1 | src/contracts/pods/EigenPod.sol:EigenPod |
| _status | uint256 | 1 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| __gap | uint256[49] | 2 | 0 | 1568 | src/contracts/pods/EigenPod.sol:EigenPod |
| podOwner | address | 51 | 0 | 20 | src/contracts/pods/EigenPod.sol:EigenPod |
| __deprecated_mostRecentWithdrawalTimestamp | uint64 | 51 | 20 | 8 | src/contracts/pods/EigenPod.sol:EigenPod |
| restakedExecutionLayerGwei | uint64 | 52 | 0 | 8 | src/contracts/pods/EigenPod.sol:EigenPod |
| __deprecated_hasRestaked | bool | 52 | 8 | 1 | src/contracts/pods/EigenPod.sol:EigenPod |
| __deprecated_provenWithdrawal | mapping(bytes32 => mapping(uint64 => bool)) | 53 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| _validatorPubkeyHashToInfo | mapping(bytes32 => struct IEigenPodTypes.ValidatorInfo) | 54 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| __deprecated_nonBeaconChainETHBalanceWei | uint256 | 55 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| __deprecated_sumOfPartialWithdrawalsClaimedGwei | uint64 | 56 | 0 | 8 | src/contracts/pods/EigenPod.sol:EigenPod |
| activeValidatorCount | uint256 | 57 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| lastCheckpointTimestamp | uint64 | 58 | 0 | 8 | src/contracts/pods/EigenPod.sol:EigenPod |
| currentCheckpointTimestamp | uint64 | 58 | 8 | 8 | src/contracts/pods/EigenPod.sol:EigenPod |
| checkpointBalanceExitedGwei | mapping(uint64 => uint64) | 59 | 0 | 32 | src/contracts/pods/EigenPod.sol:EigenPod |
| _currentCheckpoint | struct IEigenPodTypes.Checkpoint | 60 | 0 | 64 | src/contracts/pods/EigenPod.sol:EigenPod |
| proofSubmitter | address | 62 | 0 | 20 | src/contracts/pods/EigenPod.sol:EigenPod |
| __gap | uint256[35] | 63 | 0 | 1120 | src/contracts/pods/EigenPod.sol:EigenPod |
39 changes: 20 additions & 19 deletions docs/storage-report/EigenPodManager.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|---------------------------------|----------------------------------------|------|--------|-------|--------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| _initializing | bool | 0 | 1 | 1 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| _owner | address | 51 | 0 | 20 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| _paused | uint256 | 102 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __deprecated_beaconChainOracle | address | 151 | 0 | 20 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| ownerToPod | mapping(address => contract IEigenPod) | 152 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| numPods | uint256 | 153 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __deprecated_maxPods | uint256 | 154 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| podOwnerShares | mapping(address => int256) | 155 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __deprecated_denebForkTimestamp | uint64 | 156 | 0 | 8 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __gap | uint256[44] | 157 | 0 | 1408 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| _status | uint256 | 201 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| Name | Type | Slot | Offset | Bytes | Contract |
|---------------------------------|----------------------------------------------------------------------------|------|--------|-------|--------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| _initializing | bool | 0 | 1 | 1 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| _owner | address | 51 | 0 | 20 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __deprecated_pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| _paused | uint256 | 102 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __deprecated_beaconChainOracle | address | 151 | 0 | 20 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| ownerToPod | mapping(address => contract IEigenPod) | 152 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| numPods | uint256 | 153 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __deprecated_maxPods | uint256 | 154 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| podOwnerDepositShares | mapping(address => int256) | 155 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __deprecated_denebForkTimestamp | uint64 | 156 | 0 | 8 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| _beaconChainSlashingFactor | mapping(address => struct IEigenPodManagerTypes.BeaconChainSlashingFactor) | 157 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __gap | uint256[43] | 158 | 0 | 1376 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| _status | uint256 | 201 | 0 | 32 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/pods/EigenPodManager.sol:EigenPodManager |
19 changes: 10 additions & 9 deletions docs/storage-report/EigenPodManagerStorage.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|---------------------------------|----------------------------------------|------|--------|-------|----------------------------------------------------------------------|
| __deprecated_beaconChainOracle | address | 0 | 0 | 20 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| ownerToPod | mapping(address => contract IEigenPod) | 1 | 0 | 32 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| numPods | uint256 | 2 | 0 | 32 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| __deprecated_maxPods | uint256 | 3 | 0 | 32 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| podOwnerShares | mapping(address => int256) | 4 | 0 | 32 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| __deprecated_denebForkTimestamp | uint64 | 5 | 0 | 8 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| __gap | uint256[44] | 6 | 0 | 1408 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| Name | Type | Slot | Offset | Bytes | Contract |
|---------------------------------|----------------------------------------------------------------------------|------|--------|-------|----------------------------------------------------------------------|
| __deprecated_beaconChainOracle | address | 0 | 0 | 20 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| ownerToPod | mapping(address => contract IEigenPod) | 1 | 0 | 32 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| numPods | uint256 | 2 | 0 | 32 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| __deprecated_maxPods | uint256 | 3 | 0 | 32 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| podOwnerDepositShares | mapping(address => int256) | 4 | 0 | 32 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| __deprecated_denebForkTimestamp | uint64 | 5 | 0 | 8 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| _beaconChainSlashingFactor | mapping(address => struct IEigenPodManagerTypes.BeaconChainSlashingFactor) | 6 | 0 | 32 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
| __gap | uint256[43] | 7 | 0 | 1376 | src/contracts/pods/EigenPodManagerStorage.sol:EigenPodManagerStorage |
34 changes: 17 additions & 17 deletions docs/storage-report/EigenPodStorage.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|-------------------------------------------------|----------------------------------------------------|------|--------|-------|--------------------------------------------------------|
| podOwner | address | 0 | 0 | 20 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __deprecated_mostRecentWithdrawalTimestamp | uint64 | 0 | 20 | 8 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| withdrawableRestakedExecutionLayerGwei | uint64 | 1 | 0 | 8 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __deprecated_hasRestaked | bool | 1 | 8 | 1 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __deprecated_provenWithdrawal | mapping(bytes32 => mapping(uint64 => bool)) | 2 | 0 | 32 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| _validatorPubkeyHashToInfo | mapping(bytes32 => struct IEigenPod.ValidatorInfo) | 3 | 0 | 32 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __deprecated_nonBeaconChainETHBalanceWei | uint256 | 4 | 0 | 32 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __deprecated_sumOfPartialWithdrawalsClaimedGwei | uint64 | 5 | 0 | 8 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| activeValidatorCount | uint256 | 6 | 0 | 32 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| lastCheckpointTimestamp | uint64 | 7 | 0 | 8 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| currentCheckpointTimestamp | uint64 | 7 | 8 | 8 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| checkpointBalanceExitedGwei | mapping(uint64 => uint64) | 8 | 0 | 32 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| _currentCheckpoint | struct IEigenPod.Checkpoint | 9 | 0 | 64 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| proofSubmitter | address | 11 | 0 | 20 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __gap | uint256[36] | 12 | 0 | 1152 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| Name | Type | Slot | Offset | Bytes | Contract |
|-------------------------------------------------|---------------------------------------------------------|------|--------|-------|--------------------------------------------------------|
| podOwner | address | 0 | 0 | 20 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __deprecated_mostRecentWithdrawalTimestamp | uint64 | 0 | 20 | 8 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| restakedExecutionLayerGwei | uint64 | 1 | 0 | 8 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __deprecated_hasRestaked | bool | 1 | 8 | 1 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __deprecated_provenWithdrawal | mapping(bytes32 => mapping(uint64 => bool)) | 2 | 0 | 32 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| _validatorPubkeyHashToInfo | mapping(bytes32 => struct IEigenPodTypes.ValidatorInfo) | 3 | 0 | 32 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __deprecated_nonBeaconChainETHBalanceWei | uint256 | 4 | 0 | 32 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __deprecated_sumOfPartialWithdrawalsClaimedGwei | uint64 | 5 | 0 | 8 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| activeValidatorCount | uint256 | 6 | 0 | 32 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| lastCheckpointTimestamp | uint64 | 7 | 0 | 8 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| currentCheckpointTimestamp | uint64 | 7 | 8 | 8 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| checkpointBalanceExitedGwei | mapping(uint64 => uint64) | 8 | 0 | 32 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| _currentCheckpoint | struct IEigenPodTypes.Checkpoint | 9 | 0 | 64 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| proofSubmitter | address | 11 | 0 | 20 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
| __gap | uint256[35] | 12 | 0 | 1120 | src/contracts/pods/EigenPodStorage.sol:EigenPodStorage |
24 changes: 12 additions & 12 deletions docs/storage-report/EigenStrategy.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|-----------------|--------------------------|------|--------|-------|----------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| _initializing | bool | 0 | 1 | 1 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| pauserRegistry | contract IPauserRegistry | 0 | 2 | 20 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| _paused | uint256 | 1 | 0 | 32 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| __gap | uint256[48] | 2 | 0 | 1536 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| underlyingToken | contract IERC20 | 50 | 0 | 20 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| totalShares | uint256 | 51 | 0 | 32 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| __gap | uint256[48] | 52 | 0 | 1536 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| EIGEN | contract IEigen | 100 | 0 | 20 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| __gap | uint256[49] | 101 | 0 | 1568 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| Name | Type | Slot | Offset | Bytes | Contract |
|-----------------------------|--------------------------|------|--------|-------|----------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| _initializing | bool | 0 | 1 | 1 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| __deprecated_pauserRegistry | contract IPauserRegistry | 0 | 2 | 20 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| _paused | uint256 | 1 | 0 | 32 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| __gap | uint256[48] | 2 | 0 | 1536 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| underlyingToken | contract IERC20 | 50 | 0 | 20 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| totalShares | uint256 | 51 | 0 | 32 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| __gap | uint256[48] | 52 | 0 | 1536 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| EIGEN | contract IEigen | 100 | 0 | 20 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
| __gap | uint256[49] | 101 | 0 | 1568 | src/contracts/strategies/EigenStrategy.sol:EigenStrategy |
10 changes: 5 additions & 5 deletions docs/storage-report/Pausable.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|----------------|--------------------------|------|--------|-------|-------------------------------------------------|
| pauserRegistry | contract IPauserRegistry | 0 | 0 | 20 | src/contracts/permissions/Pausable.sol:Pausable |
| _paused | uint256 | 1 | 0 | 32 | src/contracts/permissions/Pausable.sol:Pausable |
| __gap | uint256[48] | 2 | 0 | 1536 | src/contracts/permissions/Pausable.sol:Pausable |
| Name | Type | Slot | Offset | Bytes | Contract |
|-----------------------------|--------------------------|------|--------|-------|-------------------------------------------------|
| __deprecated_pauserRegistry | contract IPauserRegistry | 0 | 0 | 20 | src/contracts/permissions/Pausable.sol:Pausable |
| _paused | uint256 | 1 | 0 | 32 | src/contracts/permissions/Pausable.sol:Pausable |
| __gap | uint256[48] | 2 | 0 | 1536 | src/contracts/permissions/Pausable.sol:Pausable |
6 changes: 6 additions & 0 deletions docs/storage-report/PermissionController.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|---------------|---------------------------------------------------------------------------|------|--------|-------|-------------------------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | src/contracts/permissions/PermissionController.sol:PermissionController |
| _initializing | bool | 0 | 1 | 1 | src/contracts/permissions/PermissionController.sol:PermissionController |
| _permissions | mapping(address => struct PermissionControllerStorage.AccountPermissions) | 1 | 0 | 32 | src/contracts/permissions/PermissionController.sol:PermissionController |
| __gap | uint256[49] | 2 | 0 | 1568 | src/contracts/permissions/PermissionController.sol:PermissionController |
2 changes: 2 additions & 0 deletions docs/storage-report/PermissionControllerMixin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|------|------|------|--------|-------|----------|
4 changes: 4 additions & 0 deletions docs/storage-report/PermissionControllerStorage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
| Name | Type | Slot | Offset | Bytes | Contract |
|--------------|---------------------------------------------------------------------------|------|--------|-------|---------------------------------------------------------------------------------------|
| _permissions | mapping(address => struct PermissionControllerStorage.AccountPermissions) | 0 | 0 | 32 | src/contracts/permissions/PermissionControllerStorage.sol:PermissionControllerStorage |
| __gap | uint256[49] | 1 | 0 | 1568 | src/contracts/permissions/PermissionControllerStorage.sol:PermissionControllerStorage |
Loading