Skip to content
Merged
Show file tree
Hide file tree
Changes from 159 commits
Commits
Show all changes
168 commits
Select commit Hold shift + click to select a range
2260247
test: <- propose and finalize update/removal
riccardo-ssvlabs Mar 3, 2025
b49de04
feat: <- support verification at deploy and more tests
riccardo-ssvlabs Mar 4, 2025
4f82724
feat: <- use strategy whitelisting methods
riccardo-ssvlabs Mar 4, 2025
c125f10
test: <- finish test coverage
riccardo-ssvlabs Mar 5, 2025
9ce8ef5
test: <- move from upgradeable to not
riccardo-ssvlabs Mar 5, 2025
423998f
test: <- achieve 100% total coverage
riccardo-ssvlabs Mar 6, 2025
d7d68ff
chore: <- improve style
riccardo-ssvlabs Mar 7, 2025
0307c6c
fix(ownable-based-app): <- var shadowing
riccardo-ssvlabs Mar 7, 2025
ce8f177
fix: <- more shadowing
riccardo-ssvlabs Mar 7, 2025
084bdd6
chore: <- remove sligther obscuring gas reports
riccardo-ssvlabs Mar 7, 2025
5a46d19
chore: <- restore
riccardo-ssvlabs Mar 7, 2025
81d6c01
gas: saving 30/50 gas
riccardo-ssvlabs Mar 7, 2025
8d6bc43
gas(proposeBAppTokensUpdate: optmize
riccardo-ssvlabs Mar 7, 2025
4cbfc47
gas(proposeBAppTokensRemoval): <- optmize
riccardo-ssvlabs Mar 7, 2025
67bb77e
optimize: <- add new tokens
riccardo-ssvlabs Mar 7, 2025
f2d9ef4
optimize: <- use unchecked block for delegateBalance
riccardo-ssvlabs Mar 7, 2025
313ea91
optimize: <- use unchecked block for delegateBalance - format
riccardo-ssvlabs Mar 7, 2025
d9e173f
optimize: <- use unchecked block for more balance operations
riccardo-ssvlabs Mar 7, 2025
c1aa8e5
optimize: <- uint256 is more optimized for loops
riccardo-ssvlabs Mar 7, 2025
cf24b73
optimize: <- restore previous obligation
riccardo-ssvlabs Mar 7, 2025
ccbdaae
test: <- advanced tests
riccardo-ssvlabs Mar 10, 2025
0116505
chore: <- format
riccardo-ssvlabs Mar 10, 2025
ebd3e31
test: <- multiple updates of obligations and used tokens
riccardo-ssvlabs Mar 11, 2025
339903f
test: <- advanced withdrawal flow
riccardo-ssvlabs Mar 11, 2025
b7bad6e
test: <- advanced add tokens then remove, with obl. implications
riccardo-ssvlabs Mar 11, 2025
d9582b7
chore: <- format
riccardo-ssvlabs Mar 11, 2025
d8994ff
test: <- test more events
riccardo-ssvlabs Mar 11, 2025
945a5b8
test: <- test more events and add check strategy util
riccardo-ssvlabs Mar 11, 2025
7574701
feat: <- remove old fee from events
riccardo-ssvlabs Mar 12, 2025
6c03771
test: <- continue test refactor
riccardo-ssvlabs Mar 12, 2025
0b73d02
test: <- refactor correct number of used tokens
riccardo-ssvlabs Mar 12, 2025
4a9b67b
test: <- refactor delegated balance
riccardo-ssvlabs Mar 13, 2025
34952c0
test: <- refactor strategy
riccardo-ssvlabs Mar 14, 2025
0579b6c
test: <- refactor strategy complete
riccardo-ssvlabs Mar 14, 2025
6b4860a
feat: <- add hoodi deployment
riccardo-ssvlabs Mar 17, 2025
f3919e5
feat: <- add script to verify on hoodi
riccardo-ssvlabs Mar 18, 2025
67e36be
fix(exploit): double check the amount on finalize withdrawal
riccardo-ssvlabs Mar 18, 2025
613f3cf
feat: <- isFast field to fee update event
riccardo-ssvlabs Mar 19, 2025
d2fee0d
test: <- reject exploit withdrawal ERC20 and ETH
riccardo-ssvlabs Mar 19, 2025
f2ad651
feat: <- support non interface compatible bApps and EOA bBapps
riccardo-ssvlabs Mar 19, 2025
24357cb
feat: <- slashing wip
riccardo-ssvlabs Mar 17, 2025
408bebd
feat: <- slashing wip 2
riccardo-ssvlabs Mar 18, 2025
3ddeaab
feat: <- slashing wip 2
riccardo-ssvlabs Mar 18, 2025
5ef1b1d
feat: <- support open slashing from SSVBasedApp contract
riccardo-ssvlabs Mar 19, 2025
3825be5
chore: <- format
riccardo-ssvlabs Mar 19, 2025
e24a395
feat: <- optimize for loops
riccardo-ssvlabs Mar 19, 2025
afbe286
feat: <- basic slash + testing
riccardo-ssvlabs Mar 20, 2025
eaaa47f
feat: <- adjusting slashing and tests after share refactor
riccardo-ssvlabs Mar 21, 2025
e25a005
chore: <- describe new shares mappings
riccardo-ssvlabs Mar 21, 2025
4a1e9f1
chore: <- clear shares code
riccardo-ssvlabs Mar 21, 2025
8a44738
chore: <- format
riccardo-ssvlabs Mar 21, 2025
cc8e1f3
chore: <- add comments to explictly handle return values in based app…
riccardo-ssvlabs Mar 21, 2025
6262406
test: <- finish test update for shares
riccardo-ssvlabs Mar 21, 2025
92026cc
Merge branch 'main' into feat/slashing-basics
riccardo-ssvlabs Mar 21, 2025
3a57e89
chore: <- format
riccardo-ssvlabs Mar 21, 2025
e0bbd3d
feat: <- remove fastUpdateObligation and achieve test coverage
riccardo-ssvlabs Mar 24, 2025
6df04b6
test: achieve 100% coverage
riccardo-ssvlabs Mar 24, 2025
cdfbbe2
feat: <- slashing does not burn but send funds in the slashing fund
riccardo-ssvlabs Mar 25, 2025
6326832
feat: <- create storage contract
riccardo-ssvlabs Mar 25, 2025
a8f18d6
test: <- test setters
riccardo-ssvlabs Mar 25, 2025
db7e655
chore: <- format
riccardo-ssvlabs Mar 25, 2025
d844fa4
feat: <- remove emit obligation created event during opt in
riccardo-ssvlabs Mar 26, 2025
5b6bea5
fix(ci): <- remove nightly version
riccardo-ssvlabs Mar 26, 2025
162975f
feat: <- support and test withdraw from slashing fund, convert var to…
riccardo-ssvlabs Mar 26, 2025
a0c2711
feat: <- add reentrancy
riccardo-ssvlabs Mar 26, 2025
cb5a108
fix: typo
riccardo-ssvlabs Mar 27, 2025
d4a2a88
feat: support new architecture wip
riccardo-ssvlabs Mar 31, 2025
0fd88d6
feat: support new format
riccardo-ssvlabs Mar 31, 2025
369bde7
test: <- compliant format
riccardo-ssvlabs Mar 31, 2025
49f0150
chore: <- explicit imports
riccardo-ssvlabs Apr 1, 2025
58cf219
chore: <- prepare style for audit
riccardo-ssvlabs Apr 1, 2025
b8564bf
test: <- update modules
riccardo-ssvlabs Apr 1, 2025
826f494
test: <- clean testing and reach coverage
riccardo-ssvlabs Apr 1, 2025
236bb97
feat: <- support slashing total balance
riccardo-ssvlabs Apr 1, 2025
e435004
chore: <- polish strategy module
riccardo-ssvlabs Apr 1, 2025
0992db5
feat: <- support full slashing
riccardo-ssvlabs Apr 2, 2025
b4a7ab1
feat: <- add new view for current generation value
riccardo-ssvlabs Apr 2, 2025
fc220ad
fix: <- change owner to account because of shadowning
riccardo-ssvlabs Apr 2, 2025
07c5ad4
feat: <- test adjusted finalize withdrawal
riccardo-ssvlabs Apr 2, 2025
9a17606
test: <- achieve complete coverage
riccardo-ssvlabs Apr 2, 2025
d37db33
test: <- propose withdrawal overwrites correctly
riccardo-ssvlabs Apr 2, 2025
402f901
chore: <- polish comments
riccardo-ssvlabs Apr 2, 2025
680114a
feat: <- remove receiver from slash function
riccardo-ssvlabs Apr 3, 2025
aa20cf0
test: <- cover withdrawSlashingFund from BAppCore
riccardo-ssvlabs Apr 3, 2025
5b1fc24
chore: <- polish comments
riccardo-ssvlabs Apr 3, 2025
98d3ad7
feat: <- split strategy manager into more modules
riccardo-ssvlabs Apr 3, 2025
9723301
chore: <- add comment for review
riccardo-ssvlabs Apr 3, 2025
aa5495b
Merge pull request #34 from ssvlabs/test/split-half
riccardo-ssvlabs Apr 3, 2025
3c07a4a
feat: <- restructure repo
riccardo-ssvlabs Apr 4, 2025
88414ff
feat: <- add only owner for ssvdao methods
riccardo-ssvlabs Apr 6, 2025
5bc6de5
feat: <- add ownership test
riccardo-ssvlabs Apr 7, 2025
635d437
feat: <- update freezing implementation
riccardo-ssvlabs Apr 7, 2025
f3971e2
fix: <- use correct name for freeze timelock
riccardo-ssvlabs Apr 7, 2025
a44b072
feat: <- support slashing and obligation ajustment
riccardo-ssvlabs Apr 7, 2025
ba445bb
chore: <- remove unused var
riccardo-ssvlabs Apr 7, 2025
5162a52
feat: <- set 14 days withdrawal and obligation time
riccardo-ssvlabs Apr 7, 2025
32370fd
feat: <- update global values
riccardo-ssvlabs Apr 8, 2025
e59166b
test: <- 100% slashing coverage
riccardo-ssvlabs Apr 8, 2025
2452cc9
test: <- unify slash tests
riccardo-ssvlabs Apr 8, 2025
110beab
chore: <- format test imports
riccardo-ssvlabs Apr 8, 2025
78b74fc
feat: <- support new structure
riccardo-ssvlabs Apr 8, 2025
c66baba
feat: <- support initial var configuration
riccardo-ssvlabs Apr 9, 2025
4e82ec0
chore: <- format and remove commets
riccardo-ssvlabs Apr 11, 2025
ff6884c
feat: <- move ssvDao to ProtocolManager
riccardo-ssvlabs Apr 11, 2025
f4712f4
chore: <- fmt
riccardo-ssvlabs Apr 11, 2025
6a0b29c
feat: <- shrink in 3 modules
riccardo-ssvlabs Apr 14, 2025
afeda25
chore: <- fmt
riccardo-ssvlabs Apr 14, 2025
73b1f37
feat: <- set MAX_PERCENTAGE and ETH_ADDRESS as constants
riccardo-ssvlabs Apr 14, 2025
d0d58bc
feat: <- remove proxy and add delegateTo inside the core
riccardo-ssvlabs Apr 14, 2025
715b9de
feat: <- move errors from ICore to interfaces
riccardo-ssvlabs Apr 14, 2025
f5f93e9
chore: <- remove unused proxy
riccardo-ssvlabs Apr 14, 2025
996aa8a
feat: <- support multiple module update
riccardo-ssvlabs Apr 14, 2025
4a516aa
fix: <- remove unused updates
riccardo-ssvlabs Apr 14, 2025
2af170d
chore: <- update package.json scripts
riccardo-ssvlabs Apr 14, 2025
fe943ae
feat: <- restrict isBApp to internal
riccardo-ssvlabs Apr 14, 2025
9cf337e
feat: <- restrict isBApp to private view
riccardo-ssvlabs Apr 14, 2025
fdee33a
feat: <- add obligation updated event for slashing readjustment
riccardo-ssvlabs Apr 14, 2025
bae67af
chore: <- remove unused events and sort
riccardo-ssvlabs Apr 14, 2025
2d09b81
feat: <- add getModuleAddress in interface
riccardo-ssvlabs Apr 14, 2025
f23101d
chore: <- remove commented code
riccardo-ssvlabs Apr 14, 2025
742d133
feat: <- support pre-commit or repo
riccardo-ssvlabs Apr 15, 2025
7cc36b1
chore: <- update readme
riccardo-ssvlabs Apr 15, 2025
b1afcc1
chore: <- update readme 2
riccardo-ssvlabs Apr 15, 2025
5c4800f
chore: <- test husky
riccardo-ssvlabs Apr 15, 2025
8fe21f9
feat: <- general pre-commit w/ solhint
riccardo-ssvlabs Apr 15, 2025
3477d4d
feat: <- support lint-staged in pre-commit
riccardo-ssvlabs Apr 15, 2025
94a0270
feat: <- support new prettier
riccardo-ssvlabs Apr 15, 2025
512e2b5
feat: <- support pre-commit right order
riccardo-ssvlabs Apr 15, 2025
948ff80
feat: <- support pre-commit right order 2
riccardo-ssvlabs Apr 15, 2025
3dd7818
feat: <- update CI with new prettier
riccardo-ssvlabs Apr 15, 2025
dfb0f06
feat: <- update CI with npm instsall
riccardo-ssvlabs Apr 15, 2025
8b52564
feat: <- slashing section in README
riccardo-ssvlabs Apr 15, 2025
44580b5
chore: <- adjust ci and more readme info
riccardo-ssvlabs Apr 15, 2025
7b2b6e9
fix: <- use bound instead of assume after CI failing
riccardo-ssvlabs Apr 15, 2025
33e7187
fix: <- test
riccardo-ssvlabs Apr 15, 2025
cc5c0bb
feat: <- remove modifier and use function for _onlyStrategyOwner
riccardo-ssvlabs Apr 15, 2025
74eb236
chore: <- format
riccardo-ssvlabs Apr 15, 2025
7b87687
chore: <- format
riccardo-ssvlabs Apr 15, 2025
2848bcc
feat: <- use call to trasfer eth
riccardo-ssvlabs Apr 15, 2025
9a0a20e
chore: <- reduce fuzzer value
riccardo-ssvlabs Apr 15, 2025
ffc1de7
test: <- bApp rejects ETH transfer
riccardo-ssvlabs Apr 16, 2025
2d832f0
chore: <- remove slither from the CI
riccardo-ssvlabs Apr 16, 2025
6f05639
chore: <- remove empty test
riccardo-ssvlabs Apr 16, 2025
eb50397
fix: <- remove freezing data from struc
riccardo-ssvlabs Apr 16, 2025
585b674
chore: <- format
riccardo-ssvlabs Apr 16, 2025
c525957
chore: <- remove comments
riccardo-ssvlabs Apr 16, 2025
cc90955
feat: support one step token update WIP
riccardo-ssvlabs Apr 17, 2025
e9c2335
chore: <- remove internal method to avoid reading again from storage
riccardo-ssvlabs Apr 17, 2025
a2d5c51
chore: <- format
riccardo-ssvlabs Apr 17, 2025
8f3f96d
chore: <- remove unused vars
riccardo-ssvlabs Apr 17, 2025
75f5484
feat: test strategy owners
riccardo-ssvlabs Apr 17, 2025
350a809
feat: update readmes with more info
riccardo-ssvlabs Apr 18, 2025
a668e41
chore: <- format readme
riccardo-ssvlabs Apr 18, 2025
9583b53
chore: <- format readme 2
riccardo-ssvlabs Apr 18, 2025
3dbf4e6
feat(readme): <- add deploy instructions
riccardo-ssvlabs Apr 18, 2025
20fb611
feat(readme): <- add deploy instructions
riccardo-ssvlabs Apr 18, 2025
0db1968
Merge branch 'feat/slashing' into feat/othentic
riccardo-ssvlabs Apr 18, 2025
42f298e
feat: removed usedTokens var
riccardo-ssvlabs Apr 18, 2025
4b62a8d
feat: update module info
riccardo-ssvlabs Apr 18, 2025
e6ba580
chore: ref to deploy script
riccardo-ssvlabs Apr 18, 2025
5abbfa2
chore: <- resolve conflicts
riccardo-ssvlabs Apr 22, 2025
e72a5b5
chore: <- remove unused var
riccardo-ssvlabs Apr 22, 2025
282443b
test: <- support slashing percentage
riccardo-ssvlabs Apr 22, 2025
f77d6a2
chore: <- remove unused var
riccardo-ssvlabs Apr 22, 2025
5cb489c
chore: <- remove unused var
riccardo-ssvlabs Apr 22, 2025
502f9d8
chore: <- remove unused test
riccardo-ssvlabs Apr 22, 2025
d7eb5e2
chore: adjustments
mtabasco Apr 23, 2025
63baf0b
chore: rename functions
mtabasco Apr 23, 2025
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
32 changes: 14 additions & 18 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,27 @@ jobs:
with:
submodules: recursive

- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
cache-dependency-path: package-lock.json

- name: Install dependencies
run: |
npm install

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

- name: Show Forge version
run: |
forge --version

- name: Run Forge fmt
- name: Run Prettier Format Check
run: |
forge fmt --check
id: fmt
npm run lint:check

- name: Run Forge build
run: |
Expand All @@ -42,16 +50,4 @@ jobs:
- name: Run Forge tests
run: |
forge test -vvv
id: test

- name: Run Slither
uses: crytic/[email protected]
id: slither
with:
sarif: results.sarif
fail-on: none

- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: ${{ steps.slither.outputs.sarif }}
id: test
4 changes: 2 additions & 2 deletions .husky/pre-commit
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
npm run format
npm run lint:fix

npm run lint:solhint
npx lint-staged

npm run test-coverage
6 changes: 6 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
node_modules
out/
cache/
lib/
!src/lib
coverage
20 changes: 20 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"plugins": ["prettier-plugin-solidity"],
"singleQuote": false,
"trailingComma": "none",
"printWidth": 100,
"bracketSpacing": true,
"overrides": [
{
"files": "*.sol",
"options": {
"parser": "solidity-parse",
"printWidth": 80,
"tabWidth": 4,
"useTabs": false,
"singleQuote": false,
"bracketSpacing": true
}
}
]
}
12 changes: 9 additions & 3 deletions .solhint.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
{
"extends": "solhint:recommended",
"rules": {
"compiler-version": ["error", "0.8.28"],
"compiler-version": ["error", "0.8.29"],
"no-inline-assembly": "off",
"no-unused-import": "error",
"func-named-parameters": "off",
"func-visibility": ["error", { "ignoreConstructors": true }],
"reason-string": ["warn", { "maxLength": 64 }],
"immutable-vars-naming": ["error", { "immutablesAsConstants": true }],
"var-name-mixedcase": "error",
"func-name-mixedcase": "error"
"var-name-mixedcase": "warn",
"custom-errors": "error",
"func-name-mixedcase": "error",
"max-line-length": [
"error",
160
],
"no-unused-vars": "off"
}
}
1 change: 1 addition & 0 deletions .solhintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
interfaces/
2 changes: 1 addition & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
@@ -1 +1 @@
solidity 0.8.28
solidity 0.8.29
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"solidity.compileUsingRemoteVersion": "v0.8.29+commit.ab55807c"
}
125 changes: 116 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,36 @@

