Skip to content

Commit

Permalink
feat: slashing release (#311)
Browse files Browse the repository at this point in the history
* 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]>
  • Loading branch information
8 people authored Jan 28, 2025
1 parent 2475ab8 commit 11b0061
Show file tree
Hide file tree
Showing 165 changed files with 15,997 additions and 7,873 deletions.
72 changes: 72 additions & 0 deletions .github/workflows/forge-coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Coverage

on:
push:
workflow_dispatch: {}

jobs:
run-coverage:
name: CI
runs-on: ubuntu-latest
strategy:
fail-fast: false

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Load issue number
uses: actions/github-script@v6
id: get_issue_number
with:
script: |
const pullRequests = await github.rest.repos.listPullRequestsAssociatedWithCommit({
commit_sha: context.sha,
owner: context.repo.owner,
repo: context.repo.repo,
});
if (pullRequests.data.length > 0) {
return pullRequests.data[0].number;
} else {
throw new Error('No associated pull request found.');
}
result-encoding: string

- name: Install dependencies
run: |
sudo apt-get install lcov
id: lcov

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Run coverage
run: FOUNDRY_PROFILE=ci 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 'test/*' 'script/*' '*Storage.sol' --ignore-errors inconsistent

- name: Generate reports
run: genhtml -o report ./lcov.info.pruned

