@@ -4,14 +4,25 @@ pragma solidity ^0.8.0;
44import 'solidity-utils/contracts/utils/ScriptUtils.sol ' ;
55import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol ' ;
66import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol ' ;
7+ import {MiscOptimism} from 'aave-address-book/MiscOptimism.sol ' ;
8+ import {AaveV3Optimism, AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol ' ;
9+ import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol ' ;
10+ import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol ' ;
11+ import {MiscGnosis} from 'aave-address-book/MiscGnosis.sol ' ;
12+ import {AaveV3Gnosis, AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol ' ;
13+ import {MiscBNB} from 'aave-address-book/MiscBNB.sol ' ;
14+ import {AaveV3BNB, AaveV3BNBAssets} from 'aave-address-book/AaveV3BNB.sol ' ;
715import {GovernanceV3Arbitrum} from 'aave-address-book/GovernanceV3Arbitrum.sol ' ;
16+ import {GovernanceV3Optimism} from 'aave-address-book/GovernanceV3Optimism.sol ' ;
17+ import {GovernanceV3Polygon} from 'aave-address-book/GovernanceV3Polygon.sol ' ;
18+ import {GovernanceV3Gnosis} from 'aave-address-book/GovernanceV3Gnosis.sol ' ;
19+ import {GovernanceV3BNB} from 'aave-address-book/GovernanceV3BNB.sol ' ;
820import {ICreate3Factory} from 'solidity-utils/contracts/create3/interfaces/ICreate3Factory.sol ' ;
921import {EdgeRiskStewardCaps, IRiskSteward} from '../../src/contracts/EdgeRiskStewardCaps.sol ' ;
1022import {AaveStewardInjectorCaps} from '../../src/contracts/AaveStewardInjectorCaps.sol ' ;
23+ import {GelatoAaveStewardInjectorCaps} from '../../src/contracts/gelato/GelatoAaveStewardInjectorCaps.sol ' ;
1124
1225library DeployStewardContracts {
13- address constant EDGE_RISK_ORACLE = 0x861eeAdB55E41f161F31Acb1BFD4c70E3a964Aed ;
14-
1526 function _deployRiskStewards (
1627 address pool ,
1728 address configEngine ,
@@ -32,16 +43,22 @@ library DeployStewardContracts {
3243
3344 function _deployCapsStewardInjector (
3445 bytes32 salt ,
46+ address create3Factory ,
3547 address riskSteward ,
3648 address owner ,
3749 address guardian ,
38- address [] memory whitelistedMarkets
50+ address [] memory whitelistedMarkets ,
51+ address riskOracle ,
52+ bool isGelatoInjector
3953 ) internal returns (address ) {
40- address stewardInjector = ICreate3Factory (MiscArbitrum.CREATE_3_FACTORY).create (
54+ bytes memory injectorCode = isGelatoInjector ?
55+ type (GelatoAaveStewardInjectorCaps).creationCode : type (AaveStewardInjectorCaps).creationCode;
56+
57+ address stewardInjector = ICreate3Factory (create3Factory).create (
4158 salt,
4259 abi.encodePacked (
43- type (AaveStewardInjectorCaps).creationCode ,
44- abi.encode (EDGE_RISK_ORACLE , riskSteward, whitelistedMarkets, owner, guardian)
60+ injectorCode ,
61+ abi.encode (riskOracle , riskSteward, whitelistedMarkets, owner, guardian)
4562 )
4663 );
4764 return stewardInjector;
@@ -83,10 +100,11 @@ library DeployStewardContracts {
83100// make deploy-ledger contract=scripts/deploy/DeployCapInjector.s.sol:DeployArbitrum chain=arbitrum
84101contract DeployArbitrum is ArbitrumScript {
85102 address constant GUARDIAN = 0x87dFb794364f2B117C8dbaE29EA622938b3Ce465 ;
103+ address constant RISK_ORACLE = 0x861eeAdB55E41f161F31Acb1BFD4c70E3a964Aed ;
86104
87105 function run () external {
88106 vm.startBroadcast ();
89- bytes32 salt = 'CapsStewardInjector ' ;
107+ bytes32 salt = 'CapStewardInjector ' ;
90108 address predictedStewardsInjector = ICreate3Factory (MiscArbitrum.CREATE_3_FACTORY)
91109 .predictAddress (msg .sender , salt);
92110
@@ -116,10 +134,178 @@ contract DeployArbitrum is ArbitrumScript {
116134
117135 DeployStewardContracts._deployCapsStewardInjector (
118136 salt,
137+ MiscArbitrum.CREATE_3_FACTORY,
119138 riskSteward,
120139 GovernanceV3Arbitrum.EXECUTOR_LVL_1,
121140 GUARDIAN,
122- whitelistedMarkets
141+ whitelistedMarkets,
142+ RISK_ORACLE,
143+ false
144+ );
145+ vm.stopBroadcast ();
146+ }
147+ }
148+
149+ // make deploy-ledger contract=scripts/deploy/DeployCapInjector.s.sol:DeployOptimism chain=optimism
150+ contract DeployOptimism is OptimismScript {
151+ address constant GUARDIAN = 0x9867Ce43D2a574a152fE6b134F64c9578ce3cE03 ;
152+ address constant RISK_ORACLE = 0x9f6aA2aB14bFF53e4b79A81ce1554F1DFdbb6608 ;
153+
154+ function run () external {
155+ vm.startBroadcast ();
156+ bytes32 salt = 'CapStewardInjector ' ;
157+ address predictedStewardsInjector = ICreate3Factory (MiscOptimism.CREATE_3_FACTORY)
158+ .predictAddress (msg .sender , salt);
159+
160+ address riskSteward = DeployStewardContracts._deployRiskStewards (
161+ address (AaveV3Optimism.POOL),
162+ AaveV3Optimism.CONFIG_ENGINE,
163+ predictedStewardsInjector,
164+ GovernanceV3Optimism.EXECUTOR_LVL_1
165+ );
166+
167+ address [] memory whitelistedMarkets = new address [](7 );
168+ whitelistedMarkets[0 ] = AaveV3OptimismAssets.WETH_A_TOKEN;
169+ whitelistedMarkets[1 ] = AaveV3OptimismAssets.USDT_A_TOKEN;
170+ whitelistedMarkets[2 ] = AaveV3OptimismAssets.WBTC_A_TOKEN;
171+ whitelistedMarkets[3 ] = AaveV3OptimismAssets.USDCn_A_TOKEN;
172+ whitelistedMarkets[4 ] = AaveV3OptimismAssets.wstETH_A_TOKEN;
173+ whitelistedMarkets[5 ] = AaveV3OptimismAssets.rETH_A_TOKEN;
174+ whitelistedMarkets[6 ] = AaveV3OptimismAssets.OP_A_TOKEN;
175+
176+ DeployStewardContracts._deployCapsStewardInjector (
177+ salt,
178+ MiscOptimism.CREATE_3_FACTORY,
179+ riskSteward,
180+ GovernanceV3Optimism.EXECUTOR_LVL_1,
181+ GUARDIAN,
182+ whitelistedMarkets,
183+ RISK_ORACLE,
184+ false
185+ );
186+ vm.stopBroadcast ();
187+ }
188+ }
189+
190+ // make deploy-ledger contract=scripts/deploy/DeployCapInjector.s.sol:DeployPolygon chain=polygon
191+ contract DeployPolygon is PolygonScript {
192+ address constant GUARDIAN = 0x7683177b05a92e8B169D833718BDF9d0ce809aA9 ;
193+ address constant RISK_ORACLE = 0x9f6aA2aB14bFF53e4b79A81ce1554F1DFdbb6608 ;
194+
195+ function run () external {
196+ vm.startBroadcast ();
197+ bytes32 salt = 'CapStewardInjector ' ;
198+ address predictedStewardsInjector = ICreate3Factory (MiscPolygon.CREATE_3_FACTORY)
199+ .predictAddress (msg .sender , salt);
200+
201+ address riskSteward = DeployStewardContracts._deployRiskStewards (
202+ address (AaveV3Polygon.POOL),
203+ AaveV3Polygon.CONFIG_ENGINE,
204+ predictedStewardsInjector,
205+ GovernanceV3Polygon.EXECUTOR_LVL_1
206+ );
207+
208+ address [] memory whitelistedMarkets = new address [](10 );
209+ whitelistedMarkets[0 ] = AaveV3PolygonAssets.WETH_A_TOKEN;
210+ whitelistedMarkets[1 ] = AaveV3PolygonAssets.USDC_A_TOKEN;
211+ whitelistedMarkets[2 ] = AaveV3PolygonAssets.USDT_A_TOKEN;
212+ whitelistedMarkets[3 ] = AaveV3PolygonAssets.WBTC_A_TOKEN;
213+ whitelistedMarkets[4 ] = AaveV3PolygonAssets.DAI_A_TOKEN;
214+ whitelistedMarkets[5 ] = AaveV3PolygonAssets.USDCn_A_TOKEN;
215+ whitelistedMarkets[6 ] = AaveV3PolygonAssets.LINK_A_TOKEN;
216+ whitelistedMarkets[7 ] = AaveV3PolygonAssets.wstETH_A_TOKEN;
217+ whitelistedMarkets[8 ] = AaveV3PolygonAssets.WPOL_A_TOKEN;
218+ whitelistedMarkets[9 ] = AaveV3PolygonAssets.AAVE_A_TOKEN;
219+
220+ DeployStewardContracts._deployCapsStewardInjector (
221+ salt,
222+ MiscPolygon.CREATE_3_FACTORY,
223+ riskSteward,
224+ GovernanceV3Polygon.EXECUTOR_LVL_1,
225+ GUARDIAN,
226+ whitelistedMarkets,
227+ RISK_ORACLE,
228+ false
229+ );
230+ vm.stopBroadcast ();
231+ }
232+ }
233+
234+ // make deploy-ledger contract=scripts/deploy/DeployCapInjector.s.sol:DeployGnosis chain=gnosis
235+ contract DeployGnosis is GnosisScript {
236+ address constant GUARDIAN = 0x4bBBcfF03E94B2B661c5cA9c3BD34f6504591764 ;
237+ address constant RISK_ORACLE = 0x7BD97DD6C199532d11Cf5f55E13a120dB6dd0F4F ;
238+
239+ function run () external {
240+ vm.startBroadcast ();
241+ bytes32 salt = 'CapStewardInjectorV2 ' ;
242+ address predictedStewardsInjector = ICreate3Factory (MiscGnosis.CREATE_3_FACTORY)
243+ .predictAddress (msg .sender , salt);
244+
245+ address riskSteward = DeployStewardContracts._deployRiskStewards (
246+ address (AaveV3Gnosis.POOL),
247+ AaveV3Gnosis.CONFIG_ENGINE,
248+ predictedStewardsInjector,
249+ GovernanceV3Gnosis.EXECUTOR_LVL_1
250+ );
251+
252+ address [] memory whitelistedMarkets = new address [](6 );
253+ whitelistedMarkets[0 ] = AaveV3GnosisAssets.WETH_A_TOKEN;
254+ whitelistedMarkets[1 ] = AaveV3GnosisAssets.USDCe_A_TOKEN;
255+ whitelistedMarkets[2 ] = AaveV3GnosisAssets.sDAI_A_TOKEN;
256+ whitelistedMarkets[3 ] = AaveV3GnosisAssets.EURe_A_TOKEN;
257+ whitelistedMarkets[4 ] = AaveV3GnosisAssets.GNO_A_TOKEN;
258+ whitelistedMarkets[5 ] = AaveV3GnosisAssets.wstETH_A_TOKEN;
259+
260+ DeployStewardContracts._deployCapsStewardInjector (
261+ salt,
262+ MiscGnosis.CREATE_3_FACTORY,
263+ riskSteward,
264+ GovernanceV3Gnosis.EXECUTOR_LVL_1,
265+ GUARDIAN,
266+ whitelistedMarkets,
267+ RISK_ORACLE,
268+ true
269+ );
270+ vm.stopBroadcast ();
271+ }
272+ }
273+
274+ // make deploy-ledger contract=scripts/deploy/DeployCapInjector.s.sol:DeployBNB chain=bnb
275+ contract DeployBNB is BNBScript {
276+ address constant GUARDIAN = 0xB5ABc2BcB050bE70EF53338E547d87d06F7c877d ;
277+ address constant RISK_ORACLE = 0x239d3Bc5fa247337287cb03f53B8bc63DBBc332D ;
278+
279+ function run () external {
280+ vm.startBroadcast ();
281+ bytes32 salt = 'CapStewardInjector ' ;
282+ address predictedStewardsInjector = ICreate3Factory (MiscBNB.CREATE_3_FACTORY)
283+ .predictAddress (msg .sender , salt);
284+
285+ address riskSteward = DeployStewardContracts._deployRiskStewards (
286+ address (AaveV3BNB.POOL),
287+ AaveV3BNB.CONFIG_ENGINE,
288+ predictedStewardsInjector,
289+ GovernanceV3BNB.EXECUTOR_LVL_1
290+ );
291+
292+ address [] memory whitelistedMarkets = new address [](6 );
293+ whitelistedMarkets[0 ] = AaveV3BNBAssets.BTCB_A_TOKEN;
294+ whitelistedMarkets[1 ] = AaveV3BNBAssets.WBNB_A_TOKEN;
295+ whitelistedMarkets[2 ] = AaveV3BNBAssets.USDT_A_TOKEN;
296+ whitelistedMarkets[3 ] = AaveV3BNBAssets.USDC_A_TOKEN;
297+ whitelistedMarkets[4 ] = AaveV3BNBAssets.ETH_A_TOKEN;
298+ whitelistedMarkets[5 ] = AaveV3BNBAssets.wstETH_A_TOKEN;
299+
300+ DeployStewardContracts._deployCapsStewardInjector (
301+ salt,
302+ MiscArbitrum.CREATE_3_FACTORY,
303+ riskSteward,
304+ GovernanceV3BNB.EXECUTOR_LVL_1,
305+ GUARDIAN,
306+ whitelistedMarkets,
307+ RISK_ORACLE,
308+ false
123309 );
124310 vm.stopBroadcast ();
125311 }
0 commit comments