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

SSV Native staking #2015

Merged
merged 159 commits into from
Jun 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
159 commits
Select commit Hold shift + click to select a range
063d8b2
initial commit of the native staking strategy
sparrowDom Apr 4, 2024
6e8332b
fix text
sparrowDom Apr 4, 2024
b933f22
add some more functionality
sparrowDom Apr 10, 2024
0a43d14
finish up the fuse interval test, update deploy script
sparrowDom Apr 11, 2024
d31fe30
some natspec and refactoring
sparrowDom Apr 11, 2024
03c544c
add some more accounting logic
sparrowDom Apr 11, 2024
9aa0d73
finish up accounting and add tests for it
sparrowDom Apr 12, 2024
e99f86c
add some comments
sparrowDom Apr 15, 2024
52ba11e
add tests for manually fixing accounting
sparrowDom Apr 15, 2024
e656ecb
lint and prettier
sparrowDom Apr 15, 2024
fe113a5
undo file delete
sparrowDom Apr 15, 2024
71ad71f
implement the collect rewards function and add tests for it
sparrowDom Apr 16, 2024
2c448bb
implement and test checkBalance
sparrowDom Apr 16, 2024
5d5e9cb
add functions to register and exit/remove the ssv validator
sparrowDom Apr 18, 2024
121c7f7
Native staking updates (#2023)
naddison36 Apr 22, 2024
8a64dc8
Native staking changes (#2024)
naddison36 Apr 23, 2024
8419fc7
Native staking changes and unit tests (#2029)
naddison36 Apr 25, 2024
87c5254
allow for WETH to send ETH to the contract
sparrowDom Apr 26, 2024
1d66508
shorten error message
sparrowDom Apr 26, 2024
00ec878
fix depositing bug
sparrowDom Apr 27, 2024
ec4933b
Holesky deploy (#2026)
sparrowDom Apr 29, 2024
6179cb1
manuallyFixAccounting changes (#2034)
naddison36 Apr 29, 2024
da6a7b5
fix fork tests
sparrowDom Apr 29, 2024
fd17ec9
Merge branch 'master' into sparrowDom/nativeStaking
sparrowDom May 6, 2024
8f7d3d5
prettier
sparrowDom May 6, 2024
967fe49
fix unit test
sparrowDom May 6, 2024
1af324d
mainnet native staking fork tests (#2037)
naddison36 May 7, 2024
ce2ec63
fix unit tests
sparrowDom May 6, 2024
fe12d23
fix global hooks filter
sparrowDom May 7, 2024
c61c9bb
add github workflow
sparrowDom May 7, 2024
7e2e640
another workflow fix
sparrowDom May 7, 2024
af8ea03
another workflow fix
sparrowDom May 7, 2024
32480dd
fix holesky tests
sparrowDom May 7, 2024
0fb09ea
remove the .only
sparrowDom May 7, 2024
c7175bb
prettier
sparrowDom May 7, 2024
69abd8f
Sparrow dom/native staking defender action (#2051)
sparrowDom May 9, 2024
2f7a9cd
Fix fork tests (#2050)
naddison36 May 9, 2024
0623a47
add payable to fee accumulator (#2053)
sparrowDom May 9, 2024
f268742
fix linter
naddison36 May 9, 2024
20d29a1
Fix balancer fork test
naddison36 May 10, 2024
2a93df2
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 May 10, 2024
b898801
Fixed resolveContract for none proxied contracts
naddison36 May 10, 2024
25170aa
simplified woethCcipZapperFixture
naddison36 May 10, 2024
e1ff728
Regenerated latest contract diagrams
naddison36 May 10, 2024
c09cd46
Resolved Slither divide-before-multiply warning
naddison36 May 10, 2024
9d83e97
Native staking deployment to reduceQueueTime
naddison36 May 10, 2024
7eb135b
Fixed fork test harvesting CRV rewards
naddison36 May 10, 2024
579a93c
gas optimisation
sparrowDom May 10, 2024
4c864ca
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 May 10, 2024
e7b96e9
make verification automatic
sparrowDom May 10, 2024
8a53f3e
removed wethToVault from manuallyFixAccounting
naddison36 May 10, 2024
98a193a
Merge remote-tracking branch 'origin/sparrowDom/nativeStaking' into s…
naddison36 May 10, 2024
905abf9
native staking strategy redeployed
sparrowDom May 10, 2024
fc48427
adjust the comment
sparrowDom May 10, 2024
4b51655
add rate limit to calling manually fix accounting (#2057)
sparrowDom May 13, 2024
657b064
Correct deployName in Native Staking deploy script
naddison36 May 13, 2024
769018a
Fix linter
naddison36 May 13, 2024
b98e9de
Remove approveAssets on Swapper contract in 095_ogn_buyback script as…
naddison36 May 13, 2024
622a3b4
Fix Holesky fork tests
naddison36 May 13, 2024
c25745d
Fix mainnet fork tests
naddison36 May 13, 2024
4ca3136
skip deploy 095_ogn_buyback for now
naddison36 May 13, 2024
37c9d0a
fix some Slither errors
naddison36 May 13, 2024
193af2f
Fix Slither warnings
naddison36 May 13, 2024
6d5034a
Upgrade the CI to use node.js 20.x
naddison36 May 13, 2024
848d578
Fix CI
naddison36 May 13, 2024
79d5058
Fix CI
naddison36 May 13, 2024
7b7ac39
Upgrade to node.js 20
naddison36 May 13, 2024
6b2be67
Still upgrade the buyback contracts but not approveAssets on the swapper
naddison36 May 13, 2024
5f2f8f6
Upgrade actions so they don't use node.js 16
naddison36 May 13, 2024
6baed9b
attempt to fix holesky fork run
sparrowDom May 13, 2024
9ce05e1
Generated latest contract diagram
naddison36 May 13, 2024
8c052d8
fix codecov upload
naddison36 May 13, 2024
3687fbe
Fix OETH process diagram for native staking
naddison36 May 13, 2024
6df4f5f
add a withdrawal event when withdrawing WETH to vault (#2059)
sparrowDom May 13, 2024
614b11e
Regenerated latest native staking diagram
naddison36 May 13, 2024
21d5569
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 May 13, 2024
cfe6a81
add a util contract that is able to recalculate a valid deposit data …
sparrowDom May 16, 2024
c491131
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 May 22, 2024
e8c15b5
Prettier native staking test
naddison36 May 22, 2024
acad4b9
Renamed native staking deploy script
naddison36 May 22, 2024
638bf30
Fix event values (#2060)
sparrowDom May 22, 2024
b4e9c3f
Deploy latest Native Staking Strategy to Holesky (#2073)
naddison36 May 22, 2024
77d7b07
Deploy native staking Proxy via Relayer (#2066)
sparrowDom May 22, 2024
4c25093
Setup basic defender action (#2072)
sparrowDom May 22, 2024
c4456b9
Output more contract details in 097 deploy script
naddison36 May 23, 2024
4e9e24f
Fix Native Staking fork tests
naddison36 May 24, 2024
8cf9a25
Changed ssv util getClusterInfo to use the SSV API instead of the ssv…
naddison36 May 24, 2024
fc09bed
Prettier
naddison36 May 24, 2024
bb3b7e6
ValidatorRegistrator.stakeEth gas improvement when multiple validators
naddison36 May 24, 2024
e163cff
Corrected stakeEth call in OETH processes diagram
naddison36 May 24, 2024
e853081
Added fork test for registering a validator twice
naddison36 May 27, 2024
12bba64
Stake funds with confirmations for front-running protection of Beacon…
sparrowDom May 28, 2024
0a0e9da
Updated Buyback value flow for OETH
naddison36 May 28, 2024
93b3cdf
Updated Native staking process diagram
naddison36 May 29, 2024
003fcdb
Updated OETH Vault diagrams
naddison36 May 29, 2024
9295fe7
Add process for pausing the Native Staking Strategy
naddison36 May 29, 2024
8748170
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 May 29, 2024
270a3f6
Removed the redundant condition in the fuse interval check (#2082)
naddison36 Jun 2, 2024
706da2e
OZ - Native Staking - M-01 All Addresses Are Registered Validators by…
naddison36 Jun 2, 2024
71adea7
OZ - Native Staking - N-07 Lack of Indexed Event Parameters (#2083)
naddison36 Jun 2, 2024
8f8118d
Deployed new Native Staking Strategy
naddison36 Jun 2, 2024
d398042
generated latest NativeStakingSSVStrategy docs
naddison36 Jun 2, 2024
b6c2219
P2P API changes (#2084)
naddison36 Jun 2, 2024
49439ec
Hardhat tasks for Native Staking (#2085)
naddison36 Jun 3, 2024
6ecf222
Cap the validators a Native Staking Strategy can hold (#2087)
naddison36 Jun 3, 2024
c807e8d
don't format Defender Action code in dist folder
naddison36 Jun 4, 2024
7f54c94
Deployed latest NativeStakingSSVStrategy contract to Holesky
naddison36 Jun 4, 2024
8b7c866
Capitalised error messages in Native Staking Strategy
naddison36 Jun 5, 2024
7e19fbb
Fix hot deploy of Native Staking Strategy
naddison36 Jun 5, 2024
37a1d10
moved when event it emitted
naddison36 Jun 5, 2024
57f78b8
remove unchecked when calculating fullyWithdrawnValidators
naddison36 Jun 5, 2024
4c3ba23
Renamed MAX_STAKE to FULL_STAKE
naddison36 Jun 5, 2024
e4db674
Renamed withdrawal_credentials to withdrawalCredentials
naddison36 Jun 5, 2024
02fe259
Renamed WETH_TOKEN_ADDRESS to WETH
naddison36 Jun 5, 2024
f4fb309
renamed SSV_TOKEN_ADDRESS to SSV_TOKEN
naddison36 Jun 5, 2024
0231bb8
replaced 32 ether with FULL_STAKE
naddison36 Jun 5, 2024
7db25d2
Fix fork tests
naddison36 Jun 5, 2024
b685925
moved the internal function to the bottom of NativeStakingSSVStrategy
naddison36 Jun 5, 2024
1d9fa16
fixed formatting of if statements
naddison36 Jun 5, 2024
6dc40ab
Moved emits to after state changes
naddison36 Jun 5, 2024
f8879bd
Removed validatorsLength variable as we aren't dealing with a storage…
naddison36 Jun 5, 2024
670064e
removed unchecked iteration in for loop
naddison36 Jun 5, 2024
9ac93f5
consistent check of currentState
naddison36 Jun 5, 2024
e6af23a
Added new Holesky deploy script
naddison36 Jun 5, 2024
2457b37
Removed Governable from FeeAccumulator
naddison36 Jun 5, 2024
9ff8c5a
Decryption of validator key from P2P API (#2088)
naddison36 Jun 5, 2024
4b8a315
Added asset check to withdraw
naddison36 Jun 6, 2024
b581b9e
Merge remote-tracking branch 'origin/sparrowDom/nativeStaking' into s…
naddison36 Jun 6, 2024
275527a
bumped down the events in Native Staking Strategy
naddison36 Jun 6, 2024
125cad8
Replaced 32 ether with FULL_STAKE
naddison36 Jun 6, 2024
66a6f63
Using FULL_STAKE instead of 32 ether to make it easier for EIP-7251, …
naddison36 Jun 6, 2024
56d3331
Removed withdrawalCredentials from ETHStaked event
naddison36 Jun 6, 2024
563003d
fix updating depositedWethAccountedFor on withdrawal (#2091)
naddison36 Jun 6, 2024
370d70e
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 Jun 6, 2024
9acd4a7
Changed max validators to 500
naddison36 Jun 7, 2024
dfbf709
remove extra await from fork tests
naddison36 Jun 7, 2024
c29887b
Reduced the stakeETHThreshold to 512 which is 16 validators
naddison36 Jun 7, 2024
630d8d4
Natspec update to ValidatorRegistrator
naddison36 Jun 7, 2024
ccfa636
New Holesky deployment
naddison36 Jun 7, 2024
a2e2fe9
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
sparrowDom Jun 7, 2024
2c63130
Add nonReentrant to doAccounting and manuallyFixAccounting
naddison36 Jun 7, 2024
f91cd6e
Added ExecutionRewardsCollected to FeeAccumulator for analytics
naddison36 Jun 7, 2024
eee64f6
Added nonReentrant to stakeEth
naddison36 Jun 7, 2024
d52c37a
Fixed stack too deep error in stakeEth
naddison36 Jun 7, 2024
426dad5
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 Jun 7, 2024
375cf4c
Generated latest contract diagrams
naddison36 Jun 7, 2024
f46d12b
Added a second native staking strategy to the contracts diagram
naddison36 Jun 7, 2024
3f6422d
consolidate Holesky deploy scripts
naddison36 Jun 7, 2024
0c68a17
Fixed running Holesky fork tests locally
naddison36 Jun 7, 2024
8de84f3
Latest contract deployment to Holesky
naddison36 Jun 7, 2024
c96032b
Register multiple SSV validators (#2092)
naddison36 Jun 8, 2024
aeeb5b0
Lido withdraw strategy (#2080)
naddison36 Jun 8, 2024
9e02eb1
generated latest contract diagrams
naddison36 Jun 8, 2024
bc96c90
split out lido withdrawal strategy
naddison36 Jun 8, 2024
360417a
Update step numbers in deploy script
naddison36 Jun 8, 2024
15e7dda
Changes to transferGovernanceNativeStakingProxy hardhat task
naddison36 Jun 8, 2024
cbb6bd1
Changed MAINNET_DEPLOYER
naddison36 Jun 8, 2024
5787b99
Move gnosis file down a level
naddison36 Jun 8, 2024
af77be4
exported gnosis safe files for scheduledBatch and executeBatch
naddison36 Jun 8, 2024
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
41 changes: 41 additions & 0 deletions .github/workflows/defi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,46 @@ jobs:
./contracts/coverage.json
./contracts/coverage/**/*
retention-days: 1

contracts-hol-forktest:
name: "Holesky Fork Tests"
runs-on: ubuntu-latest
continue-on-error: true
env:
HARDHAT_CACHE_DIR: ./cache
PROVIDER_URL: ${{ secrets.PROVIDER_URL }}
HOLESKY_PROVIDER_URL: ${{ secrets.HOLESKY_PROVIDER_URL }}
steps:
- uses: actions/checkout@v4

- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "20.x"
cache: "yarn"
cache-dependency-path: contracts/yarn.lock

- uses: actions/cache@v4
id: hardhat-cache
with:
path: contracts/cache
key: ${{ runner.os }}-hardhat-${{ hashFiles('contracts/cache/*.json') }}
restore-keys: |
${{ runner.os }}-hardhat-cache

- run: yarn install --frozen-lockfile
working-directory: ./contracts

- run: yarn run test:coverage:hol-fork
working-directory: ./contracts

- uses: actions/upload-artifact@v4
with:
name: fork-test-hol-coverage-${{ github.sha }}
path: |
./contracts/coverage.json
./contracts/coverage/**/*
retention-days: 1

coverage-uploader:
name: "Upload Coverage Reports"
Expand All @@ -186,6 +226,7 @@ jobs:
- contracts-unit-coverage
- contracts-forktest
- contracts-arb-forktest
- contracts-hol-forktest
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
steps:
Expand Down
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ contracts/coverage/
contracts/coverage.json
contracts/build/
contracts/dist/
contracts/.localKeyValueStorage
contracts/.localKeyValueStorage.mainnet
contracts/.localKeyValueStorage.holesky
contracts/scripts/defender-actions/dist/

todo.txt
brownie/env-brownie/
Expand All @@ -78,4 +82,4 @@ coverage.json
fork-coverage
unit-coverage

.VSCodeCounter
.VSCodeCounter
1 change: 1 addition & 0 deletions contracts/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ module.exports = {
},
plugins: ["no-only-tests"],
rules: {
"no-constant-condition": ["error", { checkLoops: false }],
"no-only-tests/no-only-tests": "error",
},
};
1 change: 1 addition & 0 deletions contracts/.prettierignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
scripts/compensation/forkDeployment.js
coverage
dist
62 changes: 62 additions & 0 deletions contracts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,68 @@ unset DEFENDER_API_KEY
unset DEFENDER_API_SECRET
```

### Deploying Defender Actions

Actions are used to run operational jobs are specific times or intervals.

[rollup](https://rollupjs.org/) is used to bundle Actions source code in
[/script/defender-actions](./script/defender-actions) into a single file that can be uploaded to Defender. The
implementation was based off
[Defender Actions example using Rollup](https://github.com/OpenZeppelin/defender-autotask-examples/tree/master/rollup).
The rollup config is in [/scripts/defender-actions/rollup.config.cjs](./script/defender-actions/rollup.config.cjs). The
outputs are written to task specific folders under [/scripts/defender-actions/dist](./script/defender-actions/dist/).

The [defender-autotask CLI](https://www.npmjs.com/package/@openzeppelin/defender-autotask-client) is used to upload the
Action code to Defender. For this to work, a Defender Team API key with `Manage Actions` capabilities is needed. This
can be generated by a Defender team admin under the `Manage` tab on the top right of the UI and then `API Keys` on the
left menu. Best to unselect all capabilities except `Manage Actions`.

Save the Defender Team API key and secret to your `.env` file.

```
# Open Zeppelin Defender Team API key
DEFENDER_TEAM_KEY=
DEFENDER_TEAM_SECRET=
```

The following will bundle the Actions code ready for upload.

```
cd ./script/defender-actions

npx rollup -c
```

The following will upload the different Action bundles to Defender.

```sh
# change to the defender-actions folder
cd ./script/defender-actions
npx rollup -c

# Export the DEFENDER_TEAM_KEY and DEFENDER_TEAM_SECRET environment variables
export DEFENDER_TEAM_KEY=
export DEFENDER_TEAM_SECRET=
# Alternatively, the following can be used but it will export all env var including DEPLOYER_PRIVATE_KEY
# set -o allexport && source ../../.env && set +o allexport

# Set the DEBUG environment variable to oeth* for the Defender Action
npx hardhat setActionVars --id 38e44420-f38b-4d4a-86b0-6012a8897ad9
npx hardhat setActionVars --id f4b5b8d4-82ff-483f-bfae-9fef015790ca
npx hardhat setActionVars --id 191d9631-70b9-43c5-9db4-1dd985fde05c

# The Defender autotask client uses generic env var names so we'll set them first from the values in the .env file
export API_KEY=${DEFENDER_TEAM_KEY}
export API_SECRET=${DEFENDER_TEAM_SECRET}
# Holesky
npx defender-autotask update-code 38e44420-f38b-4d4a-86b0-6012a8897ad9 ./dist/registerValidators
npx defender-autotask update-code 191d9631-70b9-43c5-9db4-1dd985fde05c ./dist/doAccounting
# Mainnet
npx defender-autotask update-code f4b5b8d4-82ff-483f-bfae-9fef015790ca ./dist/registerValidators
```

`rollup` and `defender-autotask-client` can be installed globally to avoid the `npx` prefix.

## Contract Verification

The Hardhat plug-in [@nomiclabs/hardhat-etherscan](https://www.npmjs.com/package/@nomiclabs/hardhat-etherscan) is used to verify contracts on Etherscan.
Expand Down
Loading