## :book: _Description_

This repository contains the core Based Applications Contracts, including UUPS upgradeable contracts for managing delegations, creating strategies, and registering bApps on the SSV Based-Applications Platform.
This repository contains the SSV Based Applications Platform Contracts.

### **Main Contracts**
The contracts are organized under the `src/` directory into two main folders:

- **`SSVBasedApps.sol`** – Core contract managing bApps, delegations, and strategies.
- **`core/`**: contains the main platform contract: `SSVBasedApps.sol`;

- **`IBasedAppManager.sol`** – Interface for the Based Application Manager.
- **`middleware/`** contains the module contracts to build a based application.

### **The Core Platform**

The core contract is build in a diamond-like pattern:

- **`SSVBasedApps.sol`** – Core contract where all the functions are declared and via an internal proxy it redirects to the right implementation.

The functions are implemented in 3 different modules:

- **`IStorage.sol`** – Core interface defining key structs for staking and obligation mechanisms.
- **`StrategyManager.sol`** – Implements functions related to strategies, validator balance delegation, opting-in to bApp, and slashing;

- **`BasedAppsManager.sol`** – Implements functions related to bApps like the registration and update the metadata;

- **`PlatformManager.sol`** – Implements functions for updating the global variables like timelocks length, max number of shares, etc. The variable update process will be handled by the SSV DAO.

