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

chore(contracts): Add storage mapping checker #1238

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
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
25 changes: 24 additions & 1 deletion .github/workflows/test-contracts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
version: stable

- name: Install forge dependencies
run: forge install
Expand All @@ -37,3 +37,26 @@ jobs:
- name: Run snapshot
run: forge snapshot
working-directory: ./contracts

## This check ensures that any modifications made to contract storage are caught loudly
## in CI
validate-storage:
name: Storage mapping validation
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
with:
submodules: recursive

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

- name: Install forge dependencies
run: forge install
working-directory: ./contracts

- name: Run validation script
run: ./storage-verify.sh
working-directory: ./contracts
38 changes: 38 additions & 0 deletions contracts/storage-verify.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash
contracts="PaymentVault \
SocketRegistry \
AVSDirectory \
DelegationManager \
BitmapUtils \
OperatorStateRetriever \
RegistryCoordinator \
BLSApkRegistry \
IIndexRegistry \
StakeRegistry \
BN254 \
EigenDAServiceManager \
IEigenDAServiceManager \
MockRollup \
EjectionManager \
EigenDACertVerifier \
EigenDAThresholdRegistry \
EigenDARelayRegistry \
IEigenDARelayRegistry \
EigenDADisperserRegistry"

output_dir="./test/storage"
for contract in $contracts
do
echo "Checking storage change of $contract"
[ -f "$output_dir/$contract" ] && mv "$output_dir/$contract" "$output_dir/$contract-old"
forge inspect "$contract" --pretty storage > "$output_dir/$contract"
diff "$output_dir/$contract-old" "$output_dir/$contract"
if [[ $? != "0" ]]
then
CHANGED=1
fi
done
if [[ $CHANGED == 1 ]]
then
exit 1
fi
33 changes: 33 additions & 0 deletions contracts/test/storage/AVSDirectory
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@

╭---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------╮
| Name | Type | Slot | Offset | Bytes | Contract |
+==============================================================================================================================================================================================================================================+
| _initialized | uint8 | 0 | 0 | 1 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| _initializing | bool | 0 | 1 | 1 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| __gap | uint256[50] | 1 | 0 | 1600 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| _owner | address | 51 | 0 | 20 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| __gap | uint256[49] | 52 | 0 | 1568 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| _paused | uint256 | 102 | 0 | 32 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| __gap | uint256[48] | 103 | 0 | 1536 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| _DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| avsOperatorStatus | mapping(address => mapping(address => enum IAVSDirectory.OperatorAVSRegistrationStatus)) | 152 | 0 | 32 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 153 | 0 | 32 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| __gap | uint256[47] | 154 | 0 | 1504 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| _status | uint256 | 201 | 0 | 32 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| __gap | uint256[49] | 202 | 0 | 1568 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
╰---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------╯

33 changes: 33 additions & 0 deletions contracts/test/storage/AVSDirectory-old
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@

╭---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------╮
| Name | Type | Slot | Offset | Bytes | Contract |
+==============================================================================================================================================================================================================================================+
| _initialized | uint8 | 0 | 0 | 1 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| _initializing | bool | 0 | 1 | 1 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| __gap | uint256[50] | 1 | 0 | 1600 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| _owner | address | 51 | 0 | 20 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| __gap | uint256[49] | 52 | 0 | 1568 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| _paused | uint256 | 102 | 0 | 32 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| __gap | uint256[48] | 103 | 0 | 1536 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| _DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| avsOperatorStatus | mapping(address => mapping(address => enum IAVSDirectory.OperatorAVSRegistrationStatus)) | 152 | 0 | 32 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 153 | 0 | 32 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| __gap | uint256[47] | 154 | 0 | 1504 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| _status | uint256 | 201 | 0 | 32 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
|---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------|
| __gap | uint256[49] | 202 | 0 | 1568 | lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/core/AVSDirectory.sol:AVSDirectory |
╰---------------------+------------------------------------------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------------------------------------------╯

21 changes: 21 additions & 0 deletions contracts/test/storage/BLSApkRegistry
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

╭----------------------+------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------╮
| Name | Type | Slot | Offset | Bytes | Contract |
+=======================================================================================================================================================================+
| _initialized | uint8 | 0 | 0 | 1 | lib/eigenlayer-middleware/src/BLSApkRegistry.sol:BLSApkRegistry |
|----------------------+------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------|
| _initializing | bool | 0 | 1 | 1 | lib/eigenlayer-middleware/src/BLSApkRegistry.sol:BLSApkRegistry |
|----------------------+------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------|
| operatorToPubkeyHash | mapping(address => bytes32) | 1 | 0 | 32 | lib/eigenlayer-middleware/src/BLSApkRegistry.sol:BLSApkRegistry |
|----------------------+------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------|
| pubkeyHashToOperator | mapping(bytes32 => address) | 2 | 0 | 32 | lib/eigenlayer-middleware/src/BLSApkRegistry.sol:BLSApkRegistry |
|----------------------+------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------|
| operatorToPubkey | mapping(address => struct BN254.G1Point) | 3 | 0 | 32 | lib/eigenlayer-middleware/src/BLSApkRegistry.sol:BLSApkRegistry |
|----------------------+------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------|
| apkHistory | mapping(uint8 => struct IBLSApkRegistry.ApkUpdate[]) | 4 | 0 | 32 | lib/eigenlayer-middleware/src/BLSApkRegistry.sol:BLSApkRegistry |
|----------------------+------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------|
| currentApk | mapping(uint8 => struct BN254.G1Point) | 5 | 0 | 32 | lib/eigenlayer-middleware/src/BLSApkRegistry.sol:BLSApkRegistry |
|----------------------+------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------|
| __GAP | uint256[45] | 6 | 0 | 1440 | lib/eigenlayer-middleware/src/BLSApkRegistry.sol:BLSApkRegistry |
╰----------------------+------------------------------------------------------+------+--------+-------+-----------------------------------------------------------------╯

Loading
Loading