diff --git a/.gitmodules b/.gitmodules index 1a1878a..2e2242a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,9 +3,9 @@ url = https://github.com/foundry-rs/forge-std [submodule "lib/aave-address-book"] path = lib/aave-address-book - url = https://github.com/lib/aave-address-book - branch = v1.10.0 + url = https://github.com/bgd-labs/aave-address-book + branch = v1.17.0 [submodule "lib/aave-helpers"] path = lib/aave-helpers - url = https://github.com/lib/aave-helpers - branch = v1.4.0 + url = https://github.com/bgd-labs/aave-helpers + branch = v2.2.0 diff --git a/Makefile b/Makefile index 88b4e23..75eaa5b 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,8 @@ test-harmony-freezing :; forge test -vvv --match-contract FreezeAllReservesAaveV test-fantom-freezing :; forge test -vvv --match-contract FreezeAllReservesAaveV3FantomByGuardian --rpc-url=${RPC_FANTOM} --fork-block-number 46881340 test-btcb-ava:; forge test -vvv --match-contract BTCBAaveV3AvaListingByGuardian test-v3-ava-caps:; forge test -vvv --match-contract AaveV3AvaCapsByGuardian +test-v3-ava-params:; forge test -vvv --match-contract AaveV3AvaParamsByGuardian + test-permissions-migration : forge test --match-contract PermissionsMigrationToCrosschain -vvv make git-diff before=./reports/Optimism_permissions-pre-migration.md after=./reports/Optimism_permissions-post-migration.md out=diff-Optimism-permissions-migration diff --git a/README.md b/README.md index 91a38da..7fa23b2 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,22 @@ Helper smart contracts to list assets on Aave v3 or change configs. Designed to be used mainly by Guardians -| Asset | Type | Pool | Steward | Tests | Address | -| ------------- | ------------- | ----------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- | -| sAVAX | asset-listing | Aave v3 Avalanche | [sAVAX Steward](./src/contracts/savax/AaveV3SAVAXListingSteward.sol) | [Tests](./src/test/sAVAXAaveV3AvaListingByGuardian.t.sol) | [0x1E12071BD95341aA92FcBA1513C714F9F49282A4](https://snowtrace.io/address/0x1E12071BD95341aA92FcBA1513C714F9F49282A4#code) | -| FRAX | asset-listing | Aave v3 Avalanche | [FRAX Steward](./src/contracts/frax/AaveV3AvaFRAXListingSteward.sol) | [Tests](./src/test/FRAXAaveV3AvaListingByGuardian.t.sol) | [0x1BFC7cc57b851c8Ea3526c0c7573A697de220b77](https://snowtrace.io/address/0x1BFC7cc57b851c8Ea3526c0c7573A697de220b77#code) | -| FRAX | asset-listing | Aave v3 Fantom | [FRAX Steward](./src/contracts/frax/AaveV3FantomFRAXListingSteward.sol) | [Tests](./src/test/FRAXAaveV3FantomListingByGuardian.t.sol) | N/A | -| sUSD | config-change | Aave v3 Optimism | [sUSD enable collateral Steward](./src/contracts/susd/AaveV3OptimismEnableCollateralSteward.sol) | [Tests](./src/test/sUSDAaveV3OptimismEnableAsCollateralByGuardian.t.sol) | [0x038b1DEd4911BB6824934cF11FC9F15F45b5916b](https://optimistic.etherscan.io/address/0x038b1DEd4911BB6824934cF11FC9F15F45b5916b#code) | -| MAI | asset-listing | Aave v3 Avalanche | [MAI Steward](./src/contracts/mimatic/AaveV3AvaMAIListingSteward.sol) | [Tests](./src/test/MAIAaveV3AvaListingByGuardian.t.sol) | [0xd7A4F572C36d72549817D833E4654D0adbBfFD2F](https://snowtrace.io/address/0xd7A4F572C36d72549817D833E4654D0adbBfFD2F#code) | -| MIMATIC (MAI) | asset-listing | Aave v3 Fantom | [MIMATIC Steward](./src/contracts/mimatic/AaveV3FantomMIMATICListingSteward.sol) | [Tests](./src/test/MIMATICAaveV3FantomListingByGuardian.t.sol) | N/A | -| Multiple | config-change | Aave v3 Harmony | [Harmony freezing](./src/contracts/harmony-protection/FreezeHarmonyPoolReservesSteward.sol) | [Tests](./src/test/FreezeAllReservesAaveV3FantomByGuardian.t.sol) | [0xf202866d9fb6f089587d86d4128e7c8e0fdf94fe](https://explorer.harmony.one/address/0xf202866d9fb6f089587d86d4128e7c8e0fdf94fe) | -| Multiple | config-change | Aave v3 Fantom | [Fantom freezing](./src/contracts/fantom-freeze/FreezeFantomPoolReservesSteward.sol) | [Tests](./src/test/FreezeAllReservesAaveV3HarmonyByGuardian.t.sol) | [0x1aa435ed226014407fa6b889e9d06c02b1a12af3](https://ftmscan.com/address/0x1aa435ed226014407fa6b889e9d06c02b1a12af3#code) | -| BTC.b | asset-listing | Aave v3 Avalanche | [BTC.b Steward](./src/contracts/btc.b/AaveV3AvaBTCBListingSteward.sol) | [Tests](./src/test/BTCBAaveV3AvaListingByGuardian.t.sol) | [0xeee4877a56392c82578df71e8b9270ad8cbabfdc](https://snowtrace.io/address/0xeee4877a56392c82578df71e8b9270ad8cbabfdc#code) | -| Multiple | config-change | Aave v3 Avalanche | [Supply Caps Steward](./src/contracts/v3-ava-supply-caps-30-11-2022/AaveV3AvaCapsSteward.sol) | [Tests](./src/test/AaveV3AvaCaps30-11-2022-ByGuardian.t.sol) | N/A | - +| Asset | Type | Pool | Steward | Tests | Address | +| ------------- | ------------- | ----------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | +| sAVAX | asset-listing | Aave v3 Avalanche | [sAVAX Steward](./src/contracts/savax/AaveV3SAVAXListingSteward.sol) | [Tests](./src/test/sAVAXAaveV3AvaListingByGuardian.t.sol) | [0x1E12071BD95341aA92FcBA1513C714F9F49282A4](https://snowtrace.io/address/0x1E12071BD95341aA92FcBA1513C714F9F49282A4#code) | +| FRAX | asset-listing | Aave v3 Avalanche | [FRAX Steward](./src/contracts/frax/AaveV3AvaFRAXListingSteward.sol) | [Tests](./src/test/FRAXAaveV3AvaListingByGuardian.t.sol) | [0x1BFC7cc57b851c8Ea3526c0c7573A697de220b77](https://snowtrace.io/address/0x1BFC7cc57b851c8Ea3526c0c7573A697de220b77#code) | +| FRAX | asset-listing | Aave v3 Fantom | [FRAX Steward](./src/contracts/frax/AaveV3FantomFRAXListingSteward.sol) | [Tests](./src/test/FRAXAaveV3FantomListingByGuardian.t.sol) | N/A | +| sUSD | config-change | Aave v3 Optimism | [sUSD enable collateral Steward](./src/contracts/susd/AaveV3OptimismEnableCollateralSteward.sol) | [Tests](./src/test/sUSDAaveV3OptimismEnableAsCollateralByGuardian.t.sol) | [0x038b1DEd4911BB6824934cF11FC9F15F45b5916b](https://optimistic.etherscan.io/address/0x038b1DEd4911BB6824934cF11FC9F15F45b5916b#code) | +| MAI | asset-listing | Aave v3 Avalanche | [MAI Steward](./src/contracts/mimatic/AaveV3AvaMAIListingSteward.sol) | [Tests](./src/test/MAIAaveV3AvaListingByGuardian.t.sol) | [0xd7A4F572C36d72549817D833E4654D0adbBfFD2F](https://snowtrace.io/address/0xd7A4F572C36d72549817D833E4654D0adbBfFD2F#code) | +| MIMATIC (MAI) | asset-listing | Aave v3 Fantom | [MIMATIC Steward](./src/contracts/mimatic/AaveV3FantomMIMATICListingSteward.sol) | [Tests](./src/test/MIMATICAaveV3FantomListingByGuardian.t.sol) | N/A | +| Multiple | config-change | Aave v3 Harmony | [Harmony freezing](./src/contracts/harmony-protection/FreezeHarmonyPoolReservesSteward.sol) | [Tests](./src/test/FreezeAllReservesAaveV3FantomByGuardian.t.sol) | [0xf202866d9fb6f089587d86d4128e7c8e0fdf94fe](https://explorer.harmony.one/address/0xf202866d9fb6f089587d86d4128e7c8e0fdf94fe) | +| Multiple | config-change | Aave v3 Fantom | [Fantom freezing](./src/contracts/fantom-freeze/FreezeFantomPoolReservesSteward.sol) | [Tests](./src/test/FreezeAllReservesAaveV3HarmonyByGuardian.t.sol) | [0x1aa435ed226014407fa6b889e9d06c02b1a12af3](https://ftmscan.com/address/0x1aa435ed226014407fa6b889e9d06c02b1a12af3#code) | +| BTC.b | asset-listing | Aave v3 Avalanche | [BTC.b Steward](./src/contracts/btc.b/AaveV3AvaBTCBListingSteward.sol) | [Tests](./src/test/BTCBAaveV3AvaListingByGuardian.t.sol) | [0xeee4877a56392c82578df71e8b9270ad8cbabfdc](https://snowtrace.io/address/0xeee4877a56392c82578df71e8b9270ad8cbabfdc#code) | +| Multiple | config-change | Aave v3 Avalanche | [Supply Caps Steward](./src/contracts/v3-ava-supply-caps-30-11-2022/AaveV3AvaCapsSteward.sol) | [Tests](./src/test/AaveV3AvaCaps30-11-2022-ByGuardian.t.sol) | N/A | +| Multiple | config-change | Aave v3 Avalanche | [Params Steward](./src/contracts/Avalanche-Parameter-Rec-21-02-2023/Avalance-Parameter-Rec-21-02-2023.sol) | [Tests](./src/test/Avalanche-Parameter-Rec-21-02-2023-ByGuardian.t.sol) | N/A | ### Copyright 2022 BGD Labs + +/Users/altmark/repos/aave-v3-listing-stewards/src/test/AaveV3AvaSAVAXCaps23-02-2023-ByGuardian.t.sol diff --git a/lib/aave-address-book b/lib/aave-address-book index 2cbbf1d..5057614 160000 --- a/lib/aave-address-book +++ b/lib/aave-address-book @@ -1 +1 @@ -Subproject commit 2cbbf1d9e3f6125a215bce38363c7390c509fcbf +Subproject commit 5057614e9fc78f783a2fc7aa64872f1cf2cb835b diff --git a/lib/aave-helpers b/lib/aave-helpers index 2fca32a..411ef5d 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit 2fca32af3ec51994e3a72ee2aa901ede40a4fdf7 +Subproject commit 411ef5d04b374fef834e2712dddba55cf7699e10 diff --git a/src/contracts/Avalanche-Parameter-Rec-21-02-2023/Avalance-Parameter-Rec-21-02-2023.sol b/src/contracts/Avalanche-Parameter-Rec-21-02-2023/Avalance-Parameter-Rec-21-02-2023.sol new file mode 100644 index 0000000..04c2dbb --- /dev/null +++ b/src/contracts/Avalanche-Parameter-Rec-21-02-2023/Avalance-Parameter-Rec-21-02-2023.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.16; + +import '../common/StewardBase.sol'; +import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; + +/** + * @dev This steward sets configure reserve as collateral for Link.e and wAVAX on AAVE V3 Avalanche + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xbe3ff894ff9a979846b45e0fece4368245f61fa1d449d3761a3990b8da4aa6d7 + * - Dicussion: https://governance.aave.com/t/arc-chaos-labs-risk-parameter-updates-aave-v3-avalanche-2023-02-07/11603 + */ +contract AaveV3AvaParamsSteward is StewardBase { + + address public constant LINKe = AaveV3AvalancheAssets.LINKe_UNDERLYING; + address public constant WAVAX = AaveV3AvalancheAssets.WAVAX_UNDERLYING; + + + uint256 public constant LINKe_LIQ_THRESHOLD = 6800; // 68% + uint256 public constant LINKe_LTV = 5300; // 53% + uint256 public constant LINKe_LIQ_BONUS = 10750; // 7.5% + + uint256 public constant WAVAX_LIQ_THRESHOLD = 7300; // 73% + uint256 public constant WAVAX_LTV = 6800; // 68% + uint256 public constant WAVAX_LIQ_BONUS = 11000; // 10% + + + address public constant SAVAX = AaveV3AvalancheAssets.sAVAX_UNDERLYING; + + uint256 public constant SAVAX_CAP = 2_000_000; + + function execute() + external + withRennounceOfAllAavePermissions(AaveV3Avalanche.ACL_MANAGER) + withOwnershipBurning + onlyOwner + { + AaveV3Avalanche.POOL_CONFIGURATOR.configureReserveAsCollateral( + LINKe, + LINKe_LTV, + LINKe_LIQ_THRESHOLD, + LINKe_LIQ_BONUS + ); + + + AaveV3Avalanche.POOL_CONFIGURATOR.configureReserveAsCollateral( + WAVAX, + WAVAX_LTV, + WAVAX_LIQ_THRESHOLD, + WAVAX_LIQ_BONUS + ); + + + AaveV3Avalanche.POOL_CONFIGURATOR.setSupplyCap(SAVAX, SAVAX_CAP); + + + } +} diff --git a/src/test/Avalanche-Parameter-Rec-21-02-2023-ByGuardian.t.sol b/src/test/Avalanche-Parameter-Rec-21-02-2023-ByGuardian.t.sol new file mode 100644 index 0000000..6e1cbb8 --- /dev/null +++ b/src/test/Avalanche-Parameter-Rec-21-02-2023-ByGuardian.t.sol @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.16; + +import 'forge-std/Test.sol'; + +import {IPoolConfigurator, ConfiguratorInputTypes, IACLManager} from 'aave-address-book/AaveV3.sol'; +import {AaveV3Avalanche} from 'aave-address-book/AaveAddressBook.sol'; +import {AaveV3AvaParamsSteward} from '../contracts/Avalanche-Parameter-Rec-21-02-2023/Avalance-Parameter-Rec-21-02-2023.sol'; +import {AaveV3Helpers, ReserveConfig, ReserveTokens, IERC20} from './helpers/AaveV3Helpers.sol'; + +contract AaveV3AvaParamsByGuardian is Test { + using stdStorage for StdStorage; + + address public constant GUARDIAN_AVALANCHE = + AaveV3Avalanche.ACL_ADMIN; + + string public constant LinkSymbol = 'LINK.e'; + string public constant WAVAXSymbol = 'WAVAX'; + + uint256 public constant LINKe_LIQ_THRESHOLD = 6800; + uint256 public constant LINKe_LTV = 5300; + uint256 public constant LINKe_LIQ_BONUS = 10750; + + uint256 public constant WAVAX_LIQ_THRESHOLD = 7300; + uint256 public constant WAVAX_LTV = 6800; + uint256 public constant WAVAX_LIQ_BONUS = 11000; + + string public constant SAVAXSymbol = 'sAVAX'; + uint256 public constant SAVAX_CAP = 2_000_000; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 26507116); + } + + function testNewParams() public { + ReserveConfig[] memory allConfigsBefore = AaveV3Helpers + ._getReservesConfigs(false); + + vm.startPrank(GUARDIAN_AVALANCHE); + + AaveV3AvaParamsSteward paramsSteward = new AaveV3AvaParamsSteward(); + + IACLManager aclManager = AaveV3Avalanche.ACL_MANAGER; + + aclManager.addAssetListingAdmin(address(paramsSteward)); + aclManager.addRiskAdmin(address(paramsSteward)); + + paramsSteward.execute(); + + vm.stopPrank(); + + ReserveConfig[] memory allConfigsAfter = AaveV3Helpers + ._getReservesConfigs(false); + + //LINK + ReserveConfig memory LinkConfig = AaveV3Helpers._findReserveConfig( + allConfigsBefore, + LinkSymbol, + false + ); + + LinkConfig.ltv = LINKe_LTV; + LinkConfig.liquidationThreshold = LINKe_LIQ_THRESHOLD; + + AaveV3Helpers._validateReserveConfig(LinkConfig, allConfigsAfter); + + //WAVAX + ReserveConfig memory WAVAXConfig = AaveV3Helpers._findReserveConfig( + allConfigsBefore, + WAVAXSymbol, + false + ); + WAVAXConfig.ltv = WAVAX_LTV; + WAVAXConfig.liquidationThreshold = WAVAX_LIQ_THRESHOLD; + + AaveV3Helpers._validateReserveConfig(WAVAXConfig, allConfigsAfter); + + + //sAVAX + ReserveConfig memory SAVAXConfig = AaveV3Helpers._findReserveConfig( + allConfigsBefore, + SAVAXSymbol, + false + ); + SAVAXConfig.supplyCap = SAVAX_CAP; + AaveV3Helpers._validateReserveConfig(SAVAXConfig, allConfigsAfter); + + + + require(paramsSteward.owner() == address(0), 'INVALID_OWNER'); + } +}