### **The Middleware**

This `middleware` folder contains the modules for building a bapp:

- **`modules/core`**: the base layer for a bApp to be compliant and be recognized by the system;

- **`examples`**: contains example of working compliant bApps.

&nbsp;

## :page_with_curl: _Instructions_
Expand All @@ -41,29 +61,116 @@ __`❍ forge test`__

&nbsp;

## 🔨 _Slashing Mechanism_

The `slash` function allows for the reduction of a strategy’s token balance under specific conditions, either as a penalty or to enforce protocol-defined behavior. Slashing can happen in two distinct modes, depending on whether:

**1)** The bApp is a compliant smart contract;

**2)** The bApp is a non-compliant smart contract or an EOA.

### 🧠 Compliant BApp

If the bApp is a compliant contract implementing the required interface `IBasedApp`,

The slash function of the bApp is called: `(success, receiver, exit) = IBasedApp(bApp).slash(...)`

* `data` parameter is forwarded and may act as a proof or auxiliary input.

* The bApp decides:

* Who receives the slashed funds by setting the `receiver` fund;

* Whether to exit the strategy or adjust obligations;

* If `exit == true`, the strategy is exited and the obligation value is set to 0;

* Otherwise, obligations are updated proportionally based on remaining balances;

* Funds are credited to the receiver in the slashing fund.

