From 2a7c3a1e94f6fadd2fb88abd150ee2da02f92ae3 Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Tue, 4 Mar 2025 13:05:17 +0100 Subject: [PATCH 01/10] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20bump=20aave-helpers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/aave-helpers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/aave-helpers b/lib/aave-helpers index 2ddee4d..ec02d4f 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit 2ddee4d460e8a50a5f91e6fc0ce7294828298408 +Subproject commit ec02d4f715770c3e5fc998adebe81f9c15610246 From d78b9fbdd170d5905228063d2b8c9c9d78387dca Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Tue, 4 Mar 2025 13:10:03 +0100 Subject: [PATCH 02/10] =?UTF-8?q?=E2=9C=A8=20implement=20Sonic=20to=20repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- generator/common.ts | 7 ++++-- generator/types.ts | 5 ++--- scripts/networks/RiskStewardsSonic.s.sol | 9 ++++++++ src/contracts/examples/SonicExample.sol | 27 ++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 scripts/networks/RiskStewardsSonic.s.sol create mode 100644 src/contracts/examples/SonicExample.sol diff --git a/generator/common.ts b/generator/common.ts index 22e4d22..be5a025 100644 --- a/generator/common.ts +++ b/generator/common.ts @@ -12,7 +12,8 @@ import { gnosis, scroll, zkSync, - linea + linea, + sonic, } from 'viem/chains'; export const AVAILABLE_CHAINS = [ @@ -29,7 +30,8 @@ export const AVAILABLE_CHAINS = [ 'Gnosis', 'Scroll', 'ZkSync', - 'Linea' + 'Linea', + 'Sonic', ] as const; export function getAssets(pool: PoolIdentifier): string[] { @@ -114,6 +116,7 @@ export const CHAIN_TO_CHAIN_ID = { Scroll: scroll.id, ZkSync: zkSync.id, Linea: linea.id, + Sonic: sonic.id, }; export function flagAsRequired(message: string, required?: boolean) { diff --git a/generator/types.ts b/generator/types.ts index 69ca034..74c4caa 100644 --- a/generator/types.ts +++ b/generator/types.ts @@ -22,11 +22,10 @@ export const V3_POOLS = [ 'AaveV3BNB', 'AaveV3ZkSync', 'AaveV3Linea', + 'AaveV3Sonic', ] as const satisfies readonly (keyof typeof addressBook)[]; -export const POOLS = [ - ...V3_POOLS, -] as const satisfies readonly (keyof typeof addressBook)[]; +export const POOLS = [...V3_POOLS] as const satisfies readonly (keyof typeof addressBook)[]; export type PoolIdentifier = (typeof POOLS)[number]; export type PoolIdentifierV3 = (typeof V3_POOLS)[number]; diff --git a/scripts/networks/RiskStewardsSonic.s.sol b/scripts/networks/RiskStewardsSonic.s.sol new file mode 100644 index 0000000..48b9ef9 --- /dev/null +++ b/scripts/networks/RiskStewardsSonic.s.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Sonic} from 'aave-address-book/AaveV3Sonic.sol'; +import {RiskStewardsBase} from '../RiskStewardsBase.s.sol'; + +abstract contract RiskStewardsSonic is RiskStewardsBase { + constructor() RiskStewardsBase(address(AaveV3Sonic.POOL), AaveV3Sonic.RISK_STEWARD) {} +} diff --git a/src/contracts/examples/SonicExample.sol b/src/contracts/examples/SonicExample.sol new file mode 100644 index 0000000..b8ddb0b --- /dev/null +++ b/src/contracts/examples/SonicExample.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3SonicAssets} from 'aave-address-book/AaveV3Sonic.sol'; +import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; +import {EngineFlags} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/EngineFlags.sol'; +import {RiskStewardsSonic} from '../../../scripts/networks/RiskStewardsSonic.s.sol'; + +// make run-script network=optimism contract=src/contracts/examples/SonicExample.sol:SonicExample broadcast=false generate_diff=true skip_timelock=false +contract SonicExample is RiskStewardsSonic { + /** + * @return string name identifier used for the diff + */ + function name() public pure override returns (string memory) { + return 'sonic_example'; + } + + function capsUpdates() public pure override returns (IEngine.CapsUpdate[] memory) { + IEngine.CapsUpdate[] memory capUpdates = new IEngine.CapsUpdate[](1); + capUpdates[0] = IEngine.CapsUpdate( + AaveV3SonicAssets.WETH_UNDERLYING, + 40_000, + EngineFlags.KEEP_CURRENT + ); + return capUpdates; + } +} From d6954051a465ed4df310e9a313e34f1e1c6aaabf Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Tue, 4 Mar 2025 13:26:24 +0100 Subject: [PATCH 03/10] =?UTF-8?q?=F0=9F=90=9B=20fix=20rpc=20urls?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foundry.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/foundry.toml b/foundry.toml index a526d29..6246fd0 100644 --- a/foundry.toml +++ b/foundry.toml @@ -48,6 +48,7 @@ bnb = "${RPC_BNB}" scroll = "${RPC_SCROLL}" zksync = "${RPC_ZKSYNC}" linea = "${RPC_LINEA}" +sonic = "${RPC_SONIC}" [etherscan] mainnet = { key="${ETHERSCAN_API_KEY_MAINNET}", chainId=1 } @@ -64,5 +65,6 @@ bnb = { key="${ETHERSCAN_API_KEY_BNB}", chainId=56, url='https://api.bscscan.com scroll = { key="${ETHERSCAN_API_KEY_SCROLL}", chainId= 534352 } zksync = { key="${ETHERSCAN_API_KEY_ZKSYNC}", chainId= 324 } linea = { key="${ETHERSCAN_API_KEY_LINEA}", chain = 59144 } +sonic = { key="${ETHERSCAN_API_KEY_SONIC}", chain = 146 } # See more config options https://github.com/gakonst/foundry/tree/master/config From 429f347617e57ce0a3a9216b1a77a27da334dec8 Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Tue, 4 Mar 2025 13:30:30 +0100 Subject: [PATCH 04/10] =?UTF-8?q?=F0=9F=90=9B=20update=20example?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/contracts/examples/SonicExample.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/contracts/examples/SonicExample.sol b/src/contracts/examples/SonicExample.sol index b8ddb0b..6760390 100644 --- a/src/contracts/examples/SonicExample.sol +++ b/src/contracts/examples/SonicExample.sol @@ -18,8 +18,8 @@ contract SonicExample is RiskStewardsSonic { function capsUpdates() public pure override returns (IEngine.CapsUpdate[] memory) { IEngine.CapsUpdate[] memory capUpdates = new IEngine.CapsUpdate[](1); capUpdates[0] = IEngine.CapsUpdate( - AaveV3SonicAssets.WETH_UNDERLYING, - 40_000, + AaveV3SonicAssets.wS_UNDERLYING, + 21_000_000, EngineFlags.KEEP_CURRENT ); return capUpdates; From 85d47a5b12cd5ae9471161e27257368c59433f7e Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Tue, 4 Mar 2025 13:37:22 +0100 Subject: [PATCH 05/10] =?UTF-8?q?=F0=9F=90=9B=20add=20deploy=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/deploy/DeployStewards.s.sol | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/scripts/deploy/DeployStewards.s.sol b/scripts/deploy/DeployStewards.s.sol index c441727..fcfa6a7 100644 --- a/scripts/deploy/DeployStewards.s.sol +++ b/scripts/deploy/DeployStewards.s.sol @@ -26,6 +26,8 @@ import {AaveV3Metis} from 'aave-address-book/AaveV3Metis.sol'; import {GovernanceV3Metis} from 'aave-address-book/GovernanceV3Metis.sol'; import {AaveV3Linea} from 'aave-address-book/AaveV3Linea.sol'; import {GovernanceV3Linea} from 'aave-address-book/GovernanceV3Linea.sol'; +import {AaveV3Sonic} from 'aave-address-book/AaveV3Sonic.sol'; +import {GovernanceV3Sonic} from 'aave-address-book/GovernanceV3Sonic.sol'; import {IOwnable} from 'aave-address-book/common/IOwnable.sol'; import {RiskSteward, IRiskSteward, IPoolDataProvider, IEngine} from '../../src/contracts/RiskSteward.sol'; @@ -257,3 +259,17 @@ contract DeployLinea is LineaScript { vm.stopBroadcast(); } } + +// make deploy-ledger contract=scripts/deploy/DeployStewards.s.sol:DeploySonic chain=sonic +contract DeploySonic is SonicScript { + function run() external { + vm.startBroadcast(); + DeployRiskStewards._deployRiskStewards( + address(AaveV3Sonic.AAVE_PROTOCOL_DATA_PROVIDER), + AaveV3Sonic.CONFIG_ENGINE, + 0x1dE39A17a9Fa8c76899fff37488482EEb7835d04, // sonic-risk-council + GovernanceV3Sonic.EXECUTOR_LVL_1 + ); + vm.stopBroadcast(); + } +} From 7c66242bd8df591bb7e3644946ca20a3b5cd29af Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Tue, 4 Mar 2025 13:53:42 +0100 Subject: [PATCH 06/10] =?UTF-8?q?=F0=9F=90=9B=20fix=20comment=20example=20?= =?UTF-8?q?script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/contracts/examples/SonicExample.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/contracts/examples/SonicExample.sol b/src/contracts/examples/SonicExample.sol index 6760390..f8b8939 100644 --- a/src/contracts/examples/SonicExample.sol +++ b/src/contracts/examples/SonicExample.sol @@ -6,7 +6,7 @@ import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/src/contracts/exten import {EngineFlags} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/EngineFlags.sol'; import {RiskStewardsSonic} from '../../../scripts/networks/RiskStewardsSonic.s.sol'; -// make run-script network=optimism contract=src/contracts/examples/SonicExample.sol:SonicExample broadcast=false generate_diff=true skip_timelock=false +// make run-script network=sonic contract=src/contracts/examples/SonicExample.sol:SonicExample broadcast=false generate_diff=true skip_timelock=false contract SonicExample is RiskStewardsSonic { /** * @return string name identifier used for the diff From 61eacaa3d97b27bed5fefecd71395c3fa843d0e1 Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Tue, 4 Mar 2025 15:28:18 +0100 Subject: [PATCH 07/10] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20bump=20aave-capo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/aave-capo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/aave-capo b/lib/aave-capo index 9a01d9c..f3c3d7b 160000 --- a/lib/aave-capo +++ b/lib/aave-capo @@ -1 +1 @@ -Subproject commit 9a01d9c5d92033a7df7c8b35ea95bf6f008e0cfa +Subproject commit f3c3d7b0806b4896d5211fa2ea376e1dba806d6f From 7572f476000ae71e3dda98d7733131ddfec497d9 Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Tue, 4 Mar 2025 16:03:32 +0100 Subject: [PATCH 08/10] =?UTF-8?q?=F0=9F=94=A7=20update=20evm=20version=20o?= =?UTF-8?q?f=20sonic=20for=20cancun?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foundry.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/foundry.toml b/foundry.toml index 6246fd0..b458a0c 100644 --- a/foundry.toml +++ b/foundry.toml @@ -32,6 +32,9 @@ zksolc = '1.5.7' [profile.linea] evm_version = 'london' +[profile.sonic] +evm_version = 'cancun' + [rpc_endpoints] mainnet = "${RPC_MAINNET}" optimism = "${RPC_OPTIMISM}" From e86485da85847d132c98a0baee67b19b5618a047 Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Tue, 4 Mar 2025 16:18:31 +0100 Subject: [PATCH 09/10] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20bump=20risk=20stewar?= =?UTF-8?q?d=20test=20mainnet=20block?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/RiskSteward.t.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/RiskSteward.t.sol b/tests/RiskSteward.t.sol index 4e9028a..5288aed 100644 --- a/tests/RiskSteward.t.sol +++ b/tests/RiskSteward.t.sol @@ -24,7 +24,7 @@ contract RiskSteward_Test is Test { event RiskConfigSet(IRiskSteward.Config indexed riskConfig); function setUp() public virtual { - vm.createSelectFork(vm.rpcUrl('mainnet'), 20934847); + vm.createSelectFork(vm.rpcUrl('mainnet'), 21974363); configEngine = AaveV3Ethereum.CONFIG_ENGINE; From 8400252b74112ab3f759a4f71d9f7232f121b00b Mon Sep 17 00:00:00 2001 From: MartinGbz Date: Tue, 4 Mar 2025 16:23:56 +0100 Subject: [PATCH 10/10] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20bump=20viem=20versio?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3ad26f2..d1e5230 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "ethers": "5.7.2", "ts-node": "^10.9.1", "tsx": "^4.16.3", - "viem": "^2.18.6", + "viem": "^2.23.6", "typescript": "^5.0.4" } }