- name: Upload coverage results
uses: actions/upload-artifact@v4
with:
name: code-coverage-report
path: report/*

- name: View and log coverage
id: print_coverage
run: |
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
echo "comment_contents<<$EOF" >> $GITHUB_OUTPUT
echo "$(lcov --list ./lcov.info.pruned --ignore-errors inconsistent)" >> $GITHUB_OUTPUT
echo "$EOF" >> $GITHUB_OUTPUT
- name: Log Coverage Report
run: echo "${{ steps.print_coverage.outputs.comment_contents }}"
30 changes: 30 additions & 0 deletions .github/workflows/forge-fmt.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Forge Fmt

on:
workflow_dispatch:
push:
branches:
- master
- mainnet
- testnet-goerli
- dev
pull_request:

jobs:
check:
name: CI
strategy:
fail-fast: true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
- name: Run forge fmt
run: |
forge fmt --check src
id: fmt
3 changes: 0 additions & 3 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ on:
- dev
pull_request:

env:
FOUNDRY_PROFILE: ci

jobs:
check:
strategy:
Expand Down
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
storage-report:
bash ".github/bin/storage-report.sh" "docs/storage-report/"
18 changes: 17 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ EigenLayer is a set of smart contracts deployed on Ethereum that enable restakin
## Branching

The main branches we use are:

* [`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
* [`testnet-holesky`](https://github.com/Layr-Labs/eigenlayer-middleware/tree/testnet-holesky): Our current testnet deployment
* [`mainnet`](https://github.com/Layr-Labs/eigenlayer-middleware/tree/mainnet): Our current mainnet deployment
Expand All @@ -24,6 +25,7 @@ The main branches we use are:
### Basics

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:

* [Restaking User Guide](https://docs.eigenlayer.xyz/restaking-guides/restaking-user-guide)
* [Operator Guide](https://docs.eigenlayer.xyz/operator-guides/operator-introduction)

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

For shadowy super-coders:

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

### Note On Slashing

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).

For Operators:

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).
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).
For AVSs:

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.
We also provide scripts to spin up new service managers from scratch.
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.

## Building and Running Tests

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:
Expand Down Expand Up @@ -80,4 +97,3 @@ The current testnet deployment is on holesky, is from our M2 beta release. You c
[`ServiceManagerRouter`](https://github.com/Layr-Labs/eigenlayer-middleware/blob/testnet-holesky/src/ServiceManagerRouter.sol) | - | [`0x4463...5a37`](https://holesky.etherscan.io/address/0x44632dfBdCb6D3E21EF613B0ca8A6A0c618F5a37#code) | |
[`ProxyAdmin`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.7.1/contracts/proxy/transparent/ProxyAdmin.sol) | - | [`0xB043...5c15`](https://holesky.etherscan.io/address/0xB043055dd967A382577c2f5261fA6428f2905c15) | |
[`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) |

45 changes: 45 additions & 0 deletions bin/storage-report.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/bin/sh

# Default output directory
OUTPUT_DIR=${1:-docs/storage-report}

# Function to print messages
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] $1"
}

# Function to print error messages
error() {
echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] $1" >&2
}

log "Starting the storage report generation."

# Create the output directory if it doesn't exist
if ! mkdir -p "$OUTPUT_DIR"; then
error "Failed to create output directory: $OUTPUT_DIR"
exit 1
fi

log "Output directory is set to: $OUTPUT_DIR"

# Loop through Solidity files and generate storage report
# NOTE: Ignores `src/interfaces` & `src/libraries` since they "should" not contain storage logic.
for file in $(find src/ -name "*.sol" ! -path "*/interfaces/*" ! -path "*/libraries/*"); do
contract_name=$(basename "$file" .sol)

# Check if the file exists and is readable
if [ ! -r "$file" ]; then
error "Cannot read file: $file"
continue
fi

log "Processing contract: $contract_name"

# Run forge inspect and capture errors
if ! forge inspect "$contract_name" storage > "$OUTPUT_DIR/$contract_name.md"; then
error "Failed to generate storage report for contract: $contract_name"
else
log "Storage report generated for contract: $contract_name"
fi
done
6 changes: 3 additions & 3 deletions docs/RegistryCoordinator.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ These methods allow operators to register for/deregister from one or more quorum
function registerOperator(
bytes calldata quorumNumbers,
string calldata socket,
IBLSApkRegistry.PubkeyRegistrationParams calldata params,
IBLSApkRegistryTypes.PubkeyRegistrationParams calldata params,
SignatureWithSaltAndExpiry memory operatorSignature
)
external
Expand Down Expand Up @@ -88,7 +88,7 @@ If the Operator was not currently registered for any quorums, this method will r
function registerOperatorWithChurn(
bytes calldata quorumNumbers,
string calldata socket,
IBLSApkRegistry.PubkeyRegistrationParams calldata params,
IBLSApkRegistryTypes.PubkeyRegistrationParams calldata params,
OperatorKickParam[] calldata operatorKickParams,
SignatureWithSaltAndExpiry memory churnApproverSignature,
SignatureWithSaltAndExpiry memory operatorSignature
Expand Down Expand Up @@ -256,7 +256,7 @@ These methods are used by the Owner to configure the `RegistryCoordinator`:
function createQuorum(
OperatorSetParam memory operatorSetParams,
uint96 minimumStake,
IStakeRegistry.StrategyParams[] memory strategyParams
IStakeRegistryTypes.StrategyParams[] memory strategyParams
)
external
virtual
Expand Down
6 changes: 6 additions & 0 deletions docs/storage-report/AVSRegistrar.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

╭------+------+------+--------+-------+----------╮
| Name | Type | Slot | Offset | Bytes | Contract |
+================================================+
╰------+------+------+--------+-------+----------╯

Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
33 changes: 33 additions & 0 deletions docs/storage-report/RegistryCoordinatorStorage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@

╭-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------╮
| Name | Type | Slot | Offset | Bytes | Contract |
+=============================================================================================================================================================================================+
| quorumCount | uint8 | 0 | 0 | 1 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| _quorumParams | mapping(uint8 => struct ISlashingRegistryCoordinatorTypes.OperatorSetParam) | 1 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| _operatorBitmapHistory | mapping(bytes32 => struct ISlashingRegistryCoordinatorTypes.QuorumBitmapUpdate[]) | 2 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| _operatorInfo | mapping(address => struct ISlashingRegistryCoordinatorTypes.OperatorInfo) | 3 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| isChurnApproverSaltUsed | mapping(bytes32 => bool) | 4 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| quorumUpdateBlockNumber | mapping(uint8 => uint256) | 5 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| registries | address[] | 6 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| churnApprover | address | 7 | 0 | 20 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| ejector | address | 8 | 0 | 20 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| lastEjectionTimestamp | mapping(address => uint256) | 9 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| ejectionCooldown | uint256 | 10 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| isOperatorSetAVS | bool | 11 | 0 | 1 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| isM2Quorum | mapping(uint8 => bool) | 12 | 0 | 32 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
|-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------|
| __GAP | uint256[37] | 13 | 0 | 1184 | src/RegistryCoordinatorStorage.sol:RegistryCoordinatorStorage |
╰-------------------------+---------------------------------------------------------------------------+------+--------+-------+---------------------------------------------------------------╯

Empty file.
19 changes: 19 additions & 0 deletions docs/storage-report/ServiceManagerBaseStorage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

╭------------------+-------------+------+--------+-------+-------------------------------------------------------------╮
| Name | Type | Slot | Offset | Bytes | Contract |
+======================================================================================================================+
| _initialized | uint8 | 0 | 0 | 1 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
| _initializing | bool | 0 | 1 | 1 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
| __gap | uint256[50] | 1 | 0 | 1600 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
| _owner | address | 51 | 0 | 20 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
| __gap | uint256[49] | 52 | 0 | 1568 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
| rewardsInitiator | address | 101 | 0 | 20 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
|------------------+-------------+------+--------+-------+-------------------------------------------------------------|
| __GAP | uint256[49] | 102 | 0 | 1568 | src/ServiceManagerBaseStorage.sol:ServiceManagerBaseStorage |
╰------------------+-------------+------+--------+-------+-------------------------------------------------------------╯

Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Loading

0 comments on commit 11b0061

Please sign in to comment.