### 🔐 Non-compliant bApp (EOA or Non-compliant Contract)

If the bApp is an EOA or does not comply with the required interface:

* Only the bApp itself can invoke slashing;

* The receiver of slashed funds is forcibly set to the bApp itself;

* The strategy is always exited (no obligation adjustment);

* Funds are added to the bApp’s slashing fund.

### ⏳ Post Slashing

⚠️ Important: After an obligation has been exited, it can be updated again to a value greater than 0, but only after a 14-day obligation timelock.

This acts as a safeguard to prevent immediate re-entry and encourages more deliberate strategy participation.

### 💸 Slashing Fund

Slashed tokens are not immediately transferred. They are deposited into an internal slashing fund.

The `receiver` (set during slashing) can later withdraw them using:

```
function withdrawSlashingFund(address token, uint256 amount) external
function withdrawETHSlashingFund(uint256 amount) external
```

These functions verify balances and authorize the caller to retrieve their accumulated slashed tokens.

&nbsp;

## :page_facing_up: _Whitepaper_

[Whitepaper](https://ssv.network/wp-content/uploads/2025/01/SSV2.0-Based-Applications-Protocol-1.pdf)

&nbsp;

## :page_facing_up: _More Resources_
## :books: _More Resources_

[Based Apps Onboarding Guide](./doc/bapp_onboarding.md)
[Based Apps Onboarding Guide](./doc/bAppOnBoarding.md)

&nbsp;

## :rocket: _Deployments_

### Public Testnet
### How to Deploy

**1)** Run the deployment script defined in `scripts/`:

