|
2 | 2 |
|
3 | 3 | :construction: CAUTION: This repo is currently under **heavy development!** :construction: |
4 | 4 |
|
| 5 | +We strongly advise you to work with **releases tags**. Please, check what version the SSVBasedApp.sol is using by calling `getVersion()`. |
| 6 | + |
| 7 | + |
| 8 | + |
5 | 9 | [](https://github.com/ssvlabs/based-applications/actions/workflows/tests.yml) |
6 | 10 | [](https://www.gnu.org/licenses/gpl-3.0.html) |
7 | 11 |
|
@@ -61,94 +65,58 @@ __`❍ forge test`__ |
61 | 65 |
|
62 | 66 | |
63 | 67 |
|
64 | | -## 🔨 _Slashing Mechanism_ |
65 | | - |
66 | | -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: |
67 | | - |
68 | | -**1)** The bApp is a compliant smart contract; |
69 | | - |
70 | | -**2)** The bApp is a non-compliant smart contract or an EOA. |
71 | | - |
72 | | -### 🧠 Compliant BApp |
73 | | - |
74 | | -If the bApp is a compliant contract implementing the required interface `IBasedApp`, |
75 | | - |
76 | | -The slash function of the bApp is called: `(success, receiver, exit) = IBasedApp(bApp).slash(...)` |
77 | | - |
78 | | -* `data` parameter is forwarded and may act as a proof or auxiliary input. |
79 | | - |
80 | | -* The bApp decides: |
81 | | - |
82 | | - * Who receives the slashed funds by setting the `receiver` fund, it can burn by setting the receiver as `address(0)`; |
83 | | - |
84 | | - * Whether to exit the strategy or adjust obligations; |
85 | | - |
86 | | - * If `exit == true`, the strategy is exited and the obligation value is set to 0; |
87 | | - |
88 | | - * Otherwise, obligations are adjusted proportionally based on remaining balances, the new obligated amount is set to the previous one less the slashed amount; |
89 | | - |
90 | | - * Funds are credited to the receiver in the slashing fund. |
| 68 | +## 🔨 _Slashing & Withdrawals Mechanisms_ |
91 | 69 |
|
92 | | -### 🔐 Non-compliant bApp (EOA or Non-compliant Contract) |
| 70 | +[Slashing & Withdrawals](./guides/slashing-and-withdrawals.md) |
93 | 71 |
|
94 | | -If the bApp is an EOA or does not comply with the required interface: |
| 72 | +[Generation pattern](./guides/generations.md) |
95 | 73 |
|
96 | | -* Only the bApp itself can invoke slashing; |
| 74 | +## :gear: _Feature Activation_ |
97 | 75 |
|
98 | | -* The receiver of slashed funds is forcibly set to the bApp itself; |
| 76 | +[Feature Activation](./guides/feature-activation.md) |
99 | 77 |
|
100 | | -* The strategy is always exited (no obligation adjustment); |
| 78 | +## :page_facing_up: _Whitepaper_ |
101 | 79 |
|
102 | | -* Funds are added to the bApp’s slashing fund. |
| 80 | +[Whitepaper](https://ssv.network/wp-content/uploads/2025/01/SSV2.0-Based-Applications-Protocol-1.pdf) |
103 | 81 |
|
104 | | -### ⏳ Post Slashing |
105 | 82 |
|
106 | | -⚠️ 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. |
| 83 | +## :books: _More Resources_ |
107 | 84 |
|
108 | | -This acts as a safeguard to prevent immediate re-entry and encourages more deliberate strategy participation. |
| 85 | +[Based Apps Onboarding Guide](./guides/bApp-onboarding.md) |
109 | 86 |
|
110 | | -### 💸 Slashing Fund |
111 | 87 |
|
112 | | -Slashed tokens are not immediately transferred. They are deposited into an internal slashing fund. |
| 88 | +## :rocket: _Deployments_ |
113 | 89 |
|
114 | | -The `receiver` (set during slashing) can later withdraw them using: |
| 90 | +### How to Deploy |
115 | 91 |
|
116 | | -``` |
117 | | -function withdrawSlashingFund(address token, uint256 amount) external |
118 | | -function withdrawETHSlashingFund(uint256 amount) external |
119 | | -``` |
| 92 | +**2)** Set the environment variables in the `.env` file. |
120 | 93 |
|
121 | | -These functions verify balances and authorize the caller to retrieve their accumulated slashed tokens. |
| 94 | +**1)** Run the deployment script `DeployAllHoodi.s.sol` defined in `script/`: |
122 | 95 |
|
123 | | - |
| 96 | +__`❍ npm run deploy:hoodi-stage`__: verification is done automatically. |
124 | 97 |
|
125 | | -## :page_facing_up: _Whitepaper_ |
| 98 | +### How to Update Module Contracts |
126 | 99 |
|
127 | | -[Whitepaper](https://ssv.network/wp-content/uploads/2025/01/SSV2.0-Based-Applications-Protocol-1.pdf) |
| 100 | +It is possible to update each one of the three modules: `StrategyManager`, `BasedAppsManager` and `ProtocolManager`. |
128 | 101 |
|
129 | | - |
130 | | - |
131 | | -## :books: _More Resources_ |
| 102 | +It is possible to update multiple modules at the same time. |
132 | 103 |
|
133 | | -[Based Apps Onboarding Guide](./doc/bAppOnBoarding.md) |
| 104 | +**1)** Go on the Proxy Contract on Etherscan, under "Write as Proxy" call the function: |
134 | 105 |
|
135 | | - |
| 106 | +__`❍ updateModules`__: specifying the correct module id and the new module address. |
136 | 107 |
|
137 | | -## :rocket: _Deployments_ |
138 | | - |
139 | | -### How to Deploy |
| 108 | +### How to Upgrade the Implementation Contract |
140 | 109 |
|
141 | | -**1)** Run the deployment script defined in `scripts/`: |
| 110 | +**1)** Go on the Proxy Contract on Etherscan, under "Write as Proxy" call the function: |
142 | 111 |
|
143 | | -__`❍ npm run deploy:holesky`__: verification is done automatically. |
| 112 | +__`❍ upgradeToAndCall`__: specifying the new implementation address. The data field can be left empty in this case. |
144 | 113 |
|
145 | | -__`❍ npm run deploy:hoodi`__: verification needs to be done manually for now. |
146 | 114 |
|
147 | | -### Public Testnet |
| 115 | +### Public Testnet Hoodi |
148 | 116 |
|
149 | 117 | | Name | Proxy | Implementation | Notes | |
150 | 118 | | -------- | -------- | -------- | -------- | |
151 | | -| [`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) | |
| 119 | +| [`SSVBasedApps`](https://github.com/ssvlabs/based-applications/blob/main/src/BasedAppManager.sol) | [`<pending>`](https://holesky.etherscan.io/address/0x1Bd6ceB98Daf7FfEB590236b720F81b65213836A) | [`<pending>`](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) | |
152 | 120 |
|
153 | 121 | |
154 | 122 |
|
|
0 commit comments