Skip to content

Commit 11b0061

Browse files
stevennevinsgpsanantshrimalmadhurnadir-akhtar0xClandestine
authored
feat: slashing release (#311)
* Update LICENSE (#285) * chore: upgrade core to target operator set release * chore: update mock contracts with latest interfaces (#293) * chore: update mock contracts with latest interfaces * chore: bump to latest operator set release commits * chore: fixes for depedency bump * feat: operator set migration-1-migration (#286) * chore: checkout migration branch * feat: implement migration function * chore: update to release branch * feat: operator set creation for each quorum number * feat: migration with merge sorted array of operators and their quorums * feat: operator set migration working * chore: revert change from testing * chore: revert change from testing * chore: remove extra logging and commented out asserts * chore: remove unused file * fix: remove console logs * refactor: to view functions * chore: nit and remove unneeded function * fix: remove duplication of looping for all the operators * chore: remove comment * feat: allow migrating in two transactions * feat: finalization of migration * chore: use string errors and fix migration issues * chore: rename * feat: use library for merge sort * test: fuzz view function * feat: operator set migration-2-create quorum (#287) * chore: checkout migration branch * feat: implement migration function * chore: update to release branch * feat: operator set creation for each quorum number * feat: migration with merge sorted array of operators and their quorums * feat: operator set migration working * chore: revert change from testing * chore: revert change from testing * chore: remove extra logging and commented out asserts * chore: remove unused file * fix: remove console logs * feat: create quorum post operator set migration * test(wip): create quorum test adds new operator set * test: migration create quorum * refactor: to view functions * chore: nit and remove unneeded function * fix: remove duplication of looping for all the operators * chore: remove comment * feat: allow migrating in two transactions * feat: finalization of migration * chore: use string errors and fix migration issues * chore: rename * feat: use library for merge sort * test: fuzz view function * fix: updates from merge * chore: use interface * chore: bump operator set release dependency in core * chore: updates from dependency bump * feat: add natspec * docs: add natspec * feat: add checks operator was registered for quorums when migrating * fix: resolve code size issue in RegistryCoordinator * chore: update to latest core (#299) * chore: update to latest eigenlayer-contracts feat/operator-set-release * chore: add method to mock * feat(op sets): update stakes when forceUnregister (#300) * feat: update stakes handle direct deregistration on AVSDirectory * test: update stake for quorum if operator directly unregistered from the AVSDirectory * chore: simplify setup * chore: simplify setup * chore: make service manager immutable on stakeRegistry * feat(op sets): register and deregister (#301) * feat: register and deregister to operator sets * fix: bytecode wrangling * chore: shorter errors to reduce bytecode * test: register after migration * chore: remove stale todos * chore: add back commented line * chore: remain consistent with m2 events * fix: side effect of merge from _deregister function * fix: bytecode massaging * chore: rename for clarity * chore: remove comments and whitespace * docs: add natspec to the library * feat(op sets): upgrade and migrate script (#303) * feat: upgrade and test pre prod upgrade and migration * fix: add param introduced in merge * chore: bump slashing core dependency (#312) * chore: bump to slashing branch * chore: bump compiler version * fix: dep interface changes * fix: compiler errors from interface changes and type changes * fix: compiler errors * chore: bump dependencies * chore: bump core dependency and resolve issues * chore: bump core dependency and fix compiler errors * feat: integrate AllocationManager * feat: add a slashing permission to the service manager * chore: remove unneeded casting * feat: implement a slasher permission and forward call to AllocationManager * feat: add simiple slasher starting point * chore: bump slashing magnitudes * chore: bump core slashing-magnitudes branch * feat: slasher templates / examples (#310) * chore: bump to slashing branch * chore: bump compiler version * fix: dep interface changes * fix: compiler errors from interface changes and type changes * fix: compiler errors * chore: bump dependencies * chore: bump core dependency and resolve issues * chore: bump core dependency and fix compiler errors * feat: integrate AllocationManager * feat: add a slashing permission to the service manager * chore: remove unneeded casting * feat: implement a slasher permission and forward call to AllocationManager * feat: add simiple slasher starting point * feat: slashers * chore: change around slashed event * fix: call dm * feat: add proposal mechanism for updating slasher * fix: set to completed instead of delete * chore: use struct instead of params directly * chore: clean up params more * chore: simplify and organize files * chore: cleanup logic and couple event with internal func * fix: pass correct params * chore: organize and add interface * chore: nits * chore: cleanup more nits * fix: storage gap * chore: nits refactor * chore: go back to fulfill being onlySlasher * test: fixes from core updates * fix: use delegated stake per operator set instead of per AVS * fix: update to 14 days * feat: configurable lookahead and stake type * chore: remove unused test util contracts (#319) * feat: remove both option * chore: remove unused test util contracts * chore: remove diff * feat: remove both option * fix: storage gap remove one slot (#320) * feat: track total slashable stake and total delegated stake per quorum (#317) * feat: remove both option * feat: total delegated stake and total slashable stake per quorum config * test: resolve some breaking changes to tests * chore: move stake type to file level definition * chore: refactor loop * test: add unit test for slashble stake quorum init * test: assert on state and event * test: delegated stake quorum and assertions * fix: use libraries with only internal vis (#324) * fix: revert making library function vis external * fix: signature checker internal * feat: avs registrar registration flow changes (#318) * feat: remove both option * feat: total delegated stake and total slashable stake per quorum config * test: resolve some breaking changes to tests * chore: bump core dependency * chore: bump dependency * chore: bump to latest slashing mags * fix: creation of registry coordinator * test: wip * feat: integrate registrar interfaces * test: add function to delegation mock to set operator status * test: additional test case * chore: bumping core dep and adding UAM (#325) * test: use permission controller mock * chore: label fuzz tests * test: various fixes from config changes * chore: remove comment * test: fix permission controlled functions * test: fix config issue in integration tests * test: fix avs directory initialize * feat: wip prevent m2 registration flows after migration * feat: registration changes part 2 * chore: add note * fix: remove handling of forceDeregistration * fix: fix total delegated stake usage * fix: integration tests * test: fix remaining integration tests * test: add back log check * test: add additional tests for transition to operator sets * test: add more test cases * feat: record m2 quorums on migration * chore: add note about churn support * fix: prevent operator set registration changes for m2 quorums * feat: require strings * chore: add dev note and add require string * chore: bump dependency for slashing mags updates (#329) * fix: internal slashing security review (#332) * docs: match file and library name, and add docstrings * docs: update error strings to match function * style: forge fmt + moving variables around + fixing error strings * fix: enforce max quorum count for EjectionManager * style: more error string fixes + formatting * fix: correctly set StakeRegistryStorage gap * style: more error string corrections + typos * fix: revert cases * chore: bump core dependency to pull in latest updates * fix: slashing review fixes (#333) * fix: withdrawal delay check * fix: add operator set strategies (#334) * fix: remove registerOperatorToOperatorSet interface function * fix: update interface functions with alm interface * fix: operator set strategies in ALM * chore: remove todo * fix: add strategies by stake registry * fix: params for deregister * chore: remove old migration functions * chore: check quorum exists before setting params * fix: deregister flow for operator set quorums * test: fix test for DM withdrawal delay blocks * chore: update all pragmas to 0.8.27 (#336) * feat: custom require errors for registry coordinator (#337) * feat: custom require errors for registry coordinator * ci: update the ci to use the correct compiler settings * chore: bump core dependency * chore: bump forge-std * docs: update readme with note on slashing (#341) * chore: bump core fix iface changes (#352) * chore: bump dep * fix: iface changes and param names * feat: ci storage reports (#347) * feat: storage reports * fix: storage report * fix: storage report * fix: ci * fix: ci * fix: ci * fix: ci * fix: ci * fix: prevent calling enable operator sets twice and use internal function for checkALM * chore: address review comments * refactor: custom errors in middleware (#355) * refactor: custom errors * fix: unit tests * chore: review remove setStakeType * fix: wire up stake registry to call add and rm strategies for op set * refactor: slashing UAM (#357) * refactor: uam * feat: add uam interfaces * fix: lookahead period to blocks * fix: tests * chore: storage report * feat: ci forge coverage (#349) * feat: ci forge coverage * fix: ci * feat: add forge fmt to ci (#363) * feat: ci forge fmt * chore: forge fmt * feat: add register with churn type (#360) * feat: add register with churn type * fix: tests for encoded registration type * feat: add ejector support for operator sets * refactor: handle operator set dereg * fix: dereg on churn from ALM if needed * refactor: slashing registry coordinator (#361) * refactor: slashing registry coordinator refactor: registry coordinator refactor: remove sm calls fix: tests wip * fix: integration tests * refactor: internal functions * fix: remove unused block * fix: comment out test for now * build: fmt check run only on src contracts * fix: call SM only based on m2 quorums (#369) * feat: update enableOperatorSets flow (#367) * feat: update enableOperatorSets flow * fix: dereg op check * chore: renamed m2 quorums * fix: msg.sender -> operator * chore: forge fmt * fix: tests --------- Co-authored-by: Yash Patil <[email protected]> * fix: commented out view (#373) * refactor: natspec + interface changes (#364) * refactor: natspec + interfaces refactor: natspec + interfaces refactor: natspec + interfaces docs: `RegistryCoordinator` natspec chore: forge fmt refactor: named mapping params docs: natspec `BLSApkRegistry` docs: natspec `BLSApkRegistry` docs: natspec `BLSApkRegistry` refactor: interface structure refactor: separate `BLSSignatureChecker` storage refactor: rename -> `IECDSAStakeRegistry` docs: natspec docs: natspec `ECDSAStakeRegistry` docs: natspec `EjectionManager` + separate storage docs: natspec docs: natspec `IndexRegistry` refactor: remove `IRegistry` chore: forge fmt chore: make storage-report docs: natspec refactor: remove `ISocketUpdater` refactor: use refactor: remove todo refactor: `///` -> `/**` refactor: improve comment refactor: rename var refactor: improve comment * fix: compiling - tests failing * refactor: test passing **mostly** * refactor: add missing gap * refactor: natspec * fix: test - state changes moved out of internal * chore: forge fmt * refactor: reorganize errors * refactor: remove override * refactor: note avsd * Yash/natspec - address comments (#372) * feat: natpsec with inheritance * feat: storage * chore: format * chore: fmt * chore: format * fix: test * fix: test --------- Co-authored-by: Michael Sun <[email protected]> Co-authored-by: Yash Patil <[email protected]> * chore: forge fmt * feat: storage gap on socket registry * chore: remove unused storage; update bindings * chore: nuke storage report script for now on ci --------- Co-authored-by: Gautham Anant <[email protected]> Co-authored-by: Madhur Shrimal <[email protected]> Co-authored-by: Nadir Akhtar <[email protected]> Co-authored-by: clandestine.eth <[email protected]> Co-authored-by: Michael Sun <[email protected]> Co-authored-by: Yash Patil <[email protected]> Co-authored-by: Michael Sun <[email protected]>
1 parent 2475ab8 commit 11b0061

File tree

165 files changed

+15997
-7873
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

165 files changed

+15997
-7873
lines changed

.github/workflows/forge-coverage.yml

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
name: Coverage
2+
3+
on:
4+
push:
5+
workflow_dispatch: {}
6+
7+
jobs:
8+
run-coverage:
9+
name: CI
10+
runs-on: ubuntu-latest
11+
strategy:
12+
fail-fast: false
13+
14+
steps:
15+
- name: Checkout code
16+
uses: actions/checkout@v2
17+
18+
- name: Load issue number
19+
uses: actions/github-script@v6
20+
id: get_issue_number
21+
with:
22+
script: |
23+
const pullRequests = await github.rest.repos.listPullRequestsAssociatedWithCommit({
24+
commit_sha: context.sha,
25+
owner: context.repo.owner,
26+
repo: context.repo.repo,
27+
});
28+
29+
if (pullRequests.data.length > 0) {
30+
return pullRequests.data[0].number;
31+
} else {
32+
throw new Error('No associated pull request found.');
33+
}
34+
result-encoding: string
35+
36+
- name: Install dependencies
37+
run: |
38+
sudo apt-get install lcov
39+
id: lcov
40+
41+
- name: Install Foundry
42+
uses: foundry-rs/foundry-toolchain@v1
43+
with:
44+
version: nightly
45+
46+
- name: Run coverage
47+
run: FOUNDRY_PROFILE=ci forge coverage --report lcov
48+
env:
49+
RPC_MAINNET: ${{ secrets.RPC_MAINNET }}
50+
RPC_HOLESKY: ${{ secrets.RPC_HOLESKY }}
51+
52+
- name: Prune coverage report
53+
run: lcov --remove ./lcov.info -o ./lcov.info.pruned 'test/*' 'script/*' '*Storage.sol' --ignore-errors inconsistent
54+
55+
- name: Generate reports
56+
run: genhtml -o report ./lcov.info.pruned
57+
58+
- name: Upload coverage results
59+
uses: actions/upload-artifact@v4
60+
with:
61+
name: code-coverage-report
62+
path: report/*
63+
64+
- name: View and log coverage
65+
id: print_coverage
66+
run: |
67+
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
68+
echo "comment_contents<<$EOF" >> $GITHUB_OUTPUT
69+
echo "$(lcov --list ./lcov.info.pruned --ignore-errors inconsistent)" >> $GITHUB_OUTPUT
70+
echo "$EOF" >> $GITHUB_OUTPUT
71+
- name: Log Coverage Report
72+
run: echo "${{ steps.print_coverage.outputs.comment_contents }}"

.github/workflows/forge-fmt.yml

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Forge Fmt
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
branches:
7+
- master
8+
- mainnet
9+
- testnet-goerli
10+
- dev
11+
pull_request:
12+
13+
jobs:
14+
check:
15+
name: CI
16+
strategy:
17+
fail-fast: true
18+
runs-on: ubuntu-latest
19+
steps:
20+
- uses: actions/checkout@v4
21+
with:
22+
submodules: recursive
23+
- name: Install Foundry
24+
uses: foundry-rs/foundry-toolchain@v1
25+
with:
26+
version: nightly
27+
- name: Run forge fmt
28+
run: |
29+
forge fmt --check src
30+
id: fmt

.github/workflows/tests.yml

-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ on:
1313
- dev
1414
pull_request:
1515

16-
env:
17-
FOUNDRY_PROFILE: ci
18-
1916
jobs:
2017
check:
2118
strategy:

Makefile

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
storage-report:
2+
bash ".github/bin/storage-report.sh" "docs/storage-report/"

README.md

+17-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ EigenLayer is a set of smart contracts deployed on Ethereum that enable restakin
1515
## Branching
1616

1717
The main branches we use are:
18+
1819
* [`dev (default)`](https://github.com/Layr-Labs/eigenlayer-middleware/tree/dev): The most up-to-date branch, containing the work-in-progress code for upcoming releases
1920
* [`testnet-holesky`](https://github.com/Layr-Labs/eigenlayer-middleware/tree/testnet-holesky): Our current testnet deployment
2021
* [`mainnet`](https://github.com/Layr-Labs/eigenlayer-middleware/tree/mainnet): Our current mainnet deployment
@@ -24,6 +25,7 @@ The main branches we use are:
2425
### Basics
2526

2627
To get a basic understanding of EigenLayer, check out [You Could've Invented EigenLayer](https://www.blog.eigenlayer.xyz/ycie/). Note that some of the document's content describes features that do not exist yet (like the Slasher). To understand more about how restakers and operators interact with EigenLayer, check out these guides:
28+
2729
* [Restaking User Guide](https://docs.eigenlayer.xyz/restaking-guides/restaking-user-guide)
2830
* [Operator Guide](https://docs.eigenlayer.xyz/operator-guides/operator-introduction)
2931

@@ -32,10 +34,25 @@ Most of this content is intro-level and describes user interactions with the Eig
3234
### Deep Dive
3335

3436
For shadowy super-coders:
37+
3538
* The most up-to-date technical documentation can be found in [/docs](/docs).
3639
* To get an idea of how users interact with these contracts, check out the integration tests: [/test/integration](./test/integration)
3740
* To explore the EigenLayer core contracts, check out the core repo technical docs [here][core-docs-dev].
3841

42+
### Note On Slashing
43+
44+
The middleware contracts are available for testnet integration and experimentation. As with the rest of the testnet code, these contracts have not yet been fully audited. Internal security reviews are in progress, and we're preparing to engage external auditors. We're providing these now so AVSs can begin testing slashing conditions, Operator Sets, and related functionality, and so Operators can simulate slashing and test allocations. For more details, see [ELIP-002](https://github.com/eigenfoundation/ELIPs/blob/main/ELIPs/ELIP-002.md).
45+
46+
For Operators:
47+
48+
We provide scripts to deploy a mock service manager and allocate some stake to a mock Operator Set in [these scripts](https://github.com/Layr-Labs/eigenlayer-middleware/pull/335).
49+
We've reduced various safety delays on testnet to better simulate operational flows. Additional information on these delays is in [ELIP-002](https://github.com/eigenfoundation/ELIPs/blob/main/ELIPs/ELIP-002.md).
50+
For AVSs:
51+
52+
We provide a migration path for existing M2 environments (LINK). While this requires understanding the provided script, the Developer Experience will improve before Mainnet launch. Note that this is a gradual migration process to new Operator Sets, not a direct upgrade of existing Operator Sets.
53+
We also provide scripts to spin up new service managers from scratch.
54+
In all cases, you’ll need to register existing Operators or spin up new Operators and allocate funds to them. These testing flows will improve as we refine the scripts and contracts. Stay tuned for updates, and feel free to reach out with any questions.
55+
3956
## Building and Running Tests
4057

4158
This repository uses Foundry. See the [Foundry docs](https://book.getfoundry.sh/) for more info on installation and usage. If you already have foundry, you can build this project and run tests with these commands:
@@ -80,4 +97,3 @@ The current testnet deployment is on holesky, is from our M2 beta release. You c
8097
[`ServiceManagerRouter`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/testnet-holesky/src/ServiceManagerRouter.sol) | - | [`0x4463...5a37`](https://holesky.etherscan.io/address/0x44632dfBdCb6D3E21EF613B0ca8A6A0c618F5a37#code) | |
8198
[`ProxyAdmin`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/ProxyAdmin.sol) | - | [`0xB043...5c15`](https://holesky.etherscan.io/address/0xB043055dd967A382577c2f5261fA6428f2905c15) | |
8299
[`eigenda/EigenDAServiceManager`](https://github.com/Layr-Labs/eigenda/blob/a33b41561cc3fb4cd6d50a8738e4c5dca43ec0a5/contracts/src/core/EigenDAServiceManager.sol) | [`0xD4A7E1Bd8015057293f0D0A557088c286942e84b`](https://holesky.etherscan.io/address/0xD4A7E1Bd8015057293f0D0A557088c286942e84b) | [`0xa722...67f3`](https://holesky.etherscan.io/address/0xa7227485e6C693AC4566fe168C5E3647c5c267f3) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/TransparentUpgradeableProxy.sol) |
83-

bin/storage-report.sh

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/bin/sh
2+
3+
# Default output directory
4+
OUTPUT_DIR=${1:-docs/storage-report}
5+
6+
# Function to print messages
7+
log() {
8+
echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] $1"
9+
}
10+
11+
# Function to print error messages
12+
error() {
13+
echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] $1" >&2
14+
}
15+
16+
log "Starting the storage report generation."
17+
18+
# Create the output directory if it doesn't exist
19+
if ! mkdir -p "$OUTPUT_DIR"; then
20+
error "Failed to create output directory: $OUTPUT_DIR"
21+
exit 1
22+
fi
23+
24+
log "Output directory is set to: $OUTPUT_DIR"
25+
26+
# Loop through Solidity files and generate storage report
27+
# NOTE: Ignores `src/interfaces` & `src/libraries` since they "should" not contain storage logic.
28+
for file in $(find src/ -name "*.sol" ! -path "*/interfaces/*" ! -path "*/libraries/*"); do
29+
contract_name=$(basename "$file" .sol)
30+
31+
# Check if the file exists and is readable
32+
if [ ! -r "$file" ]; then
33+
error "Cannot read file: $file"
34+
continue
35+
fi
36+
37+
log "Processing contract: $contract_name"
38+
39+
# Run forge inspect and capture errors
40+
if ! forge inspect "$contract_name" storage > "$OUTPUT_DIR/$contract_name.md"; then
41+
error "Failed to generate storage report for contract: $contract_name"
42+
else
43+
log "Storage report generated for contract: $contract_name"
44+
fi
45+
done

docs/RegistryCoordinator.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ These methods allow operators to register for/deregister from one or more quorum
4242
function registerOperator(
4343
bytes calldata quorumNumbers,
4444
string calldata socket,
45-
IBLSApkRegistry.PubkeyRegistrationParams calldata params,
45+
IBLSApkRegistryTypes.PubkeyRegistrationParams calldata params,
4646
SignatureWithSaltAndExpiry memory operatorSignature
4747
)
4848
external
@@ -88,7 +88,7 @@ If the Operator was not currently registered for any quorums, this method will r
8888
function registerOperatorWithChurn(
8989
bytes calldata quorumNumbers,
9090
string calldata socket,
91-
IBLSApkRegistry.PubkeyRegistrationParams calldata params,
91+
IBLSApkRegistryTypes.PubkeyRegistrationParams calldata params,
9292
OperatorKickParam[] calldata operatorKickParams,
9393
SignatureWithSaltAndExpiry memory churnApproverSignature,
9494
SignatureWithSaltAndExpiry memory operatorSignature
@@ -256,7 +256,7 @@ These methods are used by the Owner to configure the `RegistryCoordinator`:
256256
function createQuorum(
257257
OperatorSetParam memory operatorSetParams,
258258
uint96 minimumStake,
259-
IStakeRegistry.StrategyParams[] memory strategyParams
259+
IStakeRegistryTypes.StrategyParams[] memory strategyParams
260260
)
261261
external
262262
virtual

docs/storage-report/AVSRegistrar.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
╭------+------+------+--------+-------+----------╮
3+
| Name | Type | Slot | Offset | Bytes | Contract |
4+
+================================================+
5+
╰------+------+------+--------+-------+----------╯
6+

docs/storage-report/BLSApkRegistry.md

Whitespace-only changes.

docs/storage-report/BLSApkRegistryStorage.md

Whitespace-only changes.

docs/storage-report/BLSSignatureChecker.md

Whitespace-only changes.

docs/storage-report/BLSSignatureCheckerStorage.md

Whitespace-only changes.

docs/storage-report/ECDSAServiceManagerBase.md

Whitespace-only changes.

docs/storage-report/ECDSAStakeRegistry.md

Whitespace-only changes.

docs/storage-report/ECDSAStakeRegistryEqualWeight.md

Whitespace-only changes.

docs/storage-report/ECDSAStakeRegistryPermissioned.md

Whitespace-only changes.

docs/storage-report/ECDSAStakeRegistryStorage.md

Whitespace-only changes.

docs/storage-report/EjectionManager.md

Whitespace-only changes.

docs/storage-report/EjectionManagerStorage.md

Whitespace-only changes.

docs/storage-report/IndexRegistry.md

Whitespace-only changes.

docs/storage-report/IndexRegistryStorage.md

Whitespace-only changes.

docs/storage-report/InstantSlasher.md

Whitespace-only changes.

docs/storage-report/OperatorStateRetriever.md

Whitespace-only changes.

docs/storage-report/RegistryCoordinator.md

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
2+
╭-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------╮
3+
| Name | Type | Slot | Offset | Bytes | Contract |
4+
+=============================================================================================================================================================================================+
5+
| quorumCount | uint8 | 0 | 0 | 1 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
6+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
7+
| _quorumParams | mapping(uint8 => struct ISlashingRegistryCoordinatorTypes.OperatorSetParam) | 1 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
8+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
9+
| _operatorBitmapHistory | mapping(bytes32 => struct ISlashingRegistryCoordinatorTypes.QuorumBitmapUpdate[]) | 2 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
10+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
11+
| _operatorInfo | mapping(address => struct ISlashingRegistryCoordinatorTypes.OperatorInfo) | 3 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
12+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
13+
| isChurnApproverSaltUsed | mapping(bytes32 => bool) | 4 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
14+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
15+
| quorumUpdateBlockNumber | mapping(uint8 => uint256) | 5 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
16+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
17+
| registries | address[] | 6 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
18+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
19+
| churnApprover | address | 7 | 0 | 20 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
20+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
21+
| ejector | address | 8 | 0 | 20 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
22+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
23+
| lastEjectionTimestamp | mapping(address => uint256) | 9 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
24+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
25+
| ejectionCooldown | uint256 | 10 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
26+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
27+
| isOperatorSetAVS | bool | 11 | 0 | 1 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
28+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
29+
| isM2Quorum | mapping(uint8 => bool) | 12 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
30+
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
31+
| __GAP | uint256[37] | 13 | 0 | 1184 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
32+
╰-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------╯
33+

docs/storage-report/ServiceManagerBase.md

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
╭------------------+-------------+------+--------+-------+-------------------------------------------------------------╮
3+
| Name | Type | Slot | Offset | Bytes | Contract |
4+
+======================================================================================================================+
5+
| _initialized | uint8 | 0 | 0 | 1 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
6+
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
7+
| _initializing | bool | 0 | 1 | 1 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
8+
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
9+
| __gap | uint256[50] | 1 | 0 | 1600 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
10+
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
11+
| _owner | address | 51 | 0 | 20 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
12+
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
13+
| __gap | uint256[49] | 52 | 0 | 1568 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
14+
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
15+
| rewardsInitiator | address | 101 | 0 | 20 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
16+
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
17+
| __GAP | uint256[49] | 102 | 0 | 1568 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
18+
╰------------------+-------------+------+--------+-------+-------------------------------------------------------------╯
19+

docs/storage-report/ServiceManagerRouter.md

Whitespace-only changes.

docs/storage-report/SlasherBase.md

Whitespace-only changes.

docs/storage-report/SlasherStorage.md

Whitespace-only changes.

docs/storage-report/SlashingRegistryCoordinator.md

Whitespace-only changes.

docs/storage-report/SlashingRegistryCoordinatorStorage.md

Whitespace-only changes.

docs/storage-report/SocketRegistry.md

Whitespace-only changes.

docs/storage-report/SocketRegistryStorage.md

Whitespace-only changes.

docs/storage-report/StakeRegistry.md

Whitespace-only changes.

docs/storage-report/StakeRegistryStorage.md

Whitespace-only changes.

docs/storage-report/VetoableSlasher.md

Whitespace-only changes.

0 commit comments

Comments
 (0)