__`❍ npm run deploy:holesky`__: verification is done automatically.

__`❍ npm run deploy:hoodi`__: verification needs to be done manually for now.

### How to Update Module Contracts

It is possible to update each one of the three modules: `StrategyManager`, `BasedAppsManager` and `ProtocolManager`.

It is possible to update multiple modules at the same time.

**1)** Go on the Proxy Contract on Etherscan, under "Write as Proxy" call the function:

__`❍ updateModules`__: specifying the correct module id and the new module address.

### How to Upgrade the Implementation Contract

**1)** Go on the Proxy Contract on Etherscan, under "Write as Proxy" call the function:

__`❍ upgradeToAndCall`__: specifying the new implementation address. The data field can be left empty in this case.

There is also the `UpgradeProxy.s.sol` script file that can be run easily from the CLI.

### Public Testnet Holesky

| Name | Proxy | Implementation | Notes |
| -------- | -------- | -------- | -------- |
| [`BasedApplications`](https://github.com/ssvlabs/based-applications/blob/main/src/BasedAppManager.sol) | [`0x1Bd6ceB98Daf7FfEB590236b720F81b65213836A`](https://holesky.etherscan.io/address/0x1Bd6ceB98Daf7FfEB590236b720F81b65213836A) | [`0x9a09A49870353867b0ce9901B44E84C32B2A47AC`](https://holesky.etherscan.io/address/0x9a09A49870353867b0ce9901B44E84C32B2A47AC) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/v5.1.0/contracts/proxy/utils/UUPSUpgradeable.sol) |

&nbsp;

## License
## :scroll: _License_

2025 SSV Network <https://ssv.network/>

Expand Down
Loading
Loading