From 4a91ece1eecd517be380dc3aebf3906d64b97fbe Mon Sep 17 00:00:00 2001 From: Ernesto Boado Date: Tue, 30 Jul 2024 10:00:13 +0200 Subject: [PATCH 01/68] Removed gho-core and ccip dependencies (#405) * Removed gho-core and ccip dependencies * Updated remappings --- .gitmodules | 6 ------ lib/ccip | 1 - lib/gho-core | 1 - remappings.txt | 2 -- 4 files changed, 10 deletions(-) delete mode 160000 lib/ccip delete mode 160000 lib/gho-core diff --git a/.gitmodules b/.gitmodules index c58871825..f7316a1d6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,3 @@ [submodule "lib/aave-helpers"] path = lib/aave-helpers url = https://github.com/bgd-labs/aave-helpers -[submodule "lib/ccip"] - path = lib/ccip - url = https://github.com/aave/ccip -[submodule "lib/gho-core"] - path = lib/gho-core - url = https://github.com/aave/gho-core diff --git a/lib/ccip b/lib/ccip deleted file mode 160000 index 55a0b5939..000000000 --- a/lib/ccip +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 55a0b5939c7083c61d5651b80454095cb1f6757c diff --git a/lib/gho-core b/lib/gho-core deleted file mode 160000 index 3a3293b17..000000000 --- a/lib/gho-core +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3a3293b17eb985ac230a4e3bc6a1aafd682de3d5 diff --git a/remappings.txt b/remappings.txt index 2ba4e83ba..293ebab0f 100644 --- a/remappings.txt +++ b/remappings.txt @@ -5,5 +5,3 @@ aave-v3-periphery/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src aave-v3-origin/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src/ forge-std/=lib/aave-helpers/lib/forge-std/src/ solidity-utils/=lib/aave-helpers/lib/solidity-utils/src/ -ccip/=lib/ccip/contracts/src/ -gho-core/=lib/gho-core/src/contracts/ From 763874a86b40884275bff607c706e4353678964d Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 30 Jul 2024 15:00:28 +0300 Subject: [PATCH 02/68] Migrate ScriptUtils to solidity-utils (#406) --- generator/features/__snapshots__/assetListing.spec.ts.snap | 4 ++-- .../features/__snapshots__/priceFeedsUpdate.spec.ts.snap | 2 +- generator/features/__snapshots__/rateUpdates.spec.ts.snap | 2 +- generator/templates/script.template.ts | 2 +- .../MayFundingUpdate_20240603.s.sol | 2 +- .../ToolingUpdateAllowance_20240707.s.sol | 2 +- .../EventsGrant2024_20240718.s.sol | 2 +- .../LidoEthereumInstanceActivation_20240720.s.sol | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/generator/features/__snapshots__/assetListing.spec.ts.snap b/generator/features/__snapshots__/assetListing.spec.ts.snap index 6de75264c..2ca15dfb4 100644 --- a/generator/features/__snapshots__/assetListing.spec.ts.snap +++ b/generator/features/__snapshots__/assetListing.spec.ts.snap @@ -212,7 +212,7 @@ pragma solidity ^0.8.0; import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {EthereumScript} from 'aave-helpers/ScriptUtils.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; /** @@ -478,7 +478,7 @@ pragma solidity ^0.8.0; import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {EthereumScript} from 'aave-helpers/ScriptUtils.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; /** diff --git a/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap b/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap index 1081e94cc..a0debac55 100644 --- a/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap +++ b/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap @@ -119,7 +119,7 @@ pragma solidity ^0.8.0; import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {EthereumScript} from 'aave-helpers/ScriptUtils.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; /** diff --git a/generator/features/__snapshots__/rateUpdates.spec.ts.snap b/generator/features/__snapshots__/rateUpdates.spec.ts.snap index a002b3418..166da8b4e 100644 --- a/generator/features/__snapshots__/rateUpdates.spec.ts.snap +++ b/generator/features/__snapshots__/rateUpdates.spec.ts.snap @@ -225,7 +225,7 @@ pragma solidity ^0.8.0; import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {EthereumScript} from 'aave-helpers/ScriptUtils.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV2EthereumAMM_Test_20231023} from './AaveV2EthereumAMM_Test_20231023.sol'; /** diff --git a/generator/templates/script.template.ts b/generator/templates/script.template.ts index 88b82c725..47ad1fc3d 100644 --- a/generator/templates/script.template.ts +++ b/generator/templates/script.template.ts @@ -20,7 +20,7 @@ export function generateScript(options: Options) { // generate imports template += `import {${['Ethereum', ...chains.filter((c) => c !== 'Ethereum')] .map((chain) => `${chain}Script`) - .join(', ')}} from 'aave-helpers/ScriptUtils.sol';\n`; + .join(', ')}} from 'solidity-utils/contracts/utils/ScriptUtils.sol';\n`; template += options.pools .map((pool) => { const name = generateContractName(options, pool); diff --git a/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol index d92359b83..562357ad1 100644 --- a/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol +++ b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {EthereumScript, PolygonScript, OptimismScript, ArbitrumScript} from 'aave-helpers/ScriptUtils.sol'; +import {EthereumScript, PolygonScript, OptimismScript, ArbitrumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_MayFundingUpdate_20240603} from './AaveV3Ethereum_MayFundingUpdate_20240603.sol'; import {AaveV3Polygon_MayFundingUpdate_20240603} from './AaveV3Polygon_MayFundingUpdate_20240603.sol'; import {AaveV3Optimism_MayFundingUpdate_20240603} from './AaveV3Optimism_MayFundingUpdate_20240603.sol'; diff --git a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol index da17d41c0..c56e3f430 100644 --- a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol +++ b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {EthereumScript} from 'aave-helpers/ScriptUtils.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_ToolingUpdateAllowance_20240707} from './AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol'; /** diff --git a/src/20240718_AaveV3Ethereum_EventsGrant2024/EventsGrant2024_20240718.s.sol b/src/20240718_AaveV3Ethereum_EventsGrant2024/EventsGrant2024_20240718.s.sol index f1c62db01..ee70f76e1 100644 --- a/src/20240718_AaveV3Ethereum_EventsGrant2024/EventsGrant2024_20240718.s.sol +++ b/src/20240718_AaveV3Ethereum_EventsGrant2024/EventsGrant2024_20240718.s.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {EthereumScript} from 'aave-helpers/ScriptUtils.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_EventsGrant2024_20240718} from './AaveV3Ethereum_EventsGrant2024_20240718.sol'; /** diff --git a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol index 4329c1ce4..4bc433fa3 100644 --- a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol +++ b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {EthereumScript} from 'aave-helpers/ScriptUtils.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720} from './AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol'; /** From 5c7111327b11731bc36734f85a77827a85ed5d6f Mon Sep 17 00:00:00 2001 From: sendra Date: Tue, 30 Jul 2024 17:38:30 +0200 Subject: [PATCH 03/68] fix: updated aave helpers with diff serialization cleanup (#407) * fix: updated aave helpers with diff serialization cleanup * fix: regenerated diffs (#408) --- ...thereum_MayFundingUpdate_20240603_after.md | 2023 ----------------- ...ptimism_MayFundingUpdate_20240603_after.md | 876 +------ ...Polygon_MayFundingUpdate_20240603_after.md | 1291 ----------- lib/aave-helpers | 2 +- 4 files changed, 2 insertions(+), 4190 deletions(-) diff --git a/diffs/AaveV3Ethereum_MayFundingUpdate_20240603_before_AaveV3Ethereum_MayFundingUpdate_20240603_after.md b/diffs/AaveV3Ethereum_MayFundingUpdate_20240603_before_AaveV3Ethereum_MayFundingUpdate_20240603_after.md index 08c7d0147..edddc577b 100644 --- a/diffs/AaveV3Ethereum_MayFundingUpdate_20240603_before_AaveV3Ethereum_MayFundingUpdate_20240603_after.md +++ b/diffs/AaveV3Ethereum_MayFundingUpdate_20240603_before_AaveV3Ethereum_MayFundingUpdate_20240603_after.md @@ -2,141 +2,11 @@ ### Reserve altered -#### 1INCH ([0x111111111117dC0aa78b770fA6A738034120C302](https://etherscan.io/address/0x111111111117dC0aa78b770fA6A738034120C302)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://etherscan.io/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) | -| baseStableBorrowRate | null | 120000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### UNI ([0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984](https://etherscan.io/address/0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F](https://etherscan.io/address/0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### WBTC ([0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599](https://etherscan.io/address/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4](https://etherscan.io/address/0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4) | -| baseStableBorrowRate | null | 60000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 70000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 40000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### FXS ([0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0](https://etherscan.io/address/0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://etherscan.io/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) | -| baseStableBorrowRate | null | 120000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### GHO ([0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f](https://etherscan.io/address/0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x741aE8b9f54b7DdE46C532f2c0F55B8776c93484](https://etherscan.io/address/0x741aE8b9f54b7DdE46C532f2c0F55B8776c93484) | -| baseStableBorrowRate | null | 0 | -| baseVariableBorrowRate | null | 70000000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 0 | -| maxExcessUsageRatio | null | 0 | -| optimalStableToTotalDebtRatio | null | 0 | -| optimalUsageRatio | null | 0 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 0 | -| variableRateSlope2 | null | 0 | - - -#### USDe ([0x4c9EDD5852cd905f086C759E8383e09bff1E68B3](https://etherscan.io/address/0x4c9EDD5852cd905f086C759E8383e09bff1E68B3)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x4011fcd421b9E90f131B164EC1d162DBE269621C](https://etherscan.io/address/0x4011fcd421b9E90f131B164EC1d162DBE269621C) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 0 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 90000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - #### LINK ([0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA)) | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 11,125,899.5309 LINK [11125899530945508596356169] | 11,126,104.0635 LINK [11126104063542685827584126] | -| address | null | [0x24701A6368Ff6D2874d6b8cDadd461552B8A5283](https://etherscan.io/address/0x24701A6368Ff6D2874d6b8cDadd461552B8A5283) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 70000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### LDO ([0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32](https://etherscan.io/address/0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F](https://etherscan.io/address/0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | #### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0)) @@ -144,17 +14,6 @@ | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 2,161,079.6517 LUSD [2161079651705465362890767] | 2,134,903.0420 LUSD [2134903042058712358109415] | -| address | null | [0x2B3Ed91C6667d808b0401f439c4859ea635c6862](https://etherscan.io/address/0x2B3Ed91C6667d808b0401f439c4859ea635c6862) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 40000000000000000000000000 | -| stableRateSlope2 | null | 870000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 870000000000000000000000000 | #### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F)) @@ -162,17 +21,6 @@ | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 21,971,804.3160 DAI [21971804316083981578633223] | 20,843,981.8022 DAI [20843981802212898363345750] | -| address | null | [0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7](https://etherscan.io/address/0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 80000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 920000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | #### PYUSD ([0x6c3ea9036406852006290770BEdFcAbA0e23A0e8](https://etherscan.io/address/0x6c3ea9036406852006290770BEdFcAbA0e23A0e8)) @@ -180,119 +28,6 @@ | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 4,836,545.8135 PYUSD [4836545813514] | 4,716,686.9355 PYUSD [4716686935507] | -| address | null | [0x22B409E1ab288DA6a895FE8251bEbfcA267f8805](https://etherscan.io/address/0x22B409E1ab288DA6a895FE8251bEbfcA267f8805) | -| baseStableBorrowRate | null | 120000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 800000000000000000000000000 | - - -#### AAVE ([0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9](https://etherscan.io/address/0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x24701A6368Ff6D2874d6b8cDadd461552B8A5283](https://etherscan.io/address/0x24701A6368Ff6D2874d6b8cDadd461552B8A5283) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 70000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### wstETH ([0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0](https://etherscan.io/address/0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x7b8Fa4540246554e77FCFf140f9114de00F8bB8D](https://etherscan.io/address/0x7b8Fa4540246554e77FCFf140f9114de00F8bB8D) | -| baseStableBorrowRate | null | 75000000000000000000000000 | -| baseVariableBorrowRate | null | 2500000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 40000000000000000000000000 | -| stableRateSlope2 | null | 800000000000000000000000000 | -| variableRateSlope1 | null | 45000000000000000000000000 | -| variableRateSlope2 | null | 800000000000000000000000000 | - - -#### sDAI ([0x83F20F44975D03b1b09e64809B757c47f942BEeA](https://etherscan.io/address/0x83F20F44975D03b1b09e64809B757c47f942BEeA)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xdef8F50155A6cf21181E29E400E8CffAE2d50968](https://etherscan.io/address/0xdef8F50155A6cf21181E29E400E8CffAE2d50968) | -| baseStableBorrowRate | null | 80000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 50000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 50000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - -#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xA7D9302346d4C35724821cf98966B2257c9683c6](https://etherscan.io/address/0xA7D9302346d4C35724821cf98966B2257c9683c6) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - -#### sUSDe ([0x9D39A5DE30e57443BfF2A8307A4256c8797A3497](https://etherscan.io/address/0x9D39A5DE30e57443BfF2A8307A4256c8797A3497)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x36d32fD7a72AD600be60Ccb71D3718E455025CaA](https://etherscan.io/address/0x36d32fD7a72AD600be60Ccb71D3718E455025CaA) | -| baseStableBorrowRate | null | 0 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 0 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 0 | -| variableRateSlope2 | null | 0 | - - -#### MKR ([0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2](https://etherscan.io/address/0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F](https://etherscan.io/address/0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | #### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)) @@ -300,85 +35,6 @@ | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 223,439,837.6862 USDC [223439837686233] | 221,939,837.6862 USDC [221939837686234] | -| address | null | [0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f](https://etherscan.io/address/0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 80000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 920000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 600000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 600000000000000000000000000 | - - -#### ETHx ([0xA35b1B31Ce002FBF2058D22F30f95D405200A15b](https://etherscan.io/address/0xA35b1B31Ce002FBF2058D22F30f95D405200A15b)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x48AF11111764E710fcDcE2750db848C63edab57B](https://etherscan.io/address/0x48AF11111764E710fcDcE2750db848C63edab57B) | -| baseStableBorrowRate | null | 70000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 0 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### STG ([0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6](https://etherscan.io/address/0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F](https://etherscan.io/address/0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### cbETH ([0xBe9895146f7AF43049ca1c1AE358B0541Ea49704](https://etherscan.io/address/0xBe9895146f7AF43049ca1c1AE358B0541Ea49704)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x24701A6368Ff6D2874d6b8cDadd461552B8A5283](https://etherscan.io/address/0x24701A6368Ff6D2874d6b8cDadd461552B8A5283) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 70000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### SNX ([0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F](https://etherscan.io/address/0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E](https://etherscan.io/address/0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E) | -| baseStableBorrowRate | null | 180000000000000000000000000 | -| baseVariableBorrowRate | null | 30000000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 150000000000000000000000000 | -| stableRateSlope2 | null | 1000000000000000000000000000 | -| variableRateSlope1 | null | 150000000000000000000000000 | -| variableRateSlope2 | null | 1000000000000000000000000000 | #### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)) @@ -386,119 +42,6 @@ | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 138,560.7141 WETH [138560714113035891077908] | 138,687.9880 WETH [138687988094400170720313] | -| address | null | [0x42ec99A020B78C449d17d93bC4c89e0189B5811d](https://etherscan.io/address/0x42ec99A020B78C449d17d93bC4c89e0189B5811d) | -| baseStableBorrowRate | null | 57000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 40000000000000000000000000 | -| stableRateSlope2 | null | 800000000000000000000000000 | -| variableRateSlope1 | null | 27000000000000000000000000 | -| variableRateSlope2 | null | 800000000000000000000000000 | - - -#### ENS ([0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72](https://etherscan.io/address/0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://etherscan.io/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) | -| baseStableBorrowRate | null | 120000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### weETH ([0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee](https://etherscan.io/address/0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xf1e5355cEcaA71036CE21cdF8F9d04061B1BC6E1](https://etherscan.io/address/0xf1e5355cEcaA71036CE21cdF8F9d04061B1BC6E1) | -| baseStableBorrowRate | null | 70000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 | -| maxExcessUsageRatio | null | 650000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 0 | -| optimalUsageRatio | null | 350000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### RPL ([0xD33526068D116cE69F19A9ee46F0bd304F21A51f](https://etherscan.io/address/0xD33526068D116cE69F19A9ee46F0bd304F21A51f)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xD87974E8ED49AB16d5053ba793F4e17078Be0426](https://etherscan.io/address/0xD87974E8ED49AB16d5053ba793F4e17078Be0426) | -| baseStableBorrowRate | null | 95000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 85000000000000000000000000 | -| stableRateSlope2 | null | 870000000000000000000000000 | -| variableRateSlope1 | null | 85000000000000000000000000 | -| variableRateSlope2 | null | 870000000000000000000000000 | - - -#### CRV ([0xD533a949740bb3306d119CC777fa900bA034cd52](https://etherscan.io/address/0xD533a949740bb3306d119CC777fa900bA034cd52)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x76884cAFeCf1f7d4146DA6C4053B18B76bf6ED14](https://etherscan.io/address/0x76884cAFeCf1f7d4146DA6C4053B18B76bf6ED14) | -| baseStableBorrowRate | null | 170000000000000000000000000 | -| baseVariableBorrowRate | null | 30000000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 300000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 700000000000000000000000000 | -| stableRateSlope1 | null | 80000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 140000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### rETH ([0xae78736Cd615f374D3085123A210448E74Fc6393](https://etherscan.io/address/0xae78736Cd615f374D3085123A210448E74Fc6393)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x24701A6368Ff6D2874d6b8cDadd461552B8A5283](https://etherscan.io/address/0x24701A6368Ff6D2874d6b8cDadd461552B8A5283) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 70000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### BAL ([0xba100000625a3754423978a60c9317c58a424e3D](https://etherscan.io/address/0xba100000625a3754423978a60c9317c58a424e3D)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xd9d85499449f26d2A2c240defd75314f23920089](https://etherscan.io/address/0xd9d85499449f26d2A2c240defd75314f23920089) | -| baseStableBorrowRate | null | 270000000000000000000000000 | -| baseVariableBorrowRate | null | 50000000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 220000000000000000000000000 | -| stableRateSlope2 | null | 1500000000000000000000000000 | -| variableRateSlope1 | null | 220000000000000000000000000 | -| variableRateSlope2 | null | 1500000000000000000000000000 | #### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7)) @@ -506,68 +49,6 @@ | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 319,566,787.3040 USDT [319566787304072] | 317,566,787.3040 USDT [317566787304072] | -| address | null | [0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601](https://etherscan.io/address/0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 80000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 920000000000000000000000000 | -| stableRateSlope1 | null | 40000000000000000000000000 | -| stableRateSlope2 | null | 720000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - -#### KNC ([0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202](https://etherscan.io/address/0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://etherscan.io/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) | -| baseStableBorrowRate | null | 120000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### osETH ([0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38](https://etherscan.io/address/0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x48AF11111764E710fcDcE2750db848C63edab57B](https://etherscan.io/address/0x48AF11111764E710fcDcE2750db848C63edab57B) | -| baseStableBorrowRate | null | 70000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 0 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### crvUSD ([0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E](https://etherscan.io/address/0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x22B409E1ab288DA6a895FE8251bEbfcA267f8805](https://etherscan.io/address/0x22B409E1ab288DA6a895FE8251bEbfcA267f8805) | -| baseStableBorrowRate | null | 120000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 800000000000000000000000000 | ## Raw diff @@ -575,1550 +56,46 @@ ```json { "reserves": { - "0x111111111117dC0aa78b770fA6A738034120C302": { - "address": { - "from": null, - "to": "0xf6733B9842883BFE0e0a940eA2F572676af31bde" - }, - "baseStableBorrowRate": { - "from": null, - "to": "120000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984": { - "address": { - "from": null, - "to": "0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": { - "address": { - "from": null, - "to": "0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4" - }, - "baseStableBorrowRate": { - "from": null, - "to": "60000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0": { - "address": { - "from": null, - "to": "0xf6733B9842883BFE0e0a940eA2F572676af31bde" - }, - "baseStableBorrowRate": { - "from": null, - "to": "120000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f": { - "address": { - "from": null, - "to": "0x741aE8b9f54b7DdE46C532f2c0F55B8776c93484" - }, - "baseStableBorrowRate": { - "from": null, - "to": "0" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "70000000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "0" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "0" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "0" - }, - "optimalUsageRatio": { - "from": null, - "to": "0" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "0" - }, - "variableRateSlope2": { - "from": null, - "to": "0" - } - }, - "0x4c9EDD5852cd905f086C759E8383e09bff1E68B3": { - "address": { - "from": null, - "to": "0x4011fcd421b9E90f131B164EC1d162DBE269621C" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "1000000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "0" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, "0x514910771AF9Ca656af840dff83E8264EcF986CA": { "aTokenUnderlyingBalance": { "from": "11125899530945508596356169", "to": "11126104063542685827584126" - }, - "address": { - "from": null, - "to": "0x24701A6368Ff6D2874d6b8cDadd461552B8A5283" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32": { - "address": { - "from": null, - "to": "0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" } }, "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": { "aTokenUnderlyingBalance": { "from": "2161079651705465362890767", "to": "2134903042058712358109415" - }, - "address": { - "from": null, - "to": "0x2B3Ed91C6667d808b0401f439c4859ea635c6862" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "870000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "870000000000000000000000000" } }, "0x6B175474E89094C44Da98b954EedeAC495271d0F": { "aTokenUnderlyingBalance": { "from": "21971804316083981578633223", "to": "20843981802212898363345750" - }, - "address": { - "from": null, - "to": "0x05F410A9EB94e0BEe0E47F12254E7Cb5F4E2A1f7" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "80000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "920000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" } }, "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8": { "aTokenUnderlyingBalance": { "from": 4836545813514, "to": 4716686935507 - }, - "address": { - "from": null, - "to": "0x22B409E1ab288DA6a895FE8251bEbfcA267f8805" - }, - "baseStableBorrowRate": { - "from": null, - "to": "120000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - } - }, - "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9": { - "address": { - "from": null, - "to": "0x24701A6368Ff6D2874d6b8cDadd461552B8A5283" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": { - "address": { - "from": null, - "to": "0x7b8Fa4540246554e77FCFf140f9114de00F8bB8D" - }, - "baseStableBorrowRate": { - "from": null, - "to": "75000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "2500000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "45000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - } - }, - "0x83F20F44975D03b1b09e64809B757c47f942BEeA": { - "address": { - "from": null, - "to": "0xdef8F50155A6cf21181E29E400E8CffAE2d50968" - }, - "baseStableBorrowRate": { - "from": null, - "to": "80000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "50000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "50000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, - "0x853d955aCEf822Db058eb8505911ED77F175b99e": { - "address": { - "from": null, - "to": "0xA7D9302346d4C35724821cf98966B2257c9683c6" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, - "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497": { - "address": { - "from": null, - "to": "0x36d32fD7a72AD600be60Ccb71D3718E455025CaA" - }, - "baseStableBorrowRate": { - "from": null, - "to": "0" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "1000000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "0" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "0" - }, - "variableRateSlope2": { - "from": null, - "to": "0" - } - }, - "0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2": { - "address": { - "from": null, - "to": "0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" } }, "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": { "aTokenUnderlyingBalance": { "from": 223439837686233, "to": 221939837686234 - }, - "address": { - "from": null, - "to": "0x0fc12Ad84210695dE8C0D5D8B6f720C37cEaB02f" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "80000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "920000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "600000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "600000000000000000000000000" - } - }, - "0xA35b1B31Ce002FBF2058D22F30f95D405200A15b": { - "address": { - "from": null, - "to": "0x48AF11111764E710fcDcE2750db848C63edab57B" - }, - "baseStableBorrowRate": { - "from": null, - "to": "70000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "1000000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "0" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6": { - "address": { - "from": null, - "to": "0x27eFE5db315b71753b2a38ED3d5dd7E9362ba93F" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704": { - "address": { - "from": null, - "to": "0x24701A6368Ff6D2874d6b8cDadd461552B8A5283" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F": { - "address": { - "from": null, - "to": "0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E" - }, - "baseStableBorrowRate": { - "from": null, - "to": "180000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "30000000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "150000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "1000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "150000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "1000000000000000000000000000" } }, "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": { "aTokenUnderlyingBalance": { "from": "138560714113035891077908", "to": "138687988094400170720313" - }, - "address": { - "from": null, - "to": "0x42ec99A020B78C449d17d93bC4c89e0189B5811d" - }, - "baseStableBorrowRate": { - "from": null, - "to": "57000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "27000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - } - }, - "0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72": { - "address": { - "from": null, - "to": "0xf6733B9842883BFE0e0a940eA2F572676af31bde" - }, - "baseStableBorrowRate": { - "from": null, - "to": "120000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee": { - "address": { - "from": null, - "to": "0xf1e5355cEcaA71036CE21cdF8F9d04061B1BC6E1" - }, - "baseStableBorrowRate": { - "from": null, - "to": "70000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "1000000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "650000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "0" - }, - "optimalUsageRatio": { - "from": null, - "to": "350000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xD33526068D116cE69F19A9ee46F0bd304F21A51f": { - "address": { - "from": null, - "to": "0xD87974E8ED49AB16d5053ba793F4e17078Be0426" - }, - "baseStableBorrowRate": { - "from": null, - "to": "95000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "85000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "870000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "85000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "870000000000000000000000000" - } - }, - "0xD533a949740bb3306d119CC777fa900bA034cd52": { - "address": { - "from": null, - "to": "0x76884cAFeCf1f7d4146DA6C4053B18B76bf6ED14" - }, - "baseStableBorrowRate": { - "from": null, - "to": "170000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "30000000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "300000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "700000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "80000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "140000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xae78736Cd615f374D3085123A210448E74Fc6393": { - "address": { - "from": null, - "to": "0x24701A6368Ff6D2874d6b8cDadd461552B8A5283" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xba100000625a3754423978a60c9317c58a424e3D": { - "address": { - "from": null, - "to": "0xd9d85499449f26d2A2c240defd75314f23920089" - }, - "baseStableBorrowRate": { - "from": null, - "to": "270000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "50000000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "220000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "1500000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "220000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "1500000000000000000000000000" } }, "0xdAC17F958D2ee523a2206206994597C13D831ec7": { "aTokenUnderlyingBalance": { "from": 319566787304072, "to": 317566787304072 - }, - "address": { - "from": null, - "to": "0xca719585f2E07BDe82c4a05D6E7C0E446c2D6601" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "80000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "920000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "720000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, - "0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202": { - "address": { - "from": null, - "to": "0xf6733B9842883BFE0e0a940eA2F572676af31bde" - }, - "baseStableBorrowRate": { - "from": null, - "to": "120000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38": { - "address": { - "from": null, - "to": "0x48AF11111764E710fcDcE2750db848C63edab57B" - }, - "baseStableBorrowRate": { - "from": null, - "to": "70000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "1000000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "0" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E": { - "address": { - "from": null, - "to": "0x22B409E1ab288DA6a895FE8251bEbfcA267f8805" - }, - "baseStableBorrowRate": { - "from": null, - "to": "120000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" } } } diff --git a/diffs/AaveV3Optimism_MayFundingUpdate_20240603_before_AaveV3Optimism_MayFundingUpdate_20240603_after.md b/diffs/AaveV3Optimism_MayFundingUpdate_20240603_before_AaveV3Optimism_MayFundingUpdate_20240603_after.md index 4e737c2ca..21295a94b 100644 --- a/diffs/AaveV3Optimism_MayFundingUpdate_20240603_before_AaveV3Optimism_MayFundingUpdate_20240603_after.md +++ b/diffs/AaveV3Optimism_MayFundingUpdate_20240603_before_AaveV3Optimism_MayFundingUpdate_20240603_after.md @@ -1,244 +1,12 @@ ## Reserve changes -### Reserve altered - -#### USDC ([0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85](https://optimistic.etherscan.io/address/0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xF2c62E55f33f8f5643b7C098237cEa25cEb4e590](https://optimistic.etherscan.io/address/0xF2c62E55f33f8f5643b7C098237cEa25cEb4e590) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 35000000000000000000000000 | -| stableRateSlope2 | null | 600000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 600000000000000000000000000 | - - -#### wstETH ([0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb](https://optimistic.etherscan.io/address/0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x6BA97468e2e6a3711a6DD05F0075d48E878c910e](https://optimistic.etherscan.io/address/0x6BA97468e2e6a3711a6DD05F0075d48E878c910e) | -| baseStableBorrowRate | null | 55000000000000000000000000 | -| baseVariableBorrowRate | null | 2500000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 45000000000000000000000000 | -| stableRateSlope2 | null | 800000000000000000000000000 | -| variableRateSlope1 | null | 45000000000000000000000000 | -| variableRateSlope2 | null | 800000000000000000000000000 | - - -#### LINK ([0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6](https://optimistic.etherscan.io/address/0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C](https://optimistic.etherscan.io/address/0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### WETH ([0x4200000000000000000000000000000000000006](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000006)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x129F838C3339f64a026aeb334Ffd5d55C2E94935](https://optimistic.etherscan.io/address/0x129F838C3339f64a026aeb334Ffd5d55C2E94935) | -| baseStableBorrowRate | null | 57000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 40000000000000000000000000 | -| stableRateSlope2 | null | 800000000000000000000000000 | -| variableRateSlope1 | null | 27000000000000000000000000 | -| variableRateSlope2 | null | 800000000000000000000000000 | - - -#### OP ([0x4200000000000000000000000000000000000042](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C](https://optimistic.etherscan.io/address/0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### WBTC ([0x68f180fcCe6836688e9084f035309E29Bf0A2095](https://optimistic.etherscan.io/address/0x68f180fcCe6836688e9084f035309E29Bf0A2095)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17](https://optimistic.etherscan.io/address/0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17) | -| baseStableBorrowRate | null | 60000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 40000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### AAVE ([0x76FB31fb4af56892A25e32cFC43De717950c9278](https://optimistic.etherscan.io/address/0x76FB31fb4af56892A25e32cFC43De717950c9278)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C](https://optimistic.etherscan.io/address/0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - +### Reserves altered #### USDC ([0x7F5c764cBc14f9669B88837ca1490cCa17c31607](https://optimistic.etherscan.io/address/0x7F5c764cBc14f9669B88837ca1490cCa17c31607)) | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 1,560,827.1186 USDC [1560827118641] | 791,927.6617 USDC [791927661766] | -| address | null | [0x049BDe04f282822a020631415b39Dc613B934894](https://optimistic.etherscan.io/address/0x049BDe04f282822a020631415b39Dc613B934894) | -| baseStableBorrowRate | null | 110000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 600000000000000000000000000 | -| variableRateSlope1 | null | 100000000000000000000000000 | -| variableRateSlope2 | null | 800000000000000000000000000 | - - -#### sUSD ([0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9](https://optimistic.etherscan.io/address/0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xd9a0344d7f661c115f73e261d0b74263386fD8c8](https://optimistic.etherscan.io/address/0xd9a0344d7f661c115f73e261d0b74263386fD8c8) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - -#### USDT ([0x94b008aA00579c1307B0EF2c499aD98a8ce58e58](https://optimistic.etherscan.io/address/0x94b008aA00579c1307B0EF2c499aD98a8ce58e58)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x245680a504e29c74a5907ce7c1025BF308319f92](https://optimistic.etherscan.io/address/0x245680a504e29c74a5907ce7c1025BF308319f92) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - -#### rETH ([0x9Bcef72be871e61ED4fBbc7630889beE758eb81D](https://optimistic.etherscan.io/address/0x9Bcef72be871e61ED4fBbc7630889beE758eb81D)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x3B57B081dA6Af5e2759A57bD3211932Cb6176997](https://optimistic.etherscan.io/address/0x3B57B081dA6Af5e2759A57bD3211932Cb6176997) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 130000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://optimistic.etherscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x245680a504e29c74a5907ce7c1025BF308319f92](https://optimistic.etherscan.io/address/0x245680a504e29c74a5907ce7c1025BF308319f92) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - -#### LUSD ([0xc40F949F8a4e094D1b49a23ea9241D289B7b2819](https://optimistic.etherscan.io/address/0xc40F949F8a4e094D1b49a23ea9241D289B7b2819)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x61e39832D9A138cb0e1b95F79aa827273e71c97f](https://optimistic.etherscan.io/address/0x61e39832D9A138cb0e1b95F79aa827273e71c97f) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 40000000000000000000000000 | -| stableRateSlope2 | null | 870000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 870000000000000000000000000 | - - -#### MAI ([0xdFA46478F9e5EA86d57387849598dbFB2e964b02](https://optimistic.etherscan.io/address/0xdFA46478F9e5EA86d57387849598dbFB2e964b02)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x168Bb3f994642CEA4017b39cB691f4668da8596C](https://optimistic.etherscan.io/address/0x168Bb3f994642CEA4017b39cB691f4668da8596C) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 40000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | ## Raw diff @@ -246,652 +14,10 @@ ```json { "reserves": { - "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85": { - "address": { - "from": null, - "to": "0xF2c62E55f33f8f5643b7C098237cEa25cEb4e590" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "35000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "600000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "600000000000000000000000000" - } - }, - "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb": { - "address": { - "from": null, - "to": "0x6BA97468e2e6a3711a6DD05F0075d48E878c910e" - }, - "baseStableBorrowRate": { - "from": null, - "to": "55000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "2500000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "45000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "45000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - } - }, - "0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6": { - "address": { - "from": null, - "to": "0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x4200000000000000000000000000000000000006": { - "address": { - "from": null, - "to": "0x129F838C3339f64a026aeb334Ffd5d55C2E94935" - }, - "baseStableBorrowRate": { - "from": null, - "to": "57000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "27000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - } - }, - "0x4200000000000000000000000000000000000042": { - "address": { - "from": null, - "to": "0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x68f180fcCe6836688e9084f035309E29Bf0A2095": { - "address": { - "from": null, - "to": "0x04daBC3C1c052AB94AA2ca80140f2b978d2F6E17" - }, - "baseStableBorrowRate": { - "from": null, - "to": "60000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x76FB31fb4af56892A25e32cFC43De717950c9278": { - "address": { - "from": null, - "to": "0xeE1BAc9355EaAfCD1B68d272d640d870bC9b4b5C" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, "0x7F5c764cBc14f9669B88837ca1490cCa17c31607": { "aTokenUnderlyingBalance": { "from": 1560827118641, "to": 791927661766 - }, - "address": { - "from": null, - "to": "0x049BDe04f282822a020631415b39Dc613B934894" - }, - "baseStableBorrowRate": { - "from": null, - "to": "110000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "600000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "100000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - } - }, - "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9": { - "address": { - "from": null, - "to": "0xd9a0344d7f661c115f73e261d0b74263386fD8c8" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, - "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58": { - "address": { - "from": null, - "to": "0x245680a504e29c74a5907ce7c1025BF308319f92" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, - "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D": { - "address": { - "from": null, - "to": "0x3B57B081dA6Af5e2759A57bD3211932Cb6176997" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "130000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": { - "address": { - "from": null, - "to": "0x245680a504e29c74a5907ce7c1025BF308319f92" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, - "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819": { - "address": { - "from": null, - "to": "0x61e39832D9A138cb0e1b95F79aa827273e71c97f" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "870000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "870000000000000000000000000" - } - }, - "0xdFA46478F9e5EA86d57387849598dbFB2e964b02": { - "address": { - "from": null, - "to": "0x168Bb3f994642CEA4017b39cB691f4668da8596C" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" } } } diff --git a/diffs/AaveV3Polygon_MayFundingUpdate_20240603_before_AaveV3Polygon_MayFundingUpdate_20240603_after.md b/diffs/AaveV3Polygon_MayFundingUpdate_20240603_before_AaveV3Polygon_MayFundingUpdate_20240603_after.md index 68fc640be..2dfc8da33 100644 --- a/diffs/AaveV3Polygon_MayFundingUpdate_20240603_before_AaveV3Polygon_MayFundingUpdate_20240603_after.md +++ b/diffs/AaveV3Polygon_MayFundingUpdate_20240603_before_AaveV3Polygon_MayFundingUpdate_20240603_after.md @@ -2,192 +2,11 @@ ### Reserve altered -#### wstETH ([0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD](https://polygonscan.com/address/0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E](https://polygonscan.com/address/0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E) | -| baseStableBorrowRate | null | 55000000000000000000000000 | -| baseVariableBorrowRate | null | 2500000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 45000000000000000000000000 | -| stableRateSlope2 | null | 800000000000000000000000000 | -| variableRateSlope1 | null | 45000000000000000000000000 | -| variableRateSlope2 | null | 800000000000000000000000000 | - - -#### SUSHI ([0x0b3F868E0BE5597D5DB7fEB59E1CADBb0fdDa50a](https://polygonscan.com/address/0x0b3F868E0BE5597D5DB7fEB59E1CADBb0fdDa50a)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x03733F4E008d36f2e37F0080fF1c8DF756622E6F](https://polygonscan.com/address/0x03733F4E008d36f2e37F0080fF1c8DF756622E6F) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### WMATIC ([0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270](https://polygonscan.com/address/0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xD87974E8ED49AB16d5053ba793F4e17078Be0426](https://polygonscan.com/address/0xD87974E8ED49AB16d5053ba793F4e17078Be0426) | -| baseStableBorrowRate | null | 70000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 250000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 750000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 50000000000000000000000000 | -| variableRateSlope2 | null | 1000000000000000000000000000 | - - -#### CRV ([0x172370d5Cd63279eFa6d502DAB29171933a610AF](https://polygonscan.com/address/0x172370d5Cd63279eFa6d502DAB29171933a610AF)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xBefcd01681224555b74eAC87207eaF9Bc3361F59](https://polygonscan.com/address/0xBefcd01681224555b74eAC87207eaF9Bc3361F59) | -| baseStableBorrowRate | null | 170000000000000000000000000 | -| baseVariableBorrowRate | null | 30000000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 300000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 700000000000000000000000000 | -| stableRateSlope1 | null | 80000000000000000000000000 | -| stableRateSlope2 | null | 3000000000000000000000000000 | -| variableRateSlope1 | null | 140000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### WBTC ([0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6](https://polygonscan.com/address/0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4](https://polygonscan.com/address/0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4) | -| baseStableBorrowRate | null | 60000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 40000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - #### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)) | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 2,643,567.0046 USDC [2643567004699] | 2,603,628.7918 USDC [2603628791840] | -| address | null | [0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d](https://polygonscan.com/address/0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d) | -| baseStableBorrowRate | null | 110000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 600000000000000000000000000 | -| variableRateSlope1 | null | 100000000000000000000000000 | -| variableRateSlope2 | null | 800000000000000000000000000 | - - -#### GHST ([0x385Eeac5cB85A38A9a07A70c73e0a3271CfB54A7](https://polygonscan.com/address/0x385Eeac5cB85A38A9a07A70c73e0a3271CfB54A7)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x03733F4E008d36f2e37F0080fF1c8DF756622E6F](https://polygonscan.com/address/0x03733F4E008d36f2e37F0080fF1c8DF756622E6F) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### stMATIC ([0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4](https://polygonscan.com/address/0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x03733F4E008d36f2e37F0080fF1c8DF756622E6F](https://polygonscan.com/address/0x03733F4E008d36f2e37F0080fF1c8DF756622E6F) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### USDC ([0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359](https://polygonscan.com/address/0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f](https://polygonscan.com/address/0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 1000000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 0 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 50000000000000000000000000 | -| stableRateSlope2 | null | 600000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 600000000000000000000000000 | - - -#### jEUR ([0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c](https://polygonscan.com/address/0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x7448ABeD12d8538efC115af4a417e3d1367180fc](https://polygonscan.com/address/0x7448ABeD12d8538efC115af4a417e3d1367180fc) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 600000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 600000000000000000000000000 | - - -#### LINK ([0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39](https://polygonscan.com/address/0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x03733F4E008d36f2e37F0080fF1c8DF756622E6F](https://polygonscan.com/address/0x03733F4E008d36f2e37F0080fF1c8DF756622E6F) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | #### WETH ([0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619](https://polygonscan.com/address/0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619)) @@ -195,34 +14,6 @@ | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 19,960.6958 WETH [19960695830512528665279] | 19,983.0246 WETH [19983024675595537664900] | -| address | null | [0xf6733B9842883BFE0e0a940eA2F572676af31bde](https://polygonscan.com/address/0xf6733B9842883BFE0e0a940eA2F572676af31bde) | -| baseStableBorrowRate | null | 63000000000000000000000000 | -| baseVariableBorrowRate | null | 10000000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 40000000000000000000000000 | -| stableRateSlope2 | null | 800000000000000000000000000 | -| variableRateSlope1 | null | 33000000000000000000000000 | -| variableRateSlope2 | null | 800000000000000000000000000 | - - -#### DPI ([0x85955046DF4668e1DD369D2DE9f3AEB98DD2A369](https://polygonscan.com/address/0x85955046DF4668e1DD369D2DE9f3AEB98DD2A369)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xd9d85499449f26d2A2c240defd75314f23920089](https://polygonscan.com/address/0xd9d85499449f26d2A2c240defd75314f23920089) | -| baseStableBorrowRate | null | 120000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 100000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | #### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063)) @@ -230,102 +21,6 @@ | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 1,980,378.6183 DAI [1980378618389267156685230] | 2,054,458.3857 DAI [2054458385717683583904906] | -| address | null | [0xd56eE97960b1b2953e751151Fd84888cF3F3b521](https://polygonscan.com/address/0xd56eE97960b1b2953e751151Fd84888cF3F3b521) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - -#### BAL ([0x9a71012B13CA4d3D0Cdc72A177DF3ef03b0E76A3](https://polygonscan.com/address/0x9a71012B13CA4d3D0Cdc72A177DF3ef03b0E76A3)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xCbDC7D7984D7AD59434f0B1999D2006898C40f9A](https://polygonscan.com/address/0xCbDC7D7984D7AD59434f0B1999D2006898C40f9A) | -| baseStableBorrowRate | null | 270000000000000000000000000 | -| baseVariableBorrowRate | null | 50000000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 220000000000000000000000000 | -| stableRateSlope2 | null | 1500000000000000000000000000 | -| variableRateSlope1 | null | 220000000000000000000000000 | -| variableRateSlope2 | null | 1500000000000000000000000000 | - - -#### AAVE ([0xD6DF932A45C0f255f85145f286eA0b292B21C90B](https://polygonscan.com/address/0xD6DF932A45C0f255f85145f286eA0b292B21C90B)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x03733F4E008d36f2e37F0080fF1c8DF756622E6F](https://polygonscan.com/address/0x03733F4E008d36f2e37F0080fF1c8DF756622E6F) | -| baseStableBorrowRate | null | 90000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 0 | -| stableRateSlope2 | null | 0 | -| variableRateSlope1 | null | 70000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | - - -#### EURA ([0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4](https://polygonscan.com/address/0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1](https://polygonscan.com/address/0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - -#### EURS ([0xE111178A87A3BFf0c8d18DECBa5798827539Ae99](https://polygonscan.com/address/0xE111178A87A3BFf0c8d18DECBa5798827539Ae99)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1](https://polygonscan.com/address/0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 200000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 800000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - -#### miMATIC ([0xa3Fa99A148fA48D14Ed51d610c367C61876997F1](https://polygonscan.com/address/0xa3Fa99A148fA48D14Ed51d610c367C61876997F1)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0xa8C12113DB50549A1E36FD25982C88B69A0007E0](https://polygonscan.com/address/0xa8C12113DB50549A1E36FD25982C88B69A0007E0) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 3000000000000000000000000000 | #### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F)) @@ -333,34 +28,6 @@ | description | value before | value after | | --- | --- | --- | | aTokenUnderlyingBalance | 4,135,239.5857 USDT [4135239585787] | 4,218,607.5364 USDT [4218607536428] | -| address | null | [0xd56eE97960b1b2953e751151Fd84888cF3F3b521](https://polygonscan.com/address/0xd56eE97960b1b2953e751151Fd84888cF3F3b521) | -| baseStableBorrowRate | null | 100000000000000000000000000 | -| baseVariableBorrowRate | null | 0 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 100000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 900000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 750000000000000000000000000 | -| variableRateSlope1 | null | 90000000000000000000000000 | -| variableRateSlope2 | null | 750000000000000000000000000 | - - -#### MaticX ([0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6](https://polygonscan.com/address/0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6)) - -| description | value before | value after | -| --- | --- | --- | -| address | null | [0x6B434652E4C4e3e972f9F267982F05ae0fcc24b6](https://polygonscan.com/address/0x6B434652E4C4e3e972f9F267982F05ae0fcc24b6) | -| baseStableBorrowRate | null | 60000000000000000000000000 | -| baseVariableBorrowRate | null | 2500000000000000000000000 | -| maxExcessStableToTotalDebtRatio | null | 800000000000000000000000000 | -| maxExcessUsageRatio | null | 550000000000000000000000000 | -| optimalStableToTotalDebtRatio | null | 200000000000000000000000000 | -| optimalUsageRatio | null | 450000000000000000000000000 | -| stableRateSlope1 | null | 5000000000000000000000000 | -| stableRateSlope2 | null | 1500000000000000000000000000 | -| variableRateSlope1 | null | 40000000000000000000000000 | -| variableRateSlope2 | null | 1500000000000000000000000000 | ## Raw diff @@ -368,986 +35,28 @@ ```json { "reserves": { - "0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD": { - "address": { - "from": null, - "to": "0xA6459195d60A797D278f58Ffbd2BA62Fb3F7FA1E" - }, - "baseStableBorrowRate": { - "from": null, - "to": "55000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "2500000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "45000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "45000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - } - }, - "0x0b3F868E0BE5597D5DB7fEB59E1CADBb0fdDa50a": { - "address": { - "from": null, - "to": "0x03733F4E008d36f2e37F0080fF1c8DF756622E6F" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270": { - "address": { - "from": null, - "to": "0xD87974E8ED49AB16d5053ba793F4e17078Be0426" - }, - "baseStableBorrowRate": { - "from": null, - "to": "70000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "250000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "750000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "50000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "1000000000000000000000000000" - } - }, - "0x172370d5Cd63279eFa6d502DAB29171933a610AF": { - "address": { - "from": null, - "to": "0xBefcd01681224555b74eAC87207eaF9Bc3361F59" - }, - "baseStableBorrowRate": { - "from": null, - "to": "170000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "30000000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "300000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "700000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "80000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "140000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6": { - "address": { - "from": null, - "to": "0x07Fa3744FeC271F80c2EA97679823F65c13CCDf4" - }, - "baseStableBorrowRate": { - "from": null, - "to": "60000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { "aTokenUnderlyingBalance": { "from": 2643567004699, "to": 2603628791840 - }, - "address": { - "from": null, - "to": "0xc7b53C7d24164FB78F57Ea3b5d056bD2E541013d" - }, - "baseStableBorrowRate": { - "from": null, - "to": "110000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "600000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "100000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - } - }, - "0x385Eeac5cB85A38A9a07A70c73e0a3271CfB54A7": { - "address": { - "from": null, - "to": "0x03733F4E008d36f2e37F0080fF1c8DF756622E6F" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4": { - "address": { - "from": null, - "to": "0x03733F4E008d36f2e37F0080fF1c8DF756622E6F" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359": { - "address": { - "from": null, - "to": "0xaEc90D2516c79F8Ae7165574a41EC4dF2631b36f" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "1000000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "0" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "50000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "600000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "600000000000000000000000000" - } - }, - "0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c": { - "address": { - "from": null, - "to": "0x7448ABeD12d8538efC115af4a417e3d1367180fc" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "600000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "600000000000000000000000000" - } - }, - "0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39": { - "address": { - "from": null, - "to": "0x03733F4E008d36f2e37F0080fF1c8DF756622E6F" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" } }, "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": { "aTokenUnderlyingBalance": { "from": "19960695830512528665279", "to": "19983024675595537664900" - }, - "address": { - "from": null, - "to": "0xf6733B9842883BFE0e0a940eA2F572676af31bde" - }, - "baseStableBorrowRate": { - "from": null, - "to": "63000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "10000000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "33000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "800000000000000000000000000" - } - }, - "0x85955046DF4668e1DD369D2DE9f3AEB98DD2A369": { - "address": { - "from": null, - "to": "0xd9d85499449f26d2A2c240defd75314f23920089" - }, - "baseStableBorrowRate": { - "from": null, - "to": "120000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "100000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" } }, "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": { "aTokenUnderlyingBalance": { "from": "1980378618389267156685230", "to": "2054458385717683583904906" - }, - "address": { - "from": null, - "to": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, - "0x9a71012B13CA4d3D0Cdc72A177DF3ef03b0E76A3": { - "address": { - "from": null, - "to": "0xCbDC7D7984D7AD59434f0B1999D2006898C40f9A" - }, - "baseStableBorrowRate": { - "from": null, - "to": "270000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "50000000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "220000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "1500000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "220000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "1500000000000000000000000000" - } - }, - "0xD6DF932A45C0f255f85145f286eA0b292B21C90B": { - "address": { - "from": null, - "to": "0x03733F4E008d36f2e37F0080fF1c8DF756622E6F" - }, - "baseStableBorrowRate": { - "from": null, - "to": "90000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "0" - }, - "stableRateSlope2": { - "from": null, - "to": "0" - }, - "variableRateSlope1": { - "from": null, - "to": "70000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" - } - }, - "0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4": { - "address": { - "from": null, - "to": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, - "0xE111178A87A3BFf0c8d18DECBa5798827539Ae99": { - "address": { - "from": null, - "to": "0xb96c569Ceb49440731DdD5D8c5E6DA3538f1CBF1" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, - "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1": { - "address": { - "from": null, - "to": "0xa8C12113DB50549A1E36FD25982C88B69A0007E0" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "3000000000000000000000000000" } }, "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": { "aTokenUnderlyingBalance": { "from": 4135239585787, "to": 4218607536428 - }, - "address": { - "from": null, - "to": "0xd56eE97960b1b2953e751151Fd84888cF3F3b521" - }, - "baseStableBorrowRate": { - "from": null, - "to": "100000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "0" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "100000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "900000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "90000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "750000000000000000000000000" - } - }, - "0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6": { - "address": { - "from": null, - "to": "0x6B434652E4C4e3e972f9F267982F05ae0fcc24b6" - }, - "baseStableBorrowRate": { - "from": null, - "to": "60000000000000000000000000" - }, - "baseVariableBorrowRate": { - "from": null, - "to": "2500000000000000000000000" - }, - "maxExcessStableToTotalDebtRatio": { - "from": null, - "to": "800000000000000000000000000" - }, - "maxExcessUsageRatio": { - "from": null, - "to": "550000000000000000000000000" - }, - "optimalStableToTotalDebtRatio": { - "from": null, - "to": "200000000000000000000000000" - }, - "optimalUsageRatio": { - "from": null, - "to": "450000000000000000000000000" - }, - "stableRateSlope1": { - "from": null, - "to": "5000000000000000000000000" - }, - "stableRateSlope2": { - "from": null, - "to": "1500000000000000000000000000" - }, - "variableRateSlope1": { - "from": null, - "to": "40000000000000000000000000" - }, - "variableRateSlope2": { - "from": null, - "to": "1500000000000000000000000000" } } } diff --git a/lib/aave-helpers b/lib/aave-helpers index b764404b1..8839921d7 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit b764404b1dbec7877942be98a5a26d6f7ac0298f +Subproject commit 8839921d767fd9d60497673d6850e01c1922aa15 From 1391ea39052a0d35fbd843bd49edaf6ea7eb1c73 Mon Sep 17 00:00:00 2001 From: eyalovadya <38078004+eyalovadya@users.noreply.github.com> Date: Tue, 30 Jul 2024 20:13:12 +0300 Subject: [PATCH 04/68] [Chaos Labs] Risk Parameter Updates - sAVAX on V3 Avalanche (#399) * Risk Parameter Updates - sAVAX on V3 Avalanche * CR fix * Fix imports * Fixes --- ...esSAVAXOnAaveV3Avalanche_20240724_after.md | 30 +++++++++ ...UpdatesSAVAXOnAaveV3Avalanche_20240724.sol | 37 +++++++++++ ...datesSAVAXOnAaveV3Avalanche_20240724.t.sol | 52 ++++++++++++++++ ...kParameterUpdatesSAVAXOnAaveV3Avalanche.md | 41 +++++++++++++ ...datesSAVAXOnAaveV3Avalanche_20240724.s.sol | 61 +++++++++++++++++++ .../config.ts | 32 ++++++++++ 6 files changed, 253 insertions(+) create mode 100644 diffs/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724_before_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724_after.md create mode 100644 src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol create mode 100644 src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol create mode 100644 src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche.md create mode 100644 src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol create mode 100644 src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/config.ts diff --git a/diffs/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724_before_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724_after.md b/diffs/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724_before_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724_after.md new file mode 100644 index 000000000..5bb40133f --- /dev/null +++ b/diffs/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724_before_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724_after.md @@ -0,0 +1,30 @@ +## Reserve changes + +### Reserves altered + +#### sAVAX ([0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE](https://snowtrace.io/address/0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE)) + +| description | value before | value after | +| --- | --- | --- | +| ltv | 30 % [3000] | 40 % [4000] | +| liquidationThreshold | 40 % [4000] | 45 % [4500] | + + +## Raw diff + +```json +{ + "reserves": { + "0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE": { + "liquidationThreshold": { + "from": 4000, + "to": 4500 + }, + "ltv": { + "from": 3000, + "to": 4000 + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol new file mode 100644 index 000000000..4835f3e3c --- /dev/null +++ b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; +import {AaveV3PayloadAvalanche} from 'aave-helpers/v3-config-engine/AaveV3PayloadAvalanche.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Risk Parameter Updates - sAVAX on Aave V3 Avalanche + * @author Chaos Labs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x471ab55b0091043963c744f228befd842aeb354b0d04c76da3c9eb2b401934a4 + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-savax-on-aave-v3-avalanche-07-16-2024/18277 + */ +contract AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724 is + AaveV3PayloadAvalanche +{ + function collateralsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.CollateralUpdate[] memory) + { + IAaveV3ConfigEngine.CollateralUpdate[] + memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1); + + collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({ + asset: AaveV3AvalancheAssets.sAVAX_UNDERLYING, + ltv: 40_00, + liqThreshold: 45_00, + liqBonus: EngineFlags.KEEP_CURRENT, + debtCeiling: EngineFlags.KEEP_CURRENT, + liqProtocolFee: EngineFlags.KEEP_CURRENT + }); + + return collateralUpdate; + } +} diff --git a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol new file mode 100644 index 000000000..5e150311d --- /dev/null +++ b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724} from './AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol'; + +/** + * @dev Test for AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724 + * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol -vv + */ +contract AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724_Test is + ProtocolV3TestBase +{ + struct Change { + address asset; + uint256 lt; + uint256 ltv; + } + + AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 48390154); + proposal = new AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest( + 'AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724', + AaveV3Avalanche.POOL, + address(proposal) + ); + + address[] memory assetsChanged = new address[](1); + assetsChanged[0] = AaveV3AvalancheAssets.sAVAX_UNDERLYING; + + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + ReserveConfig memory config = _findReserveConfig( + allConfigsAfter, + AaveV3AvalancheAssets.sAVAX_UNDERLYING + ); + assertEq(config.ltv, 40_00); + assertEq(config.liquidationThreshold, 45_00); + } +} diff --git a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche.md b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche.md new file mode 100644 index 000000000..6cc6bed69 --- /dev/null +++ b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche.md @@ -0,0 +1,41 @@ +--- +title: "Risk Parameter Updates - sAVAX on Aave V3 Avalanche" +author: "Chaos Labs" +discussions: "https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-savax-on-aave-v3-avalanche-07-16-2024/18277" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x471ab55b0091043963c744f228befd842aeb354b0d04c76da3c9eb2b401934a4" +--- + +## Simple Summary + +A proposal to adjust sAVAX’s LT and LTV on Aave V3 Avalanche. + +## Motivation + +Increasing the liquidation threshold and LTV for assets allows Aave to enhance users’ capital efficiency. However, this must be balanced with proper risk management to ensure that there is a sufficient buffer in the event of large drawdowns and/or liquidations. The analysis below was conducted utilizing our LT simulations, which showed either minimal or no increases in VaR at the recommended LT levels while also considering user distribution and on-chain liquidity. + +### sAVAX + +sAVAX’s LTV and LT are currently set to 30% and 40%, respectively (its E-Mode parameters are 92.5% and 95%). The top suppliers are primarily looping sAVAX and WAVAX, reducing the risk of large-scale liquidations in this market. +However, there is a small amount of non-WAVAX borrows against sAVAX, primarily WETH.e and stablecoins. +Moreover, sAVAX maintains strong liquidity against AVAX, meaning that potential liquidations of sAVAX collateralized debt are likely to be completed efficiently. +Given user distribution and liquidity, we recommend increasing LTV to 40% and LT to 45%. + +## Specification + +Given these observations, we recommend making the following changes: + +| Chain | Asset | Parameter | Current | Recommended | +| --------- | ----- | --------------------- | ------- | ----------- | +| Avalanche | sAVAX | LTV | 30% | 40% | +| Avalanche | sAVAX | Liquidation Threshold | 40% | 45% | + +## References + +- Implementation: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol) +- Tests: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x471ab55b0091043963c744f228befd842aeb354b0d04c76da3c9eb2b401934a4) +- [Discussion](https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-savax-on-aave-v3-avalanche-07-16-2024/18277) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol new file mode 100644 index 000000000..88c3b174e --- /dev/null +++ b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, AvalancheScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724} from './AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol'; + +/** + * @dev Deploy Avalanche + * deploy-command: make deploy-ledger contract=src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol:DeployAvalanche chain=avalanche + * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol/43114/run-latest.json + */ +contract DeployAvalanche is AvalancheScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); + actionsAvalanche[0] = GovV3Helpers.buildAction( + type(AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724).creationCode + ); + payloads[0] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche.md' + ) + ); + } +} diff --git a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/config.ts b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/config.ts new file mode 100644 index 000000000..7e993b346 --- /dev/null +++ b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/config.ts @@ -0,0 +1,32 @@ +import {ConfigFile, VOTING_NETWORK} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Avalanche'], + title: 'Risk Parameter Updates - sAVAX on Aave V3 Avalanche', + shortName: 'RiskParameterUpdatesSAVAXOnAaveV3Avalanche', + date: '20240724', + author: 'Chaos Labs', + discussion: + 'https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-savax-on-aave-v3-avalanche-07-16-2024/18277', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x471ab55b0091043963c744f228befd842aeb354b0d04c76da3c9eb2b401934a4', + votingNetwork: VOTING_NETWORK.POLYGON, + }, + poolOptions: { + AaveV3Avalanche: { + configs: { + COLLATERALS_UPDATE: [ + { + asset: 'sAVAX', + ltv: '40', + liqThreshold: '45', + liqBonus: '', + debtCeiling: '', + liqProtocolFee: '', + }, + ], + }, + cache: {blockNumber: 48390154}, + }, + }, +}; From a918b4e1e5bd0cbde72e853982cdc0d3b8060e4f Mon Sep 17 00:00:00 2001 From: Cache bot Date: Tue, 30 Jul 2024 17:13:46 +0000 Subject: [PATCH 05/68] fix(cache): automated cache update [skip ci] --- .../RiskParameterUpdatesSAVAXOnAaveV3Avalanche.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche.md b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche.md index 6cc6bed69..703fe4a46 100644 --- a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche.md +++ b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche.md @@ -31,8 +31,8 @@ Given these observations, we recommend making the following changes: ## References -- Implementation: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol) -- Tests: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol) +- Implementation: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/1391ea39052a0d35fbd843bd49edaf6ea7eb1c73/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol) +- Tests: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/1391ea39052a0d35fbd843bd49edaf6ea7eb1c73/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x471ab55b0091043963c744f228befd842aeb354b0d04c76da3c9eb2b401934a4) - [Discussion](https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-savax-on-aave-v3-avalanche-07-16-2024/18277) From 56b9cd738e58467d4299ce17a7c29360bddd8468 Mon Sep 17 00:00:00 2001 From: Marc Zeller <21088542+marczeller@users.noreply.github.com> Date: Tue, 30 Jul 2024 20:50:44 +0200 Subject: [PATCH 06/68] Aave Lido Market LTV0 (#403) * init * fixed payload * updated markdown * LT fix * Fix test new import * Update src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md Co-authored-by: Ernesto Boado * md minor fix * md change * Update src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol Co-authored-by: Harsh Pandey * Update src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md Co-authored-by: Harsh Pandey * Update src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md Co-authored-by: Harsh Pandey * Update src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol Co-authored-by: Harsh Pandey * Update src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol Co-authored-by: Harsh Pandey * Update src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol Co-authored-by: Harsh Pandey --------- Co-authored-by: marczeller Co-authored-by: Ernesto Boado Co-authored-by: Harsh Pandey --- ...THLTV0AaveV3LidoInstance_20240729_after.md | 25 ++++++++ ..._WETHLTV0AaveV3LidoInstance_20240729.s.sol | 59 +++++++++++++++++++ ...do_WETHLTV0AaveV3LidoInstance_20240729.sol | 37 ++++++++++++ ..._WETHLTV0AaveV3LidoInstance_20240729.t.sol | 32 ++++++++++ .../WETHLTV0AaveV3LidoInstance.md | 41 +++++++++++++ .../config.ts | 14 +++++ 6 files changed, 208 insertions(+) create mode 100644 diffs/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729_before_AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729_after.md create mode 100644 src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol create mode 100644 src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol create mode 100644 src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol create mode 100644 src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md create mode 100644 src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/config.ts diff --git a/diffs/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729_before_AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729_after.md b/diffs/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729_before_AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729_after.md new file mode 100644 index 000000000..8b32cde94 --- /dev/null +++ b/diffs/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729_before_AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)) + +| description | value before | value after | +| --- | --- | --- | +| ltv | 82 % [8200] | 0 % [0] | + + +## Raw diff + +```json +{ + "reserves": { + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": { + "ltv": { + "from": 8200, + "to": 0 + } + } + } +} +``` \ No newline at end of file diff --git a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol new file mode 100644 index 000000000..11a4e644a --- /dev/null +++ b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729} from './AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol'; +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md' + ) + ); + } +} diff --git a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol new file mode 100644 index 000000000..192be877a --- /dev/null +++ b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {AaveV3PayloadEthereumLido} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereumLido.sol'; +import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +/** + * @title wETH LTV0 Aave V3 Lido Instance + * @author ACI + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-deploy-a-lido-aave-v3-instance/18047/18 + */ +contract AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729 is AaveV3PayloadEthereumLido { + function collateralsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.CollateralUpdate[] memory) + { + IAaveV3ConfigEngine.CollateralUpdate[] + memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1); + + collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({ + asset: AaveV3EthereumAssets.WETH_UNDERLYING, + ltv: 0, + liqThreshold: EngineFlags.KEEP_CURRENT, + liqBonus: EngineFlags.KEEP_CURRENT, + debtCeiling: EngineFlags.KEEP_CURRENT, + liqProtocolFee: EngineFlags.KEEP_CURRENT + }); + + return collateralUpdate; + } +} diff --git a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol new file mode 100644 index 000000000..6bb92bd87 --- /dev/null +++ b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729} from './AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol'; + +/** + * @dev Test for AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol -vv + */ +contract AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729_Test is ProtocolV3TestBase { + AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20414432); + proposal = new AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729', + AaveV3EthereumLido.POOL, + address(proposal) + ); + } +} diff --git a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md new file mode 100644 index 000000000..a1faa36c3 --- /dev/null +++ b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md @@ -0,0 +1,41 @@ +--- +title: "wETH LTV0 Aave V3 Lido Instance " +author: "ACI" +discussions: "https://governance.aave.com/t/arfc-deploy-a-lido-aave-v3-instance/18047/18" +--- + +## Simple Summary + +This AIP proposes to update the recently deployed Lido Aave v3 instance by setting the wETH LTV to zero, shifting focus to the instance's intended main use case of leveraged staking. + +## Motivation + +Following discussions with service providers, the Lido Aave v3 instance was initially launched with wETH as collateral to allow quick growth of the wETH reserve, preparing the grounds for third-party integrations such as DefiSaver to bring wstETH liquidity and usage. + +This kickstart strategy was highly successful, attracting $121 million in deposits within 24 hours, surpassing our projections. Now, it's time to adjust the strategy by cutting the wETH LTV to zero and focusing on the instance's primary intended use case: leveraged staking. + +The motivation for this change includes: + +1. Refocusing the instance on its primary use case of leveraged staking with wstETH. +2. Reducing potential risks associated with using wETH as collateral in this specialized instance. +3. Encouraging users to migrate towards wstETH for collateral, aligning with the Lido ecosystem focus. + +This AIP proposes the following changes to the Lido Aave v3 instance for wETH: + +- Set wETH LTV (Loan-to-Value) from 82% to 0% + +All other parameters for wETH will remain unchanged: + +| Parameter | Current Value | Proposed Value | +| --------- | ------------- | -------------- | +| LTV | 82% | 0% | + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol) +- [Discussion](https://governance.aave.com/t/arfc-deploy-a-lido-aave-v3-instance/18047/18) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/config.ts b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/config.ts new file mode 100644 index 000000000..425458a8a --- /dev/null +++ b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/config.ts @@ -0,0 +1,14 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'wETH LTV0 Aave V3 Lido Instance ', + shortName: 'WETHLTV0AaveV3LidoInstance', + date: '20240729', + author: 'ACI', + discussion: '', + snapshot: '', + votingNetwork: 'POLYGON', + }, + poolOptions: {AaveV3Ethereum: {configs: {}, cache: {blockNumber: 20414432}}}, +}; From 7c74755321d36bf5722e527233033ada6051408e Mon Sep 17 00:00:00 2001 From: Cache bot Date: Tue, 30 Jul 2024 18:51:14 +0000 Subject: [PATCH 07/68] fix(cache): automated cache update [skip ci] --- .../WETHLTV0AaveV3LidoInstance.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md index a1faa36c3..07548db6c 100644 --- a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md +++ b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/WETHLTV0AaveV3LidoInstance.md @@ -32,8 +32,8 @@ All other parameters for wETH will remain unchanged: ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/56b9cd738e58467d4299ce17a7c29360bddd8468/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/56b9cd738e58467d4299ce17a7c29360bddd8468/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol) - [Discussion](https://governance.aave.com/t/arfc-deploy-a-lido-aave-v3-instance/18047/18) ## Copyright From d02203811d5c26e60c29bd7e431d281589741cb9 Mon Sep 17 00:00:00 2001 From: Lukas Date: Wed, 31 Jul 2024 10:49:01 +0200 Subject: [PATCH 08/68] fix: upgrade address-book so lido generator works (#409) --- package.json | 12 +- yarn.lock | 878 +++++++++++++++++++++++++++------------------------ 2 files changed, 469 insertions(+), 421 deletions(-) diff --git a/package.json b/package.json index 15491596a..ca5037032 100644 --- a/package.json +++ b/package.json @@ -28,20 +28,20 @@ "@types/node": "^20.11.10", "prettier": "3.2.5", "prettier-plugin-solidity": "1.3.1", - "vitest": "^1.4.0" + "vitest": "^2.0.4" }, "dependencies": { - "@bgd-labs/aave-address-book": "^3.0.1", + "@bgd-labs/aave-address-book": "^3.0.2", "@bgd-labs/aave-cli": "0.16.2", "@bgd-labs/js-utils": "^1.4.2", "@inquirer/prompts": "^3.3.0", "@inquirer/testing": "^2.1.13", "catapulta-verify": "^1.1.1", - "commander": "^11.1.0", + "commander": "^12.1.0", "husky": "^8.0.3", - "lint-staged": "^15.2.2", - "tsx": "^4.7.1", - "viem": "^2.9.25" + "lint-staged": "^15.2.7", + "tsx": "^4.16.3", + "viem": "^2.18.6" }, "lint-staged": { "*": "prettier --ignore-unknown --write" diff --git a/yarn.lock b/yarn.lock index b98c728f6..a6a1836cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,6 +7,14 @@ resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz" integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== +"@ampproject/remapping@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@assemblyscript/loader@^0.9.4": version "0.9.4" resolved "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.9.4.tgz" @@ -39,10 +47,10 @@ resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.0.tgz#a75cf2e217688e63728bec1b9c956b0134bc647c" integrity sha512-ALT9T/aIZ7BztozWvGhjVKGAEfe6wLhop0z+0ZSwAdyHXrBfpXXDZa9siHNtOZfNojPVMPvkpgsiPnFmDD8OJQ== -"@bgd-labs/aave-address-book@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.1.tgz#942cef06984ed7b12b5a6694c5010637b505edd3" - integrity sha512-dlq/tBbGzmXPK4q94+Oy/XFXsE3qnKq60L9Hd67WlF3f6zCyzuTuQvUCPW/7hpH3Wda9LAnUbOxGunHAt05n6g== +"@bgd-labs/aave-address-book@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.2.tgz#fd870b17f312eaa62ec6befcf2e31977f089910c" + integrity sha512-NJundvxwLlk+CCmSkzO/5E5szW7HOaJ3HIfKrsoreIIXRj7nLuyQ/V5m9XURZm43UxCg5ohWWk5zHIQvw1NvYg== "@bgd-labs/aave-cli@0.16.2": version "0.16.2" @@ -91,6 +99,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== +"@esbuild/aix-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" + integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== + "@esbuild/android-arm64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" @@ -101,6 +114,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz#683794bdc3d27222d3eced7b74cad15979548031" integrity sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ== +"@esbuild/android-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" + integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== + "@esbuild/android-arm@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" @@ -111,6 +129,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.9.tgz#21a4de41f07b2af47401c601d64dfdefd056c595" integrity sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA== +"@esbuild/android-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" + integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== + "@esbuild/android-x64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" @@ -121,6 +144,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.9.tgz#e2d7674bc025ddc8699f0cc76cb97823bb63c252" integrity sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA== +"@esbuild/android-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" + integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== + "@esbuild/darwin-arm64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" @@ -131,6 +159,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz#ae7a582289cc5c0bac15d4b9020a90cb7288f1e9" integrity sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw== +"@esbuild/darwin-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" + integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== + "@esbuild/darwin-x64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" @@ -141,6 +174,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz#8a216c66dcf51addeeb843d8cfaeff712821d12b" integrity sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ== +"@esbuild/darwin-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" + integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== + "@esbuild/freebsd-arm64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" @@ -151,6 +189,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz#63d4f603e421252c3cd836b18d01545be7c6c440" integrity sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g== +"@esbuild/freebsd-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" + integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== + "@esbuild/freebsd-x64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" @@ -161,6 +204,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz#a3db52595be65360eae4de1d1fa3c1afd942e1e4" integrity sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA== +"@esbuild/freebsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" + integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== + "@esbuild/linux-arm64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" @@ -171,6 +219,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz#4ae5811ce9f8d7df5eb9edd9765ea9401a534f13" integrity sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ== +"@esbuild/linux-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" + integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== + "@esbuild/linux-arm@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" @@ -181,6 +234,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz#9807e92cfd335f46326394805ad488e646e506f2" integrity sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw== +"@esbuild/linux-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" + integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== + "@esbuild/linux-ia32@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" @@ -191,6 +249,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz#18892c10f3106652b16f9da88a0362dc95ed46c7" integrity sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q== +"@esbuild/linux-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" + integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== + "@esbuild/linux-loong64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" @@ -201,6 +264,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz#dc2ebf9a125db0a1bba18c2bbfd4fbdcbcaf61c2" integrity sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA== +"@esbuild/linux-loong64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" + integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== + "@esbuild/linux-mips64el@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" @@ -211,6 +279,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz#4c2f7c5d901015e3faf1563c4a89a50776cb07fd" integrity sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw== +"@esbuild/linux-mips64el@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" + integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== + "@esbuild/linux-ppc64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" @@ -221,6 +294,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz#8385332713b4e7812869622163784a5633f76fc4" integrity sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ== +"@esbuild/linux-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" + integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== + "@esbuild/linux-riscv64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" @@ -231,6 +309,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz#23f1db24fa761be311874f32036c06249aa20cba" integrity sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg== +"@esbuild/linux-riscv64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" + integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== + "@esbuild/linux-s390x@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" @@ -241,6 +324,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz#2dffe497726b897c9f0109e774006e25b33b4fd0" integrity sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw== +"@esbuild/linux-s390x@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" + integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== + "@esbuild/linux-x64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" @@ -251,6 +339,11 @@ resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz" integrity sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A== +"@esbuild/linux-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" + integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== + "@esbuild/netbsd-x64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" @@ -261,6 +354,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz#0cbca65e9ef4d3fc41502d3e055e6f49479a8f18" integrity sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug== +"@esbuild/netbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" + integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== + "@esbuild/openbsd-x64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" @@ -271,6 +369,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz#1f57adfbee09c743292c6758a3642e875bcad1cf" integrity sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw== +"@esbuild/openbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" + integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== + "@esbuild/sunos-x64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" @@ -281,6 +384,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz#116be6adbd2c7479edeeb5f6ea0441002ab4cb9c" integrity sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw== +"@esbuild/sunos-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" + integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== + "@esbuild/win32-arm64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" @@ -291,6 +399,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz#2be22131ab18af4693fd737b161d1ef34de8ca9d" integrity sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg== +"@esbuild/win32-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" + integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== + "@esbuild/win32-ia32@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" @@ -301,6 +414,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz#e10ead5a55789b167b4225d2469324538768af7c" integrity sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg== +"@esbuild/win32-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" + integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== + "@esbuild/win32-x64@0.19.11": version "0.19.11" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" @@ -311,6 +429,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz#b2da6219b603e3fa371a78f53f5361260d0c5585" integrity sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ== +"@esbuild/win32-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" + integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== + "@inquirer/checkbox@^1.5.0": version "1.5.0" resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-1.5.0.tgz" @@ -566,30 +689,43 @@ resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.2.1.tgz#fbc7ab3a2e5050d0c150642d5e8f5e88faa066b8" integrity sha512-xwMfkPAxeo8Ji/IxfUSqzRi0/+F2GIqJmpc5/thelgMGsjNZcjDDRBO9TLXT1s/hdx/mK5QbVIvgoLIFgXhTMQ== -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@sinclair/typebox" "^0.27.8" + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/trace-mapping@^0.3.24": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" "@multiformats/base-x@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz" integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== -"@noble/curves@1.2.0", "@noble/curves@~1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - "@noble/curves@1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" @@ -604,11 +740,6 @@ dependencies: "@noble/hashes" "1.4.0" -"@noble/hashes@1.3.2", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": - version "1.3.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - "@noble/hashes@1.4.0", "@noble/hashes@^1.4.0", "@noble/hashes@~1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" @@ -732,25 +863,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.0.tgz#4ea610e0c40a07a8afa2977cbf80507f41c2271c" integrity sha512-aPP5Q5AqNGuT0tnuEkK/g4mnt3ZhheiXrDIiSVIHN9mcN21OyXDVbEMqmXPE7e2OplNLDkcvV+ZoGJa2ZImFgw== -"@scure/base@~1.1.0", "@scure/base@~1.1.2": - version "1.1.3" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz" - integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== - "@scure/base@~1.1.6": version "1.1.7" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.7.tgz#fe973311a5c6267846aa131bc72e96c5d40d2b30" integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g== -"@scure/bip32@1.3.2": - version "1.3.2" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz" - integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== - dependencies: - "@noble/curves" "~1.2.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.2" - "@scure/bip32@1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" @@ -760,14 +877,6 @@ "@noble/hashes" "~1.4.0" "@scure/base" "~1.1.6" -"@scure/bip39@1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz" - integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== - dependencies: - "@noble/hashes" "~1.3.0" - "@scure/base" "~1.1.0" - "@scure/bip39@1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" @@ -776,11 +885,6 @@ "@noble/hashes" "~1.4.0" "@scure/base" "~1.1.6" -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - "@solidity-parser/parser@^0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.17.0.tgz#52a2fcc97ff609f72011014e4c5b485ec52243ef" @@ -851,70 +955,62 @@ resolved "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz" integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== -"@vitest/expect@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.4.0.tgz#d64e17838a20007fecd252397f9b96a1ca81bfb0" - integrity sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA== +"@vitest/expect@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.0.4.tgz#d365c106c84f2a3aae96000e95be21956acc099c" + integrity sha512-39jr5EguIoanChvBqe34I8m1hJFI4+jxvdOpD7gslZrVQBKhh8H9eD7J/LJX4zakrw23W+dITQTDqdt43xVcJw== dependencies: - "@vitest/spy" "1.4.0" - "@vitest/utils" "1.4.0" - chai "^4.3.10" + "@vitest/spy" "2.0.4" + "@vitest/utils" "2.0.4" + chai "^5.1.1" + tinyrainbow "^1.2.0" -"@vitest/runner@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.4.0.tgz#907c2d17ad5975b70882c25ab7a13b73e5a28da9" - integrity sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg== +"@vitest/pretty-format@2.0.4", "@vitest/pretty-format@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.0.4.tgz#9a3934932e7f8ddd836b38c34ddaeec91bd0f82e" + integrity sha512-RYZl31STbNGqf4l2eQM1nvKPXE0NhC6Eq0suTTePc4mtMQ1Fn8qZmjV4emZdEdG2NOWGKSCrHZjmTqDCDoeFBw== dependencies: - "@vitest/utils" "1.4.0" - p-limit "^5.0.0" - pathe "^1.1.1" + tinyrainbow "^1.2.0" -"@vitest/snapshot@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.4.0.tgz#2945b3fb53767a3f4f421919e93edfef2935b8bd" - integrity sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A== +"@vitest/runner@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-2.0.4.tgz#0b1edb8ab5f81a1c7dfd50090e5e7e971a117891" + integrity sha512-Gk+9Su/2H2zNfNdeJR124gZckd5st4YoSuhF1Rebi37qTXKnqYyFCd9KP4vl2cQHbtuVKjfEKrNJxHHCW8thbQ== dependencies: - magic-string "^0.30.5" - pathe "^1.1.1" - pretty-format "^29.7.0" + "@vitest/utils" "2.0.4" + pathe "^1.1.2" -"@vitest/spy@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.4.0.tgz#cf953c93ae54885e801cbe6b408a547ae613f26c" - integrity sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q== +"@vitest/snapshot@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-2.0.4.tgz#7d7dea9df17c5c13386f1a7a433b99dc0ffe3c14" + integrity sha512-or6Mzoz/pD7xTvuJMFYEtso1vJo1S5u6zBTinfl+7smGUhqybn6VjzCDMhmTyVOFWwkCMuNjmNNxnyXPgKDoPw== dependencies: - tinyspy "^2.2.0" + "@vitest/pretty-format" "2.0.4" + magic-string "^0.30.10" + pathe "^1.1.2" -"@vitest/utils@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.4.0.tgz#ea6297e0d329f9ff0a106f4e1f6daf3ff6aad3f0" - integrity sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg== +"@vitest/spy@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.0.4.tgz#19083386a741a158c2f142beffe43be68b1375cf" + integrity sha512-uTXU56TNoYrTohb+6CseP8IqNwlNdtPwEO0AWl+5j7NelS6x0xZZtP0bDWaLvOfUbaYwhhWp1guzXUxkC7mW7Q== dependencies: - diff-sequences "^29.6.3" - estree-walker "^3.0.3" - loupe "^2.3.7" - pretty-format "^29.7.0" + tinyspy "^3.0.0" -abitype@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" - integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== +"@vitest/utils@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.0.4.tgz#2db1df35aaeb5caa932770a190df636a68d284d5" + integrity sha512-Zc75QuuoJhOBnlo99ZVUkJIuq4Oj0zAkrQ2VzCqNCx6wAwViHEh5Fnp4fiJTE9rA+sAoXRf00Z9xGgfEzV6fzQ== + dependencies: + "@vitest/pretty-format" "2.0.4" + estree-walker "^3.0.3" + loupe "^3.1.1" + tinyrainbow "^1.2.0" abitype@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.5.tgz#29d0daa3eea867ca90f7e4123144c1d1270774b6" integrity sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw== -acorn-walk@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.10.0: - version "8.10.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" @@ -922,12 +1018,12 @@ ansi-escapes@^4.3.2: dependencies: type-fest "^0.21.3" -ansi-escapes@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz" - integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== +ansi-escapes@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.0.0.tgz#00fc19f491bbb18e1d481b97868204f92109bfe7" + integrity sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw== dependencies: - type-fest "^3.0.0" + environment "^1.0.0" ansi-regex@^5.0.1: version "5.0.1" @@ -953,11 +1049,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - ansi-styles@^6.0.0, ansi-styles@^6.2.1: version "6.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" @@ -975,10 +1066,10 @@ arrify@^1.0.1: resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +assertion-error@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== base-x@^4.0.0: version "4.0.0" @@ -1009,12 +1100,12 @@ blakejs@^1.1.0: resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" bs58@^5.0.0: version "5.0.0" @@ -1055,23 +1146,16 @@ catapulta-verify@^1.1.1: resolved "https://registry.yarnpkg.com/catapulta-verify/-/catapulta-verify-1.1.1.tgz#46ac6c9ed50480ef982060147f4ff4a34609efd0" integrity sha512-VZ9pQpno1bjjZ/+7d1AbPWkOhYcZdNSova5Y1L9jj8ftdimv3JrwDTg9i0fs4I8/A/sRXK7AUb1pmL3016Cykw== -chai@^4.3.10: - version "4.3.10" - resolved "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz" - integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== +chai@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.1.tgz#f035d9792a22b481ead1c65908d14bb62ec1c82c" + integrity sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA== dependencies: - assertion-error "^1.1.0" - check-error "^1.0.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.0.8" - -chalk@5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + assertion-error "^2.0.1" + check-error "^2.1.1" + deep-eql "^5.0.1" + loupe "^3.1.0" + pathval "^2.0.0" chalk@^2.4.2: version "2.4.2" @@ -1090,17 +1174,20 @@ chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-error@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" +check-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" + integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== cids@^1.0.0, cids@^1.1.5, cids@^1.1.6: version "1.1.9" @@ -1112,12 +1199,12 @@ cids@^1.0.0, cids@^1.1.5, cids@^1.1.6: multihashes "^4.0.1" uint8arrays "^3.0.0" -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== dependencies: - restore-cursor "^4.0.0" + restore-cursor "^5.0.0" cli-spinners@^2.9.1: version "2.9.1" @@ -1171,11 +1258,16 @@ colorette@^2.0.20: resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -commander@11.1.0, commander@^11.1.0: +commander@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz" integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== +commander@^12.1.0, commander@~12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" @@ -1185,13 +1277,20 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -debug@4.3.4, debug@^4.3.1, debug@^4.3.4: +debug@^4.3.1: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debug@^4.3.5, debug@~4.3.4: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" @@ -1205,23 +1304,16 @@ decamelize@^1.1.0, decamelize@^1.2.0: resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" +deep-eql@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" + integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - dotenv@^16.4.1: version "16.4.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.1.tgz#1d9931f1d3e5d2959350d1250efab299561f7f11" @@ -1237,6 +1329,11 @@ emoji-regex@^8.0.0: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + err-code@^3.0.0, err-code@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz" @@ -1306,6 +1403,35 @@ esbuild@~0.19.10: "@esbuild/win32-ia32" "0.19.11" "@esbuild/win32-x64" "0.19.11" +esbuild@~0.21.5: + version "0.21.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" + integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.21.5" + "@esbuild/android-arm" "0.21.5" + "@esbuild/android-arm64" "0.21.5" + "@esbuild/android-x64" "0.21.5" + "@esbuild/darwin-arm64" "0.21.5" + "@esbuild/darwin-x64" "0.21.5" + "@esbuild/freebsd-arm64" "0.21.5" + "@esbuild/freebsd-x64" "0.21.5" + "@esbuild/linux-arm" "0.21.5" + "@esbuild/linux-arm64" "0.21.5" + "@esbuild/linux-ia32" "0.21.5" + "@esbuild/linux-loong64" "0.21.5" + "@esbuild/linux-mips64el" "0.21.5" + "@esbuild/linux-ppc64" "0.21.5" + "@esbuild/linux-riscv64" "0.21.5" + "@esbuild/linux-s390x" "0.21.5" + "@esbuild/linux-x64" "0.21.5" + "@esbuild/netbsd-x64" "0.21.5" + "@esbuild/openbsd-x64" "0.21.5" + "@esbuild/sunos-x64" "0.21.5" + "@esbuild/win32-arm64" "0.21.5" + "@esbuild/win32-ia32" "0.21.5" + "@esbuild/win32-x64" "0.21.5" + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" @@ -1328,9 +1454,9 @@ eventemitter3@^5.0.1: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -execa@8.0.1, execa@^8.0.1: +execa@^8.0.1, execa@~8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== dependencies: cross-spawn "^7.0.3" @@ -1366,10 +1492,10 @@ figures@^3.2.0: dependencies: escape-string-regexp "^1.0.5" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -1396,7 +1522,7 @@ get-east-asian-width@^1.0.0: resolved "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz" integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== -get-func-name@^2.0.1, get-func-name@^2.0.2: +get-func-name@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== @@ -1413,6 +1539,13 @@ get-tsconfig@^4.7.2: dependencies: resolve-pkg-maps "^1.0.0" +get-tsconfig@^4.7.5: + version "4.7.6" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.6.tgz#118fd5b7b9bae234cc7705a00cd771d7eb65d62a" + integrity sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA== + dependencies: + resolve-pkg-maps "^1.0.0" + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" @@ -1612,11 +1745,6 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isows@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz" - integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== - isows@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061" @@ -1654,11 +1782,6 @@ js-tokens@^4.0.0: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^8.0.2: - version "8.0.3" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775" - integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw== - js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" @@ -1679,62 +1802,49 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -lilconfig@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz" - integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== +lilconfig@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" + integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lint-staged@^15.2.2: - version "15.2.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.2.tgz#ad7cbb5b3ab70e043fa05bff82a09ed286bc4c5f" - integrity sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw== - dependencies: - chalk "5.3.0" - commander "11.1.0" - debug "4.3.4" - execa "8.0.1" - lilconfig "3.0.0" - listr2 "8.0.1" - micromatch "4.0.5" - pidtree "0.6.0" - string-argv "0.3.2" - yaml "2.3.4" - -listr2@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.0.1.tgz#4d3f50ae6cec3c62bdf0e94f5c2c9edebd4b9c34" - integrity sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA== +lint-staged@^15.2.7: + version "15.2.7" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.7.tgz#97867e29ed632820c0fb90be06cd9ed384025649" + integrity sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw== + dependencies: + chalk "~5.3.0" + commander "~12.1.0" + debug "~4.3.4" + execa "~8.0.1" + lilconfig "~3.1.1" + listr2 "~8.2.1" + micromatch "~4.0.7" + pidtree "~0.6.0" + string-argv "~0.3.2" + yaml "~2.4.2" + +listr2@~8.2.1: + version "8.2.4" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.2.4.tgz#486b51cbdb41889108cb7e2c90eeb44519f5a77f" + integrity sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g== dependencies: cli-truncate "^4.0.0" colorette "^2.0.20" eventemitter3 "^5.0.1" - log-update "^6.0.0" - rfdc "^1.3.0" + log-update "^6.1.0" + rfdc "^1.4.1" wrap-ansi "^9.0.0" -local-pkg@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz" - integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== - dependencies: - mlly "^1.4.2" - pkg-types "^1.0.3" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" @@ -1742,14 +1852,14 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -log-update@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz" - integrity sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw== +log-update@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4" + integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== dependencies: - ansi-escapes "^6.2.0" - cli-cursor "^4.0.0" - slice-ansi "^7.0.0" + ansi-escapes "^7.0.0" + cli-cursor "^5.0.0" + slice-ansi "^7.1.0" strip-ansi "^7.1.0" wrap-ansi "^9.0.0" @@ -1758,10 +1868,10 @@ long@^4.0.0: resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== -loupe@^2.3.6, loupe@^2.3.7: - version "2.3.7" - resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz" - integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== +loupe@^3.1.0, loupe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.1.tgz#71d038d59007d890e3247c5db97c1ec5a92edc54" + integrity sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw== dependencies: get-func-name "^2.0.1" @@ -1772,12 +1882,12 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -magic-string@^0.30.5: - version "0.30.5" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz" - integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== +magic-string@^0.30.10: + version "0.30.11" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.11.tgz#301a6f93b3e8c2cb13ac1a7a673492c0dfd12954" + integrity sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A== dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" + "@jridgewell/sourcemap-codec" "^1.5.0" map-obj@^1.0.0: version "1.0.1" @@ -1819,24 +1929,24 @@ merge-stream@^2.0.0: resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -micromatch@4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micromatch@~4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - mimic-fn@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" @@ -1856,16 +1966,6 @@ minimist@^1.2.5: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mlly@^1.2.0, mlly@^1.4.2: - version "1.4.2" - resolved "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz" - integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== - dependencies: - acorn "^8.10.0" - pathe "^1.1.1" - pkg-types "^1.0.3" - ufo "^1.3.0" - ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" @@ -1966,13 +2066,6 @@ object-hash@^3.0.0: resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - onetime@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" @@ -1980,6 +2073,13 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" @@ -1992,13 +2092,6 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz" - integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== - dependencies: - yocto-queue "^1.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" @@ -2041,15 +2134,15 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -pathe@^1.1.0, pathe@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz" - integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== +pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pathval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" + integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== picocolors@^1.0.0: version "1.0.0" @@ -2061,20 +2154,11 @@ picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pidtree@0.6.0: +pidtree@~0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" - postcss@^8.4.32: version "8.4.32" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz" @@ -2098,15 +2182,6 @@ prettier@3.2.5: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - protobufjs@^6.10.2: version "6.11.4" resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz" @@ -2143,11 +2218,6 @@ rabin-wasm@^0.1.4: node-fetch "^2.6.1" readable-stream "^3.6.0" -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" @@ -2198,18 +2268,18 @@ resolve@^1.10.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" + onetime "^7.0.0" + signal-exit "^4.1.0" -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== +rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== rollup@^4.2.0: version "4.9.0" @@ -2290,11 +2360,6 @@ siginfo@^2.0.0: resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" @@ -2308,9 +2373,9 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -slice-ansi@^7.0.0: +slice-ansi@^7.1.0: version "7.1.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== dependencies: ansi-styles "^6.2.1" @@ -2372,14 +2437,14 @@ stackback@0.0.2: resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -std-env@^3.5.0: - version "3.6.0" - resolved "https://registry.npmjs.org/std-env/-/std-env-3.6.0.tgz" - integrity sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg== +std-env@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== -string-argv@0.3.2: +string-argv@~0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== string-width@^4.1.0: @@ -2438,13 +2503,6 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527" - integrity sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA== - dependencies: - js-tokens "^8.0.2" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -2464,20 +2522,25 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tinybench@^2.5.1: - version "2.5.1" - resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz" - integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== +tinybench@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.8.0.tgz#30e19ae3a27508ee18273ffed9ac7018949acd7b" + integrity sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw== -tinypool@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a" - integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== +tinypool@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.0.tgz#a68965218e04f4ad9de037d2a1cd63cda9afb238" + integrity sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ== -tinyspy@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz" - integrity sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg== +tinyrainbow@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" + integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== + +tinyspy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.0.tgz#cb61644f2713cd84dee184863f4642e06ddf0585" + integrity sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA== tmp@^0.0.33: version "0.0.33" @@ -2503,6 +2566,16 @@ trim-newlines@^3.0.0: resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +tsx@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.16.3.tgz#56eb2f14f67b798e8bd8a907a9ceec57cba0e8b9" + integrity sha512-MP8AEUxVnboD2rCC6kDLxnpDBNWN9k3BSVU/0/nNxgm70bPBnfn+yCKcnOsIVPQwdkbKYoFOlKjjWZWJ2XCXUg== + dependencies: + esbuild "~0.21.5" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + tsx@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.7.1.tgz#27af6cbf4e1cdfcb9b5425b1c61bb7e668eb5e84" @@ -2513,11 +2586,6 @@ tsx@^4.7.1: optionalDependencies: fsevents "~2.3.3" -type-detect@^4.0.0, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - type-fest@^0.18.0: version "0.18.1" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" @@ -2538,16 +2606,6 @@ type-fest@^0.8.1: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^3.0.0: - version "3.13.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz" - integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== - -ufo@^1.3.0: - version "1.3.1" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz" - integrity sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw== - uint8arrays@^2.0.5, uint8arrays@^2.1.2: version "2.1.10" resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz" @@ -2610,29 +2668,30 @@ viem@^2.17.11: webauthn-p256 "0.0.5" ws "8.17.1" -viem@^2.9.25: - version "2.9.25" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.25.tgz#afcf320790e175b2afc83d29819f56cb50906f0d" - integrity sha512-W0QOXCsYQppnV89PQP0EnCvfZIEsDYqmpVakLPNrok4Q4B7651M3MV/sYifYcLWv3Mn4KUyMCUlVxlej6CfC/w== +viem@^2.18.6: + version "2.18.6" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.18.6.tgz#527c54a032cdd4c1f1795fcb44072e8c3efd16c6" + integrity sha512-KughUodIEjzkC+KfQ4+259yRXYfo0VLkZQ7NVC3RGfCMMOiVWaOxHjmcaY0FnZzKX3pwrlMyTAZbwH9tVAN/Yw== dependencies: "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@scure/bip32" "1.3.2" - "@scure/bip39" "1.2.1" - abitype "1.0.0" - isows "1.0.3" - ws "8.13.0" - -vite-node@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.4.0.tgz#265529d60570ca695ceb69391f87f92847934ad8" - integrity sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw== + "@noble/curves" "1.4.0" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + abitype "1.0.5" + isows "1.0.4" + webauthn-p256 "0.0.5" + ws "8.17.1" + +vite-node@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.0.4.tgz#5600cc9f0d9c3ff9a64050c6858e7e1b62fb3fcd" + integrity sha512-ZpJVkxcakYtig5iakNeL7N3trufe3M6vGuzYAr4GsbCTwobDeyPJpE4cjDhhPluv8OvQCFzu2LWp6GkoKRITXA== dependencies: cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" + debug "^4.3.5" + pathe "^1.1.2" + tinyrainbow "^1.2.0" vite "^5.0.0" vite@^5.0.0: @@ -2646,31 +2705,30 @@ vite@^5.0.0: optionalDependencies: fsevents "~2.3.3" -vitest@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.4.0.tgz#f5c812aaf5023818b89b7fc667fa45327396fece" - integrity sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw== - dependencies: - "@vitest/expect" "1.4.0" - "@vitest/runner" "1.4.0" - "@vitest/snapshot" "1.4.0" - "@vitest/spy" "1.4.0" - "@vitest/utils" "1.4.0" - acorn-walk "^8.3.2" - chai "^4.3.10" - debug "^4.3.4" +vitest@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.0.4.tgz#ac6bfbaee53e502cee864b07a5b2edf1fcba793e" + integrity sha512-luNLDpfsnxw5QSW4bISPe6tkxVvv5wn2BBs/PuDRkhXZ319doZyLOBr1sjfB5yCEpTiU7xCAdViM8TNVGPwoog== + dependencies: + "@ampproject/remapping" "^2.3.0" + "@vitest/expect" "2.0.4" + "@vitest/pretty-format" "^2.0.4" + "@vitest/runner" "2.0.4" + "@vitest/snapshot" "2.0.4" + "@vitest/spy" "2.0.4" + "@vitest/utils" "2.0.4" + chai "^5.1.1" + debug "^4.3.5" execa "^8.0.1" - local-pkg "^0.5.0" - magic-string "^0.30.5" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^2.0.0" - tinybench "^2.5.1" - tinypool "^0.8.2" + magic-string "^0.30.10" + pathe "^1.1.2" + std-env "^3.7.0" + tinybench "^2.8.0" + tinypool "^1.0.0" + tinyrainbow "^1.2.0" vite "^5.0.0" - vite-node "1.4.0" - why-is-node-running "^2.2.2" + vite-node "2.0.4" + why-is-node-running "^2.3.0" webauthn-p256@0.0.5: version "0.0.5" @@ -2700,10 +2758,10 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -why-is-node-running@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz" - integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== +why-is-node-running@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" + integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== dependencies: siginfo "^2.0.0" stackback "0.0.2" @@ -2726,11 +2784,6 @@ wrap-ansi@^9.0.0: string-width "^7.0.0" strip-ansi "^7.1.0" -ws@8.13.0: - version "8.13.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - ws@8.17.1: version "8.17.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" @@ -2741,21 +2794,16 @@ yallist@^4.0.0: resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@2.3.4: - version "2.3.4" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz" - integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== +yaml@~2.4.2: + version "2.4.5" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e" + integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg== yargs-parser@^20.2.3: version "20.2.9" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== - zod@^3.23.8: version "3.23.8" resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" From dd3747ccd18dafcdba7e286aa972f74426b1625e Mon Sep 17 00:00:00 2001 From: Alice <121383428+Rozengarden@users.noreply.github.com> Date: Wed, 31 Jul 2024 12:44:00 +0200 Subject: [PATCH 09/68] [ACI] Onboard USDC.e on Gnosis (#383) * test passing * Update src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md Co-authored-by: Harsh Pandey * Update src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol * Update src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md Co-authored-by: Harsh Pandey * Enable in iso borrow * cleanup assets directory * catching up with 3.1 * cleanup --------- Co-authored-by: Harsh Pandey Co-authored-by: Marc Zeller <21088542+marczeller@users.noreply.github.com> Co-authored-by: marczeller --- ...b1d5f0320ec48c3f00eae412ff5bf1dbe5f0a3.svg | 1 + ...sis_OnboardUSDCEOnGnosis_20240717_after.md | 122 ++++++++++++++++++ ...V3Gnosis_OnboardUSDCEOnGnosis_20240717.sol | 58 +++++++++ ...Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol | 38 ++++++ .../OnboardUSDCEOnGnosis.md | 54 ++++++++ .../OnboardUSDCEOnGnosis_20240717.s.sol | 60 +++++++++ .../config.ts | 55 ++++++++ 7 files changed, 388 insertions(+) create mode 100644 .assets/efb1d5f0320ec48c3f00eae412ff5bf1dbe5f0a3.svg create mode 100644 diffs/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717_before_AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717_after.md create mode 100644 src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol create mode 100644 src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol create mode 100644 src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md create mode 100644 src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis_20240717.s.sol create mode 100644 src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/config.ts diff --git a/.assets/efb1d5f0320ec48c3f00eae412ff5bf1dbe5f0a3.svg b/.assets/efb1d5f0320ec48c3f00eae412ff5bf1dbe5f0a3.svg new file mode 100644 index 000000000..b769311d8 --- /dev/null +++ b/.assets/efb1d5f0320ec48c3f00eae412ff5bf1dbe5f0a3.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717_before_AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717_after.md b/diffs/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717_before_AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717_after.md new file mode 100644 index 000000000..c91b5cedb --- /dev/null +++ b/diffs/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717_before_AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717_after.md @@ -0,0 +1,122 @@ +## Reserve changes + +### Reserves added + +#### USDC.e ([0x2a22f9c3b484c3629090FeED35F17Ff8F88f76F0](https://gnosisscan.io/address/0x2a22f9c3b484c3629090FeED35F17Ff8F88f76F0)) + +| description | value | +| --- | --- | +| decimals | 6 | +| isActive | true | +| isFrozen | false | +| supplyCap | 1,500,000 USDC.e | +| borrowCap | 1,400,000 USDC.e | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 0 | +| oracle | [0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2](https://gnosisscan.io/address/0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2) | +| oracleDecimals | 8 | +| oracleDescription | Capped USDC/USD | +| oracleLatestAnswer | 1.00001543 | +| usageAsCollateralEnabled | true | +| ltv | 75 % [7500] | +| liquidationThreshold | 78 % [7800] | +| liquidationBonus | 5 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 10 % [1000] | +| aToken | [0xC0333cb85B59a788d8C7CAe5e1Fd6E229A3E5a65](https://gnosisscan.io/address/0xC0333cb85B59a788d8C7CAe5e1Fd6E229A3E5a65) | +| aTokenImpl | [0x589750BA8aF186cE5B55391B0b7148cAD43a1619](https://gnosisscan.io/address/0x589750BA8aF186cE5B55391B0b7148cAD43a1619) | +| variableDebtToken | [0x37B9Ad6b5DC8Ad977AD716e92F49e9D200e58431](https://gnosisscan.io/address/0x37B9Ad6b5DC8Ad977AD716e92F49e9D200e58431) | +| variableDebtTokenImpl | [0xBeC519531F0E78BcDdB295242fA4EC5251B38574](https://gnosisscan.io/address/0xBeC519531F0E78BcDdB295242fA4EC5251B38574) | +| stableDebtToken | [0x135A7bA96fBe20949cf2D8E46c7F5ca3bB1EE222](https://gnosisscan.io/address/0x135A7bA96fBe20949cf2D8E46c7F5ca3bB1EE222) | +| stableDebtTokenImpl | [0x06C35Cfd3FC61eC2aC437f0d08840d5776b945af](https://gnosisscan.io/address/0x06C35Cfd3FC61eC2aC437f0d08840d5776b945af) | +| borrowingEnabled | true | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | true | +| interestRateStrategy | [0x98619395148C348e9A09C7D34290B1E9e7715A3E](https://gnosisscan.io/address/0x98619395148C348e9A09C7D34290B1E9e7715A3E) | +| aTokenName | Aave Gnosis USDCe | +| aTokenSymbol | aGnoUSDCe | +| aTokenUnderlyingBalance | 1 USDC.e [1000000] | +| isPaused | false | +| stableDebtTokenName | Aave Gnosis Stable Debt USDCe | +| stableDebtTokenSymbol | stableDebtGnoUSDCe | +| variableDebtTokenName | Aave Gnosis Variable Debt USDCe | +| variableDebtTokenSymbol | variableDebtGnoUSDCe | +| virtualAccountingActive | true | +| virtualBalance | 1 USDC.e [1000000] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 84 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 9 % | +| variableRateSlope2 | 75 % | +| interestRate | ![ir](/.assets/efb1d5f0320ec48c3f00eae412ff5bf1dbe5f0a3.svg) | + + +## Raw diff + +```json +{ + "reserves": { + "0x2a22f9c3b484c3629090FeED35F17Ff8F88f76F0": { + "from": null, + "to": { + "aToken": "0xC0333cb85B59a788d8C7CAe5e1Fd6E229A3E5a65", + "aTokenImpl": "0x589750BA8aF186cE5B55391B0b7148cAD43a1619", + "aTokenName": "Aave Gnosis USDCe", + "aTokenSymbol": "aGnoUSDCe", + "aTokenUnderlyingBalance": 1000000, + "borrowCap": 1400000, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 6, + "eModeCategory": 0, + "interestRateStrategy": "0x98619395148C348e9A09C7D34290B1E9e7715A3E", + "isActive": true, + "isBorrowableInIsolation": true, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10500, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 7800, + "ltv": 7500, + "oracle": "0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2", + "oracleDecimals": 8, + "oracleDescription": "Capped USDC/USD", + "oracleLatestAnswer": 100001543, + "reserveFactor": 1000, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0x135A7bA96fBe20949cf2D8E46c7F5ca3bB1EE222", + "stableDebtTokenImpl": "0x06C35Cfd3FC61eC2aC437f0d08840d5776b945af", + "stableDebtTokenName": "Aave Gnosis Stable Debt USDCe", + "stableDebtTokenSymbol": "stableDebtGnoUSDCe", + "supplyCap": 1500000, + "symbol": "USDC.e", + "underlying": "0x2a22f9c3b484c3629090FeED35F17Ff8F88f76F0", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0x37B9Ad6b5DC8Ad977AD716e92F49e9D200e58431", + "variableDebtTokenImpl": "0xBeC519531F0E78BcDdB295242fA4EC5251B38574", + "variableDebtTokenName": "Aave Gnosis Variable Debt USDCe", + "variableDebtTokenSymbol": "variableDebtGnoUSDCe", + "virtualAccountingActive": true, + "virtualBalance": 1000000 + } + } + }, + "strategies": { + "0x2a22f9c3b484c3629090FeED35F17Ff8F88f76F0": { + "from": null, + "to": { + "address": "0x98619395148C348e9A09C7D34290B1E9e7715A3E", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "840000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "90000000000000000000000000", + "variableRateSlope2": "750000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol new file mode 100644 index 000000000..32db4804d --- /dev/null +++ b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Gnosis, AaveV3GnosisEModes} from 'aave-address-book/AaveV3Gnosis.sol'; +import {AaveV3PayloadGnosis} from 'aave-helpers/v3-config-engine/AaveV3PayloadGnosis.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; +/** + * @title Onboard USDC.e on Gnosis + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xefdd7d915acc3a179c756295ad6583645dfc491424cda08916e80c8551e30943 + * - Discussion: https://governance.aave.com/t/arfc-onboard-usdc-e-to-aave-v3-gnosis-chain/17948/3 + */ +contract AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717 is AaveV3PayloadGnosis { + using SafeERC20 for IERC20; + + address public constant USDCe = 0x2a22f9c3b484c3629090FeED35F17Ff8F88f76F0; + uint256 public constant USDCe_SEED_AMOUNT = 1e6; + + function _postExecute() internal override { + IERC20(USDCe).forceApprove(address(AaveV3Gnosis.POOL), USDCe_SEED_AMOUNT); + AaveV3Gnosis.POOL.supply(USDCe, USDCe_SEED_AMOUNT, address(AaveV3Gnosis.COLLECTOR), 0); + } + + function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { + IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); + + listings[0] = IAaveV3ConfigEngine.Listing({ + asset: USDCe, + assetSymbol: 'USDCe', + priceFeed: 0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2, + eModeCategory: AaveV3GnosisEModes.NONE, + enabledToBorrow: EngineFlags.ENABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.ENABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 75_00, + liqThreshold: 78_00, + liqBonus: 5_00, + reserveFactor: 10_00, + supplyCap: 1_500_000, + borrowCap: 1_400_000, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 9_00, + variableRateSlope2: 75_00 + }) + }); + + return listings; + } +} diff --git a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol new file mode 100644 index 000000000..1319cd0bc --- /dev/null +++ b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol'; +import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717} from './AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol'; + +/** + * @dev Test for AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717 + * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol -vv + */ +contract AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717_Test is ProtocolV3TestBase { + AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('gnosis'), 35231842); + proposal = new AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest('AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717', AaveV3Gnosis.POOL, address(proposal)); + } + + function test_collectorHasUSDCeFunds() public { + GovV3Helpers.executePayload(vm, address(proposal)); + (address aTokenAddress, , ) = AaveV3Gnosis + .AAVE_PROTOCOL_DATA_PROVIDER + .getReserveTokensAddresses(proposal.USDCe()); + assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Gnosis.COLLECTOR)), 1e6); + } +} diff --git a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md new file mode 100644 index 000000000..122586f50 --- /dev/null +++ b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md @@ -0,0 +1,54 @@ +--- +title: "Onboard USDC.e on Gnosis" +author: "Aave Chan Initiative" +discussions: "https://governance.aave.com/t/arfc-onboard-usdc-e-to-aave-v3-gnosis-chain/17948/3" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0xefdd7d915acc3a179c756295ad6583645dfc491424cda08916e80c8551e30943" +--- + +## Simple Summary + +This proposal aims to onboard USDC.e into the Aave V3 pools on Gnosis. + +## Motivation + +Gnosis will be deploying a new version of USDC, following the Bridge Token Standard. The migration from the older version of USDC allows for more flexibility and paves the way for deeper integration with Circle and native USDC implementations. + +This proposal aims to onboard USDC.e into the Aave V3 pools on Gnosis in support of this migration, allowing Aave users to transition to the new version of USDC. + +## Specification + +The table below illustrates the configured risk parameters for **USDCe** + +| Parameter | Value | +| ------------------------- | -----------------------------------------: | +| Isolation Mode | false | +| Borrowable | ENABLED | +| Collateral Enabled | true | +| Supply Cap (USDCe) | 1,500,000 | +| Borrow Cap (USDCe) | 1,400,000 | +| Debt Ceiling | USD 0 | +| LTV | 75 % | +| LT | 78 % | +| Liquidation Bonus | 5 % | +| Liquidation Protocol Fee | 10 % | +| Reserve Factor | 10 % | +| Base Variable Borrow Rate | 0 % | +| Variable Slope 1 | 9 % | +| Variable Slope 2 | 75 % | +| Uoptimal | 90 % | +| Stable Borrowing | DISABLED | +| Flashloanable | ENABLED | +| Siloed Borrowing | DISABLED | +| Borrowable in Isolation | ENABLED | +| Oracle | 0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2 | + +## References + +- Implementation: [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol) +- Tests: [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xefdd7d915acc3a179c756295ad6583645dfc491424cda08916e80c8551e30943) +- [Discussion](https://governance.aave.com/t/arfc-onboard-usdc-e-to-aave-v3-gnosis-chain/17948/3) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis_20240717.s.sol b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis_20240717.s.sol new file mode 100644 index 000000000..ae2953b67 --- /dev/null +++ b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis_20240717.s.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, GnosisScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717} from './AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol'; + +/** + * @dev Deploy Gnosis + * deploy-command: make deploy-ledger contract=src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis_20240717.s.sol:DeployGnosis chain=gnosis + * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/OnboardUSDCEOnGnosis_20240717.s.sol/100/run-latest.json + */ +contract DeployGnosis is GnosisScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis_20240717.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsGnosis[0] = GovV3Helpers.buildAction( + type(AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717).creationCode + ); + payloads[0] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md' + ) + ); + } +} diff --git a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/config.ts b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/config.ts new file mode 100644 index 000000000..37beab77f --- /dev/null +++ b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/config.ts @@ -0,0 +1,55 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + configFile: 'src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/config.ts', + author: 'Aave Chan Initiative', + pools: ['AaveV3Gnosis'], + title: 'Onboard USDC.e on Gnosis', + shortName: 'OnboardUSDCEOnGnosis', + date: '20240717', + discussion: 'https://governance.aave.com/t/arfc-onboard-usdc-e-to-aave-v3-gnosis-chain/17948/3', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0xefdd7d915acc3a179c756295ad6583645dfc491424cda08916e80c8551e30943', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Gnosis: { + configs: { + ASSET_LISTING: [ + { + assetSymbol: 'USDCe', + decimals: 6, + priceFeed: '0x0a2d05bc646C65A029e602c257DfA14adF8BfAd2', + ltv: '75', + liqThreshold: '78', + liqBonus: '5', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'ENABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'ENABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '10', + supplyCap: '1500000', + borrowCap: '1400000', + rateStrategyParams: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '0', + variableRateSlope1: '9', + variableRateSlope2: '75', + stableRateSlope1: '9', + stableRateSlope2: '75', + baseStableRateOffset: '00', + stableRateExcessOffset: '0', + optimalStableToTotalDebtRatio: '0', + }, + eModeCategory: 'AaveV3GnosisEModes.NONE', + asset: '0x2a22f9c3b484c3629090FeED35F17Ff8F88f76F0', + }, + ], + }, + cache: {blockNumber: 35231842}, + }, + }, +}; From 6ff082139c0d309ade48c6130465f93b98a2da75 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 31 Jul 2024 10:44:29 +0000 Subject: [PATCH 10/68] fix(cache): automated cache update [skip ci] --- .../OnboardUSDCEOnGnosis.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md index 122586f50..a14447f69 100644 --- a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md +++ b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis.md @@ -44,8 +44,8 @@ The table below illustrates the configured risk parameters for **USDCe** ## References -- Implementation: [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol) -- Tests: [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol) +- Implementation: [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/dd3747ccd18dafcdba7e286aa972f74426b1625e/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol) +- Tests: [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/dd3747ccd18dafcdba7e286aa972f74426b1625e/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xefdd7d915acc3a179c756295ad6583645dfc491424cda08916e80c8551e30943) - [Discussion](https://governance.aave.com/t/arfc-onboard-usdc-e-to-aave-v3-gnosis-chain/17948/3) From bcf71845e82572a0d98c1dcb214a7c6028a6a1fd Mon Sep 17 00:00:00 2001 From: Fermin 'Piscu' Carranza Date: Wed, 31 Jul 2024 14:28:31 -0400 Subject: [PATCH 11/68] GHO Facilitator and Cap Updates (#398) * init * readme modified * readme modified * testing block updated * increased GHO caps on arbitrum * merged to one * bugfix * merged to one payload * readme updated * chore: update block numbers * chore: update md file * chore: PR updates * chore: update remappings * chore: separate interfaces and tests * feat: add tests and update pr * Update src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol Co-authored-by: Harsh Pandey --------- Co-authored-by: LucasWongC Co-authored-by: Harsh Pandey --- ...seGHOFacilitatorCapacity_20240722_after.md | 30 ++ foundry.toml | 2 +- ...ncreaseGHOFacilitatorCapacity_20240722.sol | 39 ++ ...reaseGHOFacilitatorCapacity_20240722.t.sol | 69 ++++ ...reaseGHOFacilitatorCapacity_20240722.t.sol | 347 ++++++++++++++++++ ...ncreaseGHOFacilitatorCapacity_20240722.sol | 22 ++ ...reaseGHOFacilitatorCapacity_20240722.t.sol | 40 ++ .../IncreaseGHOFacilitatorCapacity.md | 40 ++ ...reaseGHOFacilitatorCapacity_20240722.s.sol | 90 +++++ .../config.ts | 18 + src/interfaces/IGhoToken.sol | 35 ++ src/interfaces/ccip/IClient.sol | 31 ++ src/interfaces/ccip/IEVM2EVMOffRamp.sol | 19 + src/interfaces/ccip/IInternal.sol | 25 ++ src/interfaces/ccip/IRouter.sol | 29 ++ .../ccip/IUpgradeableLockReleaseTokenPool.sol | 21 ++ 16 files changed, 856 insertions(+), 1 deletion(-) create mode 100644 diffs/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722_before_AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722_after.md create mode 100644 src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol create mode 100644 src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol create mode 100644 src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol create mode 100644 src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol create mode 100644 src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol create mode 100644 src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity.md create mode 100644 src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol create mode 100644 src/20240722_Multi_IncreaseGHOFacilitatorCapacity/config.ts create mode 100644 src/interfaces/IGhoToken.sol create mode 100644 src/interfaces/ccip/IClient.sol create mode 100644 src/interfaces/ccip/IEVM2EVMOffRamp.sol create mode 100644 src/interfaces/ccip/IInternal.sol create mode 100644 src/interfaces/ccip/IRouter.sol create mode 100644 src/interfaces/ccip/IUpgradeableLockReleaseTokenPool.sol diff --git a/diffs/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722_before_AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722_after.md b/diffs/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722_before_AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722_after.md new file mode 100644 index 000000000..8fac6d90b --- /dev/null +++ b/diffs/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722_before_AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722_after.md @@ -0,0 +1,30 @@ +## Reserve changes + +### Reserves altered + +#### GHO ([0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33](https://arbiscan.io/address/0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33)) + +| description | value before | value after | +| --- | --- | --- | +| supplyCap | 1,000,000 GHO | 5,000,000 GHO | +| borrowCap | 900,000 GHO | 4,500,000 GHO | + + +## Raw diff + +```json +{ + "reserves": { + "0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33": { + "borrowCap": { + "from": 900000, + "to": 4500000 + }, + "supplyCap": { + "from": 1000000, + "to": 5000000 + } + } + } +} +``` \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 3d6cfae93..f4b730bc7 100644 --- a/foundry.toml +++ b/foundry.toml @@ -2,7 +2,7 @@ src = 'src' test = 'tests' script = 'scripts' -solc = '0.8.19' +solc = '0.8.20' out = 'out' bytecode_hash = 'none' libs = ['lib'] diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol new file mode 100644 index 000000000..3e5b91141 --- /dev/null +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol'; +import {IGhoToken} from 'src/interfaces/IGhoToken.sol'; +import {AaveV3PayloadArbitrum} from 'aave-helpers/v3-config-engine/AaveV3PayloadArbitrum.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-origin/periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; + +/** + * @title Increase GHO Facilitator Capacity + * @author @karpatkey_TokenLogic + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-gho-arb-increase-ccip-facilitator-capacity/18386 + */ +contract AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722 is AaveV3PayloadArbitrum { + uint256 public constant NEW_SUPPLY_CAP = 5_000_000; + uint256 public constant NEW_BORROW_CAP = 4_500_000; + uint128 public constant NEW_LIMIT = 20_000_000 ether; + + function _postExecute() internal override { + IGhoToken(AaveV3ArbitrumAssets.GHO_UNDERLYING).setFacilitatorBucketCapacity( + MiscArbitrum.GHO_CCIP_TOKEN_POOL, + NEW_LIMIT + ); + } + + function capsUpdates() public pure override returns (IAaveV3ConfigEngine.CapsUpdate[] memory) { + IAaveV3ConfigEngine.CapsUpdate[] memory capsUpdate = new IAaveV3ConfigEngine.CapsUpdate[](1); + + capsUpdate[0] = IAaveV3ConfigEngine.CapsUpdate({ + asset: AaveV3ArbitrumAssets.GHO_UNDERLYING, + supplyCap: NEW_SUPPLY_CAP, + borrowCap: NEW_BORROW_CAP + }); + + return capsUpdate; + } +} diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol new file mode 100644 index 000000000..20e3bb8a8 --- /dev/null +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722} from './AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol'; +import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol'; +import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol'; + +import {IGhoToken} from 'src/interfaces/IGhoToken.sol'; + +/** + * @dev Test for AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722 + * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol -vv + */ +contract AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722_Test is ProtocolV3TestBase { + AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('arbitrum'), 236255425); + proposal = new AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722', + AaveV3Arbitrum.POOL, + address(proposal) + ); + } + + function test_capsUpdates() public { + ReserveConfig[] memory configs = _getReservesConfigs(AaveV3Arbitrum.POOL); + + ReserveConfig memory GHO = _findReserveConfig(configs, AaveV3ArbitrumAssets.GHO_UNDERLYING); + + assertEq(GHO.supplyCap, 1_000_000); + assertEq(GHO.borrowCap, 900_000); + + executePayload(vm, address(proposal)); + + ReserveConfig[] memory configsAfter = _getReservesConfigs(AaveV3Arbitrum.POOL); + + GHO = _findReserveConfig(configsAfter, AaveV3ArbitrumAssets.GHO_UNDERLYING); + + assertEq(GHO.supplyCap, proposal.NEW_SUPPLY_CAP()); + assertEq(GHO.borrowCap, proposal.NEW_BORROW_CAP()); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_newLimitIsSet() public { + IGhoToken.Facilitator memory prevFacilitator = IGhoToken(AaveV3ArbitrumAssets.GHO_UNDERLYING) + .getFacilitator(MiscArbitrum.GHO_CCIP_TOKEN_POOL); + assertEq(prevFacilitator.bucketCapacity, 2_500_000 ether); + + executePayload(vm, address(proposal)); + + IGhoToken.Facilitator memory facilitator = IGhoToken(AaveV3ArbitrumAssets.GHO_UNDERLYING) + .getFacilitator(MiscArbitrum.GHO_CCIP_TOKEN_POOL); + + assertEq(facilitator.bucketCapacity, proposal.NEW_LIMIT()); + } +} diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol new file mode 100644 index 000000000..536890ae3 --- /dev/null +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol @@ -0,0 +1,347 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {GovernanceV3Arbitrum} from 'aave-address-book/GovernanceV3Arbitrum.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; + +import {IClient} from 'src/interfaces/ccip/IClient.sol'; +import {IInternal} from 'src/interfaces/ccip/IInternal.sol'; +import {IRouter} from 'src/interfaces/ccip/IRouter.sol'; +import {IEVM2EVMOffRamp} from 'src/interfaces/ccip/IEVM2EVMOffRamp.sol'; +import {IUpgradeableLockReleaseTokenPool} from 'src/interfaces/ccip/IUpgradeableLockReleaseTokenPool.sol'; +import {IGhoToken} from 'src/interfaces/IGhoToken.sol'; + +import {AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722} from './AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol'; +import {AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722} from './AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol'; + +/** + * @dev Test for AaveV3E2E_GHOCrossChainLaunch_20240528 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol -vv + */ +contract AaveV3E2ETest_IncreaseGHOFacilitatorCapacity is ProtocolV3TestBase { + /// @notice Leaf domain separator, should be used as the first 32 bytes of a leaf's preimage. + bytes32 internal constant LEAF_DOMAIN_SEPARATOR = + 0x0000000000000000000000000000000000000000000000000000000000000000; + + bytes32 internal constant EVM_2_EVM_MESSAGE_HASH = keccak256('EVM2EVMMessageHashV2'); + + // bytes4(keccak256("CCIP EVMExtraArgsV1")); + bytes4 internal constant EVM_EXTRA_ARGS_V1_TAG = 0x97a657c9; + + AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722 internal arbProposal; + AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722 internal ethProposal; + + IUpgradeableLockReleaseTokenPool internal ETH_TOKEN_POOL = + IUpgradeableLockReleaseTokenPool(MiscEthereum.GHO_CCIP_TOKEN_POOL); + address internal ARB_TOKEN_POOL = MiscArbitrum.GHO_CCIP_TOKEN_POOL; + IGhoToken internal ETH_GHO; + IGhoToken internal ARB_GHO; + + IRouter internal ETH_ROUTER = IRouter(0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D); + IRouter internal ARB_ROUTER = IRouter(0x141fa059441E0ca23ce184B6A78bafD2A517DdE8); + + uint256 public constant CURRENT_CCIP_BUCKET_CAPACITY = 2_500_000e18; // 2.5M + uint64 public constant ETH_ARB_CHAIN_SELECTOR = 4949039107694359620; + uint64 public constant ARB_ETH_CHAIN_SELECTOR = 5009297550715157269; + + address internal constant CCIP_ETH_ON_RAMP = 0x925228D7B82d883Dde340A55Fe8e6dA56244A22C; + address internal constant CCIP_ETH_OFF_RAMP = 0xeFC4a18af59398FF23bfe7325F2401aD44286F4d; + address internal constant CCIP_ARB_ON_RAMP = 0xCe11020D56e5FDbfE46D9FC3021641FfbBB5AdEE; + address internal constant CCIP_ARB_OFF_RAMP = 0x542ba1902044069330e8c5b36A84EC503863722f; + + event Released(address indexed sender, address indexed recipient, uint256 amount); + event Locked(address indexed sender, uint256 amount); + event Minted(address indexed sender, address indexed recipient, uint256 amount); + event Burned(address indexed sender, uint256 amount); + event CCIPSendRequested(IInternal.EVM2EVMMessage message); + event Transfer(address indexed from, address indexed to, uint256 value); + event Initialized(uint8 version); + + uint256 internal ethereumFork; + uint256 internal arbitrumFork; + + function setUp() public { + ethereumFork = vm.createFork(vm.rpcUrl('mainnet'), 20390936); + arbitrumFork = vm.createFork(vm.rpcUrl('arbitrum'), 236255425); + + // Proposal creation + vm.selectFork(ethereumFork); + ethProposal = new AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722(); + ETH_GHO = IGhoToken(MiscEthereum.GHO_TOKEN); + + vm.selectFork(arbitrumFork); + arbProposal = new AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722(); + ARB_GHO = IGhoToken(AaveV3ArbitrumAssets.GHO_UNDERLYING); + } + + /// @dev Full E2E Test: transfer from Ethereum to Arbitrum and way back, with limit + function test_ccipFullE2E() public { + vm.selectFork(arbitrumFork); + + assertEq(ARB_GHO.balanceOf(address(ARB_TOKEN_POOL)), 0); + (uint256 capacity, uint256 level) = ARB_GHO.getFacilitatorBucket(address(ARB_TOKEN_POOL)); + assertEq(capacity, CURRENT_CCIP_BUCKET_CAPACITY); + + uint256 currentBridgedAmount = level; + + // CCIP Transfer from Ethereum to Arbitrum + // Ethereum execution (origin) + vm.selectFork(ethereumFork); + address user = makeAddr('user'); + uint256 amount = 4_000_000e18; // 4M ETH_GHO + deal(user, 1e18); // 1 ETH + deal(address(ETH_GHO), user, amount); + + assertEq(ETH_GHO.balanceOf(address(ETH_TOKEN_POOL)), currentBridgedAmount); + assertEq(ETH_TOKEN_POOL.getBridgeLimit(), CURRENT_CCIP_BUCKET_CAPACITY); + assertEq(ETH_TOKEN_POOL.getCurrentBridgedAmount(), currentBridgedAmount); + + vm.startPrank(user); + SendCcipParams memory params = SendCcipParams({ + expectedSeqNum: 1, + router: ETH_ROUTER, + onRamp: CCIP_ETH_ON_RAMP, + token: address(ETH_GHO), + amount: amount, + feeToken: address(0), + sourceChainSelector: ARB_ETH_CHAIN_SELECTOR, + destChainSelector: ETH_ARB_CHAIN_SELECTOR, + sender: user, + receiver: user + }); + + ( + IClient.EVM2AnyMessage memory message, + IInternal.EVM2EVMMessage memory geEvent, + uint256 expectedFee + ) = _prepareCcip(params); + + vm.expectRevert( + abi.encodeWithSelector( + IUpgradeableLockReleaseTokenPool.BridgeLimitExceeded.selector, + 2_500_000e18 + ) + ); + params.router.ccipSend{value: expectedFee}(params.destChainSelector, message); + + GovV3Helpers.executePayload(vm, address(ethProposal)); + + vm.selectFork(arbitrumFork); + GovV3Helpers.executePayload(vm, address(arbProposal)); + + vm.selectFork(ethereumFork); + + assertEq(ETH_TOKEN_POOL.getBridgeLimit(), ethProposal.NEW_LIMIT()); + assertEq(ETH_TOKEN_POOL.getCurrentBridgedAmount(), currentBridgedAmount); + + params.router.ccipSend{value: expectedFee}(params.destChainSelector, message); + + assertEq(ETH_TOKEN_POOL.getCurrentBridgedAmount(), currentBridgedAmount + amount); + + // Arbitrum execution (destination) + vm.selectFork(arbitrumFork); + + // Mock off ramp + vm.startPrank(CCIP_ARB_OFF_RAMP); + bytes[] memory emptyData = new bytes[](1); + IEVM2EVMOffRamp(CCIP_ARB_OFF_RAMP).executeSingleMessage(geEvent, emptyData); + + assertEq(ARB_GHO.balanceOf(address(ARB_TOKEN_POOL)), 0); + (capacity, level) = ARB_GHO.getFacilitatorBucket(address(ARB_TOKEN_POOL)); + assertEq(capacity, arbProposal.NEW_LIMIT()); + assertEq(level, currentBridgedAmount + amount); + + // CCIP Transfer from Arbitrum to Ethereum + // Arbitrum execution (origin) + vm.selectFork(arbitrumFork); + deal(user, 1e18); // 1 ETH + + vm.startPrank(user); + // Use address(0) to use native token as fee token + params = SendCcipParams({ + expectedSeqNum: 1, + router: ARB_ROUTER, + onRamp: CCIP_ARB_ON_RAMP, + token: address(ARB_GHO), + amount: amount, + feeToken: address(0), + sourceChainSelector: ETH_ARB_CHAIN_SELECTOR, + destChainSelector: ARB_ETH_CHAIN_SELECTOR, + sender: user, + receiver: user + }); + (message, geEvent, expectedFee) = _prepareCcip(params); + params.router.ccipSend{value: expectedFee}(params.destChainSelector, message); + + assertEq(ARB_GHO.balanceOf(user), 0); + assertEq(ARB_GHO.balanceOf(address(ARB_TOKEN_POOL)), 0); + (capacity, level) = ARB_GHO.getFacilitatorBucket(address(ARB_TOKEN_POOL)); + assertEq(capacity, arbProposal.NEW_LIMIT()); + assertEq(level, currentBridgedAmount); + + // Ethereum execution (destination) + vm.selectFork(ethereumFork); + + assertEq(ETH_GHO.balanceOf(user), 0); + assertEq(ETH_GHO.balanceOf(address(ETH_TOKEN_POOL)), currentBridgedAmount + amount); + assertEq(ETH_TOKEN_POOL.getBridgeLimit(), ethProposal.NEW_LIMIT()); + assertEq(ETH_TOKEN_POOL.getCurrentBridgedAmount(), currentBridgedAmount + amount); + + // Mock off ramp + vm.startPrank(CCIP_ETH_OFF_RAMP); + IEVM2EVMOffRamp(CCIP_ETH_OFF_RAMP).executeSingleMessage(geEvent, emptyData); + + assertEq(ETH_GHO.balanceOf(user), amount); + assertEq(ETH_GHO.balanceOf(address(ETH_TOKEN_POOL)), currentBridgedAmount); + assertEq(ETH_TOKEN_POOL.getBridgeLimit(), ethProposal.NEW_LIMIT()); + assertEq(ETH_TOKEN_POOL.getCurrentBridgedAmount(), currentBridgedAmount); + } + + // --- + // Utils + // -- + + struct SendCcipParams { + uint64 expectedSeqNum; + IRouter router; + address onRamp; + address token; + uint256 amount; + address feeToken; + uint64 sourceChainSelector; + uint64 destChainSelector; + address sender; + address receiver; + } + + function _prepareCcip( + SendCcipParams memory params + ) internal returns (IClient.EVM2AnyMessage memory, IInternal.EVM2EVMMessage memory, uint256) { + IClient.EVM2AnyMessage memory message = _generateSingleTokenMessage( + params.receiver, + params.token, + params.amount, + params.feeToken + ); + uint256 expectedFee = params.router.getFee(params.destChainSelector, message); + + bytes32 metadataHash = keccak256( + abi.encode( + EVM_2_EVM_MESSAGE_HASH, + params.sourceChainSelector, + params.destChainSelector, + params.onRamp + ) + ); + + IInternal.EVM2EVMMessage memory geEvent = _messageToEvent( + message, + params.expectedSeqNum, + params.expectedSeqNum, + expectedFee, + params.sender, + params.sourceChainSelector, + metadataHash + ); + + IERC20(params.token).approve(address(params.router), params.amount); + + return (message, geEvent, expectedFee); + } + + function _generateSingleTokenMessage( + address receiver, + address token, + uint256 amount, + address feeToken + ) public pure returns (IClient.EVM2AnyMessage memory) { + IClient.EVMTokenAmount[] memory tokenAmounts = new IClient.EVMTokenAmount[](1); + tokenAmounts[0] = IClient.EVMTokenAmount({token: token, amount: amount}); + return + IClient.EVM2AnyMessage({ + receiver: abi.encode(receiver), + data: '', + tokenAmounts: tokenAmounts, + feeToken: feeToken, + extraArgs: _argsToBytes(IClient.EVMExtraArgsV1({gasLimit: 200_000})) + }); + } + + function _messageToEvent( + IClient.EVM2AnyMessage memory message, + uint64 seqNum, + uint64 nonce, + uint256 feeTokenAmount, + address originalSender, + uint64 sourceChainSelector, + bytes32 metadataHash + ) public pure returns (IInternal.EVM2EVMMessage memory) { + // Slicing is only available for calldata. So we have to build a new bytes array. + bytes memory args = new bytes(message.extraArgs.length - 4); + for (uint256 i = 4; i < message.extraArgs.length; ++i) { + args[i - 4] = message.extraArgs[i]; + } + IClient.EVMExtraArgsV1 memory extraArgs = abi.decode(args, (IClient.EVMExtraArgsV1)); + IInternal.EVM2EVMMessage memory messageEvent = IInternal.EVM2EVMMessage({ + sequenceNumber: seqNum, + feeTokenAmount: feeTokenAmount, + sender: originalSender, + nonce: nonce, + gasLimit: extraArgs.gasLimit, + strict: false, + sourceChainSelector: sourceChainSelector, + receiver: abi.decode(message.receiver, (address)), + data: message.data, + tokenAmounts: message.tokenAmounts, + sourceTokenData: new bytes[](message.tokenAmounts.length), + feeToken: message.feeToken, + messageId: '' + }); + + messageEvent.messageId = _hash(messageEvent, metadataHash); + return messageEvent; + } + + function _argsToBytes( + IClient.EVMExtraArgsV1 memory extraArgs + ) internal pure returns (bytes memory bts) { + return abi.encodeWithSelector(EVM_EXTRA_ARGS_V1_TAG, extraArgs); + } + + function _hash( + IInternal.EVM2EVMMessage memory original, + bytes32 metadataHash + ) internal pure returns (bytes32) { + // Fixed-size message fields are included in nested hash to reduce stack pressure. + // This hashing scheme is also used by RMN. If changing it, please notify the RMN maintainers. + return + keccak256( + abi.encode( + LEAF_DOMAIN_SEPARATOR, + metadataHash, + keccak256( + abi.encode( + original.sender, + original.receiver, + original.sequenceNumber, + original.gasLimit, + original.strict, + original.nonce, + original.feeToken, + original.feeTokenAmount + ) + ), + keccak256(original.data), + keccak256(abi.encode(original.tokenAmounts)), + keccak256(abi.encode(original.sourceTokenData)) + ) + ); + } +} diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol new file mode 100644 index 000000000..1c8beda1c --- /dev/null +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; + +interface UpgradeableLockReleaseTokenPool { + function setBridgeLimit(uint256 limit) external; +} +/** + * @title Increase GHO Facilitator Capacity + * @author @karpatkey_TokenLogic + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-gho-arb-increase-ccip-facilitator-capacity/18386 + */ +contract AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722 is IProposalGenericExecutor { + uint256 public constant NEW_LIMIT = 20_000_000 ether; + + function execute() external { + UpgradeableLockReleaseTokenPool(MiscEthereum.GHO_CCIP_TOKEN_POOL).setBridgeLimit(NEW_LIMIT); + } +} diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol new file mode 100644 index 000000000..0b5c342a1 --- /dev/null +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; + +import {IUpgradeableLockReleaseTokenPool} from 'src/interfaces/ccip/IUpgradeableLockReleaseTokenPool.sol'; +import {AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722} from './AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol'; + +/** + * @dev Test for AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol -vv + */ +contract AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722_Test is ProtocolV3TestBase { + AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20390936); + proposal = new AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_newLimitIsSet() public { + // Current limit is 1M + assertEq( + IUpgradeableLockReleaseTokenPool(MiscEthereum.GHO_CCIP_TOKEN_POOL).getBridgeLimit(), + 2_500_000 ether + ); + + executePayload(vm, address(proposal)); + + assertEq( + IUpgradeableLockReleaseTokenPool(MiscEthereum.GHO_CCIP_TOKEN_POOL).getBridgeLimit(), + proposal.NEW_LIMIT() + ); + } +} diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity.md b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity.md new file mode 100644 index 000000000..d27429c9c --- /dev/null +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity.md @@ -0,0 +1,40 @@ +--- +title: "GHO Arbitrum Parameter Adjustments" +author: "@karpatkey_TokenLogic" +discussions: "https://governance.aave.com/t/arfc-gho-arbitrum-parameter-adjustments/18386" +snapshot: "Direct-to-AIP" +--- + +## Simple Summary + +This AIP will adjust several GHO related parameters on Arbitrum. + +## Motivation + +After increasing the CCIP Facilitator Capacity from 1.0M to 2.5M, the new capacity was filled within 90 minutes. + +With better than anticipated liquidity conditions and ARB liquidity mining on Aave Protocol expected to start soon, this publication proposes several parameter increases that are supportive of enabling GHO to grow more freely. + +The parameter adjustments presented below are endorsed by Chaos Labs as an Aave DAO Risk Service Provider. + +## Specification + +This proposal will implement the following parameter adjustments. + +| Parameter | Current | Proposed | +| ---------------------------- | :-----: | :------: | +| Eth GHO Bridge Limit | 2.5M | 20.0M | +| Arb GHO Facilitator Capacity | 2.5M | 20.0M | +| Arb GHO Supply Cap | 1.0M | 5.0M | +| Arb GHO Borrow Cap | 0.9M | 4.5M | + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol), [E2E](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol) +- Snapshot: Direct-to-AIP +- [Discussion](https://governance.aave.com/t/arfc-gho-arbitrum-parameter-adjustments/18386) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol new file mode 100644 index 000000000..bfd5cd282 --- /dev/null +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, ArbitrumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722} from './AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol'; +import {AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722} from './AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/IncreaseGHOFacilitatorCapacity_20240722.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Arbitrum + * deploy-command: make deploy-ledger contract=src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol:DeployArbitrum chain=arbitrum + * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/IncreaseGHOFacilitatorCapacity_20240722.s.sol/42161/run-latest.json + */ +contract DeployArbitrum is ArbitrumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsArbitrum[0] = GovV3Helpers.buildAction( + type(AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722).creationCode + ); + payloads[1] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity.md' + ) + ); + } +} diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/config.ts b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/config.ts new file mode 100644 index 000000000..1075d29f5 --- /dev/null +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/config.ts @@ -0,0 +1,18 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum', 'AaveV3Arbitrum'], + title: 'Increase GHO Facilitator Capacity', + shortName: 'IncreaseGHOFacilitatorCapacity', + date: '20240722', + author: '@karpatkey_TokenLogic', + discussion: + 'https://governance.aave.com/t/arfc-gho-arb-increase-ccip-facilitator-capacity/18386', + snapshot: 'Direct-to-AIP', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Ethereum: {configs: {}, cache: {blockNumber: 20362522}}, + AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 234895360}}, + }, +}; diff --git a/src/interfaces/IGhoToken.sol b/src/interfaces/IGhoToken.sol new file mode 100644 index 000000000..ba73caa3b --- /dev/null +++ b/src/interfaces/IGhoToken.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IGhoToken { + struct Facilitator { + uint128 bucketCapacity; + uint128 bucketLevel; + string label; + } + + function balanceOf(address user) external returns (uint256); + + /** + * @notice Set the bucket capacity of the facilitator. + * @dev Only accounts with `BUCKET_MANAGER_ROLE` role can call this function + * @param facilitator The address of the facilitator + * @param newCapacity The new capacity of the bucket + */ + function setFacilitatorBucketCapacity(address facilitator, uint128 newCapacity) external; + + /** + * @notice Returns the facilitator data + * @param facilitator The address of the facilitator + * @return The facilitator configuration + */ + function getFacilitator(address facilitator) external view returns (Facilitator memory); + + /** + * @notice Returns the bucket configuration of the facilitator + * @param facilitator The address of the facilitator + * @return The capacity of the facilitator's bucket + * @return The level of the facilitator's bucket + */ + function getFacilitatorBucket(address facilitator) external view returns (uint256, uint256); +} diff --git a/src/interfaces/ccip/IClient.sol b/src/interfaces/ccip/IClient.sol new file mode 100644 index 000000000..c093edda2 --- /dev/null +++ b/src/interfaces/ccip/IClient.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IClient { + /// @dev RMN depends on this struct, if changing, please notify the RMN maintainers. + struct EVMTokenAmount { + address token; // token address on the local chain. + uint256 amount; // Amount of tokens. + } + + struct Any2EVMMessage { + bytes32 messageId; // MessageId corresponding to ccipSend on source. + uint64 sourceChainSelector; // Source chain selector. + bytes sender; // abi.decode(sender) if coming from an EVM chain. + bytes data; // payload sent in original message. + EVMTokenAmount[] destTokenAmounts; // Tokens and their amounts in their destination chain representation. + } + + // If extraArgs is empty bytes, the default is 200k gas limit. + struct EVM2AnyMessage { + bytes receiver; // abi.encode(receiver address) for dest EVM chains + bytes data; // Data payload + EVMTokenAmount[] tokenAmounts; // Token transfers + address feeToken; // Address of feeToken. address(0) means you will send msg.value. + bytes extraArgs; // Populate this with _argsToBytes(EVMExtraArgsV1) + } + + struct EVMExtraArgsV1 { + uint256 gasLimit; + } +} diff --git a/src/interfaces/ccip/IEVM2EVMOffRamp.sol b/src/interfaces/ccip/IEVM2EVMOffRamp.sol new file mode 100644 index 000000000..b900be64b --- /dev/null +++ b/src/interfaces/ccip/IEVM2EVMOffRamp.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {IInternal} from 'src/interfaces/ccip/IInternal.sol'; + +interface IEVM2EVMOffRamp { + /// @notice Execute a single message. + /// @param message The message that will be executed. + /// @param offchainTokenData Token transfer data to be passed to TokenPool. + /// @dev We make this external and callable by the contract itself, in order to try/catch + /// its execution and enforce atomicity among successful message processing and token transfer. + /// @dev We use ERC-165 to check for the ccipReceive interface to permit sending tokens to contracts + /// (for example smart contract wallets) without an associated message. + function executeSingleMessage( + IInternal.EVM2EVMMessage memory message, + bytes[] memory offchainTokenData + ) external; +} diff --git a/src/interfaces/ccip/IInternal.sol b/src/interfaces/ccip/IInternal.sol new file mode 100644 index 000000000..fa8c78f6d --- /dev/null +++ b/src/interfaces/ccip/IInternal.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {IClient} from 'src/interfaces/ccip/IClient.sol'; + +interface IInternal { + /// @notice The cross chain message that gets committed to EVM chains. + /// @dev RMN depends on this struct, if changing, please notify the RMN maintainers. + struct EVM2EVMMessage { + uint64 sourceChainSelector; // ─────────╮ the chain selector of the source chain, note: not chainId + address sender; // ─────────────────────╯ sender address on the source chain + address receiver; // ───────────────────╮ receiver address on the destination chain + uint64 sequenceNumber; // ──────────────╯ sequence number, not unique across lanes + uint256 gasLimit; // user supplied maximum gas amount available for dest chain execution + bool strict; // ────────────────────────╮ DEPRECATED + uint64 nonce; // │ nonce for this lane for this sender, not unique across senders/lanes + address feeToken; // ───────────────────╯ fee token + uint256 feeTokenAmount; // fee token amount + bytes data; // arbitrary data payload supplied by the message sender + IClient.EVMTokenAmount[] tokenAmounts; // array of tokens and amounts to transfer + bytes[] sourceTokenData; // array of token pool return values, one per token + bytes32 messageId; // a hash of the message data + } +} diff --git a/src/interfaces/ccip/IRouter.sol b/src/interfaces/ccip/IRouter.sol new file mode 100644 index 000000000..4e524b42f --- /dev/null +++ b/src/interfaces/ccip/IRouter.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {IClient} from 'src/interfaces/ccip/IClient.sol'; + +interface IRouter { + /// @notice Request a message to be sent to the destination chain + /// @param destinationChainSelector The destination chain ID + /// @param message The cross-chain CCIP message including data and/or tokens + /// @return messageId The message ID + /// @dev Note if msg.value is larger than the required fee (from getFee) we accept + /// the overpayment with no refund. + /// @dev Reverts with appropriate reason upon invalid message. + function ccipSend( + uint64 destinationChainSelector, + IClient.EVM2AnyMessage memory message + ) external payable returns (bytes32); + + /// @param destinationChainSelector The destination chainSelector + /// @param message The cross-chain CCIP message including data and/or tokens + /// @return fee returns execution fee for the message + /// delivery to destination chain, denominated in the feeToken specified in the message. + /// @dev Reverts with appropriate reason upon invalid message. + function getFee( + uint64 destinationChainSelector, + IClient.EVM2AnyMessage memory message + ) external view returns (uint256 fee); +} diff --git a/src/interfaces/ccip/IUpgradeableLockReleaseTokenPool.sol b/src/interfaces/ccip/IUpgradeableLockReleaseTokenPool.sol new file mode 100644 index 000000000..0bf5fc315 --- /dev/null +++ b/src/interfaces/ccip/IUpgradeableLockReleaseTokenPool.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {IClient} from 'src/interfaces/ccip/IClient.sol'; + +interface IUpgradeableLockReleaseTokenPool { + error BridgeLimitExceeded(uint256 bridgeLimit); + + /// @notice Gets the bridge limit + /// @return The maximum amount of tokens that can be transferred out to other chains + function getBridgeLimit() external view returns (uint256); + + /// @notice Sets the bridge limit + /// @param limit The new limit + function setBridgeLimit(uint256 limit) external; + + /// @notice Gets the current bridged amount to other chains + /// @return The amount of tokens transferred out to other chains + function getCurrentBridgedAmount() external view returns (uint256); +} From c7303fb77e706633b2c772d58b5e356d67b4ddf5 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 31 Jul 2024 18:29:15 +0000 Subject: [PATCH 12/68] fix(cache): automated cache update [skip ci] --- .../IncreaseGHOFacilitatorCapacity.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity.md b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity.md index d27429c9c..4c4995124 100644 --- a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity.md +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity.md @@ -30,8 +30,8 @@ This proposal will implement the following parameter adjustments. ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol), [E2E](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/bcf71845e82572a0d98c1dcb214a7c6028a6a1fd/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/bcf71845e82572a0d98c1dcb214a7c6028a6a1fd/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/bcf71845e82572a0d98c1dcb214a7c6028a6a1fd/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/bcf71845e82572a0d98c1dcb214a7c6028a6a1fd/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol), [E2E](https://github.com/bgd-labs/aave-proposals-v3/blob/bcf71845e82572a0d98c1dcb214a7c6028a6a1fd/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol) - Snapshot: Direct-to-AIP - [Discussion](https://governance.aave.com/t/arfc-gho-arbitrum-parameter-adjustments/18386) From 25cb42a47112ccc946bf44d94820ff62c2b77f5e Mon Sep 17 00:00:00 2001 From: Alice <121383428+Rozengarden@users.noreply.github.com> Date: Wed, 31 Jul 2024 20:32:57 +0200 Subject: [PATCH 13/68] [ACI] Set wstETH RF to 5% on all market (#382) * wstETH payload to 5% on all markets * Update src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol Co-authored-by: Harsh Pandey * Update src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol Co-authored-by: Harsh Pandey * New imports, new tests, new diffs --------- Co-authored-by: Harsh Pandey Co-authored-by: Marc Zeller <21088542+marczeller@users.noreply.github.com> Co-authored-by: marczeller --- ...uceReserveFactorOnWstETH_20240716_after.md | 25 ++ ...uceReserveFactorOnWstETH_20240716_after.md | 25 ++ ...uceReserveFactorOnWstETH_20240716_after.md | 25 ++ ...uceReserveFactorOnWstETH_20240716_after.md | 25 ++ ...uceReserveFactorOnWstETH_20240716_after.md | 25 ++ ...uceReserveFactorOnWstETH_20240716_after.md | 25 ++ ...uceReserveFactorOnWstETH_20240716_after.md | 25 ++ ...m_ReduceReserveFactorOnWstETH_20240716.sol | 36 +++ ...ReduceReserveFactorOnWstETH_20240716.t.sol | 32 +++ ...e_ReduceReserveFactorOnWstETH_20240716.sol | 36 +++ ...ReduceReserveFactorOnWstETH_20240716.t.sol | 32 +++ ...m_ReduceReserveFactorOnWstETH_20240716.sol | 36 +++ ...ReduceReserveFactorOnWstETH_20240716.t.sol | 32 +++ ...s_ReduceReserveFactorOnWstETH_20240716.sol | 36 +++ ...ReduceReserveFactorOnWstETH_20240716.t.sol | 32 +++ ...m_ReduceReserveFactorOnWstETH_20240716.sol | 36 +++ ...ReduceReserveFactorOnWstETH_20240716.t.sol | 32 +++ ...n_ReduceReserveFactorOnWstETH_20240716.sol | 36 +++ ...ReduceReserveFactorOnWstETH_20240716.t.sol | 32 +++ ...l_ReduceReserveFactorOnWstETH_20240716.sol | 36 +++ ...ReduceReserveFactorOnWstETH_20240716.t.sol | 32 +++ .../ReduceReserveFactorOnWstETH.md | 33 +++ ...ReduceReserveFactorOnWstETH_20240716.s.sol | 240 ++++++++++++++++++ .../config.ts | 137 ++++++++++ 24 files changed, 1061 insertions(+) create mode 100644 diffs/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716_after.md create mode 100644 diffs/AaveV3Base_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Base_ReduceReserveFactorOnWstETH_20240716_after.md create mode 100644 diffs/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716_after.md create mode 100644 diffs/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716_after.md create mode 100644 diffs/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716_after.md create mode 100644 diffs/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716_after.md create mode 100644 diffs/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716_after.md create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH.md create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol create mode 100644 src/20240716_Multi_ReduceReserveFactorOnWstETH/config.ts diff --git a/diffs/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716_after.md b/diffs/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716_after.md new file mode 100644 index 000000000..d96bce3d5 --- /dev/null +++ b/diffs/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### wstETH ([0x5979D7b546E38E414F7E9822514be443A4800529](https://arbiscan.io/address/0x5979D7b546E38E414F7E9822514be443A4800529)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 15 % [1500] | 5 % [500] | + + +## Raw diff + +```json +{ + "reserves": { + "0x5979D7b546E38E414F7E9822514be443A4800529": { + "reserveFactor": { + "from": 1500, + "to": 500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Base_ReduceReserveFactorOnWstETH_20240716_after.md b/diffs/AaveV3Base_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Base_ReduceReserveFactorOnWstETH_20240716_after.md new file mode 100644 index 000000000..c165c727b --- /dev/null +++ b/diffs/AaveV3Base_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Base_ReduceReserveFactorOnWstETH_20240716_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### wstETH ([0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452](https://basescan.org/address/0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 15 % [1500] | 5 % [500] | + + +## Raw diff + +```json +{ + "reserves": { + "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452": { + "reserveFactor": { + "from": 1500, + "to": 500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716_after.md b/diffs/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716_after.md new file mode 100644 index 000000000..b6381531f --- /dev/null +++ b/diffs/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### wstETH ([0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0](https://etherscan.io/address/0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 15 % [1500] | 5 % [500] | + + +## Raw diff + +```json +{ + "reserves": { + "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": { + "reserveFactor": { + "from": 1500, + "to": 500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716_after.md b/diffs/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716_after.md new file mode 100644 index 000000000..8926af79e --- /dev/null +++ b/diffs/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### wstETH ([0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6](https://gnosisscan.io/address/0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 15 % [1500] | 5 % [500] | + + +## Raw diff + +```json +{ + "reserves": { + "0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6": { + "reserveFactor": { + "from": 1500, + "to": 500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716_after.md b/diffs/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716_after.md new file mode 100644 index 000000000..c672f7402 --- /dev/null +++ b/diffs/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### wstETH ([0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb](https://optimistic.etherscan.io/address/0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 15 % | 5 % | + + +## Raw diff + +```json +{ + "reserves": { + "0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb": { + "reserveFactor": { + "from": 1500, + "to": 500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716_after.md b/diffs/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716_after.md new file mode 100644 index 000000000..1561912fd --- /dev/null +++ b/diffs/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### wstETH ([0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD](https://polygonscan.com/address/0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 15 % [1500] | 5 % [500] | + + +## Raw diff + +```json +{ + "reserves": { + "0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD": { + "reserveFactor": { + "from": 1500, + "to": 500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716_after.md b/diffs/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716_after.md new file mode 100644 index 000000000..279a7f954 --- /dev/null +++ b/diffs/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716_before_AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### wstETH ([0xf610A9dfB7C89644979b4A0f27063E9e7d7Cda32](https://scrollscan.com/address/0xf610A9dfB7C89644979b4A0f27063E9e7d7Cda32)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 15 % [1500] | 5 % [500] | + + +## Raw diff + +```json +{ + "reserves": { + "0xf610A9dfB7C89644979b4A0f27063E9e7d7Cda32": { + "reserveFactor": { + "from": 1500, + "to": 500 + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol new file mode 100644 index 000000000..8cb6c773f --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {AaveV3PayloadArbitrum} from 'aave-helpers/v3-config-engine/AaveV3PayloadArbitrum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reduce Reserve Factor on wstETH + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d + * - Discussion: https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1 + */ +contract AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716 is AaveV3PayloadArbitrum { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3ArbitrumAssets.wstETH_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 5_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol new file mode 100644 index 000000000..6d151cdc1 --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol'; + +/** + * @dev Test for AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716 + * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol -vv + */ +contract AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716_Test is ProtocolV3TestBase { + AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('arbitrum'), 232890608); + proposal = new AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716', + AaveV3Arbitrum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol new file mode 100644 index 000000000..d165fc482 --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; +import {AaveV3PayloadBase} from 'aave-helpers/v3-config-engine/AaveV3PayloadBase.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reduce Reserve Factor on wstETH + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d + * - Discussion: https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1 + */ +contract AaveV3Base_ReduceReserveFactorOnWstETH_20240716 is AaveV3PayloadBase { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3BaseAssets.wstETH_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 5_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol new file mode 100644 index 000000000..738457f54 --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Base_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol'; + +/** + * @dev Test for AaveV3Base_ReduceReserveFactorOnWstETH_20240716 + * command: FOUNDRY_PROFILE=base forge test --match-path=src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol -vv + */ +contract AaveV3Base_ReduceReserveFactorOnWstETH_20240716_Test is ProtocolV3TestBase { + AaveV3Base_ReduceReserveFactorOnWstETH_20240716 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('base'), 17182417); + proposal = new AaveV3Base_ReduceReserveFactorOnWstETH_20240716(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Base_ReduceReserveFactorOnWstETH_20240716', + AaveV3Base.POOL, + address(proposal) + ); + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol new file mode 100644 index 000000000..79909ff24 --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reduce Reserve Factor on wstETH + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d + * - Discussion: https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1 + */ +contract AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716 is AaveV3PayloadEthereum { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3EthereumAssets.wstETH_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 5_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol new file mode 100644 index 000000000..79a790d11 --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol'; + +/** + * @dev Test for AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol -vv + */ +contract AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716_Test is ProtocolV3TestBase { + AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20320832); + proposal = new AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716', + AaveV3Ethereum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol new file mode 100644 index 000000000..c47457207 --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol'; +import {AaveV3PayloadGnosis} from 'aave-helpers/v3-config-engine/AaveV3PayloadGnosis.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reduce Reserve Factor on wstETH + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d + * - Discussion: https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1 + */ +contract AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716 is AaveV3PayloadGnosis { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3GnosisAssets.wstETH_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 5_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol new file mode 100644 index 000000000..6c83cec46 --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol'; + +/** + * @dev Test for AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716 + * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol -vv + */ +contract AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716_Test is ProtocolV3TestBase { + AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('gnosis'), 34999418); + proposal = new AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716', + AaveV3Gnosis.POOL, + address(proposal) + ); + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol new file mode 100644 index 000000000..bf0e5c3ba --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; +import {AaveV3PayloadOptimism} from 'aave-helpers/v3-config-engine/AaveV3PayloadOptimism.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reduce Reserve Factor on wstETH + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d + * - Discussion: https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1 + */ +contract AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716 is AaveV3PayloadOptimism { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3OptimismAssets.wstETH_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 5_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol new file mode 100644 index 000000000..31c139edc --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol'; + +/** + * @dev Test for AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716 + * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol -vv + */ +contract AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716_Test is ProtocolV3TestBase { + AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('optimism'), 122777686); + proposal = new AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716', + AaveV3Optimism.POOL, + address(proposal) + ); + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol new file mode 100644 index 000000000..fc688eb8d --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; +import {AaveV3PayloadPolygon} from 'aave-helpers/v3-config-engine/AaveV3PayloadPolygon.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reduce Reserve Factor on wstETH + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d + * - Discussion: https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1 + */ +contract AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716 is AaveV3PayloadPolygon { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3PolygonAssets.wstETH_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 5_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol new file mode 100644 index 000000000..8d2c73d94 --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol'; + +/** + * @dev Test for AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol -vv + */ +contract AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716_Test is ProtocolV3TestBase { + AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 59439039); + proposal = new AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716', + AaveV3Polygon.POOL, + address(proposal) + ); + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol new file mode 100644 index 000000000..7373d8f7b --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3ScrollAssets} from 'aave-address-book/AaveV3Scroll.sol'; +import {AaveV3PayloadScroll} from 'aave-helpers/v3-config-engine/AaveV3PayloadScroll.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reduce Reserve Factor on wstETH + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d + * - Discussion: https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1 + */ +contract AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716 is AaveV3PayloadScroll { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3ScrollAssets.wstETH_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 5_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol new file mode 100644 index 000000000..e1ae8a22c --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol'; + +/** + * @dev Test for AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716 + * command: FOUNDRY_PROFILE=scroll forge test --match-path=src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol -vv + */ +contract AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716_Test is ProtocolV3TestBase { + AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('scroll'), 7500893); + proposal = new AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716', + AaveV3Scroll.POOL, + address(proposal) + ); + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH.md b/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH.md new file mode 100644 index 000000000..de42062fc --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH.md @@ -0,0 +1,33 @@ +--- +title: "Reduce Reserve Factor on wstETH" +author: "Aave Chan Initiative" +discussions: "https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d" +--- + +## Simple Summary + +For further alignment with the upcoming Lido Alliance proposals, this proposal will reduce the reserve factor for wstETH to 5%. + +## Motivation + +Aave and Lido have historically seen symbiotic growth, with stETH being one of the premier collaterals on Aave and leveraged staking being one of the most profitable use cases for both Aave DAO and Lido users. + +As part of the recently passed [TEMP CHECK proposal ](https://governance.aave.com/t/temp-check-deploy-a-lido-aave-v3-instance/17930) to create an isolated instance for wstETH borrowers, a number of other parameter changes were proposed to align Lido and Aave. + +This proposal implements the agreed reserve factor change for wstETH to 5%. + +## Specification + +On all networks, change wstETH Reserve Factor to 5%. + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d) +- [Discussion](https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol new file mode 100644 index 000000000..e1f9dd83d --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol @@ -0,0 +1,240 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, PolygonScript, OptimismScript, ArbitrumScript, BaseScript, GnosisScript, ScrollScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol'; +import {AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol'; +import {AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol'; +import {AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol'; +import {AaveV3Base_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol'; +import {AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol'; +import {AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ReduceReserveFactorOnWstETH_20240716.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Polygon + * deploy-command: make deploy-ledger contract=src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol:DeployPolygon chain=polygon + * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/ReduceReserveFactorOnWstETH_20240716.s.sol/137/run-latest.json + */ +contract DeployPolygon is PolygonScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Optimism + * deploy-command: make deploy-ledger contract=src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol:DeployOptimism chain=optimism + * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/ReduceReserveFactorOnWstETH_20240716.s.sol/10/run-latest.json + */ +contract DeployOptimism is OptimismScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Arbitrum + * deploy-command: make deploy-ledger contract=src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol:DeployArbitrum chain=arbitrum + * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/ReduceReserveFactorOnWstETH_20240716.s.sol/42161/run-latest.json + */ +contract DeployArbitrum is ArbitrumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Base + * deploy-command: make deploy-ledger contract=src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol:DeployBase chain=base + * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/ReduceReserveFactorOnWstETH_20240716.s.sol/8453/run-latest.json + */ +contract DeployBase is BaseScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Base_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Gnosis + * deploy-command: make deploy-ledger contract=src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol:DeployGnosis chain=gnosis + * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/ReduceReserveFactorOnWstETH_20240716.s.sol/100/run-latest.json + */ +contract DeployGnosis is GnosisScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Scroll + * deploy-command: make deploy-ledger contract=src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol:DeployScroll chain=scroll + * verify-command: FOUNDRY_PROFILE=scroll npx catapulta-verify -b broadcast/ReduceReserveFactorOnWstETH_20240716.s.sol/534352/run-latest.json + */ +contract DeployScroll is ScrollScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](7); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); + actionsPolygon[0] = GovV3Helpers.buildAction( + type(AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); + actionsOptimism[0] = GovV3Helpers.buildAction( + type(AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + payloads[2] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsArbitrum[0] = GovV3Helpers.buildAction( + type(AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + payloads[3] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction( + type(AaveV3Base_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + payloads[4] = GovV3Helpers.buildBasePayload(vm, actionsBase); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsGnosis[0] = GovV3Helpers.buildAction( + type(AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + payloads[5] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); + actionsScroll[0] = GovV3Helpers.buildAction( + type(AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716).creationCode + ); + payloads[6] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH.md' + ) + ); + } +} diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/config.ts b/src/20240716_Multi_ReduceReserveFactorOnWstETH/config.ts new file mode 100644 index 000000000..f386e69af --- /dev/null +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/config.ts @@ -0,0 +1,137 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + configFile: 'src/20240716_Multi_ReduceReserveFactorOnWstETH/config.ts', + author: 'Aave Chan Initiative', + pools: [ + 'AaveV3Ethereum', + 'AaveV3Polygon', + 'AaveV3Optimism', + 'AaveV3Arbitrum', + 'AaveV3Base', + 'AaveV3Gnosis', + 'AaveV3Scroll', + ], + title: 'Reduce Reserve Factor on wstETH', + shortName: 'ReduceReserveFactorOnWstETH', + date: '20240716', + discussion: 'https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Ethereum: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '5', + asset: 'wstETH', + }, + ], + }, + cache: {blockNumber: 20320832}, + }, + AaveV3Polygon: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '5', + asset: 'wstETH', + }, + ], + }, + cache: {blockNumber: 59439039}, + }, + AaveV3Optimism: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '5', + asset: 'wstETH', + }, + ], + }, + cache: {blockNumber: 122777686}, + }, + AaveV3Arbitrum: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '5', + asset: 'wstETH', + }, + ], + }, + cache: {blockNumber: 232890608}, + }, + AaveV3Base: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '5', + asset: 'wstETH', + }, + ], + }, + cache: {blockNumber: 17182417}, + }, + AaveV3Gnosis: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '5', + asset: 'wstETH', + }, + ], + }, + cache: {blockNumber: 34999418}, + }, + AaveV3Scroll: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '5', + asset: 'wstETH', + }, + ], + }, + cache: {blockNumber: 7500893}, + }, + }, +}; From 21fd029c2b1604f331ad7e0db37304da51c08718 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 31 Jul 2024 18:33:32 +0000 Subject: [PATCH 14/68] fix(cache): automated cache update [skip ci] --- .../ReduceReserveFactorOnWstETH.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH.md b/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH.md index de42062fc..e39d78e3a 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH.md +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH.md @@ -23,8 +23,8 @@ On all networks, change wstETH Reserve Factor to 5%. ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/25cb42a47112ccc946bf44d94820ff62c2b77f5e/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x7ef3a8d68fa8a1b69d298aceddfafe9d2a24eefb19365d995c839b1cd1b0b97d) - [Discussion](https://governance.aave.com/t/arfc-reduce-reserve-factor-on-wsteth/18044/1) From 443541cf27fddd1e4c2ac409c2acfbbd0137ac2e Mon Sep 17 00:00:00 2001 From: Alice <121383428+Rozengarden@users.noreply.github.com> Date: Thu, 1 Aug 2024 16:30:54 +0200 Subject: [PATCH 15/68] Payload to onboard wETh on Scroll (#411) --- ...a1be0a18750a60d1bf8c471ee14d962f51656a.svg | 1 + ...ingWeETHToAaveV3OnScroll_20240731_after.md | 127 ++++++++++++++++++ ...boardingWeETHToAaveV3OnScroll_20240731.sol | 58 ++++++++ ...ardingWeETHToAaveV3OnScroll_20240731.t.sol | 42 ++++++ .../OnboardingWeETHToAaveV3OnScroll.md | 57 ++++++++ ...ardingWeETHToAaveV3OnScroll_20240731.s.sol | 61 +++++++++ .../config.ts | 49 +++++++ 7 files changed, 395 insertions(+) create mode 100644 .assets/8fa1be0a18750a60d1bf8c471ee14d962f51656a.svg create mode 100644 diffs/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731_before_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731_after.md create mode 100644 src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol create mode 100644 src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol create mode 100644 src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll.md create mode 100644 src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol create mode 100644 src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/config.ts diff --git a/.assets/8fa1be0a18750a60d1bf8c471ee14d962f51656a.svg b/.assets/8fa1be0a18750a60d1bf8c471ee14d962f51656a.svg new file mode 100644 index 000000000..3c15ce1a6 --- /dev/null +++ b/.assets/8fa1be0a18750a60d1bf8c471ee14d962f51656a.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/diffs/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731_before_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731_after.md b/diffs/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731_before_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731_after.md new file mode 100644 index 000000000..9342aaed8 --- /dev/null +++ b/diffs/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731_before_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731_after.md @@ -0,0 +1,127 @@ +## Reserve changes + +### Reserves added + +#### weETH ([0x01f0a31698C4d065659b9bdC21B3610292a1c506](https://scrollscan.com/address/0x01f0a31698C4d065659b9bdC21B3610292a1c506)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 2,000 weETH | +| borrowCap | 400 weETH | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 1 | +| oracle | [0x32f924C0e0F1Abf5D1ff35B05eBc5E844dEdD2A9](https://scrollscan.com/address/0x32f924C0e0F1Abf5D1ff35B05eBc5E844dEdD2A9) | +| oracleDecimals | 8 | +| oracleDescription | Capped weETH / eETH(ETH) / USD | +| oracleLatestAnswer | 3370.08625918 | +| usageAsCollateralEnabled | true | +| ltv | 72.5 % [7250] | +| liquidationThreshold | 75 % [7500] | +| liquidationBonus | 7.5 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 15 % [1500] | +| aToken | [0xd80A5e16DBDC52Bd1C947CEDfA22c562Be9129C8](https://scrollscan.com/address/0xd80A5e16DBDC52Bd1C947CEDfA22c562Be9129C8) | +| aTokenImpl | [0x92EDe4ABd9df4Bfb49b4d723e4c932e35c47C54C](https://scrollscan.com/address/0x92EDe4ABd9df4Bfb49b4d723e4c932e35c47C54C) | +| variableDebtToken | [0x009D88C6a6B4CaA240b71C98BA93732e26F2A55A](https://scrollscan.com/address/0x009D88C6a6B4CaA240b71C98BA93732e26F2A55A) | +| variableDebtTokenImpl | [0x49bA16C08130FF8cFADE263B49387A8555bc057B](https://scrollscan.com/address/0x49bA16C08130FF8cFADE263B49387A8555bc057B) | +| stableDebtToken | [0xF474cC392591E3252996459FCAA3D75dc9F95b09](https://scrollscan.com/address/0xF474cC392591E3252996459FCAA3D75dc9F95b09) | +| stableDebtTokenImpl | [0x8Ff5f08EDB2E5e1A51bd14d0494320bdB436a149](https://scrollscan.com/address/0x8Ff5f08EDB2E5e1A51bd14d0494320bdB436a149) | +| borrowingEnabled | true | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0xEC93d0BBA1b1e635ba0Fff4786dB323db49D99F0](https://scrollscan.com/address/0xEC93d0BBA1b1e635ba0Fff4786dB323db49D99F0) | +| aTokenName | Aave Scroll weETH | +| aTokenSymbol | aScrweETH | +| aTokenUnderlyingBalance | 0.005 weETH [5000000000000000] | +| isPaused | false | +| stableDebtTokenName | Aave Scroll Stable Debt weETH | +| stableDebtTokenSymbol | stableDebtScrweETH | +| variableDebtTokenName | Aave Scroll Variable Debt weETH | +| variableDebtTokenSymbol | variableDebtScrweETH | +| virtualAccountingActive | true | +| virtualBalance | 0.005 weETH [5000000000000000] | +| optimalUsageRatio | 45 % | +| maxVariableBorrowRate | 307 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 7 % | +| variableRateSlope2 | 300 % | +| interestRate | ![ir](/.assets/8fa1be0a18750a60d1bf8c471ee14d962f51656a.svg) | +| eMode.label | ETH correlated | +| eMode.ltv | 90 % | +| eMode.liquidationThreshold | 93 % | +| eMode.liquidationBonus | 1 % | +| eMode.priceSource | 0x0000000000000000000000000000000000000000 | + + +## Raw diff + +```json +{ + "reserves": { + "0x01f0a31698C4d065659b9bdC21B3610292a1c506": { + "from": null, + "to": { + "aToken": "0xd80A5e16DBDC52Bd1C947CEDfA22c562Be9129C8", + "aTokenImpl": "0x92EDe4ABd9df4Bfb49b4d723e4c932e35c47C54C", + "aTokenName": "Aave Scroll weETH", + "aTokenSymbol": "aScrweETH", + "aTokenUnderlyingBalance": "5000000000000000", + "borrowCap": 400, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 18, + "eModeCategory": 1, + "interestRateStrategy": "0xEC93d0BBA1b1e635ba0Fff4786dB323db49D99F0", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10750, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 7500, + "ltv": 7250, + "oracle": "0x32f924C0e0F1Abf5D1ff35B05eBc5E844dEdD2A9", + "oracleDecimals": 8, + "oracleDescription": "Capped weETH / eETH(ETH) / USD", + "oracleLatestAnswer": 337008625918, + "reserveFactor": 1500, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0xF474cC392591E3252996459FCAA3D75dc9F95b09", + "stableDebtTokenImpl": "0x8Ff5f08EDB2E5e1A51bd14d0494320bdB436a149", + "stableDebtTokenName": "Aave Scroll Stable Debt weETH", + "stableDebtTokenSymbol": "stableDebtScrweETH", + "supplyCap": 2000, + "symbol": "weETH", + "underlying": "0x01f0a31698C4d065659b9bdC21B3610292a1c506", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0x009D88C6a6B4CaA240b71C98BA93732e26F2A55A", + "variableDebtTokenImpl": "0x49bA16C08130FF8cFADE263B49387A8555bc057B", + "variableDebtTokenName": "Aave Scroll Variable Debt weETH", + "variableDebtTokenSymbol": "variableDebtScrweETH", + "virtualAccountingActive": true, + "virtualBalance": "5000000000000000" + } + } + }, + "strategies": { + "0x01f0a31698C4d065659b9bdC21B3610292a1c506": { + "from": null, + "to": { + "address": "0xEC93d0BBA1b1e635ba0Fff4786dB323db49D99F0", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "3070000000000000000000000000", + "optimalUsageRatio": "450000000000000000000000000", + "variableRateSlope1": "70000000000000000000000000", + "variableRateSlope2": "3000000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol new file mode 100644 index 000000000..a1a8775a8 --- /dev/null +++ b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Scroll, AaveV3ScrollEModes} from 'aave-address-book/AaveV3Scroll.sol'; +import {AaveV3PayloadScroll} from 'aave-helpers/v3-config-engine/AaveV3PayloadScroll.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; +/** + * @title Onboarding weETH to Aave V3 on Scroll + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x252bafcf8ead0bf1869b7ba9fef430caf3977dfd1e1f84e2e4bc1842e83520b4 + * - Discussion: https://governance.aave.com/t/arfc-onboarding-weeth-to-aave-v3-on-scroll/18301 + */ +contract AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731 is AaveV3PayloadScroll { + using SafeERC20 for IERC20; + + address public constant weETH = 0x01f0a31698C4d065659b9bdC21B3610292a1c506; + uint256 public constant weETH_SEED_AMOUNT = 5e15; + + function _postExecute() internal override { + IERC20(weETH).forceApprove(address(AaveV3Scroll.POOL), weETH_SEED_AMOUNT); + AaveV3Scroll.POOL.supply(weETH, weETH_SEED_AMOUNT, address(AaveV3Scroll.COLLECTOR), 0); + } + + function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { + IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); + + listings[0] = IAaveV3ConfigEngine.Listing({ + asset: weETH, + assetSymbol: 'weETH', + priceFeed: 0x32f924C0e0F1Abf5D1ff35B05eBc5E844dEdD2A9, + eModeCategory: AaveV3ScrollEModes.ETH_CORRELATED, + enabledToBorrow: EngineFlags.ENABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.DISABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 72_50, + liqThreshold: 75_00, + liqBonus: 7_50, + reserveFactor: 15_00, + supplyCap: 2_000, + borrowCap: 400, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 45_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 7_00, + variableRateSlope2: 300_00 + }) + }); + + return listings; + } +} diff --git a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol new file mode 100644 index 000000000..6870693db --- /dev/null +++ b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol'; +import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731} from './AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol'; + +/** + * @dev Test for AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731 + * command: FOUNDRY_PROFILE=scroll forge test --match-path=src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol -vv + */ +contract AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731_Test is ProtocolV3TestBase { + AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('scroll'), 7953400); + proposal = new AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731', + AaveV3Scroll.POOL, + address(proposal) + ); + } + + function test_collectorHasweETHFunds() public { + GovV3Helpers.executePayload(vm, address(proposal)); + (address aTokenAddress, , ) = AaveV3Scroll + .AAVE_PROTOCOL_DATA_PROVIDER + .getReserveTokensAddresses(proposal.weETH()); + assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Scroll.COLLECTOR)), 5e15); + } +} diff --git a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll.md b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll.md new file mode 100644 index 000000000..dcf0b1be8 --- /dev/null +++ b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll.md @@ -0,0 +1,57 @@ +--- +title: "Onboarding weETH to Aave V3 on Scroll" +author: "Aave Chan Initiative" +discussions: "https://governance.aave.com/t/arfc-onboarding-weeth-to-aave-v3-on-scroll/18301" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x252bafcf8ead0bf1869b7ba9fef430caf3977dfd1e1f84e2e4bc1842e83520b4" +--- + +## Simple Summary + +This ARFC seeks to add [Ether.fi](http://ether.fi/) Liquid Restaking Token weETH to Aave V3 on Scroll. + +After the successful onboarding of weETH to [Aave v3 Ethereum ](https://vote.onaave.com/proposal/?proposalId=74&ipfsHash=0x227ef8b0f49775f64100ec697bc4e67b0739bd1ff08788b1f6b48a66e1d57bf7), [Arbitrum ](https://vote.onaave.com/proposal/?proposalId=76&ipfsHash=0x78778591515790b337fcdcc2a02d49dc58e98cad614c33d61e1173bc6194729d), and [Base ](https://governance.aave.com/t/arfc-onboarding-of-weeth-to-aave-v3-on-base/17691), alongside recent Supply and Borrow Cap increases for weETH due to significant demand, this proposal will further increase the ability for Aave to service weETH demand from users. + +## Motivation + +weETH is an LRT that allows users to stake their ETH, accrue staking rewards, and receive additional rewards through native restaking on EigenLayer. + +[Ether.fi](http://ether.fi/) has also launched weETH on Arbitrum and Base allowing L2 users to get exposure to LRT yield and points. As weETH has already been approved for onboarding to Aave V3 on Ethereum, Arbitrum, and Base by the DAO, this proposal extends the onboarding of weETH to Aave v3 on Scroll. + +## Specification + +The table below illustrates the configured risk parameters for **weETH** + +| Parameter | Value | +| ------------------------- | -----------------------------------------: | +| Isolation Mode | false | +| Borrowable | ENABLED | +| Collateral Enabled | true | +| Supply Cap (weETH) | 2,000 | +| Borrow Cap (weETH) | 400 | +| Debt Ceiling | USD 0 | +| LTV | 72.5 % | +| LT | 75 % | +| Liquidation Bonus | 7.5 % | +| Liquidation Protocol Fee | 10 % | +| Reserve Factor | 15 % | +| Base Variable Borrow Rate | 0 % | +| Variable Slope 1 | 7 % | +| Variable Slope 2 | 300 % | +| Uoptimal | 45 % | +| Stable Borrowing | DISABLED | +| Flashloanable | ENABLED | +| Siloed Borrowing | DISABLED | +| Borrowable in Isolation | DISABLED | +| Oracle | 0x32f924C0e0F1Abf5D1ff35B05eBc5E844dEdD2A9 | +| E-Mode Category | ETH-correlated | + +## References + +- Implementation: [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol) +- Tests: [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x252bafcf8ead0bf1869b7ba9fef430caf3977dfd1e1f84e2e4bc1842e83520b4) +- [Discussion](https://governance.aave.com/t/arfc-onboarding-weeth-to-aave-v3-on-scroll/18301) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol new file mode 100644 index 000000000..e0ed27ff9 --- /dev/null +++ b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, ScrollScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731} from './AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol'; + +/** + * @dev Deploy Scroll + * deploy-command: make deploy-ledger contract=src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol:DeployScroll chain=scroll + * verify-command: FOUNDRY_PROFILE=scroll npx catapulta-verify -b broadcast/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol/534352/run-latest.json + */ +contract DeployScroll is ScrollScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); + actionsScroll[0] = GovV3Helpers.buildAction( + type(AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731).creationCode + ); + payloads[0] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll.md' + ) + ); + } +} diff --git a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/config.ts b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/config.ts new file mode 100644 index 000000000..aacf624d6 --- /dev/null +++ b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/config.ts @@ -0,0 +1,49 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + author: 'Aave Chan Initiative', + pools: ['AaveV3Scroll'], + title: 'Onboarding weETH to Aave V3 on Scroll', + shortName: 'OnboardingWeETHToAaveV3OnScroll', + date: '20240731', + discussion: 'https://governance.aave.com/t/arfc-onboarding-weeth-to-aave-v3-on-scroll/18301', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x252bafcf8ead0bf1869b7ba9fef430caf3977dfd1e1f84e2e4bc1842e83520b4', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Scroll: { + configs: { + ASSET_LISTING: [ + { + assetSymbol: 'weETH', + decimals: 18, + priceFeed: '0x32f924C0e0F1Abf5D1ff35B05eBc5E844dEdD2A9', + ltv: '72.5', + liqThreshold: '75', + liqBonus: '7.5', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'ENABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '15', + supplyCap: '2000', + borrowCap: '400', + rateStrategyParams: { + optimalUtilizationRate: '45', + baseVariableBorrowRate: '0', + variableRateSlope1: '7', + variableRateSlope2: '300', + }, + eModeCategory: 'AaveV3ScrollEModes.ETH_CORRELATED', + asset: '0x01f0a31698C4d065659b9bdC21B3610292a1c506', + }, + ], + }, + cache: {blockNumber: 7952321}, + }, + }, +}; From eb5acc217be210c666139b365bfe7f7137b0e8ce Mon Sep 17 00:00:00 2001 From: Cache bot Date: Thu, 1 Aug 2024 14:31:28 +0000 Subject: [PATCH 16/68] fix(cache): automated cache update [skip ci] --- .../OnboardingWeETHToAaveV3OnScroll.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll.md b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll.md index dcf0b1be8..52c21a14b 100644 --- a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll.md +++ b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll.md @@ -47,8 +47,8 @@ The table below illustrates the configured risk parameters for **weETH** ## References -- Implementation: [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol) -- Tests: [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol) +- Implementation: [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/443541cf27fddd1e4c2ac409c2acfbbd0137ac2e/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol) +- Tests: [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/443541cf27fddd1e4c2ac409c2acfbbd0137ac2e/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x252bafcf8ead0bf1869b7ba9fef430caf3977dfd1e1f84e2e4bc1842e83520b4) - [Discussion](https://governance.aave.com/t/arfc-onboarding-weeth-to-aave-v3-on-scroll/18301) From 70b12def0769deca4e39058c4df53ddfb389f95a Mon Sep 17 00:00:00 2001 From: Lucas Wong <101302451+LucasWongC@users.noreply.github.com> Date: Fri, 2 Aug 2024 06:16:23 -0700 Subject: [PATCH 17/68] TokenLogic + karpatkey Financial Service Providers - Phase II (#390) * complete: TokenLogic & karpatkey Service Provider Partnership-phase 2 * use different name for variables * readme updated * added correct snapshot link * readme modified * added backdated transfer * bugfix when transfer backdated amount * variable name changed * readme updated * readme updated * Update src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol Co-authored-by: pavelvm5 <56404416+pavelvm5@users.noreply.github.com> --------- Co-authored-by: pavelvm5 <56404416+pavelvm5@users.noreply.github.com> --- ...viceProviderPartnershipPhase2_20240723.sol | 57 +++++++ ...ceProviderPartnershipPhase2_20240723.t.sol | 158 ++++++++++++++++++ ...rpatkeyServiceProviderPartnershipPhase2.md | 127 ++++++++++++++ ...ceProviderPartnershipPhase2_20240723.s.sol | 60 +++++++ .../config.ts | 16 ++ 5 files changed, 418 insertions(+) create mode 100644 src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol create mode 100644 src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol create mode 100644 src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2.md create mode 100644 src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol create mode 100644 src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/config.ts diff --git a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol new file mode 100644 index 000000000..fe366b98a --- /dev/null +++ b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; + +/** + * @title TokenLogic & karpatkey Service Provider Partnership-phase 2 + * @author TokenLogic & karpatkey + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xc44ec840f8f7f6ca3ef2f2a4289882c4cdc1a8b3e6e9ad6b811a640097a8016a + * - Discussion: https://governance.aave.com/t/arfc-tokenlogic-karpatkey-financial-service-providers-phase-ii/18285 + */ +contract AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723 is + IProposalGenericExecutor +{ + address public constant KARPATKEY_RECEIVER = 0x58e6c7ab55Aa9012eAccA16d1ED4c15795669E1C; + address public constant TOKENLOGIC_RECEIVER = 0x3e4A9f478C0c13A15137Fc81e9d8269F127b4B40; + + uint256 public constant AMOUNT = 250_000 ether; + + uint256 public constant STREAM_DURATION = 180 days; + uint256 public constant ORIGINAL_STARTDATE = 1718673864; + + uint256 public constant ACTUAL_AMOUNT = (AMOUNT / STREAM_DURATION) * STREAM_DURATION; + + function execute() external { + uint256 backdatedAmount = (ACTUAL_AMOUNT / STREAM_DURATION) * + (block.timestamp - ORIGINAL_STARTDATE); + + AaveV3Ethereum.COLLECTOR.transfer( + AaveV3EthereumAssets.GHO_UNDERLYING, + KARPATKEY_RECEIVER, + backdatedAmount + ); + AaveV3Ethereum.COLLECTOR.transfer( + AaveV3EthereumAssets.GHO_UNDERLYING, + TOKENLOGIC_RECEIVER, + backdatedAmount + ); + + AaveV3Ethereum.COLLECTOR.createStream( + KARPATKEY_RECEIVER, + ACTUAL_AMOUNT - backdatedAmount, + AaveV3EthereumAssets.GHO_UNDERLYING, + block.timestamp, + ORIGINAL_STARTDATE + STREAM_DURATION + ); + + AaveV3Ethereum.COLLECTOR.createStream( + TOKENLOGIC_RECEIVER, + ACTUAL_AMOUNT - backdatedAmount, + AaveV3EthereumAssets.GHO_UNDERLYING, + block.timestamp, + ORIGINAL_STARTDATE + STREAM_DURATION + ); + } +} diff --git a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol new file mode 100644 index 000000000..26aefadd2 --- /dev/null +++ b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol @@ -0,0 +1,158 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723} from './AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol'; + +/** + * @dev Test for AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol -vv + */ +contract AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723_Test is + ProtocolV3TestBase +{ + AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20370107); + proposal = new AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_execute() public { + uint256 nextCollectorStreamID = AaveV3Ethereum.COLLECTOR.getNextStreamId(); + uint256 nextCollectorStreamIDTwo = nextCollectorStreamID + 1; + + uint256 receiverOneBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf( + proposal.KARPATKEY_RECEIVER() + ); + uint256 receiverTwoBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf( + proposal.TOKENLOGIC_RECEIVER() + ); + + uint256 collectorBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf( + address(AaveV3Ethereum.COLLECTOR) + ); + + uint256 backdatedAmount = (proposal.ACTUAL_AMOUNT() / proposal.STREAM_DURATION()) * + (block.timestamp - proposal.ORIGINAL_STARTDATE()); + + executePayload(vm, address(proposal)); + + { + ( + address senderGHO, + address recipientGHO, + uint256 depositGHO, + address tokenAddressGHO, + uint256 startTimeGHO, + uint256 stopTimeGHO, + uint256 remainingBalanceGHO, + + ) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID); + + assertEq(senderGHO, address(AaveV3Ethereum.COLLECTOR)); + assertEq(recipientGHO, proposal.KARPATKEY_RECEIVER()); + assertEq(depositGHO + backdatedAmount, proposal.ACTUAL_AMOUNT()); + assertEq(tokenAddressGHO, AaveV3EthereumAssets.GHO_UNDERLYING); + assertEq( + stopTimeGHO - startTimeGHO, + proposal.STREAM_DURATION() + proposal.ORIGINAL_STARTDATE() - block.timestamp + ); + assertEq(remainingBalanceGHO + backdatedAmount, proposal.ACTUAL_AMOUNT()); + } + + { + ( + address senderGHO, + address recipientGHO, + uint256 depositGHO, + address tokenAddressGHO, + uint256 startTimeGHO, + uint256 stopTimeGHO, + uint256 remainingBalanceGHO, + + ) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamIDTwo); + + assertEq(senderGHO, address(AaveV3Ethereum.COLLECTOR)); + assertEq(recipientGHO, proposal.TOKENLOGIC_RECEIVER()); + assertEq(depositGHO + backdatedAmount, proposal.ACTUAL_AMOUNT()); + assertEq(tokenAddressGHO, AaveV3EthereumAssets.GHO_UNDERLYING); + assertEq( + stopTimeGHO - startTimeGHO, + proposal.STREAM_DURATION() + proposal.ORIGINAL_STARTDATE() - block.timestamp + ); + assertEq(remainingBalanceGHO + backdatedAmount, proposal.ACTUAL_AMOUNT()); + } + + // Can withdraw during stream + vm.warp(block.timestamp + 30 days); + + vm.startPrank(proposal.KARPATKEY_RECEIVER()); + AaveV3Ethereum.COLLECTOR.withdrawFromStream( + nextCollectorStreamID, + proposal.ACTUAL_AMOUNT() / 30 days + ); + vm.stopPrank(); + + assertGt( + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(proposal.KARPATKEY_RECEIVER()), + receiverOneBalanceBefore + ); + + vm.startPrank(proposal.TOKENLOGIC_RECEIVER()); + AaveV3Ethereum.COLLECTOR.withdrawFromStream( + nextCollectorStreamIDTwo, + proposal.ACTUAL_AMOUNT() / 30 days + ); + vm.stopPrank(); + + assertGt( + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(proposal.TOKENLOGIC_RECEIVER()), + receiverTwoBalanceBefore + ); + + assertLt( + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)), + collectorBalanceBefore + ); + + // Can withdraw post stream all remaining funds + vm.warp(block.timestamp + proposal.STREAM_DURATION()); + + (, , , , , , uint256 remainingOne, ) = AaveV3Ethereum.COLLECTOR.getStream( + nextCollectorStreamID + ); + + (, , , , , , uint256 remainingTwo, ) = AaveV3Ethereum.COLLECTOR.getStream( + nextCollectorStreamIDTwo + ); + + vm.startPrank(proposal.KARPATKEY_RECEIVER()); + AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextCollectorStreamID, remainingOne); + vm.stopPrank(); + + vm.startPrank(proposal.TOKENLOGIC_RECEIVER()); + AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextCollectorStreamIDTwo, remainingTwo); + vm.stopPrank(); + + assertEq( + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(proposal.KARPATKEY_RECEIVER()), + receiverOneBalanceBefore + proposal.ACTUAL_AMOUNT() + ); + assertEq( + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(proposal.TOKENLOGIC_RECEIVER()), + receiverTwoBalanceBefore + proposal.ACTUAL_AMOUNT() + ); + assertEq( + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)), + collectorBalanceBefore - proposal.ACTUAL_AMOUNT() - proposal.ACTUAL_AMOUNT() + ); + } +} diff --git a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2.md b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2.md new file mode 100644 index 000000000..1a014d236 --- /dev/null +++ b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2.md @@ -0,0 +1,127 @@ +--- +title: "TokenLogic + karpatkey - Phase II" +author: "TokenLogic karpatkey" +discussions: "https://governance.aave.com/t/arfc-tokenlogic-karpatkey-financial-service-providers-phase-ii/18285" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0xc44ec840f8f7f6ca3ef2f2a4289882c4cdc1a8b3e6e9ad6b811a640097a8016a" +--- + +![TL + kpk 2](https://hackmd.io/_uploads/Bkwva6C80.jpg) + +# Summary + +This publication proposes the continuation of the collaboration with karpatkey and TokenLogic for an additional 6 months, with a proposed budget of 500k GHO. The proposed contributions extend over the three themes detailed below: Treasury Management, GHO adoption and the Aave Stack. + +# Motivation + +The TokenLogic and karpatkey partnership has created significant value for the Aave DAO across all three focus areas detailed [here](https://governance.aave.com/t/phase-i-summary-karpatkey-tokenlogic/17962). GHO's peg, liquidity, and growth prospects have each improved dramatically over the last 6 months. The DAO's finances are more transparent than ever before and the DAO is firmly positioned for growth. + +Building on the success of Phase I, we seek to extend our collaboration with the Aave Community for another 6 months. Phase II of our engagement is to focus on enabling GHO and Aave to grow market share through prudent financial management and contributing to numerous growth initiatives. Our three primary focus areas are summarized below: + +- Treasury Management +- GHO Adoption +- Aave Stack + +## What to Expect + +### Treasury Management + +**Asset Management** + +The Aave DAO receives revenue in the form of revenue-generating aTokens for each deployed lending market. Whilst that reduces the need to deploy assets beyond the protocol itself, this creates a need for continual rebalancing of asset holdings. + +To facilitate streamlining routine operational tasks, the [Finance Steward](https://governance.aave.com/t/arfc-aave-finance-steward/17570) role, which has been already introduced to the Aave community, will be developed. Given the ability to create allowances, streams, perform transfers, assets bridging, and swaps within pre-approved guidelines and without AIPs, we expect the governance overhead around treasury management to decrease significantly. + +The GHO Finance Steward's capacity to perform swaps will also be improved by the implementation of the [Aave Swap](https://governance.aave.com/t/arfc-aave-swap-upgrade/15311) contract. With this tool, the DAO will be able to acquire assets in a timely and targeted manner, and to support GHO's peg during turbulent market conditions with the ability to create limit orders. + +**Financial Security** + +A key objective is to define the DAO's annual budget and secure sufficient funds to ensure DAO operations under stressfull market conditions. As the DAO's revenues have exceeded the burn-rate and currently holds more assets (about $145M at [end of June](https://reports.karpatkey.com/?dao=9&month=6&year=2024¤cy=USD)) than planned expenses, this proposal will target to cover a [six months' runway](https://aave.tokenlogic.xyz/runway) matching holdings with expense tokens or token class as deemed appropriate for capital efficiency. This approach guarantees financial stability and operational continuity for Aave DAO. + +Key components of this objective will include: + +- Deploying bridging contracts (as required); +- Bridging Aave funds between networks; +- Alocating assets for capital efficiency. In particular, migrating funds from Aave v2 to Aave v3; and +- Swapping assets to align expenses and holdings. + +**Aave Analytics** + +Reporting and analytics functions will be expanded to provide the utmost transparency into the DAO's financial status and overall performance of the protocol, and to support informed decision-making and analysis of the Aave ecosystem. This includes the [Aave Portal](https://aave.tokenlogic.xyz/) and the [Aave Treasury Report](https://reports.karpatkey.com/), which shows detailed information on DAO holdings and treasury performance. + +The Aave Portal will continue to evolve to showcase the performance of the Aave Protocol and GHO's adoption. Over the next 6 months, the portal will expand to include all revenue sources (incl. Accrued), assets holdings and expenses (incl. budgets) in granular detail, whilst also beginning to include high-level performance tracking across existing covered deployments. +Several legacy community Dune Dashboards will be integrated into the Aave Portal, where they will be maintained and expanded upon over time. + +### GHO Adoption + +**Oversight** + +During Phase II, GHO's growth is expected to accelerate and expand to several networks. To nurture and maximize the growth potential of GHO, its success hinges on the ability to hold its peg and scale simultaneously. + +As a GHO Steward, we will continue to manage key GHO and GSM configurations, including Borrow Rate, GSM Caps, and GSM fees. As the Treasury Managers, we will ensure the GSM is adequately funded, targetting a collateralization in the range of 5% to 10% of total supply, and that GHO swaps are performed in a manner supportive of retaining a tight peg. + +**Liquidity** + +We will continue to lead the operations of the Aave Liquidity Committee (ALC), overseeing the liquidity growth across different protocols. This includes + +- Adjusting liquidity incentives to maintain sufficient market depth; +- Defining and executing direct liquidity incentives; +- Leading initiatives that create utility for GHO; +- Optimizing the utilization of the DAO's strategic voting assets; +- Supporting GSM Integrations with aggregators; +- Ensuring GSM are adequately funded; +- Supporting future D3M, Facilitator, and Protocol Owned Liquidity (POL) initiatives; and +- Support efforts to integrate GHO to Centralized Exchanges, and fund managers. + +**Growth** + +As GHO continues to grow beyond Ethereum, our efforts will expand to support those new deployments to ensure adequate liquidity and peg stability is maintained. We will continue to work with teams that build with GHO and advocate for the adoption of GHO wherever practical. + +When GHO is mature enough to support deploying Protocol Owned Liquidity, we will actively contribute to the creation of sGHO and balancing the needs for sGHO and stkGHO within the Aave ecosystem. + +Our goal is to keep the consistent growth rate and surpass the GHO borrowed supply of 180M by the end of this new term. + +### Aave Stack + +**Safety Module Management and Optimisation** + +The Safety Module (SM) currently presents exposure risks due to its reliance on the DAO's native token and its deployment solely on the Ethereum blockchain. + +With multiple instances of the SM being deployed, we will continue to perform the following: + +- Transition from AAVE emissions; +- Introduce new categories; +- Amend emission schedules; and, +- Progressively align protocol exposure with SM holdings; + +**Aave Liquidity Network** + +With upcoming changes in the Aave product stack, including the Liquidity Network and the stablecoin's multichain deployment, new challenges will arise in integrating these aspects with other products. We will actively participate in coordination and consulting to support the streamlined and successful deployment of these features. + +Where practical, sunsetting of legacy v2 markets will be supported through continual parameter adjustments to encourage users to migrate to the latest instance of Aave Protocol. + +By addressing these challenges, our team aims to support the DAO in achieving sustainable growth and resilience in a rapidly changing environment. + +# Specification + +The transfer() method of the Collector will be called to send the backdated token to the two address below, and then the createStream() method of the Collector will be called to create two streams when the payload gets executed: + +**karpatkey** +Transfer and Stream: Total 250k GHO over 180 days from 1718673864 +Address: `0x58e6c7ab55aa9012eacca16d1ed4c15795669e1c` + +**TokenLogic** +Transfer and Stream: Total 250k GHO over 180 days from 1718673864 +Address: `0x3e4A9f478C0c13A15137Fc81e9d8269F127b4B40` + +TokenLogic and karpatkey are to be included in the Gas Rebate program that reimburses deployment and testings costs. + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol) +- [Snapshot for TokenLogic + karpatkey - Phase II](https://snapshot.org/#/aave.eth/proposal/0xc44ec840f8f7f6ca3ef2f2a4289882c4cdc1a8b3e6e9ad6b811a640097a8016a) +- [Discussion](https://governance.aave.com/t/arfc-tokenlogic-karpatkey-financial-service-providers-phase-ii/18285) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol new file mode 100644 index 000000000..9f6246194 --- /dev/null +++ b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723} from './AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2.md' + ) + ); + } +} diff --git a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/config.ts b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/config.ts new file mode 100644 index 000000000..bcbfdce67 --- /dev/null +++ b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/config.ts @@ -0,0 +1,16 @@ +import {ConfigFile, VOTING_NETWORK} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'TokenLogic + karpatkey Service Provider - Phase II', + shortName: 'TokenLogicKarpatkeyServiceProviderPartnershipPhase2', + date: '20240723', + author: 'TokenLogic & karpatkey', + discussion: + 'https://governance.aave.com/t/arfc-tokenlogic-karpatkey-financial-service-providers-phase-ii/18285', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0xc44ec840f8f7f6ca3ef2f2a4289882c4cdc1a8b3e6e9ad6b811a640097a8016a', + votingNetwork: VOTING_NETWORK.POLYGON, + }, + poolOptions: {AaveV3Ethereum: {configs: {}, cache: {blockNumber: 20370107}}}, +}; From b41c3f0aab14dec0921e4e59895b1cddd9c422d8 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Fri, 2 Aug 2024 13:17:08 +0000 Subject: [PATCH 18/68] fix(cache): automated cache update [skip ci] --- .../TokenLogicKarpatkeyServiceProviderPartnershipPhase2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2.md b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2.md index 1a014d236..6c11ffe9a 100644 --- a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2.md +++ b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2.md @@ -117,8 +117,8 @@ TokenLogic and karpatkey are to be included in the Gas Rebate program that reimb ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/70b12def0769deca4e39058c4df53ddfb389f95a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/70b12def0769deca4e39058c4df53ddfb389f95a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol) - [Snapshot for TokenLogic + karpatkey - Phase II](https://snapshot.org/#/aave.eth/proposal/0xc44ec840f8f7f6ca3ef2f2a4289882c4cdc1a8b3e6e9ad6b811a640097a8016a) - [Discussion](https://governance.aave.com/t/arfc-tokenlogic-karpatkey-financial-service-providers-phase-ii/18285) From c63bac4965415f43fa80999dfe235a3dc003a168 Mon Sep 17 00:00:00 2001 From: Rustem Kurmaev Date: Fri, 2 Aug 2024 17:21:52 +0200 Subject: [PATCH 19/68] Renewal of Aave Guardian (#376) * AaveV2 protocol guardian update * Aave V3 protocol guardian update * aip text * add governance update * governance guardian update * upda imports and test blocks * update snapshot link --- ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...enewalOfAaveGuardian2024_20240708_after.md | 5 + ...che_RenewalOfAaveGuardian2024_20240708.sol | 23 ++ ...e_RenewalOfAaveGuardian2024_20240708.t.sol | 48 +++ ...AMM_RenewalOfAaveGuardian2024_20240708.sol | 23 ++ ...M_RenewalOfAaveGuardian2024_20240708.t.sol | 36 ++ ...eum_RenewalOfAaveGuardian2024_20240708.sol | 23 ++ ...m_RenewalOfAaveGuardian2024_20240708.t.sol | 48 +++ ...gon_RenewalOfAaveGuardian2024_20240708.sol | 23 ++ ...n_RenewalOfAaveGuardian2024_20240708.t.sol | 47 +++ ...rum_RenewalOfAaveGuardian2024_20240708.sol | 28 ++ ...m_RenewalOfAaveGuardian2024_20240708.t.sol | 51 +++ ...che_RenewalOfAaveGuardian2024_20240708.sol | 28 ++ ...e_RenewalOfAaveGuardian2024_20240708.t.sol | 51 +++ ...BNB_RenewalOfAaveGuardian2024_20240708.sol | 28 ++ ...B_RenewalOfAaveGuardian2024_20240708.t.sol | 48 +++ ...ase_RenewalOfAaveGuardian2024_20240708.sol | 28 ++ ...e_RenewalOfAaveGuardian2024_20240708.t.sol | 52 +++ ...eum_RenewalOfAaveGuardian2024_20240708.sol | 29 ++ ...m_RenewalOfAaveGuardian2024_20240708.t.sol | 52 +++ ...sis_RenewalOfAaveGuardian2024_20240708.sol | 28 ++ ...s_RenewalOfAaveGuardian2024_20240708.t.sol | 53 +++ ...tis_RenewalOfAaveGuardian2024_20240708.sol | 29 ++ ...s_RenewalOfAaveGuardian2024_20240708.t.sol | 52 +++ ...ism_RenewalOfAaveGuardian2024_20240708.sol | 29 ++ ...m_RenewalOfAaveGuardian2024_20240708.t.sol | 52 +++ ...gon_RenewalOfAaveGuardian2024_20240708.sol | 28 ++ ...n_RenewalOfAaveGuardian2024_20240708.t.sol | 52 +++ ...oll_RenewalOfAaveGuardian2024_20240708.sol | 28 ++ ...l_RenewalOfAaveGuardian2024_20240708.t.sol | 52 +++ .../Guardians.sol | 66 ++++ .../RenewalOfAaveGuardian2024.md | 103 +++++ .../RenewalOfAaveGuardian2024_20240708.s.sol | 362 ++++++++++++++++++ .../RenewalV2BasePayload.sol | 24 ++ .../RenewalV2BaseTest.sol | 32 ++ .../RenewalV3BasePayload.sol | 44 +++ .../RenewalV3BaseTest.sol | 62 +++ .../config.ts | 45 +++ .../interfaces/IOwnableWithGuardian.sol | 8 + 51 files changed, 1885 insertions(+) create mode 100644 diffs/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708_before_AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708_before_AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708_before_AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708_before_AaveV2Polygon_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708_before_AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708_before_AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV3BNB_RenewalOfAaveGuardian2024_20240708_before_AaveV3BNB_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV3Base_RenewalOfAaveGuardian2024_20240708_before_AaveV3Base_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708_before_AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708_before_AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV3Metis_RenewalOfAaveGuardian2024_20240708_before_AaveV3Metis_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708_before_AaveV3Optimism_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708_before_AaveV3Polygon_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 diffs/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708_before_AaveV3Scroll_RenewalOfAaveGuardian2024_20240708_after.md create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.t.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/Guardians.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024.md create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BasePayload.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BaseTest.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BasePayload.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BaseTest.sol create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/config.ts create mode 100644 src/20240708_Multi_RenewalOfAaveGuardian2024/interfaces/IOwnableWithGuardian.sol diff --git a/diffs/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708_before_AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708_before_AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708_before_AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708_before_AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708_before_AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708_before_AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708_before_AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708_before_AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708_before_AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708_before_AaveV2Polygon_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708_before_AaveV2Polygon_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708_before_AaveV2Polygon_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708_before_AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708_before_AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708_before_AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708_before_AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708_before_AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708_before_AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3BNB_RenewalOfAaveGuardian2024_20240708_before_AaveV3BNB_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV3BNB_RenewalOfAaveGuardian2024_20240708_before_AaveV3BNB_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3BNB_RenewalOfAaveGuardian2024_20240708_before_AaveV3BNB_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_RenewalOfAaveGuardian2024_20240708_before_AaveV3Base_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV3Base_RenewalOfAaveGuardian2024_20240708_before_AaveV3Base_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Base_RenewalOfAaveGuardian2024_20240708_before_AaveV3Base_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708_before_AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708_before_AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708_before_AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708_before_AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708_before_AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708_before_AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3Metis_RenewalOfAaveGuardian2024_20240708_before_AaveV3Metis_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV3Metis_RenewalOfAaveGuardian2024_20240708_before_AaveV3Metis_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Metis_RenewalOfAaveGuardian2024_20240708_before_AaveV3Metis_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708_before_AaveV3Optimism_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708_before_AaveV3Optimism_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708_before_AaveV3Optimism_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708_before_AaveV3Polygon_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708_before_AaveV3Polygon_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708_before_AaveV3Polygon_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708_before_AaveV3Scroll_RenewalOfAaveGuardian2024_20240708_after.md b/diffs/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708_before_AaveV3Scroll_RenewalOfAaveGuardian2024_20240708_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708_before_AaveV3Scroll_RenewalOfAaveGuardian2024_20240708_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..16169fcc3 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Avalanche} from 'aave-address-book/AaveV2Avalanche.sol'; +import {RenewalV2Params, RenewalV2BasePayload} from './RenewalV2BasePayload.sol'; +import {ProtocolGuardians} from './Guardians.sol'; + +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708 is RenewalV2BasePayload { + constructor() + RenewalV2BasePayload( + RenewalV2Params({ + addressesProvider: AaveV2Avalanche.POOL_ADDRESSES_PROVIDER, + guardian: ProtocolGuardians.AVALANCHE_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..ca496d457 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Avalanche} from 'aave-address-book/AaveV2Avalanche.sol'; + +import 'forge-std/Test.sol'; +import {MiscAvalanche} from 'aave-address-book/MiscAvalanche.sol'; +import {AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708} from './AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV2BaseTest, GuardianUpdateTestParams} from './RenewalV2BaseTest.sol'; + +/** + * @dev Test for AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708_Test is RenewalV2BaseTest { + AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 48662670); + proposal = new AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708', + AaveV2Avalanche.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscAvalanche.PROTOCOL_GUARDIAN, + newGuardian: proposal.GUARDIAN(), + addressesProvider: AaveV2Avalanche.POOL_ADDRESSES_PROVIDER, + poolConfigurator: AaveV2Avalanche.POOL_CONFIGURATOR + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..0ac5b1129 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2EthereumAMM} from 'aave-address-book/AaveV2EthereumAMM.sol'; +import {RenewalV2Params, RenewalV2BasePayload} from './RenewalV2BasePayload.sol'; +import {ProtocolGuardians} from './Guardians.sol'; + +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708 is RenewalV2BasePayload { + constructor() + RenewalV2BasePayload( + RenewalV2Params({ + addressesProvider: AaveV2EthereumAMM.POOL_ADDRESSES_PROVIDER, + guardian: ProtocolGuardians.ETHEREUM_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..64a46f98e --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2EthereumAMM} from 'aave-address-book/AaveV2EthereumAMM.sol'; + +import 'forge-std/Test.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708} from './AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV2BaseTest, GuardianUpdateTestParams} from './RenewalV2BaseTest.sol'; +/** + * @dev Test for AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708_Test is RenewalV2BaseTest { + AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20425824); + proposal = new AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscEthereum.PROTOCOL_GUARDIAN, + newGuardian: proposal.GUARDIAN(), + addressesProvider: AaveV2EthereumAMM.POOL_ADDRESSES_PROVIDER, + poolConfigurator: AaveV2EthereumAMM.POOL_CONFIGURATOR + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..c0cca4ab0 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Ethereum} from 'aave-address-book/AaveV2Ethereum.sol'; +import {RenewalV2Params, RenewalV2BasePayload} from './RenewalV2BasePayload.sol'; +import {ProtocolGuardians} from './Guardians.sol'; + +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708 is RenewalV2BasePayload { + constructor() + RenewalV2BasePayload( + RenewalV2Params({ + addressesProvider: AaveV2Ethereum.POOL_ADDRESSES_PROVIDER, + guardian: ProtocolGuardians.ETHEREUM_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..e1bc68eb2 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Ethereum} from 'aave-address-book/AaveV2Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708} from './AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV2BaseTest, GuardianUpdateTestParams} from './RenewalV2BaseTest.sol'; + +/** + * @dev Test for AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708_Test is RenewalV2BaseTest { + AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20425824); + proposal = new AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708', + AaveV2Ethereum.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscEthereum.PROTOCOL_GUARDIAN, + newGuardian: proposal.GUARDIAN(), + addressesProvider: AaveV2Ethereum.POOL_ADDRESSES_PROVIDER, + poolConfigurator: AaveV2Ethereum.POOL_CONFIGURATOR + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..8b7c87536 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Polygon} from 'aave-address-book/AaveV2Polygon.sol'; +import {RenewalV2Params, RenewalV2BasePayload} from './RenewalV2BasePayload.sol'; +import {ProtocolGuardians} from './Guardians.sol'; + +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV2Polygon_RenewalOfAaveGuardian2024_20240708 is RenewalV2BasePayload { + constructor() + RenewalV2BasePayload( + RenewalV2Params({ + addressesProvider: AaveV2Polygon.POOL_ADDRESSES_PROVIDER, + guardian: ProtocolGuardians.POLYGON_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..367708484 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Polygon} from 'aave-address-book/AaveV2Polygon.sol'; + +import 'forge-std/Test.sol'; +import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol'; +import {AaveV2Polygon_RenewalOfAaveGuardian2024_20240708} from './AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV2BaseTest, GuardianUpdateTestParams} from './RenewalV2BaseTest.sol'; +/** + * @dev Test for AaveV2Polygon_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV2Polygon_RenewalOfAaveGuardian2024_20240708_Test is RenewalV2BaseTest { + AaveV2Polygon_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 60023363); + proposal = new AaveV2Polygon_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV2Polygon_RenewalOfAaveGuardian2024_20240708', + AaveV2Polygon.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscPolygon.PROTOCOL_GUARDIAN, + newGuardian: proposal.GUARDIAN(), + addressesProvider: AaveV2Polygon.POOL_ADDRESSES_PROVIDER, + poolConfigurator: AaveV2Polygon.POOL_CONFIGURATOR + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..b4f8f5967 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol'; +import {GovernanceV3Arbitrum} from 'aave-address-book/GovernanceV3Arbitrum.sol'; +import {RenewalV3Params, RenewalV3BasePayload} from './RenewalV3BasePayload.sol'; +import {ProtocolGuardians, GovernanceGuardians} from './Guardians.sol'; +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708 is RenewalV3BasePayload { + constructor() + RenewalV3BasePayload( + RenewalV3Params({ + aclManager: AaveV3Arbitrum.ACL_MANAGER, + governance: address(0), + payloadsController: address(GovernanceV3Arbitrum.PAYLOADS_CONTROLLER), + protocolGuardian: ProtocolGuardians.ARBITRUM_GUARDIAN, + governanceGuardian: GovernanceGuardians.ARBITRUM_GUARDIAN, + oldGuardian: MiscArbitrum.PROTOCOL_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..67c5162af --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol'; +import {GovernanceV3Arbitrum} from 'aave-address-book/GovernanceV3Arbitrum.sol'; + +import 'forge-std/Test.sol'; +import {AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708} from './AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; +/** + * @dev Test for AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708_Test is RenewalV3BaseTest { + AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('arbitrum'), 237933762); + proposal = new AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708', + AaveV3Arbitrum.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscArbitrum.PROTOCOL_GUARDIAN, + protocolGuardian: proposal.PROTOCOL_GUARDIAN(), + governanceGuardian: proposal.GOVERNANCE_GUARDIAN(), + aclManager: AaveV3Arbitrum.ACL_MANAGER, + poolConfigurator: AaveV3Arbitrum.POOL_CONFIGURATOR, + governance: address(0), + payloadsController: address(GovernanceV3Arbitrum.PAYLOADS_CONTROLLER) + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..8d0095b11 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; +import {MiscAvalanche} from 'aave-address-book/MiscAvalanche.sol'; +import {GovernanceV3Avalanche} from 'aave-address-book/GovernanceV3Avalanche.sol'; +import {RenewalV3Params, RenewalV3BasePayload} from './RenewalV3BasePayload.sol'; +import {ProtocolGuardians, GovernanceGuardians} from './Guardians.sol'; +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708 is RenewalV3BasePayload { + constructor() + RenewalV3BasePayload( + RenewalV3Params({ + aclManager: AaveV3Avalanche.ACL_MANAGER, + governance: address(0), + payloadsController: address(GovernanceV3Avalanche.PAYLOADS_CONTROLLER), + protocolGuardian: ProtocolGuardians.AVALANCHE_GUARDIAN, + governanceGuardian: GovernanceGuardians.AVALANCHE_GUARDIAN, + oldGuardian: MiscAvalanche.PROTOCOL_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..062d4e472 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; +import {MiscAvalanche} from 'aave-address-book/MiscAvalanche.sol'; +import {GovernanceV3Avalanche} from 'aave-address-book/GovernanceV3Avalanche.sol'; + +import 'forge-std/Test.sol'; +import {AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708} from './AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; +/** + * @dev Test for AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708_Test is RenewalV3BaseTest { + AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 48662670); + proposal = new AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708', + AaveV3Avalanche.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscAvalanche.PROTOCOL_GUARDIAN, + protocolGuardian: proposal.PROTOCOL_GUARDIAN(), + governanceGuardian: proposal.GOVERNANCE_GUARDIAN(), + aclManager: AaveV3Avalanche.ACL_MANAGER, + poolConfigurator: AaveV3Avalanche.POOL_CONFIGURATOR, + governance: address(0), + payloadsController: address(GovernanceV3Avalanche.PAYLOADS_CONTROLLER) + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..14dddbd6c --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol'; +import {MiscBNB} from 'aave-address-book/MiscBNB.sol'; +import {GovernanceV3BNB} from 'aave-address-book/GovernanceV3BNB.sol'; +import {RenewalV3Params, RenewalV3BasePayload} from './RenewalV3BasePayload.sol'; +import {ProtocolGuardians, GovernanceGuardians} from './Guardians.sol'; +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV3BNB_RenewalOfAaveGuardian2024_20240708 is RenewalV3BasePayload { + constructor() + RenewalV3BasePayload( + RenewalV3Params({ + aclManager: AaveV3BNB.ACL_MANAGER, + governance: address(0), + payloadsController: address(GovernanceV3BNB.PAYLOADS_CONTROLLER), + protocolGuardian: ProtocolGuardians.BNB_GUARDIAN, + governanceGuardian: GovernanceGuardians.BNB_GUARDIAN, + oldGuardian: MiscBNB.PROTOCOL_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..0daed8220 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol'; +import {MiscBNB} from 'aave-address-book/MiscBNB.sol'; +import {GovernanceV3BNB} from 'aave-address-book/GovernanceV3BNB.sol'; + +import 'forge-std/Test.sol'; +import {AaveV3BNB_RenewalOfAaveGuardian2024_20240708} from './AaveV3BNB_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; + +/** + * @dev Test for AaveV3BNB_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=bnb forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV3BNB_RenewalOfAaveGuardian2024_20240708_Test is RenewalV3BaseTest { + AaveV3BNB_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('bnb'), 40951103); + proposal = new AaveV3BNB_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest('AaveV3BNB_RenewalOfAaveGuardian2024_20240708', AaveV3BNB.POOL, address(proposal)); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscBNB.PROTOCOL_GUARDIAN, + protocolGuardian: proposal.PROTOCOL_GUARDIAN(), + governanceGuardian: proposal.GOVERNANCE_GUARDIAN(), + aclManager: AaveV3BNB.ACL_MANAGER, + poolConfigurator: AaveV3BNB.POOL_CONFIGURATOR, + governance: address(0), + payloadsController: address(GovernanceV3BNB.PAYLOADS_CONTROLLER) + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..52b3f5300 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; +import {MiscBase} from 'aave-address-book/MiscBase.sol'; +import {GovernanceV3Base} from 'aave-address-book/GovernanceV3Base.sol'; +import {RenewalV3Params, RenewalV3BasePayload} from './RenewalV3BasePayload.sol'; +import {ProtocolGuardians, GovernanceGuardians} from './Guardians.sol'; +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV3Base_RenewalOfAaveGuardian2024_20240708 is RenewalV3BasePayload { + constructor() + RenewalV3BasePayload( + RenewalV3Params({ + aclManager: AaveV3Base.ACL_MANAGER, + governance: address(0), + payloadsController: address(GovernanceV3Base.PAYLOADS_CONTROLLER), + protocolGuardian: ProtocolGuardians.BASE_GUARDIAN, + governanceGuardian: GovernanceGuardians.BASE_GUARDIAN, + oldGuardian: MiscBase.PROTOCOL_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..076ed12f7 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; +import {MiscBase} from 'aave-address-book/MiscBase.sol'; +import {GovernanceV3Base} from 'aave-address-book/GovernanceV3Base.sol'; + +import 'forge-std/Test.sol'; +import {AaveV3Base_RenewalOfAaveGuardian2024_20240708} from './AaveV3Base_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; + +/** + * @dev Test for AaveV3Base_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=base forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV3Base_RenewalOfAaveGuardian2024_20240708_Test is RenewalV3BaseTest { + AaveV3Base_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('base'), 17815584); + proposal = new AaveV3Base_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Base_RenewalOfAaveGuardian2024_20240708', + AaveV3Base.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscBase.PROTOCOL_GUARDIAN, + protocolGuardian: proposal.PROTOCOL_GUARDIAN(), + governanceGuardian: proposal.GOVERNANCE_GUARDIAN(), + aclManager: AaveV3Base.ACL_MANAGER, + poolConfigurator: AaveV3Base.POOL_CONFIGURATOR, + governance: address(0), + payloadsController: address(GovernanceV3Base.PAYLOADS_CONTROLLER) + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..bdede1fbc --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; + +import {RenewalV3Params, RenewalV3BasePayload} from './RenewalV3BasePayload.sol'; +import {ProtocolGuardians, GovernanceGuardians} from './Guardians.sol'; +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708 is RenewalV3BasePayload { + constructor() + RenewalV3BasePayload( + RenewalV3Params({ + aclManager: AaveV3Ethereum.ACL_MANAGER, + governance: address(GovernanceV3Ethereum.GOVERNANCE), + payloadsController: address(GovernanceV3Ethereum.PAYLOADS_CONTROLLER), + protocolGuardian: ProtocolGuardians.ETHEREUM_GUARDIAN, + governanceGuardian: GovernanceGuardians.ETHEREUM_GUARDIAN, + oldGuardian: MiscEthereum.PROTOCOL_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..d58f18ff6 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708} from './AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; + +/** + * @dev Test for AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708_Test is RenewalV3BaseTest { + AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20425824); + proposal = new AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708', + AaveV3Ethereum.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscEthereum.PROTOCOL_GUARDIAN, + protocolGuardian: proposal.PROTOCOL_GUARDIAN(), + governanceGuardian: proposal.GOVERNANCE_GUARDIAN(), + aclManager: AaveV3Ethereum.ACL_MANAGER, + poolConfigurator: AaveV3Ethereum.POOL_CONFIGURATOR, + governance: address(GovernanceV3Ethereum.GOVERNANCE), + payloadsController: address(GovernanceV3Ethereum.PAYLOADS_CONTROLLER) + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..8f8e633ba --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; +import {MiscGnosis} from 'aave-address-book/MiscGnosis.sol'; +import {GovernanceV3Gnosis} from 'aave-address-book/GovernanceV3Gnosis.sol'; +import {RenewalV3Params, RenewalV3BasePayload} from './RenewalV3BasePayload.sol'; +import {ProtocolGuardians, GovernanceGuardians} from './Guardians.sol'; +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708 is RenewalV3BasePayload { + constructor() + RenewalV3BasePayload( + RenewalV3Params({ + aclManager: AaveV3Gnosis.ACL_MANAGER, + governance: address(0), + payloadsController: address(GovernanceV3Gnosis.PAYLOADS_CONTROLLER), + protocolGuardian: ProtocolGuardians.GNOSIS_GUARDIAN, + governanceGuardian: GovernanceGuardians.GNOSIS_GUARDIAN, + oldGuardian: MiscGnosis.PROTOCOL_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..ef019448d --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; +import {MiscGnosis} from 'aave-address-book/MiscGnosis.sol'; +import {GovernanceV3Gnosis} from 'aave-address-book/GovernanceV3Gnosis.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708} from './AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; + +/** + * @dev Test for AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708_Test is RenewalV3BaseTest { + AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('gnosis'), 35244008); + proposal = new AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708', + AaveV3Gnosis.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscGnosis.PROTOCOL_GUARDIAN, + protocolGuardian: proposal.PROTOCOL_GUARDIAN(), + governanceGuardian: proposal.GOVERNANCE_GUARDIAN(), + aclManager: AaveV3Gnosis.ACL_MANAGER, + poolConfigurator: AaveV3Gnosis.POOL_CONFIGURATOR, + governance: address(0), + payloadsController: address(GovernanceV3Gnosis.PAYLOADS_CONTROLLER) + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..aee262d7b --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Metis} from 'aave-address-book/AaveV3Metis.sol'; +import {MiscMetis} from 'aave-address-book/MiscMetis.sol'; +import {GovernanceV3Metis} from 'aave-address-book/GovernanceV3Metis.sol'; + +import {RenewalV3Params, RenewalV3BasePayload} from './RenewalV3BasePayload.sol'; +import {ProtocolGuardians, GovernanceGuardians} from './Guardians.sol'; +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV3Metis_RenewalOfAaveGuardian2024_20240708 is RenewalV3BasePayload { + constructor() + RenewalV3BasePayload( + RenewalV3Params({ + aclManager: AaveV3Metis.ACL_MANAGER, + governance: address(0), + payloadsController: address(GovernanceV3Metis.PAYLOADS_CONTROLLER), + protocolGuardian: ProtocolGuardians.METIS_GUARDIAN, + governanceGuardian: GovernanceGuardians.METIS_GUARDIAN, + oldGuardian: MiscMetis.PROTOCOL_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..f7378d0aa --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Metis} from 'aave-address-book/AaveV3Metis.sol'; +import {MiscMetis} from 'aave-address-book/MiscMetis.sol'; +import {GovernanceV3Metis} from 'aave-address-book/GovernanceV3Metis.sol'; + +import 'forge-std/Test.sol'; +import {AaveV3Metis_RenewalOfAaveGuardian2024_20240708} from './AaveV3Metis_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; + +/** + * @dev Test for AaveV3Metis_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=metis forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV3Metis_RenewalOfAaveGuardian2024_20240708_Test is RenewalV3BaseTest { + AaveV3Metis_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('metis'), 17882779); + proposal = new AaveV3Metis_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Metis_RenewalOfAaveGuardian2024_20240708', + AaveV3Metis.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscMetis.PROTOCOL_GUARDIAN, + protocolGuardian: proposal.PROTOCOL_GUARDIAN(), + governanceGuardian: proposal.GOVERNANCE_GUARDIAN(), + aclManager: AaveV3Metis.ACL_MANAGER, + poolConfigurator: AaveV3Metis.POOL_CONFIGURATOR, + governance: address(0), + payloadsController: address(GovernanceV3Metis.PAYLOADS_CONTROLLER) + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..36ba60674 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; +import {MiscOptimism} from 'aave-address-book/MiscOptimism.sol'; +import {GovernanceV3Optimism} from 'aave-address-book/GovernanceV3Optimism.sol'; + +import {RenewalV3Params, RenewalV3BasePayload} from './RenewalV3BasePayload.sol'; +import {ProtocolGuardians, GovernanceGuardians} from './Guardians.sol'; +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV3Optimism_RenewalOfAaveGuardian2024_20240708 is RenewalV3BasePayload { + constructor() + RenewalV3BasePayload( + RenewalV3Params({ + aclManager: AaveV3Optimism.ACL_MANAGER, + governance: address(0), + payloadsController: address(GovernanceV3Optimism.PAYLOADS_CONTROLLER), + protocolGuardian: ProtocolGuardians.OPTIMISM_GUARDIAN, + governanceGuardian: GovernanceGuardians.OPTIMISM_GUARDIAN, + oldGuardian: MiscOptimism.PROTOCOL_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..34d9389c3 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; +import {MiscOptimism} from 'aave-address-book/MiscOptimism.sol'; +import {GovernanceV3Optimism} from 'aave-address-book/GovernanceV3Optimism.sol'; + +import 'forge-std/Test.sol'; +import {AaveV3Optimism_RenewalOfAaveGuardian2024_20240708} from './AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; + +/** + * @dev Test for AaveV3Optimism_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV3Optimism_RenewalOfAaveGuardian2024_20240708_Test is RenewalV3BaseTest { + AaveV3Optimism_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('optimism'), 123410917); + proposal = new AaveV3Optimism_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Optimism_RenewalOfAaveGuardian2024_20240708', + AaveV3Optimism.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscOptimism.PROTOCOL_GUARDIAN, + protocolGuardian: proposal.PROTOCOL_GUARDIAN(), + governanceGuardian: proposal.GOVERNANCE_GUARDIAN(), + aclManager: AaveV3Optimism.ACL_MANAGER, + poolConfigurator: AaveV3Optimism.POOL_CONFIGURATOR, + governance: address(0), + payloadsController: address(GovernanceV3Optimism.PAYLOADS_CONTROLLER) + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..db5205920 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; +import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol'; +import {GovernanceV3Polygon} from 'aave-address-book/GovernanceV3Polygon.sol'; +import {RenewalV3Params, RenewalV3BasePayload} from './RenewalV3BasePayload.sol'; +import {ProtocolGuardians, GovernanceGuardians} from './Guardians.sol'; +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV3Polygon_RenewalOfAaveGuardian2024_20240708 is RenewalV3BasePayload { + constructor() + RenewalV3BasePayload( + RenewalV3Params({ + aclManager: AaveV3Polygon.ACL_MANAGER, + governance: address(0), + payloadsController: address(GovernanceV3Polygon.PAYLOADS_CONTROLLER), + protocolGuardian: ProtocolGuardians.POLYGON_GUARDIAN, + governanceGuardian: GovernanceGuardians.POLYGON_GUARDIAN, + oldGuardian: MiscPolygon.PROTOCOL_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..ee2cdbe34 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; +import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol'; +import {GovernanceV3Polygon} from 'aave-address-book/GovernanceV3Polygon.sol'; + +import 'forge-std/Test.sol'; +import {AaveV3Polygon_RenewalOfAaveGuardian2024_20240708} from './AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; + +/** + * @dev Test for AaveV3Polygon_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV3Polygon_RenewalOfAaveGuardian2024_20240708_Test is RenewalV3BaseTest { + AaveV3Polygon_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 60023363); + proposal = new AaveV3Polygon_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Polygon_RenewalOfAaveGuardian2024_20240708', + AaveV3Polygon.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscPolygon.PROTOCOL_GUARDIAN, + protocolGuardian: proposal.PROTOCOL_GUARDIAN(), + governanceGuardian: proposal.GOVERNANCE_GUARDIAN(), + aclManager: AaveV3Polygon.ACL_MANAGER, + poolConfigurator: AaveV3Polygon.POOL_CONFIGURATOR, + governance: address(0), + payloadsController: address(GovernanceV3Polygon.PAYLOADS_CONTROLLER) + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.sol new file mode 100644 index 000000000..138ee830d --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; +import {MiscScroll} from 'aave-address-book/MiscScroll.sol'; +import {GovernanceV3Scroll} from 'aave-address-book/GovernanceV3Scroll.sol'; +import {RenewalV3Params, RenewalV3BasePayload} from './RenewalV3BasePayload.sol'; +import {ProtocolGuardians, GovernanceGuardians} from './Guardians.sol'; +/** + * @title Renewal of Aave Guardian 2024 + * @author BGD Labs @bgdlabs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578 + * - Discussion: https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523 + */ +contract AaveV3Scroll_RenewalOfAaveGuardian2024_20240708 is RenewalV3BasePayload { + constructor() + RenewalV3BasePayload( + RenewalV3Params({ + aclManager: AaveV3Scroll.ACL_MANAGER, + governance: address(0), + payloadsController: address(GovernanceV3Scroll.PAYLOADS_CONTROLLER), + protocolGuardian: ProtocolGuardians.SCROLL_GUARDIAN, + governanceGuardian: GovernanceGuardians.SCROLL_GUARDIAN, + oldGuardian: MiscScroll.PROTOCOL_GUARDIAN + }) + ) + {} +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.t.sol new file mode 100644 index 000000000..96a471a72 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; +import {MiscScroll} from 'aave-address-book/MiscScroll.sol'; +import {GovernanceV3Scroll} from 'aave-address-book/GovernanceV3Scroll.sol'; + +import 'forge-std/Test.sol'; +import {AaveV3Scroll_RenewalOfAaveGuardian2024_20240708} from './AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.sol'; +import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; + +/** + * @dev Test for AaveV3Scroll_RenewalOfAaveGuardian2024_20240708 + * command: FOUNDRY_PROFILE=scroll forge test --match-path=src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.t.sol -vv + */ +contract AaveV3Scroll_RenewalOfAaveGuardian2024_20240708_Test is RenewalV3BaseTest { + AaveV3Scroll_RenewalOfAaveGuardian2024_20240708 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('scroll'), 7937778); + proposal = new AaveV3Scroll_RenewalOfAaveGuardian2024_20240708(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Scroll_RenewalOfAaveGuardian2024_20240708', + AaveV3Scroll.POOL, + address(proposal) + ); + } + + /** + * @dev executes the test to check the guardian is updated correctly + */ + function test_guardianUpdate() public { + _checkGuardianUpdate( + GuardianUpdateTestParams({ + proposal: address(proposal), + oldGuardian: MiscScroll.PROTOCOL_GUARDIAN, + protocolGuardian: proposal.PROTOCOL_GUARDIAN(), + governanceGuardian: proposal.GOVERNANCE_GUARDIAN(), + aclManager: AaveV3Scroll.ACL_MANAGER, + poolConfigurator: AaveV3Scroll.POOL_CONFIGURATOR, + governance: address(0), + payloadsController: address(GovernanceV3Scroll.PAYLOADS_CONTROLLER) + }) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/Guardians.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/Guardians.sol new file mode 100644 index 000000000..7ce68d46d --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/Guardians.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +library ProtocolGuardians { + // https://etherscan.io/address/0x2CFe3ec4d5a6811f4B8067F0DE7e47DfA938Aa30 + address public constant ETHEREUM_GUARDIAN = 0x2CFe3ec4d5a6811f4B8067F0DE7e47DfA938Aa30; + + // https://polygonscan.com/address/0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6 + address public constant POLYGON_GUARDIAN = 0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6; + + // https://snowtrace.io/address/0x56C1a4b54921DEA9A344967a8693C7E661D72968 + address public constant AVALANCHE_GUARDIAN = 0x56C1a4b54921DEA9A344967a8693C7E661D72968; + + // https://optimistic.etherscan.io/address/0x56C1a4b54921DEA9A344967a8693C7E661D72968 + address public constant OPTIMISM_GUARDIAN = 0x56C1a4b54921DEA9A344967a8693C7E661D72968; + + // https://arbiscan.io/address/0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6 + address public constant ARBITRUM_GUARDIAN = 0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6; + + // https://basescan.org/address/0x56C1a4b54921DEA9A344967a8693C7E661D72968 + address public constant BASE_GUARDIAN = 0x56C1a4b54921DEA9A344967a8693C7E661D72968; + + // https://gnosisscan.io/address/0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6 + address public constant GNOSIS_GUARDIAN = 0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6; + + // https://scrollscan.com/address/0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6 + address public constant SCROLL_GUARDIAN = 0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6; + + // https://andromeda-explorer.metis.io/address/0x56C1a4b54921DEA9A344967a8693C7E661D72968 + address public constant METIS_GUARDIAN = 0x56C1a4b54921DEA9A344967a8693C7E661D72968; + + // https://bscscan.com/address/0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6 + address public constant BNB_GUARDIAN = 0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6; +} + +library GovernanceGuardians { + // https://etherscan.io/address/0xCe52ab41C40575B072A18C9700091Ccbe4A06710 + address public constant ETHEREUM_GUARDIAN = 0xCe52ab41C40575B072A18C9700091Ccbe4A06710; + + // https://polygonscan.com/address/0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b + address public constant POLYGON_GUARDIAN = 0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b; + + // https://snowtrace.io/address/0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe + address public constant AVALANCHE_GUARDIAN = 0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe; + + // https://optimistic.etherscan.io/address/0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe + address public constant OPTIMISM_GUARDIAN = 0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe; + + // https://arbiscan.io/address/0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b + address public constant ARBITRUM_GUARDIAN = 0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b; + + // https://basescan.org/address/0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe + address public constant BASE_GUARDIAN = 0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe; + + // https://gnosisscan.io/address/0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b + address public constant GNOSIS_GUARDIAN = 0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b; + + // https://scrollscan.com/address/0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b + address public constant SCROLL_GUARDIAN = 0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b; + + // https://andromeda-explorer.metis.io/address/0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe + address public constant METIS_GUARDIAN = 0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe; + + // https://bscscan.com/address/0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b + address public constant BNB_GUARDIAN = 0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b; +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024.md b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024.md new file mode 100644 index 000000000..4839b8e01 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024.md @@ -0,0 +1,103 @@ +--- +title: "Renewal of Aave Guardian 2024" +author: "BGD Labs @bgdlabs" +discussions: "https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578" +--- + +## Simple Summary + +The Aave Guardians are a community-elected group with soft emergency protection permission on the Aave smart contracts. Periodically, the composition of this group undergoes renewals in which members may join, stay, or leave based on community votes. This process has occurred in the past, with the last renewal taking place in 2022. At present, it’s time for another round of renewals to ensure the Aave Guardians continue to embody the evolving interests and needs of the Aave community. + +## Motivation + +The Aave Guardians play a vital role in protecting the Aave Protocol. + +This proposal aims to start a renewal of the aave guardian, allowing for the removal of members who wish to step down & the addition of new members more reflective of the Aave DAO’s current active contributors. + +## Specification + +### Protocol Guardian + +This Guardian is the holder of EMERGENCY_ADMIN role in Aave v3, together with similar role in v2 and surrounding systems. +Given that speed is mandatory in an emergency situation, the members recommended are entities really active within the Aave DAO, for example service providers and delegates. + +Its multi-sig configuration will be a 5-of-9. + +Members (1 representative of each): + +- Chaos Labs (risk service provider). +- Llamarisk (risk service provider). +- Karpatkey (finance service provider). +- Certora (security service provider). +- Tokenlogic (finance service provider). +- BGD Labs (development service provider). +- ACI (growth and business development service provider). +- Ezr3al (Aave DAO delegate). +- Stable Labs (Aave DAO delegate). + +List of created multi-sigs: + +| Network | Address | +| --------- | -------------------------------------------------------------------------------------- | +| Ethereum | https://etherscan.io/address/0x2CFe3ec4d5a6811f4B8067F0DE7e47DfA938Aa30 | +| Polygon | https://polygonscan.com/address/0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6 | +| Avalanche | https://snowtrace.io/address/0x56C1a4b54921DEA9A344967a8693C7E661D72968 | +| Optimism | https://optimistic.etherscan.io/address/0x56C1a4b54921DEA9A344967a8693C7E661D72968 | +| Arbitrum | https://arbiscan.io/address/0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6 | +| Base | https://basescan.org/address/0x56C1a4b54921DEA9A344967a8693C7E661D72968 | +| Gnosis | https://gnosisscan.io/address/0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6 | +| Scroll | https://scrollscan.com/address/0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6 | +| Metis | https://andromeda-explorer.metis.io/address/0x56C1a4b54921DEA9A344967a8693C7E661D72968 | +| BNB | https://bscscan.com/address/0xCb45E82419baeBCC9bA8b1e5c7858e48A3B26Ea6 | + +- for Aave v2 pools `POOL_ADDRESS_PROVIDER.setEmergencyAdmin()` is called. +- for Aave v3 `ACL_MANAGER.addEmergencyAdmin()` is called to add a new guardian and then `ACL_MANAGER.removeEmergencyAdmin()` to remove the existing one. + +### Governance Guardian + +This other Guardian has an even less frequent role: cancel governance proposal whenever detected as malicious or containing mistakes (detected on the on-chain verification stage by Certora). +The rationale of being composed by different members than the Protocol emergency Guardian is that cancellation permissions whenever possible should be held by a different party than protocol-emergency ones. In addition, speed is not as critical as the Protocol emergency Guardian, given that Aave proposals happen during a period of 5 days, and problems can always be detected with enough time-margin. + +Its multi-sig configuration will be a 5-of-9. + +Members proposed (1 representative of each): + +- Fernando (Balancer). +- Mounir (Paraswap) +- Gavi Galloway (Standard Crypto) +- Meltem Demirors (Coinshares) +- Seb (Zapper) +- Roger (Chainlink community) +- Mariano Conti (DeFi OG) +- Marin (Lido) +- Certora (security service provider). In this governance given their role reviewing governance proposals. + +List of created multi-sigs: + +| Network | Address | +| --------- | -------------------------------------------------------------------------------------- | +| Ethereum | https://etherscan.io/address/0xCe52ab41C40575B072A18C9700091Ccbe4A06710 | +| Polygon | https://polygonscan.com/address/0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b | +| Avalanche | https://snowtrace.io/address/0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe | +| Optimism | https://optimistic.etherscan.io/address/0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe | +| Arbitrum | https://arbiscan.io/address/0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b | +| Base | https://basescan.org/address/0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe | +| Gnosis | https://gnosisscan.io/address/0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b | +| Scroll | https://scrollscan.com/address/0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b | +| Metis | https://andromeda-explorer.metis.io/address/0x360c0a69Ed2912351227a0b745f890CB2eBDbcFe | +| BNB | https://bscscan.com/address/0x1A0581dd5C7C3DA4Ba1CDa7e0BcA7286afc4973b | + +- on all the networks `PAYLOADS_CONTROLLER.updateGuardian()` is called to update the guardian for payloads controller. +- only on Ethereum `GOVERNANCE.updateGuardian()` is called update the guardian for the governance core. + +## References + +- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.sol), [AaveV2EthereumAMM](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.sol) +- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV2EthereumAMM](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578) +- [Discussion](https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol new file mode 100644 index 000000000..f79e65565 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol @@ -0,0 +1,362 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, MetisScript, BaseScript, GnosisScript, ScrollScript, BNBScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708} from './AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708} from './AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV2Polygon_RenewalOfAaveGuardian2024_20240708} from './AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708} from './AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708} from './AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV3Polygon_RenewalOfAaveGuardian2024_20240708} from './AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708} from './AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV3Optimism_RenewalOfAaveGuardian2024_20240708} from './AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708} from './AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV3Metis_RenewalOfAaveGuardian2024_20240708} from './AaveV3Metis_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV3Base_RenewalOfAaveGuardian2024_20240708} from './AaveV3Base_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708} from './AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV3Scroll_RenewalOfAaveGuardian2024_20240708} from './AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.sol'; +import {AaveV3BNB_RenewalOfAaveGuardian2024_20240708} from './AaveV3BNB_RenewalOfAaveGuardian2024_20240708.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/RenewalOfAaveGuardian2024_20240708.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708).creationCode + ); + address payload1 = GovV3Helpers.deployDeterministic( + type(AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708).creationCode + ); + address payload2 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](3); + actions[0] = GovV3Helpers.buildAction(payload0); + actions[1] = GovV3Helpers.buildAction(payload1); + actions[2] = GovV3Helpers.buildAction(payload2); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Polygon + * deploy-command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:DeployPolygon chain=polygon + * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/RenewalOfAaveGuardian2024_20240708.s.sol/137/run-latest.json + */ +contract DeployPolygon is PolygonScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Polygon_RenewalOfAaveGuardian2024_20240708).creationCode + ); + address payload1 = GovV3Helpers.deployDeterministic( + type(AaveV3Polygon_RenewalOfAaveGuardian2024_20240708).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](2); + actions[0] = GovV3Helpers.buildAction(payload0); + actions[1] = GovV3Helpers.buildAction(payload1); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Avalanche + * deploy-command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:DeployAvalanche chain=avalanche + * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/RenewalOfAaveGuardian2024_20240708.s.sol/43114/run-latest.json + */ +contract DeployAvalanche is AvalancheScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708).creationCode + ); + address payload1 = GovV3Helpers.deployDeterministic( + type(AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](2); + actions[0] = GovV3Helpers.buildAction(payload0); + actions[1] = GovV3Helpers.buildAction(payload1); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Optimism + * deploy-command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:DeployOptimism chain=optimism + * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/RenewalOfAaveGuardian2024_20240708.s.sol/10/run-latest.json + */ +contract DeployOptimism is OptimismScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Optimism_RenewalOfAaveGuardian2024_20240708).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Arbitrum + * deploy-command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:DeployArbitrum chain=arbitrum + * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/RenewalOfAaveGuardian2024_20240708.s.sol/42161/run-latest.json + */ +contract DeployArbitrum is ArbitrumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Metis + * deploy-command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:DeployMetis chain=metis + * verify-command: FOUNDRY_PROFILE=metis npx catapulta-verify -b broadcast/RenewalOfAaveGuardian2024_20240708.s.sol/1088/run-latest.json + */ +contract DeployMetis is MetisScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Metis_RenewalOfAaveGuardian2024_20240708).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Base + * deploy-command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:DeployBase chain=base + * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/RenewalOfAaveGuardian2024_20240708.s.sol/8453/run-latest.json + */ +contract DeployBase is BaseScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Base_RenewalOfAaveGuardian2024_20240708).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Gnosis + * deploy-command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:DeployGnosis chain=gnosis + * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/RenewalOfAaveGuardian2024_20240708.s.sol/100/run-latest.json + */ +contract DeployGnosis is GnosisScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Scroll + * deploy-command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:DeployScroll chain=scroll + * verify-command: FOUNDRY_PROFILE=scroll npx catapulta-verify -b broadcast/RenewalOfAaveGuardian2024_20240708.s.sol/534352/run-latest.json + */ +contract DeployScroll is ScrollScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Scroll_RenewalOfAaveGuardian2024_20240708).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy BNB + * deploy-command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:DeployBNB chain=bnb + * verify-command: FOUNDRY_PROFILE=bnb npx catapulta-verify -b broadcast/RenewalOfAaveGuardian2024_20240708.s.sol/56/run-latest.json + */ +contract DeployBNB is BNBScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3BNB_RenewalOfAaveGuardian2024_20240708).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](10); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](3); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708).creationCode + ); + actionsEthereum[1] = GovV3Helpers.buildAction( + type(AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708).creationCode + ); + actionsEthereum[2] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](2); + actionsPolygon[0] = GovV3Helpers.buildAction( + type(AaveV2Polygon_RenewalOfAaveGuardian2024_20240708).creationCode + ); + actionsPolygon[1] = GovV3Helpers.buildAction( + type(AaveV3Polygon_RenewalOfAaveGuardian2024_20240708).creationCode + ); + payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](2); + actionsAvalanche[0] = GovV3Helpers.buildAction( + type(AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708).creationCode + ); + actionsAvalanche[1] = GovV3Helpers.buildAction( + type(AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708).creationCode + ); + payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); + actionsOptimism[0] = GovV3Helpers.buildAction( + type(AaveV3Optimism_RenewalOfAaveGuardian2024_20240708).creationCode + ); + payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsArbitrum[0] = GovV3Helpers.buildAction( + type(AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708).creationCode + ); + payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsMetis[0] = GovV3Helpers.buildAction( + type(AaveV3Metis_RenewalOfAaveGuardian2024_20240708).creationCode + ); + payloads[5] = GovV3Helpers.buildMetisPayload(vm, actionsMetis); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction( + type(AaveV3Base_RenewalOfAaveGuardian2024_20240708).creationCode + ); + payloads[6] = GovV3Helpers.buildBasePayload(vm, actionsBase); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsGnosis[0] = GovV3Helpers.buildAction( + type(AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708).creationCode + ); + payloads[7] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); + actionsScroll[0] = GovV3Helpers.buildAction( + type(AaveV3Scroll_RenewalOfAaveGuardian2024_20240708).creationCode + ); + payloads[8] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBNB[0] = GovV3Helpers.buildAction( + type(AaveV3BNB_RenewalOfAaveGuardian2024_20240708).creationCode + ); + payloads[9] = GovV3Helpers.buildBNBPayload(vm, actionsBNB); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024.md' + ) + ); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BasePayload.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BasePayload.sol new file mode 100644 index 000000000..fc2e02184 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BasePayload.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {ILendingPoolAddressesProvider} from 'aave-address-book/AaveV2.sol'; + +struct RenewalV2Params { + ILendingPoolAddressesProvider addressesProvider; + address guardian; +} + +contract RenewalV2BasePayload is IProposalGenericExecutor { + ILendingPoolAddressesProvider public immutable ADDRESSES_PROVIDER; + address public immutable GUARDIAN; + + constructor(RenewalV2Params memory params) { + ADDRESSES_PROVIDER = params.addressesProvider; + GUARDIAN = params.guardian; + } + + function execute() external { + ADDRESSES_PROVIDER.setEmergencyAdmin(GUARDIAN); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BaseTest.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BaseTest.sol new file mode 100644 index 000000000..2d24023d0 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BaseTest.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {ILendingPoolAddressesProvider, ILendingPoolConfigurator} from 'aave-address-book/AaveV2.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase} from 'aave-helpers/ProtocolV2TestBase.sol'; + +struct GuardianUpdateTestParams { + address proposal; + address oldGuardian; + address newGuardian; + ILendingPoolAddressesProvider addressesProvider; + ILendingPoolConfigurator poolConfigurator; +} + +contract RenewalV2BaseTest is ProtocolV2TestBase { + function _checkGuardianUpdate(GuardianUpdateTestParams memory params) internal { + // check old guardian + assertEq(params.addressesProvider.getEmergencyAdmin(), params.oldGuardian); + + // execute + executePayload(vm, params.proposal); + + // check new guardian + assertEq(params.addressesProvider.getEmergencyAdmin(), params.newGuardian); + + // check action + vm.prank(params.newGuardian); + params.poolConfigurator.setPoolPause(true); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BasePayload.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BasePayload.sol new file mode 100644 index 000000000..53d23c4e2 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BasePayload.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IACLManager} from 'aave-address-book/AaveV3.sol'; +import {IOwnableWithGuardian} from './interfaces/IOwnableWithGuardian.sol'; + +struct RenewalV3Params { + IACLManager aclManager; + address governance; + address payloadsController; + address protocolGuardian; + address governanceGuardian; + address oldGuardian; +} + +contract RenewalV3BasePayload is IProposalGenericExecutor { + IACLManager public immutable ACL_MANAGER; + address public immutable GOVERNANCE; + address public immutable PAYLOADS_CONTROLLER; + address public immutable PROTOCOL_GUARDIAN; + address public immutable GOVERNANCE_GUARDIAN; + address public immutable OLD_GUARDIAN; + + constructor(RenewalV3Params memory params) { + ACL_MANAGER = params.aclManager; + GOVERNANCE = params.governance; + PAYLOADS_CONTROLLER = params.payloadsController; + PROTOCOL_GUARDIAN = params.protocolGuardian; + GOVERNANCE_GUARDIAN = params.governanceGuardian; + OLD_GUARDIAN = params.oldGuardian; + } + + function execute() external { + ACL_MANAGER.removeEmergencyAdmin(OLD_GUARDIAN); + ACL_MANAGER.addEmergencyAdmin(PROTOCOL_GUARDIAN); + + if (GOVERNANCE != address(0)) { + IOwnableWithGuardian(GOVERNANCE).updateGuardian(GOVERNANCE_GUARDIAN); + } + + IOwnableWithGuardian(PAYLOADS_CONTROLLER).updateGuardian(GOVERNANCE_GUARDIAN); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BaseTest.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BaseTest.sol new file mode 100644 index 000000000..eeaabcab9 --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BaseTest.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IACLManager, IPoolConfigurator} from 'aave-address-book/AaveV3.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {IOwnableWithGuardian} from './interfaces/IOwnableWithGuardian.sol'; + +struct GuardianUpdateTestParams { + address proposal; + address oldGuardian; + address protocolGuardian; + address governanceGuardian; + IACLManager aclManager; + address governance; + address payloadsController; + IPoolConfigurator poolConfigurator; +} + +contract RenewalV3BaseTest is ProtocolV3TestBase { + event GuardianUpdated(address oldGuardian, address newGuardian); + + function _checkGuardianUpdate(GuardianUpdateTestParams memory params) internal { + // check old protocol guardian + assertTrue(params.aclManager.isEmergencyAdmin(params.oldGuardian)); + + // check old governance guardian + if (params.governance != address(0)) { + assertEq(IOwnableWithGuardian(params.governance).guardian(), params.oldGuardian); + } + + assertEq(IOwnableWithGuardian(params.payloadsController).guardian(), params.oldGuardian); + + // check governance gurdian update events + if (params.governance != address(0)) { + vm.expectEmit(true, true, false, false); + emit GuardianUpdated(params.oldGuardian, params.governanceGuardian); + } + + vm.expectEmit(true, true, false, false); + emit GuardianUpdated(params.oldGuardian, params.governanceGuardian); + + // execute + executePayload(vm, params.proposal); + + // check protocol guardian upate + assertFalse(params.aclManager.isEmergencyAdmin(params.oldGuardian)); + assertTrue(params.aclManager.isEmergencyAdmin(params.protocolGuardian)); + + // check action + vm.startPrank(params.protocolGuardian); + params.poolConfigurator.setPoolPause(true); + vm.stopPrank(); + + // check governance guardian update + if (params.governance != address(0)) { + assertEq(IOwnableWithGuardian(params.governance).guardian(), params.governanceGuardian); + } + assertEq(IOwnableWithGuardian(params.payloadsController).guardian(), params.governanceGuardian); + } +} diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/config.ts b/src/20240708_Multi_RenewalOfAaveGuardian2024/config.ts new file mode 100644 index 000000000..4975c77df --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/config.ts @@ -0,0 +1,45 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + author: 'BGD Labs @bgdlabs', + pools: [ + 'AaveV2Ethereum', + 'AaveV2EthereumAMM', + 'AaveV2Polygon', + 'AaveV2Avalanche', + 'AaveV3Ethereum', + 'AaveV3Polygon', + 'AaveV3Avalanche', + 'AaveV3Optimism', + 'AaveV3Arbitrum', + 'AaveV3Metis', + 'AaveV3Base', + 'AaveV3Gnosis', + 'AaveV3Scroll', + 'AaveV3BNB', + ], + title: 'Renewal of Aave Guardian 2024', + shortName: 'RenewalOfAaveGuardian2024', + date: '20240708', + discussion: 'https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV2Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20263579}}, + AaveV2EthereumAMM: {configs: {OTHERS: {}}, cache: {blockNumber: 20263579}}, + AaveV2Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 59118568}}, + AaveV2Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 47718398}}, + AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20263580}}, + AaveV3Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 59118571}}, + AaveV3Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 47718399}}, + AaveV3Optimism: {configs: {OTHERS: {}}, cache: {blockNumber: 122432287}}, + AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 230134750}}, + AaveV3Metis: {configs: {OTHERS: {}}, cache: {blockNumber: 17597358}}, + AaveV3Base: {configs: {OTHERS: {}}, cache: {blockNumber: 16837004}}, + AaveV3Gnosis: {configs: {OTHERS: {}}, cache: {blockNumber: 34865326}}, + AaveV3Scroll: {configs: {OTHERS: {}}, cache: {blockNumber: 7253105}}, + AaveV3BNB: {configs: {OTHERS: {}}, cache: {blockNumber: 40300607}}, + }, +}; diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/interfaces/IOwnableWithGuardian.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/interfaces/IOwnableWithGuardian.sol new file mode 100644 index 000000000..e8b6e71bb --- /dev/null +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/interfaces/IOwnableWithGuardian.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IOwnableWithGuardian { + function guardian() external view returns (address); + + function updateGuardian(address protocolGuardian) external; +} From 83ea7faf13de2d2dadb223794d1af6647d7ddae3 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Fri, 2 Aug 2024 15:22:22 +0000 Subject: [PATCH 20/68] fix(cache): automated cache update [skip ci] --- .../RenewalOfAaveGuardian2024.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024.md b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024.md index 4839b8e01..a106d37a0 100644 --- a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024.md +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024.md @@ -93,8 +93,8 @@ List of created multi-sigs: ## References -- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.sol), [AaveV2EthereumAMM](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.sol) -- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV2EthereumAMM](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.t.sol) +- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.sol), [AaveV2EthereumAMM](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.sol) +- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV2EthereumAMM](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2EthereumAMM_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Polygon_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV2Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Ethereum_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Polygon_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Avalanche_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Optimism_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Arbitrum_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Metis_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Base_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Scroll_RenewalOfAaveGuardian2024_20240708.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/c63bac4965415f43fa80999dfe235a3dc003a168/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3BNB_RenewalOfAaveGuardian2024_20240708.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x003ce30676805f71e5b356745fb3f01e5f82b8d1655750aaef46c7ed4a0a3578) - [Discussion](https://governance.aave.com/t/arfc-renewal-of-aave-guardian-2024/17523) From a8bf2c2c5dda23196590252812ef6cbfbd8e8996 Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 5 Aug 2024 10:53:14 +0200 Subject: [PATCH 21/68] fix: updated helpers with new address book version (#416) * fix: updated helpers with new address book version * fix: add new address book version --- lib/aave-helpers | 2 +- package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/aave-helpers b/lib/aave-helpers index 8839921d7..989c0363b 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit 8839921d767fd9d60497673d6850e01c1922aa15 +Subproject commit 989c0363bca0937433adff03333514ec12faa1d8 diff --git a/package.json b/package.json index ca5037032..37b755e5c 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "vitest": "^2.0.4" }, "dependencies": { - "@bgd-labs/aave-address-book": "^3.0.2", + "@bgd-labs/aave-address-book": "^3.0.4", "@bgd-labs/aave-cli": "0.16.2", "@bgd-labs/js-utils": "^1.4.2", "@inquirer/prompts": "^3.3.0", diff --git a/yarn.lock b/yarn.lock index a6a1836cb..2f0a7b90f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -47,10 +47,10 @@ resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.0.tgz#a75cf2e217688e63728bec1b9c956b0134bc647c" integrity sha512-ALT9T/aIZ7BztozWvGhjVKGAEfe6wLhop0z+0ZSwAdyHXrBfpXXDZa9siHNtOZfNojPVMPvkpgsiPnFmDD8OJQ== -"@bgd-labs/aave-address-book@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.2.tgz#fd870b17f312eaa62ec6befcf2e31977f089910c" - integrity sha512-NJundvxwLlk+CCmSkzO/5E5szW7HOaJ3HIfKrsoreIIXRj7nLuyQ/V5m9XURZm43UxCg5ohWWk5zHIQvw1NvYg== +"@bgd-labs/aave-address-book@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.4.tgz#3aaad1c4ddd7947c689e06f6d49b0596e8470428" + integrity sha512-AcddA1Ru/r47WO+mE8L3G9Z4qr5pkZleQvdO51sxu/+N77ncghQKE39ZegovPkaFouO5GLUxLLRgR9nHVZNjlg== "@bgd-labs/aave-cli@0.16.2": version "0.16.2" From 522663af487ff6c44632fa3ff0a16c62e8451820 Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 5 Aug 2024 15:17:25 +0200 Subject: [PATCH 22/68] feat: a.DI Shuffle update (#377) * feat: a.DI Shuffle update * fix: added bandwidth table * fix: Added deployment table and missing information * fix: added links * fix: updated md text * fix: add correct import * fix: correctly checksummed addresses --- .../ADIShuffleUpdate.md | 84 +++++ .../ADIShuffleUpdate_20240709.s.sol | 290 ++++++++++++++++++ src/20240709_Multi_ADIShuffleUpdate/config.ts | 36 +++ 3 files changed, 410 insertions(+) create mode 100644 src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate.md create mode 100644 src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol create mode 100644 src/20240709_Multi_ADIShuffleUpdate/config.ts diff --git a/src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate.md b/src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate.md new file mode 100644 index 000000000..6264b6102 --- /dev/null +++ b/src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate.md @@ -0,0 +1,84 @@ +--- +title: "ADI Shuffle Update" +author: "BGD Labs @bgdlabs" +discussions: "https://governance.aave.com/t/bgd-a-di-aave-delivery-infrastructure-v1-1/17838" +--- + +## Simple Summary + +Proposal to update a.DI with the new Shuffle mechanism, included into the v1.1 release presented [HERE](https://governance.aave.com/t/bgd-a-di-aave-delivery-infrastructure-v1-1/17838). + +## Motivation + +a.DI v1 has one constraint, that even if not major, limits the scalability of the system: whenever a new underlying bridge provider is added to the set of a communication path, each message on that path will be passed through all the bridges, no matter if the consensus required on the recipient side is lower. +For example, currently all messages Ethereum → Polygon are sent via CCIP, LayerZero, Hyperlane, and the Polygon native bridge, even if the consensus required on the Polygon side is 3-of-4. This means that even if consensus was reached already before the slowest bridge delivers the message (Polygon native in this case), the cost incurred is of the whole set of 4 bridges, not only 3. + +a.DI v1.1 (and more specifically its Shuffling feature) introduces a mechanism for, whenever a message needs to be sent, the system choosing pseudo-randomly a sub-set of all the available bridges for that specific path (e.g. Ethereum → Polygon) with optimal bandwidth size, +and only forwards the message via those bridges. + +By doing this: + +- Cost is reduced on all those configurations with optimal bandwidth < bandwidth. +- Any bottleneck to add new underlying bridge providers is removed, as increasing bandwidth doesn’t really have any effect on the optimal bandwidth of the path. +- Security-wise, the pseudo-random nature of the shuffling mechanism improves the system, in the line of other rotation-based systems like validators-selection in PoS blockchains. + +## Specification + +This proposal upgrades a.DI on every supported network with the new implementation containing the Shuffle mechanism; afterwards, it configures the new parameters required. + +The upgrade adds a new `_optimalBandwidthByChain` mapping on CrossChainForwarder that will store the optimal bandwidth for every supported chain. This will be used to determine how many adapters will be used to pass a message to a destination network + +The OptimalBandwidth used to update a.DI will be: + +| Origin Network | Ethereum | Polygon | Avalanche | Arbitrum | Optimism | Base | Gnosis | Metis | Binance | Scroll | +| -------------- | -------- | ------- | --------- | -------- | -------- | ---- | ------ | ----- | ------- | ------ | +| Ethereum | - | 4 | 2 | 1 | 1 | 1 | 2 | 1 | 2 | 1 | +| Polygon | 3 | - | - | - | - | - | - | - | - | - | +| Avalanche | 2 | - | - | - | - | - | - | - | - | - | +| Arbitrum | - | - | - | - | - | - | - | - | - | - | +| Optimism | - | - | - | - | - | - | - | - | - | - | +| Base | - | - | - | - | - | - | - | - | - | - | +| Gnosis | - | - | - | - | - | - | - | - | - | - | +| Metis | - | - | - | - | - | - | - | - | - | - | +| Binance | - | - | - | - | - | - | - | - | - | - | +| Scroll | - | - | - | - | - | - | - | - | - | - | + +The method used to initialize a.DI with the new bandwidth configurations is: + +```solidity +function initializeRevision( + OptimalBandwidthByChain[] memory optimalBandwidthByChain +) external reinitializer(3) { + _updateOptimalBandwidthByChain(optimalBandwidthByChain); +} +``` + +The new CrossChainController implementations for every supported network are the following: + +| Network | New CCC implementation with Shuffle support | +| --------- | -------------------------------------------------------------------------------------------------------------------------------- | +| Ethereum | [0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d](https://etherscan.io/address/0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d) | +| Polygon | [0x191f2bd27f1ce4318f9a0c6b82688c66cd7ad3ba](https://polygonscan.com/address/0x191f2bd27f1ce4318f9a0c6b82688c66cd7ad3ba) | +| Avalanche | [0x23f5150ace7382c7160a2192c3f9f77444f420d9](https://snowscan.xyz/address/0x23f5150ace7382c7160a2192c3f9f77444f420d9) | +| Arbitrum | [0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d](https://arbiscan.io/address/0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d) | +| Optimism | [0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d](https://optimistic.etherscan.io/address/0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d) | +| Base | [0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d](https://basescan.org/address/0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d) | +| Gnosis | [0x88e9f8e208ba5ae72b56861d63cbf70fd2320f5c](https://gnosisscan.io/address/0x88e9f8e208ba5ae72b56861d63cbf70fd2320f5c) | +| Metis | [0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d](https://explorer.metis.io/address/0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d) | +| Binance | [0xda81fb369942e43d4797e79f2c4cbef9fe58b90a](https://bscscan.com/address/0xda81fb369942e43d4797e79f2c4cbef9fe58b90a) | +| Scroll | [0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d](https://scrollscan.com/address/0x92f4736b72d131d836b3e4d4c3c23fe53150ce4d) | + +## Security + +Certora audit report on the Shuffle update can be found [here](https://github.com/bgd-labs/aave-delivery-infrastructure/blob/3c842f4d0a484ea8f574ab31c4a50026e16691ec/security/certora/reports/aDI-Shuffle.pdf) + +## References + +- Implementation: CrossChainController Shuffle update payloads [implementation](https://github.com/bgd-labs/adi-deploy/blob/e33318258fedc3317949bb9f8c7c57966a3e3197/src/ccc_payloads/shuffle/ShuffleCCCUpdatePayload.sol) +- Tests: CrossChainController Shuffle update [tests](https://github.com/bgd-labs/adi-deploy/blob/e33318258fedc3317949bb9f8c7c57966a3e3197/tests/ccc/shuffle/ShufflePayloadTests.t.sol) +- Diffs: CrossChainController implementation address change [diffs](https://github.com/bgd-labs/adi-deploy/blob/e33318258fedc3317949bb9f8c7c57966a3e3197/diffs) +- [Discussion](https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/39) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol b/src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol new file mode 100644 index 000000000..90df36401 --- /dev/null +++ b/src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol @@ -0,0 +1,290 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, MetisScript, BaseScript, GnosisScript, ScrollScript, BNBScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; + +library Payloads { + address public constant AaveV3Ethereum = 0xf50a100F8F60C3dC01a98a15231218accB3150C1; + address public constant AaveV3Polygon = 0x5056B08129D788344F0BDbA4652E936c24229D9a; + address public constant AaveV3Avalanche = 0xFAb9E283d3bf91Cb7732C869F31D97C9A7D1AEAB; + address public constant AaveV3Optimism = 0x896607f9757B68A5432b8B8f2D79abdC2325d91C; + address public constant AaveV3Arbitrum = 0x7ED073d35d8a1c6561102d75FA7aF0752a5ddC6e; + address public constant AaveV3Metis = 0x82E898b0CDC997b44C704E42574906136E7B5fAd; + address public constant AaveV3Base = 0xc45BB75DB1bF012F9E06192aeA7D338FBe3271D8; + address public constant AaveV3Gnosis = 0x050bE7317a8D015E558E68A99e894375B00Bd723; + address public constant AaveV3Scroll = 0x97d2bBBe4F87783D33FCabf56481c925C6c897e6; + address public constant AaveV3BNB = 0x0853e4272f8AE9b8Be9439490df8Fb5A5c82DBF0; +} + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ADIShuffleUpdate_20240709.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = Payloads.AaveV3Ethereum; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Polygon + * deploy-command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:DeployPolygon chain=polygon + * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/ADIShuffleUpdate_20240709.s.sol/137/run-latest.json + */ +contract DeployPolygon is PolygonScript { + function run() external broadcast { + // deploy payloads + address payload0 = Payloads.AaveV3Polygon; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Avalanche + * deploy-command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:DeployAvalanche chain=avalanche + * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/ADIShuffleUpdate_20240709.s.sol/43114/run-latest.json + */ +contract DeployAvalanche is AvalancheScript { + function run() external broadcast { + // deploy payloads + address payload0 = Payloads.AaveV3Avalanche; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Optimism + * deploy-command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:DeployOptimism chain=optimism + * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/ADIShuffleUpdate_20240709.s.sol/10/run-latest.json + */ +contract DeployOptimism is OptimismScript { + function run() external broadcast { + // deploy payloads + address payload0 = Payloads.AaveV3Optimism; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Arbitrum + * deploy-command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:DeployArbitrum chain=arbitrum + * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/ADIShuffleUpdate_20240709.s.sol/42161/run-latest.json + */ +contract DeployArbitrum is ArbitrumScript { + function run() external broadcast { + // deploy payloads + address payload0 = Payloads.AaveV3Arbitrum; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Metis + * deploy-command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:DeployMetis chain=metis + * verify-command: FOUNDRY_PROFILE=metis npx catapulta-verify -b broadcast/ADIShuffleUpdate_20240709.s.sol/1088/run-latest.json + */ +contract DeployMetis is MetisScript { + function run() external broadcast { + // deploy payloads + address payload0 = Payloads.AaveV3Metis; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Base + * deploy-command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:DeployBase chain=base + * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/ADIShuffleUpdate_20240709.s.sol/8453/run-latest.json + */ +contract DeployBase is BaseScript { + function run() external broadcast { + // deploy payloads + address payload0 = Payloads.AaveV3Base; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Gnosis + * deploy-command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:DeployGnosis chain=gnosis + * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/ADIShuffleUpdate_20240709.s.sol/100/run-latest.json + */ +contract DeployGnosis is GnosisScript { + function run() external broadcast { + // deploy payloads + address payload0 = Payloads.AaveV3Gnosis; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Scroll + * deploy-command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:DeployScroll chain=scroll + * verify-command: FOUNDRY_PROFILE=scroll npx catapulta-verify -b broadcast/ADIShuffleUpdate_20240709.s.sol/534352/run-latest.json + */ +contract DeployScroll is ScrollScript { + function run() external broadcast { + // deploy payloads + address payload0 = Payloads.AaveV3Scroll; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy BNB + * deploy-command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:DeployBNB chain=bnb + * verify-command: FOUNDRY_PROFILE=bnb npx catapulta-verify -b broadcast/ADIShuffleUpdate_20240709.s.sol/56/run-latest.json + */ +contract DeployBNB is BNBScript { + function run() external broadcast { + // deploy payloads + address payload0 = Payloads.AaveV3BNB; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](10); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction(Payloads.AaveV3Ethereum); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); + actionsPolygon[0] = GovV3Helpers.buildAction(Payloads.AaveV3Polygon); + payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); + actionsAvalanche[0] = GovV3Helpers.buildAction(Payloads.AaveV3Avalanche); + payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); + actionsOptimism[0] = GovV3Helpers.buildAction(Payloads.AaveV3Optimism); + payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsArbitrum[0] = GovV3Helpers.buildAction(Payloads.AaveV3Arbitrum); + payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsMetis[0] = GovV3Helpers.buildAction(Payloads.AaveV3Metis); + payloads[5] = GovV3Helpers.buildMetisPayload(vm, actionsMetis); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction(Payloads.AaveV3Base); + payloads[6] = GovV3Helpers.buildBasePayload(vm, actionsBase); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsGnosis[0] = GovV3Helpers.buildAction(Payloads.AaveV3Gnosis); + payloads[7] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); + actionsScroll[0] = GovV3Helpers.buildAction(Payloads.AaveV3Scroll); + payloads[8] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBNB[0] = GovV3Helpers.buildAction(Payloads.AaveV3BNB); + payloads[9] = GovV3Helpers.buildBNBPayload(vm, actionsBNB); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile(vm, 'src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate.md') + ); + } +} diff --git a/src/20240709_Multi_ADIShuffleUpdate/config.ts b/src/20240709_Multi_ADIShuffleUpdate/config.ts new file mode 100644 index 000000000..2556abe89 --- /dev/null +++ b/src/20240709_Multi_ADIShuffleUpdate/config.ts @@ -0,0 +1,36 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + author: 'BGD Labs @bgdlabs', + pools: [ + 'AaveV3Ethereum', + 'AaveV3Polygon', + 'AaveV3Avalanche', + 'AaveV3Optimism', + 'AaveV3Arbitrum', + 'AaveV3Metis', + 'AaveV3Base', + 'AaveV3Gnosis', + 'AaveV3Scroll', + 'AaveV3BNB', + ], + title: 'ADI Shuffle Update', + shortName: 'ADIShuffleUpdate', + date: '20240709', + discussion: 'https://governance.aave.com/t/bgd-a-di-aave-delivery-infrastructure-v1-1/17838', + snapshot: '', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20269340}}, + AaveV3Polygon: {configs: {OTHERS: {}}, cache: {blockNumber: 59151167}}, + AaveV3Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 47751817}}, + AaveV3Optimism: {configs: {OTHERS: {}}, cache: {blockNumber: 122467132}}, + AaveV3Arbitrum: {configs: {OTHERS: {}}, cache: {blockNumber: 230412382}}, + AaveV3Metis: {configs: {OTHERS: {}}, cache: {blockNumber: 17607520}}, + AaveV3Base: {configs: {OTHERS: {}}, cache: {blockNumber: 16871856}}, + AaveV3Gnosis: {configs: {OTHERS: {}}, cache: {blockNumber: 34878865}}, + AaveV3Scroll: {configs: {OTHERS: {}}, cache: {blockNumber: 7276334}}, + AaveV3BNB: {configs: {OTHERS: {}}, cache: {blockNumber: 40323746}}, + }, +}; From d541744da4859996032914b5f1771ff46bd49ab2 Mon Sep 17 00:00:00 2001 From: eyalovadya <38078004+eyalovadya@users.noreply.github.com> Date: Tue, 6 Aug 2024 13:43:17 +0300 Subject: [PATCH 23/68] Risk Parameter Updates - Increase USDe Debt Ceiling on V3 Ethereum (#414) --- ...eDebtCeilingOnV3Ethereum_20240801_after.md | 25 ++++++++ ...seUSDeDebtCeilingOnV3Ethereum_20240801.sol | 37 +++++++++++ ...USDeDebtCeilingOnV3Ethereum_20240801.t.sol | 45 ++++++++++++++ ...atesIncreaseUSDeDebtCeilingOnV3Ethereum.md | 59 ++++++++++++++++++ ...USDeDebtCeilingOnV3Ethereum_20240801.s.sol | 62 +++++++++++++++++++ .../config.ts | 32 ++++++++++ 6 files changed, 260 insertions(+) create mode 100644 diffs/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801_before_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801_after.md create mode 100644 src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol create mode 100644 src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol create mode 100644 src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum.md create mode 100644 src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol create mode 100644 src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/config.ts diff --git a/diffs/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801_before_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801_after.md b/diffs/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801_before_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801_after.md new file mode 100644 index 000000000..1cc9ece39 --- /dev/null +++ b/diffs/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801_before_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDe ([0x4c9EDD5852cd905f086C759E8383e09bff1E68B3](https://etherscan.io/address/0x4c9EDD5852cd905f086C759E8383e09bff1E68B3)) + +| description | value before | value after | +| --- | --- | --- | +| debtCeiling | 40,000,000 $ [4000000000] | 50,000,000 $ [5000000000] | + + +## Raw diff + +```json +{ + "reserves": { + "0x4c9EDD5852cd905f086C759E8383e09bff1E68B3": { + "debtCeiling": { + "from": 4000000000, + "to": 5000000000 + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol new file mode 100644 index 000000000..675eb1d7b --- /dev/null +++ b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Risk Parameter Updates - Increase USDe Debt Ceiling on V3 Ethereum + * @author Chaos Labs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xea1012aaf1fe660148cfe6265cbadf23b19bb44af609caaa51ab8d7194259c28 + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-increase-usde-debt-ceiling-on-v3-ethereum-07-22-2024/18325 + */ +contract AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801 is + AaveV3PayloadEthereum +{ + function collateralsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.CollateralUpdate[] memory) + { + IAaveV3ConfigEngine.CollateralUpdate[] + memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1); + + collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({ + asset: AaveV3EthereumAssets.USDe_UNDERLYING, + ltv: EngineFlags.KEEP_CURRENT, + liqThreshold: EngineFlags.KEEP_CURRENT, + liqBonus: EngineFlags.KEEP_CURRENT, + debtCeiling: 50_000_000, + liqProtocolFee: EngineFlags.KEEP_CURRENT + }); + + return collateralUpdate; + } +} diff --git a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol new file mode 100644 index 000000000..b651bdfc1 --- /dev/null +++ b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801} from './AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol'; + +/** + * @dev Test for AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol -vv + */ +contract AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801_Test is + ProtocolV3TestBase +{ + AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20432284); + proposal = new AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest( + 'AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801', + AaveV3Ethereum.POOL, + address(proposal) + ); + + address[] memory assetsChanged = new address[](1); + assetsChanged[0] = AaveV3EthereumAssets.USDe_UNDERLYING; + + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + ReserveConfig memory config = _findReserveConfig( + allConfigsAfter, + AaveV3EthereumAssets.USDe_UNDERLYING + ); + assertEq(config.debtCeiling, 50_000_000_00); + } +} diff --git a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum.md b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum.md new file mode 100644 index 000000000..f623f5bd3 --- /dev/null +++ b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum.md @@ -0,0 +1,59 @@ +--- +title: "Risk Parameter Updates - Increase USDe Debt Ceiling on V3 Ethereum" +author: "Chaos Labs" +discussions: "https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-increase-usde-debt-ceiling-on-v3-ethereum-07-22-2024/18325" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0xea1012aaf1fe660148cfe6265cbadf23b19bb44af609caaa51ab8d7194259c28" +--- + +## Simple Summary + +A proposal to increase USDe’s debt ceiling. + +## Motivation + +USDe has reached its debt ceiling following rapid deposits and borrows against these deposits on Ethereum. + +### Positions Analysis + +There is currently one major user utilizing USDe as collateral on V3 Ethereum. +Account 0x8607a7d180de23645db594d90621d837749408d5 is borrowing $33.26 M in stables (USDC and USDT) against his $45.72 M in USDe. The user’s current health score is 1.03. + +While this market is heavily concentrated, simulated transactions indicate that this position could be liquidated efficiently. + +Borrows of USDe are more distributed and are against a variety of collateral. + +### Liquidity + +USDe liquidity has improved since the asset’s listing, with especially large growth on Curve, related to ENA token incentives provided in multiple pools. + +It is critical to note that on-chain liquidity — as well as the ratio of sUSDe to USDe, amongst other things — is being shaped by ongoing ENA token incentives. While there is still ongoing speculative activity, our recommendations remain cautious, given that dynamics could change rapidly following this period of speculative activity. + +We also note that USDe grew rapidly through May, reaching a high of over 3.6B, but has since declined to 3.4B. The reserve fund has also grown, though its size relative to USDe’s supply has fallen since the asset was listed, from 1.34% of total USDe supply to 1.33%. + +We also note that the reserve fund has not grown in accordance with our recommendations following a detailed assessment of Ethena’s mechanism, which called for the fund to maintain “sufficient capital to cover a 4.3% drawdown at all times.” + +### Recommendation + +The current debt ceiling for USDe on V3 Ethereum, set at $40 M, has reached 100% utilization. + +Given current market conditions, our Isolation Mode Methodology supports increasing the debt ceiling to $50 M. + +It is important to note that the majority of USDe debt positions are concentrated within just one user, accounting for over 83% of the total debt (see Positions Analysis above). +While this concentration does not affect the current recommendation, it is something to continue monitoring and will be considered in future recommendations and cases of significant market changes. + +## Specification + +| Chain | Asset | Parameter | Current Debt Ceiling | Recommended Debt Ceiling | +| -------- | ----- | --------- | -------------------- | ------------------------ | +| Ethereum | USDe | LTV | $40,000,000 | $50,000,000 | + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xea1012aaf1fe660148cfe6265cbadf23b19bb44af609caaa51ab8d7194259c28) +- [Discussion](https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-increase-usde-debt-ceiling-on-v3-ethereum-07-22-2024/18325) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol new file mode 100644 index 000000000..6b80dec0a --- /dev/null +++ b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801} from './AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801) + .creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801) + .creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum.md' + ) + ); + } +} diff --git a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/config.ts b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/config.ts new file mode 100644 index 000000000..75c4b2c71 --- /dev/null +++ b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/config.ts @@ -0,0 +1,32 @@ +import {ConfigFile, VOTING_NETWORK} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'Risk Parameter Updates - Increase USDe Debt Ceiling on V3 Ethereum', + shortName: 'RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum', + date: '20240801', + author: 'Chaos Labs', + discussion: + 'https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-increase-usde-debt-ceiling-on-v3-ethereum-07-22-2024/18325', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0xea1012aaf1fe660148cfe6265cbadf23b19bb44af609caaa51ab8d7194259c28', + votingNetwork: VOTING_NETWORK.POLYGON, + }, + poolOptions: { + AaveV3Ethereum: { + configs: { + COLLATERALS_UPDATE: [ + { + asset: 'USDe', + ltv: '', + liqThreshold: '', + liqBonus: '', + debtCeiling: '50000000', + liqProtocolFee: '', + }, + ], + }, + cache: {blockNumber: 20432284}, + }, + }, +}; From f2322e8206a1a371e690fb6f27ab6563e3292418 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Tue, 6 Aug 2024 10:43:43 +0000 Subject: [PATCH 24/68] fix(cache): automated cache update [skip ci] --- ...RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum.md b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum.md index f623f5bd3..1bce1f9b6 100644 --- a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum.md +++ b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum.md @@ -49,8 +49,8 @@ While this concentration does not affect the current recommendation, it is somet ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/d541744da4859996032914b5f1771ff46bd49ab2/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/d541744da4859996032914b5f1771ff46bd49ab2/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xea1012aaf1fe660148cfe6265cbadf23b19bb44af609caaa51ab8d7194259c28) - [Discussion](https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-increase-usde-debt-ceiling-on-v3-ethereum-07-22-2024/18325) From d6bafd5d8fb0b842a9b725af445259e129940b74 Mon Sep 17 00:00:00 2001 From: defi jesus Date: Wed, 7 Aug 2024 07:38:47 +0100 Subject: [PATCH 25/68] FIX: May Funding (#412) * update rETH oracle. update LUSD & PYUSD slippages * FINALLY ACTUALLY FIX THE RETH ORACLE * add swap test to all swaps. change .md urls to target main --------- Co-authored-by: defijesus.eth --- ...veV3Ethereum_MayFundingUpdate_20240603.sol | 6 +- ...V3Ethereum_MayFundingUpdate_20240603.t.sol | 178 +++++++++++++++++- .../MayFundingUpdate.md | 4 +- 3 files changed, 173 insertions(+), 15 deletions(-) diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol index eaa28fe51..998d985ca 100644 --- a/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol +++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol @@ -30,7 +30,7 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603 is IProposalGenericExecutor { address public constant USDC_FEED = 0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6; address public constant DPI_FEED = 0xD2A593BF7594aCE1faD597adb697b5645d5edDB2; address public constant USDT_FEED = 0x3E7d1eAB13ad0104d2750B8863b489D65364e32D; - address public constant RETH_FEED = 0x536218f9E9Eb48863970252233c8F271f554C2d0; + address public constant RETH_FEED = 0xb031a238940e8051852b156f3efDc462fc34f37B; address public constant MILKMAN = 0x11C76AD590ABDFFCD980afEC9ad951B160F02797; address public constant PRICE_CHECKER = 0xe80a1C615F75AFF7Ed8F08c9F21f9d00982D666c; address public constant FRONTIER_SAFE = 0xCDb4fA6ba08bF1FB7Aa9fDf6002E78EDc431a642; @@ -117,7 +117,7 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603 is IProposalGenericExecutor { GHO_USD_FEED, address(AaveV3Ethereum.COLLECTOR), lusdBalance, - 150 + 500 ); /// aEthPYUSD @@ -146,7 +146,7 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603 is IProposalGenericExecutor { GHO_USD_FEED, address(AaveV3Ethereum.COLLECTOR), pyusdBalance, - 100 + 500 ); /// aUSDC & aEthUSDC diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol index e9a34b416..939c48e12 100644 --- a/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol +++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol @@ -48,7 +48,7 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase { assertEq(allowanceAmount, proposal.FRONTIER_ALLOWANCE_AMOUNT()); } - function test_withdrawAndSwapForGho() public { + function test_withdrawAndSwapForGhoBalances() public { uint256 collectorAdaiv2BalanceBefore = IERC20(AaveV2EthereumAssets.DAI_A_TOKEN).balanceOf( COLLECTOR ); @@ -198,6 +198,15 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase { } function test_swapEvents() public { + // Hardcoded as dynamic + uint256 expectedInDai = 1931651887069694121996324; + uint256 expectedInLusd = 26176609646753004781352; + uint256 expectedInPyusd = 119858878007; + uint256 expectedInUsdc = 4039151285202; + uint256 expectedInDpi = 137080139851167463608; + uint256 expectedInUsdt = 2000000000000; + uint256 expectedInReth = 1883870013343165667402; + vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); emit SwapRequested( proposal.MILKMAN(), @@ -205,7 +214,7 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase { AaveV3EthereumAssets.GHO_UNDERLYING, proposal.DAI_FEED(), proposal.GHO_USD_FEED(), - 1931651887069694121996324, // Hardcoded as dynamic + expectedInDai, address(AaveV3Ethereum.COLLECTOR), 50 ); @@ -217,9 +226,9 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase { AaveV3EthereumAssets.GHO_UNDERLYING, proposal.LUSD_FEED(), proposal.GHO_USD_FEED(), - 26176609646753004781352, // Hardcoded as dynamic + expectedInLusd, address(AaveV3Ethereum.COLLECTOR), - 150 + 500 ); vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); @@ -229,9 +238,9 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase { AaveV3EthereumAssets.GHO_UNDERLYING, proposal.PYUSD_FEED(), proposal.GHO_USD_FEED(), - 119858878007, // Hardcoded as dynamic + expectedInPyusd, address(AaveV3Ethereum.COLLECTOR), - 100 + 500 ); vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); @@ -241,7 +250,7 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase { AaveV3EthereumAssets.GHO_UNDERLYING, proposal.USDC_FEED(), proposal.GHO_USD_FEED(), - 4039151285202, // Hardcoded as dynamic + expectedInUsdc, address(AaveV3Ethereum.COLLECTOR), 50 ); @@ -253,7 +262,7 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase { AaveV3EthereumAssets.GHO_UNDERLYING, proposal.DPI_FEED(), proposal.GHO_USD_FEED(), - 137080139851167463608, // Hardcoded as dynamic + expectedInDpi, address(AaveV3Ethereum.COLLECTOR), 500 ); @@ -265,7 +274,7 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase { AaveV3EthereumAssets.GHO_UNDERLYING, proposal.USDT_FEED(), proposal.GHO_USD_FEED(), - 2000000000000, // Hardcoded as dynamic + expectedInUsdt, address(AaveV3Ethereum.COLLECTOR), 50 ); @@ -277,12 +286,89 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase { AaveV3EthereumAssets.WETH_UNDERLYING, proposal.RETH_FEED(), AaveV3EthereumAssets.WETH_ORACLE, - 1883870013343165667402, // Hardcoded as dynamic + expectedInReth, address(AaveV3Ethereum.COLLECTOR), 50 ); executePayload(vm, address(proposal)); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + expectedInDai, // DAI/USD ~ 1.0 exchange rate on 23/07/2024 + expectedInDai, + 3e14, // 1e18 is 100%, 3e14 is 0.03% + AaveV3EthereumAssets.DAI_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.DAI_FEED(), + AaveV3EthereumAssets.GHO_ORACLE + ); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + expectedInLusd, // LUSD/USD ~ 1.0 exchange rate on 23/07/2024 + expectedInLusd, + 3e15, // 1e18 is 100%, 3e15 is 0.3% + AaveV3EthereumAssets.LUSD_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.LUSD_FEED(), + AaveV3EthereumAssets.GHO_ORACLE + ); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + 119840e18, // pyusd is 6 decimals we get 18 out + expectedInPyusd, // PYUSD/USD ~ 1.0 exchange rate on 23/07/2024 + 1e15, // 1e18 is 100%, 3e15 is 0.3% + AaveV3EthereumAssets.PYUSD_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.PYUSD_FEED(), + AaveV3EthereumAssets.GHO_ORACLE + ); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + 4039151e18, // USDC is 6 decimals we get 18 out + expectedInUsdc, // USDC/USD ~ 1.0 exchange rate on 23/07/2024 + 1e14, // 1e18 is 100%, 1e14 is 0.01% + AaveV3EthereumAssets.USDC_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.USDC_FEED(), + AaveV3EthereumAssets.GHO_ORACLE + ); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + 12_400e18, // DPI/USD ~ 91 exchange rate on 23/07/2024 + expectedInDpi, + 3e16, // 1e18 is 100%, 3e16 is 3% + AaveV2EthereumAssets.DPI_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.DPI_FEED(), + AaveV3EthereumAssets.GHO_ORACLE + ); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + 2000000e18, // USDT is 6 decimals we get 18 out + expectedInUsdt, // USDT/USD ~ 91 exchange rate on 23/07/2024 + 3e14, // 1e18 is 100%, 3e14 is 0.03% + AaveV3EthereumAssets.USDT_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.USDT_FEED(), + AaveV3EthereumAssets.GHO_ORACLE + ); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + 2094486680834931589017, // rETH/ETH ~ 1.1118 exchange rate on 23/07/2024 + 1883870013343165667402, + 1e14, // 1e18 is 100%, 1e14 is 0.01% + AaveV3EthereumAssets.rETH_UNDERLYING, + AaveV3EthereumAssets.WETH_UNDERLYING, + proposal.RETH_FEED(), + AaveV3EthereumAssets.WETH_ORACLE + ); } function test_wethMigration() public { @@ -338,4 +424,76 @@ contract AaveV3Ethereum_MayFundingUpdate_20240603_Test is ProtocolV3TestBase { 3e18 ); } + + /// Basic test for swaps that checks the prices returned make sense. + /// For example, if both oracles are the same base (USD or ETH), then + /// getting prices from tradingview.com and using them as `expectedOut` + /// should work with this test and the other parameters. + /// + /// Example: On August 3, 2024, I want to swap 3013 USDC for 1 WETH. If + /// both oracles have the same base USD, then this is going to work. However, + /// if for example USDC has base ETH, it's going to fail because: + /// USDC/ETH = 1 / 3013, rather than USDC/USD = 1 / 1. If the opposite oracle + /// is ETH/USD then it's going to be 3013 / 1. Sending expected out of 1 ETH + /// will fail this test because the actual oracles are going to return 1/3013 ETH. + /// + /// This test will also ensure the oracles have the necessary functions or it will + /// revert. For example, if the oracle does not have the `decimals()` function as + /// some oracles do, then it will fail ahead of time. + /// + /// @param priceChecker The price checker used by Milkman + /// @param expectedOut The amount we've manually checked we should be getting + /// @param amountIn The amount of from token to be swapped + /// @param maxDelta The maximum amount of difference in % between expectedOut and calculatedOut + /// @param from The token to swap from + /// @param to The token to swap to + /// @param fromOracle The oracle of the token to swap from + /// @param toOracle The oracle of the token to swap to + function _baseSwapTest( + address priceChecker, + uint256 expectedOut, + uint256 amountIn, + uint256 maxDelta, + address from, + address to, + address fromOracle, + address toOracle + ) internal { + address calc = IPriceChecker(priceChecker).EXPECTED_OUT_CALCULATOR(); + uint256 outCalc = ICalculator(calc).getExpectedOut( + amountIn, + from, + to, + _encodeOracles(fromOracle, toOracle) + ); + + assertApproxEqRel(outCalc, expectedOut, maxDelta); + } + + function _encodeOracles( + address fromOracle, + address toOracle + ) internal pure returns (bytes memory) { + address[] memory paths = new address[](2); + paths[0] = fromOracle; + paths[1] = toOracle; + + bool[] memory reverses = new bool[](2); + reverses[1] = true; + + return abi.encode(paths, reverses); + } +} + +interface IPriceChecker { + function EXPECTED_OUT_CALCULATOR() external returns (address); +} + +interface ICalculator { + function getExpectedOut( + uint256 _amountIn, + address _fromToken, + address _toToken, + bytes calldata _data + ) external view returns (uint256); } diff --git a/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md index c37aa7ee5..0dab9b5ef 100644 --- a/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md +++ b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md @@ -73,8 +73,8 @@ Any residual ETH will be deposited into Aave v3. ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/7cc3a0fecc565693c5ffef79b46621780fa96b96/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol) - [Snapshot](Direct-to-AIP) - [Discussion](https://governance.aave.com/t/arfc-may-funding-update/17768) From 7320475e588547d4a46f3dc7d4ff1a9cb19a2fbd Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 7 Aug 2024 06:39:13 +0000 Subject: [PATCH 26/68] fix(cache): automated cache update [skip ci] --- src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md index 0dab9b5ef..a10784e16 100644 --- a/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md +++ b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate.md @@ -73,8 +73,8 @@ Any residual ETH will be deposited into Aave v3. ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/d6bafd5d8fb0b842a9b725af445259e129940b74/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/d6bafd5d8fb0b842a9b725af445259e129940b74/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/d6bafd5d8fb0b842a9b725af445259e129940b74/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/d6bafd5d8fb0b842a9b725af445259e129940b74/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/d6bafd5d8fb0b842a9b725af445259e129940b74/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/d6bafd5d8fb0b842a9b725af445259e129940b74/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/d6bafd5d8fb0b842a9b725af445259e129940b74/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/d6bafd5d8fb0b842a9b725af445259e129940b74/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol) - [Snapshot](Direct-to-AIP) - [Discussion](https://governance.aave.com/t/arfc-may-funding-update/17768) From fac71a7a436feaea5a2b01021fa40286fc8bb58e Mon Sep 17 00:00:00 2001 From: sendra Date: Wed, 7 Aug 2024 14:40:47 +0200 Subject: [PATCH 27/68] feat: a.DI ZkSync path activation proposal (#397) * feat: a.DI ZkSync path activation proposal * fix: added addresses * fix: add deployed payload * fix: update links on md * fix: update utils import path --- .../ADIZkSyncPathActivation.md | 55 ++++++++++++++++++ .../ADIZkSyncPathActivation_20240726.s.sol | 57 +++++++++++++++++++ .../config.ts | 14 +++++ 3 files changed, 126 insertions(+) create mode 100644 src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md create mode 100644 src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation_20240726.s.sol create mode 100644 src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/config.ts diff --git a/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md new file mode 100644 index 000000000..ddc6ffa78 --- /dev/null +++ b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md @@ -0,0 +1,55 @@ +--- +title: "a.DI ZkSync path activation" +author: "BGD Labs @bgdlabs" +discussions: "https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/40" +--- + +## Simple Summary + +Proposal to register the necessary ZKSync adapters on a.DI, a technical pre-requirement for an activation vote of Aave v3 ZKSync. + +## Motivation + +In order to be able to pass messages from Ethereum to ZKSync via a.DI (Aave Delivery Infrastructure), it is necessary to at least have one valid adapter Ethereum → ZKSync smart contract enabled in the system. + +The first case of message passing Ethereum → ZKSync is the activation proposal for an Aave v3 ZKSync pool and consequently, to be able to execute on the ZKSync side the payload, the Aave governance should approve in advance the a.DI adapter smart contract. + +This procedure mirrors the requirements on previous networks like Scroll. + +## Specification + +The proposal payload simply registers a pre-deployed ZKSync adapter (with the necessary configurations to communicate with the ZKSync a.DI) on the Ethereum a.DI instance. + +This is done by calling the enableBridgeAdapters() function on the Ethereum Cross-chain Controller smart contract. + +| Network | ZkSync Adapter | +| -------- | --------------------------------------------------------------------------------------------------------------------------- | +| Ethereum | [0x6aD9d4147467f08b165e1b6364584C5d28898b84](https://etherscan.io/address/0x6aD9d4147467f08b165e1b6364584C5d28898b84) | +| ZkSync | [0x1BC5C10CAe378fDbd7D52ec4F9f34590a619c68E](https://era.zksync.network/address/0x1BC5C10CAe378fDbd7D52ec4F9f34590a619c68E) | + +The new a.DI deployments on ZkSync network are as follows: + +| Contract | Address | +| -------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| CrossChainController | [0x800813f4714BC7A0a95310e3fB9e4f18872CA92C](https://era.zksync.network/address/0x800813f4714BC7A0a95310e3fB9e4f18872CA92C) | +| Granular Guardian | [0xe0e23196D42b54F262a3DE952e6B34B197D1A228](https://era.zksync.network/address/0xe0e23196D42b54F262a3DE952e6B34B197D1A228) | + +The new Aave Governance deployments on ZkSync network are as follows: + +| Contract | Address | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| PayloadsController | [0x2E79349c3F5e4751E87b966812C9E65E805996F1](https://era.zksync.network/address/0x2E79349c3F5e4751E87b966812C9E65E805996F1) | +| Executor Lvl 1 | [0x04cE39789e11a49595cD0ECEf6f4Bd54ABF4d020](https://era.zksync.network/address/0x04cE39789e11a49595cD0ECEf6f4Bd54ABF4d020) | +| Governance Guardian | [0x4257bf0746D783f0D962913d7d8AFA408B62547E](https://era.zksync.network/address/0x4257bf0746D783f0D962913d7d8AFA408B62547E) | + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/AaveV3Ethereum_ADIZkSyncPathActivation_20240726.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/AaveV3Ethereum_ADIZkSyncPathActivation_20240726.t.sol) +- [Discussion](https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/40) +- [Tests](https://github.com/bgd-labs/adi-deploy/blob/0362a18614325de76fa1ab4b9ae5c3172d382ec6/tests/payloads/zksync/AddZkSyncPathTest.t.sol) +- [Diffs](https://github.com/bgd-labs/adi-deploy/blob/06de05532d37a480b008fc70a4f2569c4a812161/diffs/adi_add_zksync_path_to_adiethereum_before_adi_add_zksync_path_to_adiethereum_after.md) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation_20240726.s.sol b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation_20240726.s.sol new file mode 100644 index 000000000..6ad1ca2e7 --- /dev/null +++ b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation_20240726.s.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; + +address constant ETHEREUM_PAYLOAD = 0x65Cf9DE21c5F4377BF7E4d1421cEde57d9D5962A; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation_20240726.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ADIZkSyncPathActivation_20240726.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = ETHEREUM_PAYLOAD; + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation_20240726.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction(ETHEREUM_PAYLOAD); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md' + ) + ); + } +} diff --git a/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/config.ts b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/config.ts new file mode 100644 index 000000000..999f54644 --- /dev/null +++ b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/config.ts @@ -0,0 +1,14 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + author: 'BGD Labs @bgdlabs', + pools: ['AaveV3Ethereum'], + title: 'a.DI ZkSync path activation', + shortName: 'ADIZkSyncPathActivation', + date: '20240726', + discussion: '', + snapshot: '', + votingNetwork: 'POLYGON', + }, + poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20390481}}}, +}; From a718b1b4745d7f4ab236d992dacc0500fb8c6387 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 7 Aug 2024 12:41:28 +0000 Subject: [PATCH 28/68] fix(cache): automated cache update [skip ci] --- .../ADIZkSyncPathActivation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md index ddc6ffa78..f9e0ec3d1 100644 --- a/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md +++ b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md @@ -44,8 +44,8 @@ The new Aave Governance deployments on ZkSync network are as follows: ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/AaveV3Ethereum_ADIZkSyncPathActivation_20240726.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/AaveV3Ethereum_ADIZkSyncPathActivation_20240726.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fac71a7a436feaea5a2b01021fa40286fc8bb58e/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/AaveV3Ethereum_ADIZkSyncPathActivation_20240726.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fac71a7a436feaea5a2b01021fa40286fc8bb58e/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/AaveV3Ethereum_ADIZkSyncPathActivation_20240726.t.sol) - [Discussion](https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/40) - [Tests](https://github.com/bgd-labs/adi-deploy/blob/0362a18614325de76fa1ab4b9ae5c3172d382ec6/tests/payloads/zksync/AddZkSyncPathTest.t.sol) - [Diffs](https://github.com/bgd-labs/adi-deploy/blob/06de05532d37a480b008fc70a4f2569c4a812161/diffs/adi_add_zksync_path_to_adiethereum_before_adi_add_zksync_path_to_adiethereum_after.md) From 143d19836f25552f58b31f16b36927788b1c689d Mon Sep 17 00:00:00 2001 From: sendra Date: Wed, 7 Aug 2024 14:53:55 +0200 Subject: [PATCH 29/68] fix: added correct links to test and payload (#420) --- .../ADIZkSyncPathActivation.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md index f9e0ec3d1..a0e0503e4 100644 --- a/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md +++ b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation.md @@ -44,10 +44,9 @@ The new Aave Governance deployments on ZkSync network are as follows: ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fac71a7a436feaea5a2b01021fa40286fc8bb58e/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/AaveV3Ethereum_ADIZkSyncPathActivation_20240726.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fac71a7a436feaea5a2b01021fa40286fc8bb58e/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/AaveV3Ethereum_ADIZkSyncPathActivation_20240726.t.sol) -- [Discussion](https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/40) +- [Implementation](https://github.com/bgd-labs/adi-deploy/blob/0362a18614325de76fa1ab4b9ae5c3172d382ec6/src/templates/SimpleAddForwarderAdapter.sol) - [Tests](https://github.com/bgd-labs/adi-deploy/blob/0362a18614325de76fa1ab4b9ae5c3172d382ec6/tests/payloads/zksync/AddZkSyncPathTest.t.sol) +- [Discussion](https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/40) - [Diffs](https://github.com/bgd-labs/adi-deploy/blob/06de05532d37a480b008fc70a4f2569c4a812161/diffs/adi_add_zksync_path_to_adiethereum_before_adi_add_zksync_path_to_adiethereum_after.md) ## Copyright From 4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60 Mon Sep 17 00:00:00 2001 From: defi jesus Date: Wed, 7 Aug 2024 14:22:22 +0100 Subject: [PATCH 30/68] RF & Slope increases Mid-July (#379) * wip * tests done. md missing * ready for review. add .md * update .md to link to latest comment on discussions * fix issues raised in review. ready to merge * fix: imports * update blocknumber for all tests. update diffs * merge main, bump blocknumbers, re-ran tests --------- Co-authored-by: defijesus.eth Co-authored-by: Harsh Pandey --- ...e0a915b5f990173c796d505beabae449a7ad03.svg | 1 + ...5469af401f34dbd88e7d191d00a07993e0e8e7.svg | 1 + ...80eeee57baf0e1856edacdf269f325258ffe4e.svg | 1 + ...41fc281dac8ff9d67952fd304c0639c1208481.svg | 1 + ...09a7569abb90b3bd8ff2d2c1378c4d5ac743b4.svg | 1 + ...daf6db5f20a87db1cc22a701ffc1cad1ccf607.svg | 1 + ...erveFactorUpdatesMidJuly_20240711_after.md | 90 ++++++ ...erveFactorUpdatesMidJuly_20240711_after.md | 90 ++++++ ...erveFactorUpdatesMidJuly_20240711_after.md | 158 +++++++++ ...erveFactorUpdatesMidJuly_20240711_after.md | 25 ++ ...erveFactorUpdatesMidJuly_20240711_after.md | 25 ++ ...erveFactorUpdatesMidJuly_20240711_after.md | 25 ++ ...erveFactorUpdatesMidJuly_20240711_after.md | 25 ++ ...e_ReserveFactorUpdatesMidJuly_20240711.sol | 32 ++ ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 78 +++++ ...m_ReserveFactorUpdatesMidJuly_20240711.sol | 32 ++ ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 78 +++++ ...n_ReserveFactorUpdatesMidJuly_20240711.sol | 99 ++++++ ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 32 ++ ...m_ReserveFactorUpdatesMidJuly_20240711.sol | 37 +++ ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 32 ++ ...e_ReserveFactorUpdatesMidJuly_20240711.sol | 37 +++ ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 32 ++ ...m_ReserveFactorUpdatesMidJuly_20240711.sol | 37 +++ ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 32 ++ ...n_ReserveFactorUpdatesMidJuly_20240711.sol | 37 +++ ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 32 ++ .../ReserveFactorUpdatesMidJuly.md | 75 +++++ ...ReserveFactorUpdatesMidJuly_20240711.s.sol | 218 +++++++++++++ .../config.ts | 302 ++++++++++++++++++ 30 files changed, 1666 insertions(+) create mode 100644 .assets/05e0a915b5f990173c796d505beabae449a7ad03.svg create mode 100644 .assets/105469af401f34dbd88e7d191d00a07993e0e8e7.svg create mode 100644 .assets/1580eeee57baf0e1856edacdf269f325258ffe4e.svg create mode 100644 .assets/2f41fc281dac8ff9d67952fd304c0639c1208481.svg create mode 100644 .assets/4609a7569abb90b3bd8ff2d2c1378c4d5ac743b4.svg create mode 100644 .assets/4adaf6db5f20a87db1cc22a701ffc1cad1ccf607.svg create mode 100644 diffs/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711_after.md create mode 100644 diffs/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711_after.md create mode 100644 diffs/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711_after.md create mode 100644 diffs/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711_after.md create mode 100644 diffs/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Base_ReserveFactorUpdatesMidJuly_20240711_after.md create mode 100644 diffs/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711_after.md create mode 100644 diffs/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711_after.md create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly.md create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol create mode 100644 src/20240711_Multi_ReserveFactorUpdatesMidJuly/config.ts diff --git a/.assets/05e0a915b5f990173c796d505beabae449a7ad03.svg b/.assets/05e0a915b5f990173c796d505beabae449a7ad03.svg new file mode 100644 index 000000000..ccbb0b5ff --- /dev/null +++ b/.assets/05e0a915b5f990173c796d505beabae449a7ad03.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%Optimal utilization 48%Optimal utilization 48% \ No newline at end of file diff --git a/.assets/105469af401f34dbd88e7d191d00a07993e0e8e7.svg b/.assets/105469af401f34dbd88e7d191d00a07993e0e8e7.svg new file mode 100644 index 000000000..4f934384a --- /dev/null +++ b/.assets/105469af401f34dbd88e7d191d00a07993e0e8e7.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%Optimal utilization 71%Optimal utilization 71% \ No newline at end of file diff --git a/.assets/1580eeee57baf0e1856edacdf269f325258ffe4e.svg b/.assets/1580eeee57baf0e1856edacdf269f325258ffe4e.svg new file mode 100644 index 000000000..75d7038c7 --- /dev/null +++ b/.assets/1580eeee57baf0e1856edacdf269f325258ffe4e.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%Optimal utilization 40%Optimal utilization 40% \ No newline at end of file diff --git a/.assets/2f41fc281dac8ff9d67952fd304c0639c1208481.svg b/.assets/2f41fc281dac8ff9d67952fd304c0639c1208481.svg new file mode 100644 index 000000000..2f2ecd488 --- /dev/null +++ b/.assets/2f41fc281dac8ff9d67952fd304c0639c1208481.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%Optimal utilization 48%Optimal utilization 48% \ No newline at end of file diff --git a/.assets/4609a7569abb90b3bd8ff2d2c1378c4d5ac743b4.svg b/.assets/4609a7569abb90b3bd8ff2d2c1378c4d5ac743b4.svg new file mode 100644 index 000000000..8e99236eb --- /dev/null +++ b/.assets/4609a7569abb90b3bd8ff2d2c1378c4d5ac743b4.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%Optimal utilization 37%Optimal utilization 37% \ No newline at end of file diff --git a/.assets/4adaf6db5f20a87db1cc22a701ffc1cad1ccf607.svg b/.assets/4adaf6db5f20a87db1cc22a701ffc1cad1ccf607.svg new file mode 100644 index 000000000..bc9a654b6 --- /dev/null +++ b/.assets/4adaf6db5f20a87db1cc22a701ffc1cad1ccf607.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%Optimal utilization 52%Optimal utilization 52% \ No newline at end of file diff --git a/diffs/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711_after.md b/diffs/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711_after.md new file mode 100644 index 000000000..95e23d17f --- /dev/null +++ b/diffs/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711_after.md @@ -0,0 +1,90 @@ +## Reserve changes + +### Reserve altered + +#### WETH.e ([0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB](https://snowscan.xyz/address/0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 55 % [5500] | 60 % [6000] | + + +#### WBTC.e ([0x50b7545627a5162F82A992c33b87aDc75187B218](https://snowscan.xyz/address/0x50b7545627a5162F82A992c33b87aDc75187B218)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 60 % [6000] | 65 % [6500] | + + +#### USDC.e ([0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664](https://snowscan.xyz/address/0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 55 % [5500] | 60 % [6000] | + + +#### WAVAX ([0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7](https://snowscan.xyz/address/0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 55 % [5500] | 60 % [6000] | + + +#### USDT.e ([0xc7198437980c041c805A1EDcbA50c1Ce5db95118](https://snowscan.xyz/address/0xc7198437980c041c805A1EDcbA50c1Ce5db95118)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 55 % [5500] | 60 % [6000] | + + +#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowscan.xyz/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 55 % [5500] | 60 % [6000] | + + +## Raw diff + +```json +{ + "reserves": { + "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB": { + "reserveFactor": { + "from": 5500, + "to": 6000 + } + }, + "0x50b7545627a5162F82A992c33b87aDc75187B218": { + "reserveFactor": { + "from": 6000, + "to": 6500 + } + }, + "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": { + "reserveFactor": { + "from": 5500, + "to": 6000 + } + }, + "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7": { + "reserveFactor": { + "from": 5500, + "to": 6000 + } + }, + "0xc7198437980c041c805A1EDcbA50c1Ce5db95118": { + "reserveFactor": { + "from": 5500, + "to": 6000 + } + }, + "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": { + "reserveFactor": { + "from": 5500, + "to": 6000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711_after.md b/diffs/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711_after.md new file mode 100644 index 000000000..4fd517a00 --- /dev/null +++ b/diffs/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711_after.md @@ -0,0 +1,90 @@ +## Reserve changes + +### Reserve altered + +#### WBTC ([0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599](https://etherscan.io/address/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +#### LINK ([0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 60 % [6000] | 65 % [6500] | + + +#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 60 % [6000] | 65 % [6500] | + + +#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 60 % [6000] | 65 % [6500] | + + +#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 60 % [6000] | 65 % [6500] | + + +## Raw diff + +```json +{ + "reserves": { + "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + }, + "0x514910771AF9Ca656af840dff83E8264EcF986CA": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + }, + "0x6B175474E89094C44Da98b954EedeAC495271d0F": { + "reserveFactor": { + "from": 6000, + "to": 6500 + } + }, + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": { + "reserveFactor": { + "from": 6000, + "to": 6500 + } + }, + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": { + "reserveFactor": { + "from": 6000, + "to": 6500 + } + }, + "0xdAC17F958D2ee523a2206206994597C13D831ec7": { + "reserveFactor": { + "from": 6000, + "to": 6500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711_after.md b/diffs/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711_after.md new file mode 100644 index 000000000..37efcc963 --- /dev/null +++ b/diffs/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711_before_AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711_after.md @@ -0,0 +1,158 @@ +## Reserve changes + +### Reserve altered + +#### WMATIC ([0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270](https://polygonscan.com/address/0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x6a94A6FFbD550316d75741AB895e913F259FFA23](https://polygonscan.com/address/0x6a94A6FFbD550316d75741AB895e913F259FFA23) | [0x30F7E0862FFC80Ff4cA2D6d202c31364A8034A56](https://polygonscan.com/address/0x30F7E0862FFC80Ff4cA2D6d202c31364A8034A56) | +| variableRateSlope1 | 8.25 % | 9 % | +| interestRate | ![before](/.assets/cb37fe806c6884e5d68785436f8a1a1bf31e3d12.svg) | ![after](/.assets/4beacd9bf014f00dc4753ba95ce6a97ef8c89a08.svg) | + +#### WBTC ([0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6](https://polygonscan.com/address/0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x1FE6e3d91a3Bf37731A77B8AB4D50328D8278817](https://polygonscan.com/address/0x1FE6e3d91a3Bf37731A77B8AB4D50328D8278817) | [0xA251080dda3Eb5738aE9725F7E5295Fc9E0cc6C6](https://polygonscan.com/address/0xA251080dda3Eb5738aE9725F7E5295Fc9E0cc6C6) | +| variableRateSlope1 | 6.25 % | 7 % | +| interestRate | ![before](/.assets/66dfc73a7e3da6d9fdc2bd08260f207aa868a95b.svg) | ![after](/.assets/8e32e19fa0018d20a28aece032aef3716ba2e7c9.svg) | + +#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x7390a913B99fc3C0C064C2875709E9be7a183669](https://polygonscan.com/address/0x7390a913B99fc3C0C064C2875709E9be7a183669) | [0x40648f731198AD8ba5757a0bE5DaDaE034ffCf76](https://polygonscan.com/address/0x40648f731198AD8ba5757a0bE5DaDaE034ffCf76) | +| variableRateSlope1 | 11.25 % | 12 % | +| interestRate | ![before](/.assets/8f72f327b7e8d4fb3dad9084495c26e306690e86.svg) | ![after](/.assets/a2e130a1008912eaa4e955f50518be181bd67f80.svg) | + +#### WETH ([0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619](https://polygonscan.com/address/0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0xFfF58Df0DDe40c473aA6558c830D43479f06cb36](https://polygonscan.com/address/0xFfF58Df0DDe40c473aA6558c830D43479f06cb36) | [0xf6f51775135c17543913B7122Da33921F58c3D19](https://polygonscan.com/address/0xf6f51775135c17543913B7122Da33921F58c3D19) | +| variableRateSlope1 | 6.25 % | 7 % | +| interestRate | ![before](/.assets/c8228fc8d9aacf87ea2459be75926f3bb9eac78d.svg) | ![after](/.assets/841d7a6689936d44e8b7984180d4179f3405aad4.svg) | + +#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0xEe9213B77eD95BDaDcE1aDA5812A3544b159E5E3](https://polygonscan.com/address/0xEe9213B77eD95BDaDcE1aDA5812A3544b159E5E3) | [0x21E5a30dFebD364F135a50AA1365D729a4A424a6](https://polygonscan.com/address/0x21E5a30dFebD364F135a50AA1365D729a4A424a6) | +| variableRateSlope1 | 11.25 % | 12 % | +| interestRate | ![before](/.assets/2a2e860dfcbb553d296a57915716d87b790cab3f.svg) | ![after](/.assets/477048510aec2f55e291e76c0b4b27f73b8b7879.svg) | + +#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x55F33b87f1c8F12DbE1322e841431bBce1572A75](https://polygonscan.com/address/0x55F33b87f1c8F12DbE1322e841431bBce1572A75) | [0xfE6691dEFB078658bA79E2204f74371eD9db48cf](https://polygonscan.com/address/0xfE6691dEFB078658bA79E2204f74371eD9db48cf) | +| variableRateSlope1 | 11.25 % | 12 % | +| interestRate | ![before](/.assets/75079cea5e923ff4b2bb67730d775fa8af415fe7.svg) | ![after](/.assets/c377d504bf0f7b7031f6da3d33e8009c1e505a1b.svg) | + +## Raw diff + +```json +{ + "reserves": { + "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270": { + "interestRateStrategy": { + "from": "0x6a94A6FFbD550316d75741AB895e913F259FFA23", + "to": "0x30F7E0862FFC80Ff4cA2D6d202c31364A8034A56" + } + }, + "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6": { + "interestRateStrategy": { + "from": "0x1FE6e3d91a3Bf37731A77B8AB4D50328D8278817", + "to": "0xA251080dda3Eb5738aE9725F7E5295Fc9E0cc6C6" + } + }, + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { + "interestRateStrategy": { + "from": "0x7390a913B99fc3C0C064C2875709E9be7a183669", + "to": "0x40648f731198AD8ba5757a0bE5DaDaE034ffCf76" + } + }, + "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": { + "interestRateStrategy": { + "from": "0xFfF58Df0DDe40c473aA6558c830D43479f06cb36", + "to": "0xf6f51775135c17543913B7122Da33921F58c3D19" + } + }, + "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": { + "interestRateStrategy": { + "from": "0xEe9213B77eD95BDaDcE1aDA5812A3544b159E5E3", + "to": "0x21E5a30dFebD364F135a50AA1365D729a4A424a6" + } + }, + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": { + "interestRateStrategy": { + "from": "0x55F33b87f1c8F12DbE1322e841431bBce1572A75", + "to": "0xfE6691dEFB078658bA79E2204f74371eD9db48cf" + } + } + }, + "strategies": { + "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270": { + "address": { + "from": "0x6a94A6FFbD550316d75741AB895e913F259FFA23", + "to": "0x30F7E0862FFC80Ff4cA2D6d202c31364A8034A56" + }, + "variableRateSlope1": { + "from": "82500000000000000000000000", + "to": "90000000000000000000000000" + } + }, + "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6": { + "address": { + "from": "0x1FE6e3d91a3Bf37731A77B8AB4D50328D8278817", + "to": "0xA251080dda3Eb5738aE9725F7E5295Fc9E0cc6C6" + }, + "variableRateSlope1": { + "from": "62500000000000000000000000", + "to": "70000000000000000000000000" + } + }, + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { + "address": { + "from": "0x7390a913B99fc3C0C064C2875709E9be7a183669", + "to": "0x40648f731198AD8ba5757a0bE5DaDaE034ffCf76" + }, + "variableRateSlope1": { + "from": "112500000000000000000000000", + "to": "120000000000000000000000000" + } + }, + "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": { + "address": { + "from": "0xFfF58Df0DDe40c473aA6558c830D43479f06cb36", + "to": "0xf6f51775135c17543913B7122Da33921F58c3D19" + }, + "variableRateSlope1": { + "from": "62500000000000000000000000", + "to": "70000000000000000000000000" + } + }, + "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": { + "address": { + "from": "0xEe9213B77eD95BDaDcE1aDA5812A3544b159E5E3", + "to": "0x21E5a30dFebD364F135a50AA1365D729a4A424a6" + }, + "variableRateSlope1": { + "from": "112500000000000000000000000", + "to": "120000000000000000000000000" + } + }, + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": { + "address": { + "from": "0x55F33b87f1c8F12DbE1322e841431bBce1572A75", + "to": "0xfE6691dEFB078658bA79E2204f74371eD9db48cf" + }, + "variableRateSlope1": { + "from": "112500000000000000000000000", + "to": "120000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711_after.md b/diffs/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711_after.md new file mode 100644 index 000000000..168686724 --- /dev/null +++ b/diffs/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8](https://arbiscan.io/address/0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 25 % [2500] | 30 % [3000] | + + +## Raw diff + +```json +{ + "reserves": { + "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": { + "reserveFactor": { + "from": 2500, + "to": 3000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Base_ReserveFactorUpdatesMidJuly_20240711_after.md b/diffs/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Base_ReserveFactorUpdatesMidJuly_20240711_after.md new file mode 100644 index 000000000..da9dc7057 --- /dev/null +++ b/diffs/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Base_ReserveFactorUpdatesMidJuly_20240711_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDbC ([0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA](https://basescan.org/address/0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 25 % [2500] | 30 % [3000] | + + +## Raw diff + +```json +{ + "reserves": { + "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA": { + "reserveFactor": { + "from": 2500, + "to": 3000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711_after.md b/diffs/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711_after.md new file mode 100644 index 000000000..767732157 --- /dev/null +++ b/diffs/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0x7F5c764cBc14f9669B88837ca1490cCa17c31607](https://optimistic.etherscan.io/address/0x7F5c764cBc14f9669B88837ca1490cCa17c31607)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 25 % [2500] | 30 % [3000] | + + +## Raw diff + +```json +{ + "reserves": { + "0x7F5c764cBc14f9669B88837ca1490cCa17c31607": { + "reserveFactor": { + "from": 2500, + "to": 3000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711_after.md b/diffs/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711_after.md new file mode 100644 index 000000000..7059b4e32 --- /dev/null +++ b/diffs/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711_before_AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 25 % [2500] | 30 % [3000] | + + +## Raw diff + +```json +{ + "reserves": { + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { + "reserveFactor": { + "from": 2500, + "to": 3000 + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol new file mode 100644 index 000000000..a6f331cb0 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {AaveV2Avalanche, AaveV2AvalancheAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Avalanche.sol'; + +/** + * @title Reserve Factor Updates Mid July + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711 is IProposalGenericExecutor { + ILendingPoolConfigurator public constant POOL_CONFIGURATOR = + ILendingPoolConfigurator(AaveV2Avalanche.POOL_CONFIGURATOR); + + uint256 public constant DAIe_RF = 60_00; + uint256 public constant USDCe_RF = 60_00; + uint256 public constant USDTe_RF = 60_00; + uint256 public constant WAVAX_RF = 60_00; + uint256 public constant WBTCe_RF = 65_00; + uint256 public constant WETHe_RF = 60_00; + + function execute() external { + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.DAIe_UNDERLYING, DAIe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.USDCe_UNDERLYING, USDCe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.USDTe_UNDERLYING, USDTe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WAVAX_UNDERLYING, WAVAX_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WBTCe_UNDERLYING, WBTCe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WETHe_UNDERLYING, WETHe_RF); + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol new file mode 100644 index 000000000..a8e4634a6 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol'; +import {AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711} from './AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol'; + +/** + * @dev Test for AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711 + * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol -vv + */ +contract AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711_Test is ProtocolV2TestBase { + AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711 internal proposal; + + struct Changes { + address asset; + uint256 reserveFactor; + } + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 48960949); + proposal = new AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest( + 'AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711', + AaveV2Avalanche.POOL, + address(proposal) + ); + + address[] memory assetsChanged = new address[](6); + assetsChanged[0] = AaveV2AvalancheAssets.DAIe_UNDERLYING; + assetsChanged[1] = AaveV2AvalancheAssets.USDCe_UNDERLYING; + assetsChanged[2] = AaveV2AvalancheAssets.USDTe_UNDERLYING; + assetsChanged[3] = AaveV2AvalancheAssets.WAVAX_UNDERLYING; + assetsChanged[4] = AaveV2AvalancheAssets.WBTCe_UNDERLYING; + assetsChanged[5] = AaveV2AvalancheAssets.WETHe_UNDERLYING; + + Changes[] memory assetChanges = new Changes[](6); + assetChanges[0] = Changes({ + asset: AaveV2AvalancheAssets.DAIe_UNDERLYING, + reserveFactor: proposal.DAIe_RF() + }); + assetChanges[1] = Changes({ + asset: AaveV2AvalancheAssets.USDCe_UNDERLYING, + reserveFactor: proposal.USDCe_RF() + }); + assetChanges[2] = Changes({ + asset: AaveV2AvalancheAssets.USDTe_UNDERLYING, + reserveFactor: proposal.USDTe_RF() + }); + assetChanges[3] = Changes({ + asset: AaveV2AvalancheAssets.WAVAX_UNDERLYING, + reserveFactor: proposal.WAVAX_RF() + }); + assetChanges[4] = Changes({ + asset: AaveV2AvalancheAssets.WBTCe_UNDERLYING, + reserveFactor: proposal.WBTCe_RF() + }); + assetChanges[5] = Changes({ + asset: AaveV2AvalancheAssets.WETHe_UNDERLYING, + reserveFactor: proposal.WETHe_RF() + }); + + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + for (uint i = 0; i < assetChanges.length; i++) { + ReserveConfig memory cfg = _findReserveConfig(allConfigsAfter, assetChanges[i].asset); + assertEq(cfg.reserveFactor, assetChanges[i].reserveFactor); + } + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol new file mode 100644 index 000000000..2cce9695e --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {AaveV2Ethereum, AaveV2EthereumAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Ethereum.sol'; + +/** + * @title Reserve Factor Updates Mid July + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711 is IProposalGenericExecutor { + ILendingPoolConfigurator public constant POOL_CONFIGURATOR = + ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR); + + uint256 public constant DAI_RF = 65_00; + uint256 public constant LINK_RF = 70_00; + uint256 public constant USDC_RF = 65_00; + uint256 public constant USDT_RF = 65_00; + uint256 public constant WBTC_RF = 70_00; + uint256 public constant WETH_RF = 65_00; + + function execute() external { + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.DAI_UNDERLYING, DAI_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.LINK_UNDERLYING, LINK_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDC_UNDERLYING, USDC_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDT_UNDERLYING, USDT_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.WBTC_UNDERLYING, WBTC_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.WETH_UNDERLYING, WETH_RF); + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol new file mode 100644 index 000000000..489bb08a4 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol'; +import {AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711} from './AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol'; + +/** + * @dev Test for AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol -vv + */ +contract AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711_Test is ProtocolV2TestBase { + AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711 internal proposal; + + struct Changes { + address asset; + uint256 reserveFactor; + } + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20476600); + proposal = new AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest( + 'AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711', + AaveV2Ethereum.POOL, + address(proposal) + ); + + address[] memory assetsChanged = new address[](6); + assetsChanged[0] = AaveV2EthereumAssets.DAI_UNDERLYING; + assetsChanged[1] = AaveV2EthereumAssets.LINK_UNDERLYING; + assetsChanged[2] = AaveV2EthereumAssets.USDC_UNDERLYING; + assetsChanged[3] = AaveV2EthereumAssets.USDT_UNDERLYING; + assetsChanged[4] = AaveV2EthereumAssets.WBTC_UNDERLYING; + assetsChanged[5] = AaveV2EthereumAssets.WETH_UNDERLYING; + + Changes[] memory assetChanges = new Changes[](6); + assetChanges[0] = Changes({ + asset: AaveV2EthereumAssets.DAI_UNDERLYING, + reserveFactor: proposal.DAI_RF() + }); + assetChanges[1] = Changes({ + asset: AaveV2EthereumAssets.LINK_UNDERLYING, + reserveFactor: proposal.LINK_RF() + }); + assetChanges[2] = Changes({ + asset: AaveV2EthereumAssets.USDC_UNDERLYING, + reserveFactor: proposal.USDC_RF() + }); + assetChanges[3] = Changes({ + asset: AaveV2EthereumAssets.USDT_UNDERLYING, + reserveFactor: proposal.USDT_RF() + }); + assetChanges[4] = Changes({ + asset: AaveV2EthereumAssets.WBTC_UNDERLYING, + reserveFactor: proposal.WBTC_RF() + }); + assetChanges[5] = Changes({ + asset: AaveV2EthereumAssets.WETH_UNDERLYING, + reserveFactor: proposal.WETH_RF() + }); + + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + for (uint i = 0; i < assetChanges.length; i++) { + ReserveConfig memory cfg = _findReserveConfig(allConfigsAfter, assetChanges[i].asset); + assertEq(cfg.reserveFactor, assetChanges[i].reserveFactor); + } + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol new file mode 100644 index 000000000..9c8a91381 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol'; +import {AaveV2PayloadPolygon} from 'aave-helpers/v2-config-engine/AaveV2PayloadPolygon.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV2ConfigEngine} from 'aave-helpers/v2-config-engine/IAaveV2ConfigEngine.sol'; +import {IV2RateStrategyFactory} from 'aave-helpers/v2-config-engine/IV2RateStrategyFactory.sol'; + +/** + * @title Reserve Factor Updates Mid July + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711 is AaveV2PayloadPolygon { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV2ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV2ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV2ConfigEngine.RateStrategyUpdate[](6); + + // Active Assets - Stables + rateStrategies[0] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.DAI_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(12_00), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.USDT_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(12_00), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.USDC_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(12_00), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + // Active Assets - Volatile + + rateStrategies[3] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.WBTC_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(7_00), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[4] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.WETH_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(7_00), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[5] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.WMATIC_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(9_00), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol new file mode 100644 index 000000000..c78774776 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Polygon} from 'aave-address-book/AaveV2Polygon.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol'; +import {AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711} from './AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol'; + +/** + * @dev Test for AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol -vv + */ +contract AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711_Test is ProtocolV2TestBase { + AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 60300335); + proposal = new AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711', + AaveV2Polygon.POOL, + address(proposal) + ); + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol new file mode 100644 index 000000000..bfe7a6e7e --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {AaveV3PayloadArbitrum} from 'aave-helpers/v3-config-engine/AaveV3PayloadArbitrum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; + +/** + * @title Reserve Factor Updates Mid July + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711 is AaveV3PayloadArbitrum { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3ArbitrumAssets.USDC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 30_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol new file mode 100644 index 000000000..176c32bf0 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol'; + +/** + * @dev Test for AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711 + * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol -vv + */ +contract AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711_Test is ProtocolV3TestBase { + AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('arbitrum'), 240376307); + proposal = new AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711', + AaveV3Arbitrum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol new file mode 100644 index 000000000..fc4628058 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; +import {AaveV3PayloadBase} from 'aave-helpers/v3-config-engine/AaveV3PayloadBase.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; + +/** + * @title Reserve Factor Updates Mid July + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Base_ReserveFactorUpdatesMidJuly_20240711 is AaveV3PayloadBase { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3BaseAssets.USDbC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 30_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol new file mode 100644 index 000000000..95bb01024 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Base_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol'; + +/** + * @dev Test for AaveV3Base_ReserveFactorUpdatesMidJuly_20240711 + * command: FOUNDRY_PROFILE=base forge test --match-path=src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol -vv + */ +contract AaveV3Base_ReserveFactorUpdatesMidJuly_20240711_Test is ProtocolV3TestBase { + AaveV3Base_ReserveFactorUpdatesMidJuly_20240711 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('base'), 18122554); + proposal = new AaveV3Base_ReserveFactorUpdatesMidJuly_20240711(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Base_ReserveFactorUpdatesMidJuly_20240711', + AaveV3Base.POOL, + address(proposal) + ); + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol new file mode 100644 index 000000000..05b7328d5 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Optimism, AaveV3OptimismAssets, IPoolConfigurator} from 'aave-address-book/AaveV3Optimism.sol'; +import {AaveV3PayloadOptimism} from 'aave-helpers/v3-config-engine/AaveV3PayloadOptimism.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; + +/** + * @title Reserve Factor Updates Mid July + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711 is AaveV3PayloadOptimism { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3OptimismAssets.USDC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 30_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol new file mode 100644 index 000000000..2714ae047 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol'; + +/** + * @dev Test for AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711 + * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol -vv + */ +contract AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711_Test is ProtocolV3TestBase { + AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('optimism'), 123717894); + proposal = new AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711', + AaveV3Optimism.POOL, + address(proposal) + ); + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol new file mode 100644 index 000000000..01c5457ff --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; +import {AaveV3PayloadPolygon} from 'aave-helpers/v3-config-engine/AaveV3PayloadPolygon.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; + +/** + * @title Reserve Factor Updates Mid July + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711 is AaveV3PayloadPolygon { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3PolygonAssets.USDC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 30_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol new file mode 100644 index 000000000..ac8b3a4c0 --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol'; + +/** + * @dev Test for AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol -vv + */ +contract AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711_Test is ProtocolV3TestBase { + AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 60300335); + proposal = new AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711', + AaveV3Polygon.POOL, + address(proposal) + ); + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly.md b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly.md new file mode 100644 index 000000000..4e322efdd --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly.md @@ -0,0 +1,75 @@ +--- +title: "Reserve Factor Updates Mid July" +author: "karpatkey_TokenLogic" +discussions: "https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06" +--- + +## Simple Summary + +This AIP shall implement the following parameter adjustments: + +- Increase Slope1 across Polygon v2 by 75bps; +- Increase Reserve Factor (RF) on Ethereum v2 and Avalanche v2 by 5.00%; and, +- Increase USDC.e and USDbC RF by 5.00% on Arbitrum, Optimism, Polygon, and Base. + +## Motivation + +This AIP will reduce deposit yield for assets on Ethereum v2 and Avalanche v2 instances of Aave Protocol by increasing the RF by 5.00%. By increasing the RF a greater portion of the interest paid by borrowers is directed to the Aave DAO's treasury. + +This results in a lower deposit rate for users and encourages migration from v2 instances of the Aave Protocol to v3. User's funds are not at risk of liquidation and the borrowing rate remains unchanged. + +The RF across all USDC.e and USDbC reserves will be increased by 5.00% to encourage migration from bridged USDC to native USDC on each respective network. + +By increasing the Slope1 parameter by 75bps on Polygon v2, the cost of capital to users increases and further encourages migration to Polygon v3. + +## Specification + +Slope1 Parameter 75bps Increases: + +| Asset | Market | Current Slope1 | Proposed Slope1 | +| :----: | :--------: | :------------: | :-------------: | +| DAI | Polygon v2 | 11.25% | 12.00% | +| USDT | Polygon v2 | 11.25% | 12.00% | +| wBTC | Polygon v2 | 6.25% | 7.00% | +| wETH | Polygon v2 | 6.25% | 7.00% | +| USDC | Polygon v2 | 11.25% | 12.00% | +| wMATIC | Polygon v2 | 8.25% | 9.00% | + +Reserve Factor 5.00% Increases: + +| Asset | Market | Current RF | Proposed RF | +| ------ | :----------: | :--------: | :---------: | +| DAI.e | Avalanche v2 | 55.00% | 60.00% | +| USDC.e | Avalanche v2 | 55.00% | 60.00% | +| USDT.e | Avalanche v2 | 55.00% | 60.00% | +| wAVAX | Avalanche v2 | 55.00% | 60.00% | +| WBTC.e | Avalanche v2 | 60.00% | 65.00% | +| WETH.e | Avalanche v2 | 55.00% | 60.00% | +| DAI | Ethereum v2 | 60.00% | 65.00% | +| LINK | Ethereum v2 | 65.00% | 70.00% | +| USDC | Ethereum v2 | 60.00% | 65.00% | +| USDT | Ethereum v2 | 60.00% | 65.00% | +| wBTC | Ethereum v2 | 65.00% | 70.00% | +| wETH | Ethereum v2 | 60.00% | 65.00% | +| USDC.e | Arbitrum | 25.00% | 30.00% | +| USDC.e | Optimism | 25.00% | 30.00% | +| USDC.e | Polygon | 25.00% | 30.00% | +| USDbC | Base | 25.00% | 30.00% | + +## References + +- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol) +- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol) +- [Snapshot for USDCe updates](https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06) +- [Discussion for USDCe updates](https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787/5) +- [Discussion for Ethereum V2 Reserve Factor Updates](https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/14) +- [Snapshot for Ethereum V2 Reserve Factor Updates](https://snapshot.org/#/aave.eth/proposal/0x26a03c08359c340f63b78b0c3e96d37aa0adeda65814643b0886d4719048ea7e) +- [Discussion for Avalanche V2 Reserve Factor Updates](https://governance.aave.com/t/arfc-avalanche-v2-reserve-factor-adjustment/17040/9) +- [Snapshot for Avalanche V2 Reserve Factor Updates](https://snapshot.org/#/aave.eth/proposal/0x770ff4e02634c77aaa09952345551168920f7878b32ab03fcef92763a5fb70ab) +- [Discussion for Polygon V2 Borrow Rate Updates](https://governance.aave.com/t/arfc-polygon-v2-borrow-rate-adjustments/17252/9) +- [Snapshot for Polygon V2 Borrow Rate Updates](https://snapshot.org/#/aave.eth/proposal/0x95643085ee16eb0eaa4110a9f0ea8223009f9521e596e1a958303705a5001363) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol new file mode 100644 index 000000000..6f8471afc --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol @@ -0,0 +1,218 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, BaseScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711} from './AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol'; +import {AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711} from './AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol'; +import {AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711} from './AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol'; +import {AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol'; +import {AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol'; +import {AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol'; +import {AaveV3Base_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ReserveFactorUpdatesMidJuly_20240711.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Polygon + * deploy-command: make deploy-ledger contract=src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol:DeployPolygon chain=polygon + * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/ReserveFactorUpdatesMidJuly_20240711.s.sol/137/run-latest.json + */ +contract DeployPolygon is PolygonScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + address payload1 = GovV3Helpers.deployDeterministic( + type(AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](2); + actions[0] = GovV3Helpers.buildAction(payload0); + actions[1] = GovV3Helpers.buildAction(payload1); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Avalanche + * deploy-command: make deploy-ledger contract=src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol:DeployAvalanche chain=avalanche + * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/ReserveFactorUpdatesMidJuly_20240711.s.sol/43114/run-latest.json + */ +contract DeployAvalanche is AvalancheScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Optimism + * deploy-command: make deploy-ledger contract=src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol:DeployOptimism chain=optimism + * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/ReserveFactorUpdatesMidJuly_20240711.s.sol/10/run-latest.json + */ +contract DeployOptimism is OptimismScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Arbitrum + * deploy-command: make deploy-ledger contract=src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol:DeployArbitrum chain=arbitrum + * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/ReserveFactorUpdatesMidJuly_20240711.s.sol/42161/run-latest.json + */ +contract DeployArbitrum is ArbitrumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Base + * deploy-command: make deploy-ledger contract=src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol:DeployBase chain=base + * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/ReserveFactorUpdatesMidJuly_20240711.s.sol/8453/run-latest.json + */ +contract DeployBase is BaseScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Base_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](6); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](2); + actionsPolygon[0] = GovV3Helpers.buildAction( + type(AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + actionsPolygon[1] = GovV3Helpers.buildAction( + type(AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); + actionsAvalanche[0] = GovV3Helpers.buildAction( + type(AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); + actionsOptimism[0] = GovV3Helpers.buildAction( + type(AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsArbitrum[0] = GovV3Helpers.buildAction( + type(AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction( + type(AaveV3Base_ReserveFactorUpdatesMidJuly_20240711).creationCode + ); + payloads[5] = GovV3Helpers.buildBasePayload(vm, actionsBase); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly.md' + ) + ); + } +} diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/config.ts b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/config.ts new file mode 100644 index 000000000..6b7c30e0d --- /dev/null +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/config.ts @@ -0,0 +1,302 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: [ + 'AaveV2Ethereum', + 'AaveV2Polygon', + 'AaveV2Avalanche', + 'AaveV3Polygon', + 'AaveV3Optimism', + 'AaveV3Arbitrum', + 'AaveV3Base', + ], + title: 'Reserve Factor Updates Mid July', + shortName: 'ReserveFactorUpdatesMidJuly', + date: '20240711', + author: 'karpatkey_TokenLogic', + discussion: + 'https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV2Ethereum: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '65', + asset: 'DAI', + }, + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '65', + asset: 'USDC', + }, + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '65', + asset: 'USDT', + }, + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '70', + asset: 'WBTC', + }, + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '65', + asset: 'WETH', + }, + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '70', + asset: 'LINK', + }, + ], + }, + cache: {blockNumber: 20476600}, + }, + AaveV2Polygon: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'USDC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + stableRateSlope1: '12.00', + stableRateSlope2: '', + baseStableRateOffset: '', + stableRateExcessOffset: '', + optimalStableToTotalDebtRatio: '', + }, + }, + { + asset: 'DAI', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + stableRateSlope1: '12.00', + stableRateSlope2: '', + baseStableRateOffset: '', + stableRateExcessOffset: '', + optimalStableToTotalDebtRatio: '', + }, + }, + { + asset: 'USDT', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + stableRateSlope1: '12.00', + stableRateSlope2: '', + baseStableRateOffset: '', + stableRateExcessOffset: '', + optimalStableToTotalDebtRatio: '', + }, + }, + { + asset: 'WBTC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + stableRateSlope1: '7.00', + stableRateSlope2: '', + baseStableRateOffset: '', + stableRateExcessOffset: '', + optimalStableToTotalDebtRatio: '', + }, + }, + { + asset: 'WETH', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + stableRateSlope1: '7.00', + stableRateSlope2: '', + baseStableRateOffset: '', + stableRateExcessOffset: '', + optimalStableToTotalDebtRatio: '', + }, + }, + { + asset: 'WMATIC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + stableRateSlope1: '9.00', + stableRateSlope2: '', + baseStableRateOffset: '', + stableRateExcessOffset: '', + optimalStableToTotalDebtRatio: '', + }, + }, + ], + }, + cache: {blockNumber: 60300335}, + }, + AaveV2Avalanche: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '60', + asset: 'DAI', + }, + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '60', + asset: 'USDC', + }, + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '60', + asset: 'USDT', + }, + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '65', + asset: 'WBTC', + }, + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '60', + asset: 'WETH', + }, + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '60', + asset: 'WAVAX', + }, + ], + }, + cache: {blockNumber: 48960949}, + }, + AaveV3Polygon: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '30', + asset: 'USDC', + }, + ], + }, + cache: {blockNumber: 60300335}, + }, + AaveV3Optimism: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '30', + asset: 'USDC', + }, + ], + }, + cache: {blockNumber: 123717894}, + }, + AaveV3Arbitrum: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '30', + asset: 'USDC', + }, + ], + }, + cache: {blockNumber: 240376307}, + }, + AaveV3Base: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '30', + asset: 'USDbC', + }, + ], + }, + cache: {blockNumber: 18122554}, + }, + }, +}; From 3da30b6dd11067e6243d316b00d475be41dc599c Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 7 Aug 2024 13:22:49 +0000 Subject: [PATCH 31/68] fix(cache): automated cache update [skip ci] --- .../ReserveFactorUpdatesMidJuly.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly.md b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly.md index 4e322efdd..fbfd64fb3 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly.md +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly.md @@ -59,8 +59,8 @@ Reserve Factor 5.00% Increases: ## References -- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol) -- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol) +- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol) +- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/4fd5291f0216f0c9b0821b3ecf2d4cc63f03aa60/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol) - [Snapshot for USDCe updates](https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06) - [Discussion for USDCe updates](https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787/5) - [Discussion for Ethereum V2 Reserve Factor Updates](https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/14) From 71b114678f8b5ec17a6342fe546bfb4bcea24755 Mon Sep 17 00:00:00 2001 From: Rustem Kurmaev Date: Fri, 9 Aug 2024 11:30:12 +0200 Subject: [PATCH 32/68] Update proof of reserve robot to 3.1 (#361) * Proposal to update proof of reserve robot * payloads instead of actions * Update import * update diffs * update diff * update diff * grant risk admin role to the new executor * Update src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md Co-authored-by: Ernesto Boado * Update src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md Co-authored-by: Ernesto Boado * update aip description * Update aip text, use robot operator from address-book * aip adjusted --------- Co-authored-by: Ernesto Boado --- ...13c4d8451d75c86c61059a89fcadae7bb75bbb.svg | 1 + ...473fab824334f9cfe1ea47eb59a876b11b88de.svg | 1 + ...54667bc69aeca3483a8561e6a6507ec0f4799e.svg | 1 + ...38007c38cbca5b5e7881b886c5f1e1a3eba355.svg | 1 + ...6bad2a371ec778f6a1fbad323bf3b1bf3d2631.svg | 1 + ...e9f5b60c04ceabe6ac07495c20fc5d88de70cd.svg | 1 + ...7a2b51e8f17014c9419fa4bd8d229f8d20e54a.svg | 1 + ...PoRExecutorV3RobotCancel_20240617_after.md | 5 + ...RExecutorV3RobotRegister_20240617_after.md | 5 + ...pdatePoRExecutorV3RobotCancel_20240617.sol | 20 ++++ ...atePoRExecutorV3RobotCancel_20240617.t.sol | 43 ++++++++ ...atePoRExecutorV3RobotRegister_20240617.sol | 56 ++++++++++ ...ePoRExecutorV3RobotRegister_20240617.t.sol | 104 ++++++++++++++++++ .../UpdatePoRExecutorV3Robot.md | 50 +++++++++ .../UpdatePoRExecutorV3Robot_20240617.s.sol | 68 ++++++++++++ .../config.ts | 14 +++ .../interfaces/AggregatorV3Interface.sol | 15 +++ .../interfaces/IAaveCLRobotOperator.sol | 43 ++++++++ .../interfaces/IProofOfReserveExecutor.sol | 10 ++ 19 files changed, 440 insertions(+) create mode 100644 .assets/0613c4d8451d75c86c61059a89fcadae7bb75bbb.svg create mode 100644 .assets/38473fab824334f9cfe1ea47eb59a876b11b88de.svg create mode 100644 .assets/8054667bc69aeca3483a8561e6a6507ec0f4799e.svg create mode 100644 .assets/8c38007c38cbca5b5e7881b886c5f1e1a3eba355.svg create mode 100644 .assets/916bad2a371ec778f6a1fbad323bf3b1bf3d2631.svg create mode 100644 .assets/f7e9f5b60c04ceabe6ac07495c20fc5d88de70cd.svg create mode 100644 .assets/f97a2b51e8f17014c9419fa4bd8d229f8d20e54a.svg create mode 100644 diffs/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617_before_AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617_after.md create mode 100644 diffs/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617_before_AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617_after.md create mode 100644 src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol create mode 100644 src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol create mode 100644 src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol create mode 100644 src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol create mode 100644 src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md create mode 100644 src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot_20240617.s.sol create mode 100644 src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/config.ts create mode 100644 src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/AggregatorV3Interface.sol create mode 100644 src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/IAaveCLRobotOperator.sol create mode 100644 src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/IProofOfReserveExecutor.sol diff --git a/.assets/0613c4d8451d75c86c61059a89fcadae7bb75bbb.svg b/.assets/0613c4d8451d75c86c61059a89fcadae7bb75bbb.svg new file mode 100644 index 000000000..16dd0d0f6 --- /dev/null +++ b/.assets/0613c4d8451d75c86c61059a89fcadae7bb75bbb.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%Optimal utilization 65%Optimal utilization 65% \ No newline at end of file diff --git a/.assets/38473fab824334f9cfe1ea47eb59a876b11b88de.svg b/.assets/38473fab824334f9cfe1ea47eb59a876b11b88de.svg new file mode 100644 index 000000000..5dff1554b --- /dev/null +++ b/.assets/38473fab824334f9cfe1ea47eb59a876b11b88de.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/8054667bc69aeca3483a8561e6a6507ec0f4799e.svg b/.assets/8054667bc69aeca3483a8561e6a6507ec0f4799e.svg new file mode 100644 index 000000000..3c15ce1a6 --- /dev/null +++ b/.assets/8054667bc69aeca3483a8561e6a6507ec0f4799e.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/8c38007c38cbca5b5e7881b886c5f1e1a3eba355.svg b/.assets/8c38007c38cbca5b5e7881b886c5f1e1a3eba355.svg new file mode 100644 index 000000000..df2260094 --- /dev/null +++ b/.assets/8c38007c38cbca5b5e7881b886c5f1e1a3eba355.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/916bad2a371ec778f6a1fbad323bf3b1bf3d2631.svg b/.assets/916bad2a371ec778f6a1fbad323bf3b1bf3d2631.svg new file mode 100644 index 000000000..03283e57a --- /dev/null +++ b/.assets/916bad2a371ec778f6a1fbad323bf3b1bf3d2631.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/f7e9f5b60c04ceabe6ac07495c20fc5d88de70cd.svg b/.assets/f7e9f5b60c04ceabe6ac07495c20fc5d88de70cd.svg new file mode 100644 index 000000000..a09281518 --- /dev/null +++ b/.assets/f7e9f5b60c04ceabe6ac07495c20fc5d88de70cd.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/f97a2b51e8f17014c9419fa4bd8d229f8d20e54a.svg b/.assets/f97a2b51e8f17014c9419fa4bd8d229f8d20e54a.svg new file mode 100644 index 000000000..4a059d94f --- /dev/null +++ b/.assets/f97a2b51e8f17014c9419fa4bd8d229f8d20e54a.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617_before_AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617_after.md b/diffs/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617_before_AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617_before_AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617_before_AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617_after.md b/diffs/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617_before_AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617_before_AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol new file mode 100644 index 000000000..6d0053053 --- /dev/null +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {MiscAvalanche} from 'aave-address-book/MiscAvalanche.sol'; + +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol'; +/** + * @title Update PoR Executor V3 Robot + * @author BGD Labs (@bgdlabs) + * - Discussion: https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/42 + */ +contract AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617 is IProposalGenericExecutor { + uint256 public constant OLD_POR_ROBOT_ID = + 26365172985027002678612464504385127359853428975895609819521748772469113961166; + + function execute() external { + IAaveCLRobotOperator(MiscAvalanche.AAVE_CL_ROBOT_OPERATOR).cancel(OLD_POR_ROBOT_ID); + } +} diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol new file mode 100644 index 000000000..94506aa07 --- /dev/null +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617} from './AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol'; + +/** + * @dev Test for AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617 + * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol -vv + */ +contract AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617_Test is ProtocolV3TestBase { + AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617 internal proposal; + event KeeperCancelled(uint256 indexed id, address indexed upkeep); + + address public constant PROOF_OF_RESERVE_ROBOT_ADDRESS = + 0x7aE2930B50CFEbc99FE6DB16CE5B9C7D8d09332C; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 48662670); + proposal = new AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617', + AaveV3Avalanche.POOL, + address(proposal) + ); + } + + function test_keeperCancelled() public { + vm.expectEmit(); + emit KeeperCancelled(proposal.OLD_POR_ROBOT_ID(), PROOF_OF_RESERVE_ROBOT_ADDRESS); + + executePayload(vm, address(proposal)); + } +} diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol new file mode 100644 index 000000000..702f6e7a0 --- /dev/null +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; +import {MiscAvalanche} from 'aave-address-book/MiscAvalanche.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; +import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol'; + +/** + * @title Update PoR Executor V3 Robot + * @author BGD Labs (@bgdlabs) + * - Discussion: https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/42 + */ +contract AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617 is IProposalGenericExecutor { + using SafeERC20 for IERC20; + using SafeCast for uint256; + + uint256 public constant OLD_POR_ROBOT_ID = + 26365172985027002678612464504385127359853428975895609819521748772469113961166; + + address public constant PROOF_OF_RESERVE_ROBOT_ADDRESS = + 0x7aE2930B50CFEbc99FE6DB16CE5B9C7D8d09332C; + address public constant PROOF_OF_RESERVE_EXECUTOR_V3 = 0xB94e515615c244Ab25f7A6e592e3Cb7EE31E99F4; + uint256 public constant LINK_AMOUNT = 15 ether; + + function execute() external { + AaveV3Avalanche.ACL_MANAGER.addRiskAdmin(PROOF_OF_RESERVE_EXECUTOR_V3); + + // register new PoR robot + IAaveCLRobotOperator(MiscAvalanche.AAVE_CL_ROBOT_OPERATOR).withdrawLink(OLD_POR_ROBOT_ID); + + AaveV3Avalanche.COLLECTOR.transfer( + AaveV3AvalancheAssets.LINKe_UNDERLYING, + address(this), + LINK_AMOUNT + ); + + IERC20(AaveV3AvalancheAssets.LINKe_UNDERLYING).forceApprove( + MiscAvalanche.AAVE_CL_ROBOT_OPERATOR, + LINK_AMOUNT + ); + + IAaveCLRobotOperator(MiscAvalanche.AAVE_CL_ROBOT_OPERATOR).register( + 'Proof Of Reserve Robot V3', + PROOF_OF_RESERVE_ROBOT_ADDRESS, + abi.encode(PROOF_OF_RESERVE_EXECUTOR_V3), + 2_500_000, + LINK_AMOUNT.toUint96(), + 0, + '' + ); + } +} diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol new file mode 100644 index 000000000..512a494ab --- /dev/null +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol @@ -0,0 +1,104 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; +import {MiscAvalanche} from 'aave-address-book/MiscAvalanche.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617} from './AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol'; +import {AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617} from './AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol'; +import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol'; +import {IProofOfReserveExecutor} from './interfaces/IProofOfReserveExecutor.sol'; +import {AggregatorV3Interface} from './interfaces/AggregatorV3Interface.sol'; + +/** + * @dev Test for AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617 + * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol -vv + */ +contract AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617_Test is ProtocolV3TestBase { + AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617 internal cancelProposal; + AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617 internal proposal; + + // CL Proof of Reserve feed + address private constant PORF_AAVE = 0x14C4c668E34c09E1FBA823aD5DB47F60aeBDD4F7; + + event KeeperRegistered(uint256 indexed id, address indexed upkeep, uint96 indexed amount); + + event AssetIsNotBacked(address indexed asset); + event EmergencyActionExecuted(); + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 48662670); + cancelProposal = new AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617(); + proposal = new AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617(); + + // execute the payload to cancel the robot and withraw link to collector + executePayload(vm, address(cancelProposal)); + + // after robot cancel we need to wait for some blocks to withdraw so we fast-forward + vm.roll(block.number + 50); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617', + AaveV3Avalanche.POOL, + address(proposal) + ); + } + + function test_robotsRegistered() public { + vm.expectEmit(false, true, true, true); + emit KeeperRegistered( + uint256(0), + proposal.PROOF_OF_RESERVE_ROBOT_ADDRESS(), + uint96(proposal.LINK_AMOUNT()) + ); + + executePayload(vm, address(proposal)); + + assertTrue(AaveV3Avalanche.ACL_MANAGER.isRiskAdmin(proposal.PROOF_OF_RESERVE_EXECUTOR_V3())); + } + + function test_executeEmergencyAction() public { + // Arrange + vm.mockCall( + PORF_AAVE, + abi.encodeWithSelector(AggregatorV3Interface.latestRoundData.selector), + abi.encode(1, 99, 1, 1, 1) + ); + + IProofOfReserveExecutor executor = IProofOfReserveExecutor( + proposal.PROOF_OF_RESERVE_EXECUTOR_V3() + ); + + // Act + executePayload(vm, address(proposal)); + + vm.expectEmit(true, false, false, true); + emit AssetIsNotBacked(AaveV3AvalancheAssets.AAVEe_UNDERLYING); + + bool isEmergencyActionPossible = executor.isEmergencyActionPossible(); + assertEq(isEmergencyActionPossible, true); + + vm.expectEmit(false, false, false, true); + emit EmergencyActionExecuted(); + + executor.executeEmergencyAction(); + + // Assert + isEmergencyActionPossible = executor.isEmergencyActionPossible(); + + assertEq(isEmergencyActionPossible, false); + + (, , , , , , , , , bool isFrozen) = AaveV3Avalanche + .AAVE_PROTOCOL_DATA_PROVIDER + .getReserveConfigurationData(AaveV3AvalancheAssets.AAVEe_UNDERLYING); + + assertTrue(isFrozen); + } +} diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md new file mode 100644 index 000000000..19bbc666c --- /dev/null +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md @@ -0,0 +1,50 @@ +--- +title: "Update PoR Executor V3 Robot" +author: "BGD Labs (@bgdlabs)" +discussions: "https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/42" +--- + +## Simple Summary + +Proposal to re-enable Aave Proof of Reserve on Avalanche, after temporarily halting the system during the Aave v3.1 upgrade. + +## Motivation + +With the release of Aave V3.1, it is no longer necessary to set the asset’s LTV to zero before freezing during the execution of an emergency action on a Proof of Reserve alert, as the protocol does both actions in batch. + +Moreover, setting LTV to zero that way would break the “rollback” mechanism (pendingLtv) of LTV back to normal value on unfreeze. + +## Specification + +The proposal is separated into two payloads because multiple blocks must pass between canceling the existing Aave Robot automation and withdrawing funds from it. The order of execution is guaranteed by the fact that it is impossible to withdraw funds before the robot is canceled. + +The two payloads do the following: + +1. Cancels the existing Aave Robot automation for PoR, by calling `cancel()` on the Aave Robot operator contract. +2. Activates the new PoR system by: + + 2.1. Granting Aave v3 Avalanche RISK_ADMIN role to the new PoR executor contract, by calling `addRiskAdmin()` on the ACLManager contract. + + 2.2. Withdrawing LINK funds from the existing Robot PoR by calling `withdrawLink()` on the Robot operator contract. + + 2.3. Registering a new PoR Robot, by calling `register()` on the Robot operator contract. + + 2.4. Refilling the new PoR Robot with 15 LINK from the Aave Collector. + +The new contracts involved are the following: + +| Contract | Address | +| :----------------------------: | :-------------------------------------------------------------------------------------------------------------------: | +| Proof Of Reserve Executor V3.1 | [0xB94e515615c244Ab25f7A6e592e3Cb7EE31E99F4](https://snowscan.xyz/address/0xb94e515615c244ab25f7a6e592e3cb7ee31e99f4) | +| Proof Of Reserve Robot | [0x7aE2930B50CFEbc99FE6DB16CE5B9C7D8d09332C](https://snowscan.xyz/address/0x7ae2930b50cfebc99fe6db16ce5b9c7d8d09332c) | + +## References + +- Implementation: [AaveV3Avalanche - Cancel existing robot](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol), [AaveV3Avalanche - Register new robot](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol) +- Tests: [AaveV3Avalanche - Cancel](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol), [AaveV3Avalanche - Register](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol) +- [New Proof of Reserve Executor](https://snowscan.xyz/address/0xb94e515615c244ab25f7a6e592e3cb7ee31e99f4) +- [Discussion](https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/42) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot_20240617.s.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot_20240617.s.sol new file mode 100644 index 000000000..c05355b59 --- /dev/null +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot_20240617.s.sol @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, AvalancheScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617} from './AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol'; +import {AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617} from './AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol'; + +/** + * @dev Deploy Avalanche + * deploy-command: make deploy-ledger contract=src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot_20240617.s.sol:DeployAvalanche chain=avalanche + * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/UpdatePoRExecutorV3Robot_20240617.s.sol/43114/run-latest.json + */ +contract DeployAvalanche is AvalancheScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617).creationCode + ); + + address payload1 = GovV3Helpers.deployDeterministic( + type(AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617).creationCode + ); + + // register action at payloadsController + GovV3Helpers.createPayload(GovV3Helpers.buildAction(payload0)); + GovV3Helpers.createPayload(GovV3Helpers.buildAction(payload1)); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot_20240617.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalancheOne = new IPayloadsControllerCore.ExecutionAction[](1); + actionsAvalancheOne[0] = GovV3Helpers.buildAction( + type(AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617).creationCode + ); + payloads[0] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalancheOne); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalancheTwo = new IPayloadsControllerCore.ExecutionAction[](1); + actionsAvalancheTwo[0] = GovV3Helpers.buildAction( + type(AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617).creationCode + ); + payloads[1] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalancheTwo); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md' + ) + ); + } +} diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/config.ts b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/config.ts new file mode 100644 index 000000000..0c329a64b --- /dev/null +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/config.ts @@ -0,0 +1,14 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Avalanche'], + title: 'Update PoR Executor V3 Robot', + shortName: 'UpdatePoRExecutorV3Robot', + date: '20240617', + author: 'BGD Labs (@bgdlabs)', + discussion: '', + snapshot: '', + votingNetwork: 'POLYGON', + }, + poolOptions: {AaveV3Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 46823054}}}, +}; diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/AggregatorV3Interface.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/AggregatorV3Interface.sol new file mode 100644 index 000000000..513f4373b --- /dev/null +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/AggregatorV3Interface.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface AggregatorV3Interface { + function latestRoundData() + external + view + returns ( + uint80 roundId, + int256 answer, + uint256 startedAt, + uint256 updatedAt, + uint80 answeredInRound + ); +} diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/IAaveCLRobotOperator.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/IAaveCLRobotOperator.sol new file mode 100644 index 000000000..c1e97a7e6 --- /dev/null +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/IAaveCLRobotOperator.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +/** + * @title IAaveCLRobotOperator + * @author BGD Labs + * @notice Defines the interface for the robot operator contract to perform admin actions on the automation keepers. + **/ +interface IAaveCLRobotOperator { + /** + * @notice method called by owner to register the automation robot keeper. + * @param name name of keeper. + * @param upkeepContract upkeepContract of the keeper. + * @param upkeepCheckData checkData of the keeper which get passed to the checkUpkeep. + * @param gasLimit max gasLimit which the chainlink automation node can execute for the automation. + * @param amountToFund amount of link to fund the keeper with. + * @param triggerType type of robot keeper to register, 0 for conditional and 1 for event log based. + * @param triggerConfig encoded trigger config for event log based robots, unused for conditional type robots. + * @return chainlink id for the registered keeper. + **/ + function register( + string calldata name, + address upkeepContract, + bytes calldata upkeepCheckData, + uint32 gasLimit, + uint96 amountToFund, + uint8 triggerType, + bytes calldata triggerConfig + ) external returns (uint256); + + /** + * @notice method called by the owner to cancel the automation robot keeper. + * @param id - id of the chainlink registered keeper to cancel. + **/ + function cancel(uint256 id) external; + + /** + * @notice method called permissionlessly to withdraw link of automation robot keeper to the withdraw address. + * this method should only be called after the automation robot keeper is cancelled. + * @param id - id of the chainlink registered keeper to withdraw funds of. + **/ + function withdrawLink(uint256 id) external; +} diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/IProofOfReserveExecutor.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/IProofOfReserveExecutor.sol new file mode 100644 index 000000000..6dfb987e6 --- /dev/null +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/interfaces/IProofOfReserveExecutor.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IProofOfReserveExecutor { + function areAllReservesBacked() external view returns (bool); + + function isEmergencyActionPossible() external view returns (bool); + + function executeEmergencyAction() external; +} From 6e473f59a89b14bcb28510558f8ee44713e55c9d Mon Sep 17 00:00:00 2001 From: Cache bot Date: Fri, 9 Aug 2024 09:30:41 +0000 Subject: [PATCH 33/68] fix(cache): automated cache update [skip ci] --- .../UpdatePoRExecutorV3Robot.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md index 19bbc666c..4acd5c231 100644 --- a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot.md @@ -40,8 +40,8 @@ The new contracts involved are the following: ## References -- Implementation: [AaveV3Avalanche - Cancel existing robot](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol), [AaveV3Avalanche - Register new robot](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol) -- Tests: [AaveV3Avalanche - Cancel](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol), [AaveV3Avalanche - Register](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol) +- Implementation: [AaveV3Avalanche - Cancel existing robot](https://github.com/bgd-labs/aave-proposals-v3/blob/71b114678f8b5ec17a6342fe546bfb4bcea24755/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol), [AaveV3Avalanche - Register new robot](https://github.com/bgd-labs/aave-proposals-v3/blob/71b114678f8b5ec17a6342fe546bfb4bcea24755/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol) +- Tests: [AaveV3Avalanche - Cancel](https://github.com/bgd-labs/aave-proposals-v3/blob/71b114678f8b5ec17a6342fe546bfb4bcea24755/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol), [AaveV3Avalanche - Register](https://github.com/bgd-labs/aave-proposals-v3/blob/71b114678f8b5ec17a6342fe546bfb4bcea24755/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol) - [New Proof of Reserve Executor](https://snowscan.xyz/address/0xb94e515615c244ab25f7a6e592e3cb7ee31e99f4) - [Discussion](https://governance.aave.com/t/bgd-technical-maintenance-proposals/15274/42) From d20a01fc54bf870809a0f821db88971755a0845d Mon Sep 17 00:00:00 2001 From: Harsh Pandey Date: Wed, 14 Aug 2024 12:31:14 +0530 Subject: [PATCH 34/68] feat: zksync specific changes (#417) * chore: zksync config * chore: update gitignore * chore: update helpers lib * chore: remove default evm version * fix: generator for zksync scripts * fix: generate separate script for zkSync * fix: types * fix: remappings and foundry.toml * fix: aip generation for zksync * fix: aave helpers imports due to remapping change * fix: generator test for zksync * chore: update libs * fix: libs * Merge main into feat/zksync * fix: build * chore: update lib * fix: makefile * fix: lockfile * chore: update libs * chore: fix build * chore: update deps * fix: build --- .env.example | 2 + .gitignore | 3 +- Makefile | 5 +- foundry.toml | 24 ++++- generator/common.ts | 3 + .../__snapshots__/assetListing.spec.ts.snap | 26 +++-- .../priceFeedsUpdate.spec.ts.snap | 11 ++- .../__snapshots__/rateUpdates.spec.ts.snap | 15 +-- generator/generator.ts | 61 ++++++++---- generator/templates/aip.template.ts | 4 +- generator/templates/script.template.ts | 8 +- generator/templates/test.template.ts | 8 +- generator/templates/zksync.script.template.ts | 97 +++++++++++++++++++ generator/types.ts | 13 +++ generator/utils/importsResolver.spec.ts | 6 +- generator/utils/importsResolver.ts | 10 +- lib/aave-helpers | 2 +- package.json | 2 +- remappings.txt | 2 +- ...veV3Arbitrum_MayFundingUpdate_20240603.sol | 2 +- ...V3Arbitrum_MayFundingUpdate_20240603.t.sol | 2 +- ...veV3Ethereum_MayFundingUpdate_20240603.sol | 6 +- ...V3Ethereum_MayFundingUpdate_20240603.t.sol | 2 +- ...veV3Optimism_MayFundingUpdate_20240603.sol | 2 +- ...V3Optimism_MayFundingUpdate_20240603.t.sol | 2 +- ...aveV3Polygon_MayFundingUpdate_20240603.sol | 2 +- ...eV3Polygon_MayFundingUpdate_20240603.t.sol | 2 +- .../MayFundingUpdate_20240603.s.sol | 2 +- ...pdatePoRExecutorV3RobotCancel_20240617.sol | 2 +- ...atePoRExecutorV3RobotCancel_20240617.t.sol | 2 +- ...atePoRExecutorV3RobotRegister_20240617.sol | 2 +- ...ePoRExecutorV3RobotRegister_20240617.t.sol | 2 +- .../UpdatePoRExecutorV3Robot_20240617.s.sol | 2 +- ...hereum_ToolingUpdateAllowance_20240707.sol | 2 +- ...reum_ToolingUpdateAllowance_20240707.t.sol | 2 +- .../ToolingUpdateAllowance_20240707.s.sol | 2 +- ...s_RenewalOfAaveGuardian2024_20240708.t.sol | 2 +- .../RenewalOfAaveGuardian2024_20240708.s.sol | 2 +- .../RenewalV2BasePayload.sol | 2 +- .../RenewalV2BaseTest.sol | 2 +- .../RenewalV3BasePayload.sol | 2 +- .../RenewalV3BaseTest.sol | 2 +- .../ADIShuffleUpdate_20240709.s.sol | 2 +- ...e_ReserveFactorUpdatesMidJuly_20240711.sol | 2 +- ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 2 +- ...m_ReserveFactorUpdatesMidJuly_20240711.sol | 2 +- ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 2 +- ...n_ReserveFactorUpdatesMidJuly_20240711.sol | 6 +- ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 2 +- ...m_ReserveFactorUpdatesMidJuly_20240711.sol | 2 +- ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 2 +- ...e_ReserveFactorUpdatesMidJuly_20240711.sol | 2 +- ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 2 +- ...m_ReserveFactorUpdatesMidJuly_20240711.sol | 2 +- ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 2 +- ...n_ReserveFactorUpdatesMidJuly_20240711.sol | 2 +- ...ReserveFactorUpdatesMidJuly_20240711.t.sol | 2 +- ...ReserveFactorUpdatesMidJuly_20240711.s.sol | 2 +- ...m_ReduceReserveFactorOnWstETH_20240716.sol | 2 +- ...ReduceReserveFactorOnWstETH_20240716.t.sol | 2 +- ...e_ReduceReserveFactorOnWstETH_20240716.sol | 2 +- ...ReduceReserveFactorOnWstETH_20240716.t.sol | 2 +- ...m_ReduceReserveFactorOnWstETH_20240716.sol | 2 +- ...ReduceReserveFactorOnWstETH_20240716.t.sol | 2 +- ...s_ReduceReserveFactorOnWstETH_20240716.sol | 2 +- ...ReduceReserveFactorOnWstETH_20240716.t.sol | 2 +- ...m_ReduceReserveFactorOnWstETH_20240716.sol | 2 +- ...ReduceReserveFactorOnWstETH_20240716.t.sol | 2 +- ...n_ReduceReserveFactorOnWstETH_20240716.sol | 2 +- ...ReduceReserveFactorOnWstETH_20240716.t.sol | 2 +- ...l_ReduceReserveFactorOnWstETH_20240716.sol | 2 +- ...ReduceReserveFactorOnWstETH_20240716.t.sol | 2 +- ...ReduceReserveFactorOnWstETH_20240716.s.sol | 2 +- ...V3Gnosis_OnboardUSDCEOnGnosis_20240717.sol | 2 +- ...Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol | 4 +- .../OnboardUSDCEOnGnosis_20240717.s.sol | 2 +- ...aveV3Ethereum_EventsGrant2024_20240718.sol | 2 +- ...eV3Ethereum_EventsGrant2024_20240718.t.sol | 2 +- .../EventsGrant2024_20240718.s.sol | 2 +- ...idoEthereumInstanceActivation_20240720.sol | 2 +- ...oEthereumInstanceActivation_20240720.t.sol | 4 +- ...oEthereumInstanceActivation_20240720.s.sol | 2 +- ...ncreaseGHOFacilitatorCapacity_20240722.sol | 2 +- ...reaseGHOFacilitatorCapacity_20240722.t.sol | 4 +- ...reaseGHOFacilitatorCapacity_20240722.t.sol | 4 +- ...ncreaseGHOFacilitatorCapacity_20240722.sol | 2 +- ...reaseGHOFacilitatorCapacity_20240722.t.sol | 2 +- ...reaseGHOFacilitatorCapacity_20240722.s.sol | 2 +- ...viceProviderPartnershipPhase2_20240723.sol | 2 +- ...ceProviderPartnershipPhase2_20240723.t.sol | 2 +- ...ceProviderPartnershipPhase2_20240723.s.sol | 2 +- ...UpdatesSAVAXOnAaveV3Avalanche_20240724.sol | 2 +- ...datesSAVAXOnAaveV3Avalanche_20240724.t.sol | 2 +- ...datesSAVAXOnAaveV3Avalanche_20240724.s.sol | 2 +- .../ADIZkSyncPathActivation_20240726.s.sol | 2 +- ...boardingWeETHToAaveV3OnScroll_20240731.sol | 2 +- ...ardingWeETHToAaveV3OnScroll_20240731.t.sol | 4 +- ...ardingWeETHToAaveV3OnScroll_20240731.s.sol | 2 +- ...seUSDeDebtCeilingOnV3Ethereum_20240801.sol | 2 +- ...USDeDebtCeilingOnV3Ethereum_20240801.t.sol | 2 +- ...USDeDebtCeilingOnV3Ethereum_20240801.s.sol | 2 +- ..._WETHLTV0AaveV3LidoInstance_20240729.s.sol | 2 +- ...do_WETHLTV0AaveV3LidoInstance_20240729.sol | 4 +- ..._WETHLTV0AaveV3LidoInstance_20240729.t.sol | 2 +- yarn.lock | 10 +- 105 files changed, 338 insertions(+), 164 deletions(-) create mode 100644 generator/templates/zksync.script.template.ts diff --git a/.env.example b/.env.example index 2cc581d92..a387a95cc 100644 --- a/.env.example +++ b/.env.example @@ -19,6 +19,7 @@ RPC_ZKEVM=https://zkevm-rpc.com RPC_GNOSIS=https://rpc.ankr.com/gnosis RPC_BNB=https://binance.llamarpc.com RPC_SCROLL=https://rpc.scroll.io +RPC_ZK_SYNC=https://mainnet.era.zksync.io # Etherscan api keys for verification & download utils ETHERSCAN_API_KEY_MAINNET= @@ -32,6 +33,7 @@ ETHERSCAN_API_KEY_ZKEVM= ETHERSCAN_API_KEY_GNOSIS= ETHERSCAN_API_KEY_BNB= ETHERSCAN_API_KEY_SCROLL= +ETHERESCAN_API_KEY_ZK_SYNC= # Simulation/fork creation TENDERLY_ACCESS_TOKEN= diff --git a/.gitignore b/.gitignore index 91d74edc1..7415e074f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ # build and cache cache/ out/ +zkout/ # general .env @@ -22,4 +23,4 @@ broadcast/ reports/ # tooling download folder -etherscan \ No newline at end of file +etherscan diff --git a/Makefile b/Makefile index 9140c8fa3..83a687a38 100644 --- a/Makefile +++ b/Makefile @@ -12,9 +12,8 @@ test :; forge test -vvv test-contract :; forge test --match-contract ${filter} -vv # Deploy -deploy-ledger :; FOUNDRY_PROFILE=${chain} forge script ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x25F2226B597E8F9514B3F68F00f494cF4f286491 -vvvv, --ledger --mnemonic-indexes ${MNEMONIC_INDEX} --sender ${LEDGER_SENDER} --verify -vvvv --slow --broadcast) -deploy-pk :; FOUNDRY_PROFILE=${chain} forge script ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x25F2226B597E8F9514B3F68F00f494cF4f286491 -vvvv, --private-key ${PRIVATE_KEY} --verify -vvvv --slow --broadcast) - +deploy-ledger :; FOUNDRY_PROFILE=${chain} forge script $(if $(filter zksync,${chain}),--zksync) ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x25F2226B597E8F9514B3F68F00f494cF4f286491 -vvvv, --ledger --mnemonic-indexes ${MNEMONIC_INDEX} --sender ${LEDGER_SENDER} --verify -vvvv --slow --broadcast) +deploy-pk :; FOUNDRY_PROFILE=${chain} forge script $(if $(filter zksync,${chain}),--zksync) ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x25F2226B597E8F9514B3F68F00f494cF4f286491 -vvvv, --private-key ${PRIVATE_KEY} --verify -vvvv --slow --broadcast) # Utilities download :; cast etherscan-source --chain ${chain} -d src/etherscan/${chain}_${address} ${address} diff --git a/foundry.toml b/foundry.toml index f4b730bc7..427563361 100644 --- a/foundry.toml +++ b/foundry.toml @@ -9,9 +9,25 @@ libs = ['lib'] remappings = [ ] ffi = true +fs_permissions = [{ access = "write", path = "./reports" }, { access = "read", path = "./zkout" }] +evm_version = 'shanghai' + +[profile.zksync] +src = 'zksync' +test = 'zksync' +libs = ['lib'] +solc = '0.8.20' fs_permissions = [{ access = "write", path = "./reports" }] +ffi = true evm_version = 'shanghai' +[profile.zksync.zksync] +bytecode_hash = 'none' +compile = true +fallback_oz = true +mode = '3' +zksolc = '1.5.1' + # incomplete list at https://www.evmdiff.com/features?name=PUSH0&kind=opcode [profile.metis] evm_version = 'paris' @@ -53,7 +69,8 @@ base = "${RPC_BASE}" zkevm = "${RPC_ZKEVM}" gnosis = "${RPC_GNOSIS}" bnb = "${RPC_BNB}" -scroll="${RPC_SCROLL}" +scroll = "${RPC_SCROLL}" +zksync = "${RPC_ZK_SYNC}" [etherscan] mainnet = { key="${ETHERSCAN_API_KEY_MAINNET}", chain=1 } @@ -66,7 +83,8 @@ metis = { key="any", chainId=1088, url='https://andromeda-explorer.metis.io/' } base = { key="${ETHERSCAN_API_KEY_BASE}", chainId=8453 } zkevm = { key="${ETHERSCAN_API_KEY_ZKEVM}", chainId=1101 } gnosis = { key="${ETHERSCAN_API_KEY_GNOSIS}", chainId=100 } -bnb= { key="${ETHERSCAN_API_KEY_BNB}",chainId=56,url='https://api.bscscan.com/api'} -scroll={key="${ETHERSCAN_API_KEY_SCROLL}",chainId=534352} +bnb = { key="${ETHERSCAN_API_KEY_BNB}", chainId=56, url='https://api.bscscan.com/api'} +scroll = { key="${ETHERSCAN_API_KEY_SCROLL}", chainId=534352 } +zksync = { key="${ETHERSCAN_API_KEY_ZK_SYNC}", chain = 324 } # See more config options https://github.com/gakonst/foundry/tree/master/config diff --git a/generator/common.ts b/generator/common.ts index e9ccf527a..0e9657700 100644 --- a/generator/common.ts +++ b/generator/common.ts @@ -11,6 +11,7 @@ import { bsc, gnosis, scroll, + zkSync, } from 'viem/chains'; export const AVAILABLE_CHAINS = [ @@ -26,6 +27,7 @@ export const AVAILABLE_CHAINS = [ 'BNB', 'Gnosis', 'Scroll', + 'ZkSync', ] as const; export function getAssets(pool: PoolIdentifier): string[] { @@ -117,6 +119,7 @@ export const CHAIN_TO_CHAIN_ID = { BNB: bsc.id, Gnosis: gnosis.id, Scroll: scroll.id, + ZkSync: zkSync.id, }; export function flagAsRequired(message: string, required?: boolean) { diff --git a/generator/features/__snapshots__/assetListing.spec.ts.snap b/generator/features/__snapshots__/assetListing.spec.ts.snap index 2ca15dfb4..51da2df28 100644 --- a/generator/features/__snapshots__/assetListing.spec.ts.snap +++ b/generator/features/__snapshots__/assetListing.spec.ts.snap @@ -111,7 +111,7 @@ export const config: ConfigFile = { pragma solidity ^0.8.0; import {AaveV3Ethereum, AaveV3EthereumEModes} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; @@ -166,15 +166,16 @@ contract AaveV3Ethereum_Test_20231023 is AaveV3PayloadEthereum { } } ", + "pool": "AaveV3Ethereum", "test": "// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; /** @@ -207,10 +208,11 @@ contract AaveV3Ethereum_Test_20231023_Test is ProtocolV3TestBase { ", }, ], - "script": "// SPDX-License-Identifier: MIT + "scripts": { + "defaultScript": "// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; @@ -263,6 +265,7 @@ contract CreateProposal is EthereumScript { } } ", + }, } `; @@ -377,7 +380,7 @@ export const config: ConfigFile = { pragma solidity ^0.8.0; import {AaveV3Ethereum, AaveV3EthereumEModes} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; @@ -432,15 +435,16 @@ contract AaveV3Ethereum_Test_20231023 is AaveV3PayloadEthereum { } } ", + "pool": "AaveV3Ethereum", "test": "// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; /** @@ -473,10 +477,11 @@ contract AaveV3Ethereum_Test_20231023_Test is ProtocolV3TestBase { ", }, ], - "script": "// SPDX-License-Identifier: MIT + "scripts": { + "defaultScript": "// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; @@ -529,6 +534,7 @@ contract CreateProposal is EthereumScript { } } ", + }, } `; diff --git a/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap b/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap index a0debac55..a251ef0e3 100644 --- a/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap +++ b/generator/features/__snapshots__/priceFeedsUpdate.spec.ts.snap @@ -56,7 +56,7 @@ export const config: ConfigFile = { pragma solidity ^0.8.0; import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** * @title test @@ -83,13 +83,14 @@ contract AaveV3Ethereum_Test_20231023 is AaveV3PayloadEthereum { } } ", + "pool": "AaveV3Ethereum", "test": "// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; /** @@ -114,10 +115,11 @@ contract AaveV3Ethereum_Test_20231023_Test is ProtocolV3TestBase { ", }, ], - "script": "// SPDX-License-Identifier: MIT + "scripts": { + "defaultScript": "// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_Test_20231023} from './AaveV3Ethereum_Test_20231023.sol'; @@ -170,6 +172,7 @@ contract CreateProposal is EthereumScript { } } ", + }, } `; diff --git a/generator/features/__snapshots__/rateUpdates.spec.ts.snap b/generator/features/__snapshots__/rateUpdates.spec.ts.snap index 166da8b4e..3f272ac8e 100644 --- a/generator/features/__snapshots__/rateUpdates.spec.ts.snap +++ b/generator/features/__snapshots__/rateUpdates.spec.ts.snap @@ -110,10 +110,10 @@ export const config: ConfigFile = { pragma solidity ^0.8.0; import {AaveV2EthereumAMMAssets} from 'aave-address-book/AaveV2EthereumAMM.sol'; -import {AaveV2PayloadEthereumAMM} from 'aave-helpers/v2-config-engine/AaveV2PayloadEthereumAMM.sol'; +import {AaveV2PayloadEthereumAMM} from 'aave-helpers/src/v2-config-engine/AaveV2PayloadEthereumAMM.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; -import {IAaveV2ConfigEngine} from 'aave-helpers/v2-config-engine/IAaveV2ConfigEngine.sol'; -import {IV2RateStrategyFactory} from 'aave-helpers/v2-config-engine/IV2RateStrategyFactory.sol'; +import {IAaveV2ConfigEngine} from 'aave-helpers/src/v2-config-engine/IAaveV2ConfigEngine.sol'; +import {IV2RateStrategyFactory} from 'aave-helpers/src/v2-config-engine/IV2RateStrategyFactory.sol'; /** * @title test * @author test @@ -189,13 +189,14 @@ contract AaveV2EthereumAMM_Test_20231023 is AaveV2PayloadEthereumAMM { } } ", + "pool": "AaveV2EthereumAMM", "test": "// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {AaveV2EthereumAMM} from 'aave-address-book/AaveV2EthereumAMM.sol'; import 'forge-std/Test.sol'; -import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; import {AaveV2EthereumAMM_Test_20231023} from './AaveV2EthereumAMM_Test_20231023.sol'; /** @@ -220,10 +221,11 @@ contract AaveV2EthereumAMM_Test_20231023_Test is ProtocolV2TestBase { ", }, ], - "script": "// SPDX-License-Identifier: MIT + "scripts": { + "defaultScript": "// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV2EthereumAMM_Test_20231023} from './AaveV2EthereumAMM_Test_20231023.sol'; @@ -278,6 +280,7 @@ contract CreateProposal is EthereumScript { } } ", + }, } `; diff --git a/generator/generator.ts b/generator/generator.ts index 6b3004ac0..d5e3c96d2 100644 --- a/generator/generator.ts +++ b/generator/generator.ts @@ -4,22 +4,16 @@ import {generateContractName, generateFolderName} from './common'; import {proposalTemplate} from './templates/proposal.template'; import {testTemplate} from './templates/test.template'; import {confirm} from '@inquirer/prompts'; -import {ConfigFile, Options, PoolConfigs, PoolIdentifier} from './types'; +import {ConfigFile, Options, PoolConfigs, PoolIdentifier, Scripts, Files} from './types'; import prettier from 'prettier'; import {generateScript} from './templates/script.template'; +import {generateZkSyncScript} from './templates/zksync.script.template'; import {generateAIP} from './templates/aip.template'; const prettierSolCfg = await prettier.resolveConfig('foo.sol'); const prettierMDCfg = await prettier.resolveConfig('foo.md'); const prettierTsCfg = await prettier.resolveConfig('foo.ts'); -type Files = { - jsonConfig: string; - script: string; - aip: string; - payloads: {payload: string; test: string; contractName: string}[]; -}; - /** * Generates all the file contents for aip/tests/payloads & script * @param options @@ -42,7 +36,9 @@ export async function generateFiles(options: Options, poolConfigs: PoolConfigs): async function createPayloadAndTest(options: Options, pool: PoolIdentifier) { const contractName = generateContractName(options, pool); const testCode = testTemplate(options, poolConfigs[pool]!, pool); + return { + pool, payload: await prettier.format(proposalTemplate(options, poolConfigs[pool]!, pool), { ...prettierSolCfg, filepath: 'foo.sol', @@ -56,10 +52,19 @@ export async function generateFiles(options: Options, poolConfigs: PoolConfigs): } console.log('generating script'); - const script = await prettier.format(generateScript(options), { - ...prettierSolCfg, - filepath: 'foo.sol', - }); + let scripts: Scripts = { + defaultScript: await prettier.format(generateScript(options), { + ...prettierSolCfg, + filepath: 'foo.sol', + }), + }; + if (Object.keys(poolConfigs).includes('AaveV3ZkSync')) { + scripts.zkSyncScript = await prettier.format(generateZkSyncScript(options), { + ...prettierSolCfg, + filepath: 'foo.sol', + }); + } + console.log('generating aip'); const aip = await prettier.format(generateAIP(options, poolConfigs), { ...prettierMDCfg, @@ -68,7 +73,7 @@ export async function generateFiles(options: Options, poolConfigs: PoolConfigs): return { jsonConfig, - script, + scripts, aip, payloads: await Promise.all(options.pools.map((pool) => createPayloadAndTest(options, pool))), }; @@ -93,10 +98,12 @@ async function askBeforeWrite(options: Options, path: string, content: string) { * @param options * @param param1 */ -export async function writeFiles(options: Options, {jsonConfig, script, aip, payloads}: Files) { +export async function writeFiles(options: Options, {jsonConfig, scripts, aip, payloads}: Files) { const baseName = generateFolderName(options); const baseFolder = path.join(process.cwd(), 'src', baseName); - if (fs.existsSync(baseFolder)) { + const zkSyncBaseFolder = path.join(process.cwd(), 'zksync/src', baseName); + + if (fs.existsSync(baseFolder) || (scripts.zkSyncScript && fs.existsSync(zkSyncBaseFolder))) { if (!options.force && fs.existsSync(baseFolder)) { const force = await confirm({ message: 'A proposal already exists at that location, do you want to continue?', @@ -106,6 +113,7 @@ export async function writeFiles(options: Options, {jsonConfig, script, aip, pay } } else { fs.mkdirSync(baseFolder, {recursive: true}); + if (scripts.zkSyncScript) fs.mkdirSync(zkSyncBaseFolder, {recursive: true}); } // write config @@ -116,11 +124,26 @@ export async function writeFiles(options: Options, {jsonConfig, script, aip, pay await askBeforeWrite( options, path.join(baseFolder, `${generateContractName(options)}.s.sol`), - script, + scripts.defaultScript, ); + if (scripts.zkSyncScript) { + await askBeforeWrite( + options, + path.join(zkSyncBaseFolder, `${generateContractName(options)}.s.sol`), + scripts.zkSyncScript, + ); + } - for (const {payload, test, contractName} of payloads) { - await askBeforeWrite(options, path.join(baseFolder, `${contractName}.sol`), payload); - await askBeforeWrite(options, path.join(baseFolder, `${contractName}.t.sol`), test); + for (const {pool, payload, test, contractName} of payloads) { + await askBeforeWrite( + options, + path.join(pool === 'AaveV3ZkSync' ? zkSyncBaseFolder : baseFolder, `${contractName}.sol`), + payload, + ); + await askBeforeWrite( + options, + path.join(pool === 'AaveV3ZkSync' ? zkSyncBaseFolder : baseFolder, `${contractName}.t.sol`), + test, + ); } } diff --git a/generator/templates/aip.template.ts b/generator/templates/aip.template.ts index 4a0596ce9..41b90fcf6 100644 --- a/generator/templates/aip.template.ts +++ b/generator/templates/aip.template.ts @@ -30,7 +30,7 @@ ${Object.keys(configs) - Implementation: ${options.pools .map( (pool) => - `[${pool}](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/${generateFolderName( + `[${pool}](https://github.com/bgd-labs/aave-proposals-v3/blob/main/${pool === 'AaveV3ZkSync' ? 'zksync/src' : 'src'}/${generateFolderName( options, )}/${generateContractName(options, pool)}.sol)`, ) @@ -38,7 +38,7 @@ ${Object.keys(configs) - Tests: ${options.pools .map( (pool) => - `[${pool}](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/${generateFolderName( + `[${pool}](https://github.com/bgd-labs/aave-proposals-v3/blob/main/${pool === 'AaveV3ZkSync' ? 'zksync/src' : 'src'}/${generateFolderName( options, )}/${generateContractName(options, pool)}.t.sol)`, ) diff --git a/generator/templates/script.template.ts b/generator/templates/script.template.ts index 47ad1fc3d..600e50cba 100644 --- a/generator/templates/script.template.ts +++ b/generator/templates/script.template.ts @@ -18,10 +18,11 @@ export function generateScript(options: Options) { const chains = [...new Set(options.pools.map((pool) => getPoolChain(pool)!))]; // generate imports - template += `import {${['Ethereum', ...chains.filter((c) => c !== 'Ethereum')] + template += `import {${['Ethereum', ...chains.filter((c) => c !== 'Ethereum' && c !== 'ZkSync')] .map((chain) => `${chain}Script`) .join(', ')}} from 'solidity-utils/contracts/utils/ScriptUtils.sol';\n`; template += options.pools + .filter((c) => c !== 'AaveV3ZkSync') .map((pool) => { const name = generateContractName(options, pool); return `import {${name}} from './${name}.sol';`; @@ -39,6 +40,7 @@ export function generateScript(options: Options) { // generate chain scripts template += Object.keys(poolsToChainsMap) + .filter((c) => c !== 'ZkSync') .map((chain) => { return `/** * @dev Deploy ${chain} @@ -95,7 +97,9 @@ contract CreateProposal is EthereumScript { let template = `IPayloadsControllerCore.ExecutionAction[] memory actions${chain} = new IPayloadsControllerCore.ExecutionAction[](${poolsToChainsMap[chain].length});\n`; template += poolsToChainsMap[chain] .map(({contractName, pool}, ix) => { - return `actions${chain}[${ix}] = GovV3Helpers.buildAction(type(${contractName}).creationCode);`; + return pool == 'AaveV3ZkSync' + ? `actions${chain}[${ix}] = GovV3Helpers.buildActionZkSync(vm, '${contractName}');` + : `actions${chain}[${ix}] = GovV3Helpers.buildAction(type(${contractName}).creationCode);`; }) .join('\n'); template += `payloads[${ix}] = GovV3Helpers.build${ diff --git a/generator/templates/test.template.ts b/generator/templates/test.template.ts index f9b21c1a9..ad45537dd 100644 --- a/generator/templates/test.template.ts +++ b/generator/templates/test.template.ts @@ -24,19 +24,21 @@ export const testTemplate = (options: Options, poolConfig: PoolConfig, pool: Poo let template = ` import 'forge-std/Test.sol'; -import {${testBase}, ReserveConfig} from 'aave-helpers/${testBase}.sol'; +import {${testBase}, ReserveConfig} from 'aave-helpers/${chain === 'ZkSync' ? 'zksync/src/' : 'src/'}${testBase}.sol'; import {${contractName}} from './${contractName}.sol'; /** * @dev Test for ${contractName} - * command: FOUNDRY_PROFILE=${getChainAlias(chain)} forge test --match-path=src/${folderName}/${contractName}.t.sol -vv + * command: FOUNDRY_PROFILE=${getChainAlias(chain)} forge test ${chain === 'ZkSync' ? '--zksync --match-path=zksync/src/' : '--match-path=src/'}${folderName}/${contractName}.t.sol -vv */ contract ${contractName}_Test is ${testBase} { ${contractName} internal proposal; - function setUp() public { + function setUp() public ${chain === 'ZkSync' ? 'override' : ''} { vm.createSelectFork(vm.rpcUrl('${getChainAlias(chain)}'), ${poolConfig.cache.blockNumber}); proposal = new ${contractName}(); + + ${chain === 'ZkSync' ? 'super.setUp();' : ''} } /** diff --git a/generator/templates/zksync.script.template.ts b/generator/templates/zksync.script.template.ts new file mode 100644 index 000000000..a6bb2a51e --- /dev/null +++ b/generator/templates/zksync.script.template.ts @@ -0,0 +1,97 @@ +import { + CHAIN_TO_CHAIN_ID, + generateContractName, + generateFolderName, + getChainAlias, + getPoolChain, +} from '../common'; +import {Options} from '../types'; +import {prefixWithImports} from '../utils/importsResolver'; +import {prefixWithPragma} from '../utils/constants'; + +export function generateZkSyncScript(options: Options) { + const folderName = generateFolderName(options); + const fileName = generateContractName(options); + const zkSyncPools = options.pools.filter((c) => c == 'AaveV3ZkSync'); + + const chain = 'ZkSync'; + let template = ''; + + // generate imports + template += `import {ZkSyncScript} from 'aave-helpers/src/ScriptUtils.sol';\n`; + + template += zkSyncPools + .map((pool) => { + const name = generateContractName(options, pool); + return `import {${name}} from './${name}.sol';`; + }) + .join('\n'); + template += '\n\n'; + + const poolsToChainsMap = zkSyncPools.reduce((acc, pool) => { + const chain = getPoolChain(pool); + const contractName = generateContractName(options, pool); + if (!acc[chain]) acc[chain] = []; + acc[chain].push({contractName, pool}); + return acc; + }, {}); + + // generate zksync wrapper contract for deploying payloads + template += ` + ${poolsToChainsMap[chain] + .map( + ({contractName}) => + ` + // @dev wrapper factory contract for deploying the payload + contract Deploy_${contractName} { + address public immutable PAYLOAD; + + constructor() { + PAYLOAD = GovV3Helpers.deployDeterministicZkSync( + type(${contractName}).creationCode + ); + } + }`, + ) + .join('\n')} + `; + template += '\n\n'; + + // generate chain scripts + template += `/** + * @dev Deploy ${chain} + * deploy-command: make deploy-ledger contract=zksync/src/${folderName}/${fileName}.s.sol:Deploy${chain} chain=${getChainAlias( + chain, + )} + * verify-command: FOUNDRY_PROFILE=${getChainAlias(chain)} npx catapulta-verify -b broadcast/${fileName}.s.sol/${ + CHAIN_TO_CHAIN_ID[chain] + }/run-latest.json + */ + contract Deploy${chain} is ${chain}Script { + function run() external broadcast { + // deploy payloads + ${poolsToChainsMap[chain] + .map( + ({contractName, pool}, ix) => + `address payload${ix} = new Deploy_${contractName}().PAYLOAD();`, + ) + .join('\n')} + + // compose action + IPayloadsControllerCore.ExecutionAction[] memory actions = new IPayloadsControllerCore.ExecutionAction[](${ + poolsToChainsMap[chain].length + }); + ${poolsToChainsMap[chain] + .map( + ({contractName, pool}, ix) => `actions[${ix}] = GovV3Helpers.buildAction(payload${ix});`, + ) + .join('\n')} + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } + }`; + template += '\n\n'; + + return prefixWithPragma(prefixWithImports(template)); +} diff --git a/generator/types.ts b/generator/types.ts index ece496415..0bd86cfad 100644 --- a/generator/types.ts +++ b/generator/types.ts @@ -33,6 +33,7 @@ export const V3_POOLS = [ 'AaveV3Gnosis', 'AaveV3Scroll', 'AaveV3BNB', + 'AaveV3ZkSync', ] as const satisfies readonly (keyof typeof addressBook)[]; export const POOLS = [ @@ -138,3 +139,15 @@ export interface PoolConfig { }; cache: PoolCache; } + +export type Scripts = { + defaultScript: string; + zkSyncScript?: string; +}; + +export type Files = { + jsonConfig: string; + scripts: Scripts; + aip: string; + payloads: {pool: PoolIdentifier; payload: string; test: string; contractName: string}[]; +}; diff --git a/generator/utils/importsResolver.spec.ts b/generator/utils/importsResolver.spec.ts index 42b7d0dba..926309b00 100644 --- a/generator/utils/importsResolver.spec.ts +++ b/generator/utils/importsResolver.spec.ts @@ -5,13 +5,13 @@ import {prefixWithImports} from './importsResolver'; describe('prefixWithImports', () => { it('should resolve IProposalGenericExecutor', () => { expect(prefixWithImports(`is IProposalGenericExecutor {`)).toContain( - `import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';`, + `import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol';`, ); }); it('should resolve Engine imports', () => { expect(prefixWithImports(`GovV3Helpers.createPayload`)).toContain( - `import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol';`, + `import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol';`, ); }); @@ -28,7 +28,7 @@ describe('prefixWithImports', () => { it('should detect v2 Engine imports', () => { const result = prefixWithImports('IAaveV2ConfigEngine.RateStrategyUpdate'); expect(result).toContain( - `import {IAaveV2ConfigEngine} from 'aave-helpers/v2-config-engine/IAaveV2ConfigEngine.sol';`, + `import {IAaveV2ConfigEngine} from 'aave-helpers/src/v2-config-engine/IAaveV2ConfigEngine.sol';`, ); }); diff --git a/generator/utils/importsResolver.ts b/generator/utils/importsResolver.ts index 55e1f33a3..45cdbe4a1 100644 --- a/generator/utils/importsResolver.ts +++ b/generator/utils/importsResolver.ts @@ -39,7 +39,7 @@ function generateAddressBookImports(code: string) { function generateEngineImport(code: string) { const matches = [...code.matchAll(/Aave(V[2..3])Payload([A-Za-z]+)/g)].flat(); if (matches.length > 0) - return `import {${matches[0]}} from 'aave-helpers/${matches[1].toLowerCase()}-config-engine/${ + return `import {${matches[0]}} from 'aave-helpers/src/${matches[1].toLowerCase()}-config-engine/${ matches[0] }.sol';\n`; } @@ -62,7 +62,7 @@ export function prefixWithImports(code: string) { const govMatches = findMatches(code, GovernanceImports); // gov related imports if (govMatches.length > 0) - imports += `import {${govMatches}} from 'aave-helpers/GovV3Helpers.sol';\n`; + imports += `import {${govMatches}} from 'aave-helpers/src/GovV3Helpers.sol';\n`; // address book imports const addressBookImports = generateAddressBookImports(code); if (addressBookImports) { @@ -70,7 +70,7 @@ export function prefixWithImports(code: string) { } // generic Executor if (findMatch(code, 'IProposalGenericExecutor')) { - imports += `import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol';\n`; + imports += `import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol';\n`; } const configEngineImport = generateEngineImport(code); if (configEngineImport) { @@ -86,10 +86,10 @@ export function prefixWithImports(code: string) { } // v2 config engine imports if (findMatch(code, 'IAaveV2ConfigEngine')) { - imports += `import {IAaveV2ConfigEngine} from 'aave-helpers/v2-config-engine/IAaveV2ConfigEngine.sol';\n`; + imports += `import {IAaveV2ConfigEngine} from 'aave-helpers/src/v2-config-engine/IAaveV2ConfigEngine.sol';\n`; } if (findMatch(code, 'IV2RateStrategyFactory')) { - imports += `import {IV2RateStrategyFactory} from 'aave-helpers/v2-config-engine/IV2RateStrategyFactory.sol';\n`; + imports += `import {IV2RateStrategyFactory} from 'aave-helpers/src/v2-config-engine/IV2RateStrategyFactory.sol';\n`; } // common imports if (findMatch(code, 'IERC20')) { diff --git a/lib/aave-helpers b/lib/aave-helpers index 989c0363b..31c1e879d 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit 989c0363bca0937433adff03333514ec12faa1d8 +Subproject commit 31c1e879ddb8a8c85557454c4ec95c4957397567 diff --git a/package.json b/package.json index 37b755e5c..24bc10bad 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "vitest": "^2.0.4" }, "dependencies": { - "@bgd-labs/aave-address-book": "^3.0.4", + "@bgd-labs/aave-address-book": "3.1.1", "@bgd-labs/aave-cli": "0.16.2", "@bgd-labs/js-utils": "^1.4.2", "@inquirer/prompts": "^3.3.0", diff --git a/remappings.txt b/remappings.txt index 293ebab0f..03cc8b08c 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,5 +1,5 @@ aave-address-book/=lib/aave-helpers/lib/aave-address-book/src/ -aave-helpers/=lib/aave-helpers/src/ +aave-helpers/=lib/aave-helpers/ aave-v3-core/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src/core/ aave-v3-periphery/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src/periphery/ aave-v3-origin/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/src/ diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol index 6b886a48b..43e40f1bc 100644 --- a/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol +++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol index 7595793fa..6d9eb0d31 100644 --- a/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol +++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Arbitrum_MayFundingUpdate_20240603.t.sol @@ -7,7 +7,7 @@ import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import 'forge-std/Test.sol'; import {stdStorage, StdStorage} from 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Arbitrum_MayFundingUpdate_20240603} from './AaveV3Arbitrum_MayFundingUpdate_20240603.sol'; contract GatewayMock { diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol index 998d985ca..87c2a01d2 100644 --- a/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol +++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {AaveSwapper} from 'aave-helpers/swaps/AaveSwapper.sol'; -import {IAaveWstethWithdrawer} from 'aave-helpers/asset-manager/interfaces/IAaveWstethWithdrawer.sol'; +import {AaveSwapper} from 'aave-helpers/src/swaps/AaveSwapper.sol'; +import {IAaveWstethWithdrawer} from 'aave-helpers/src/asset-manager/interfaces/IAaveWstethWithdrawer.sol'; /** * @title May Funding Update diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol index 939c48e12..4d7a92891 100644 --- a/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol +++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Ethereum_MayFundingUpdate_20240603.t.sol @@ -5,7 +5,7 @@ import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethe import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum_MayFundingUpdate_20240603} from './AaveV3Ethereum_MayFundingUpdate_20240603.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol index 18b2f92d7..532abef78 100644 --- a/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol +++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {AaveV3Optimism, AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol index 4442364d3..0a611bf6f 100644 --- a/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol +++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Optimism_MayFundingUpdate_20240603.t.sol @@ -7,7 +7,7 @@ import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import 'forge-std/Test.sol'; import {stdStorage, StdStorage} from 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Optimism_MayFundingUpdate_20240603} from './AaveV3Optimism_MayFundingUpdate_20240603.sol'; /** diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol index 82518b932..f07f8f3ee 100644 --- a/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol +++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol'; import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; diff --git a/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol b/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol index 7295cce94..bd9d42735 100644 --- a/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol +++ b/src/20240603_Multi_MayFundingUpdate/AaveV3Polygon_MayFundingUpdate_20240603.t.sol @@ -5,7 +5,7 @@ import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygo import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {MiscPolygon} from 'aave-address-book/MiscPolygon.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import {AaveV3Polygon_MayFundingUpdate_20240603} from './AaveV3Polygon_MayFundingUpdate_20240603.sol'; diff --git a/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol index 562357ad1..9b88e9148 100644 --- a/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol +++ b/src/20240603_Multi_MayFundingUpdate/MayFundingUpdate_20240603.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript, PolygonScript, OptimismScript, ArbitrumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_MayFundingUpdate_20240603} from './AaveV3Ethereum_MayFundingUpdate_20240603.sol'; diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol index 6d0053053..3fbfe076f 100644 --- a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; import {MiscAvalanche} from 'aave-address-book/MiscAvalanche.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol'; /** * @title Update PoR Executor V3 Robot diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol index 94506aa07..ac5f5b18e 100644 --- a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617} from './AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol'; /** diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol index 702f6e7a0..a155528b3 100644 --- a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; import {MiscAvalanche} from 'aave-address-book/MiscAvalanche.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol index 512a494ab..886d4f3ce 100644 --- a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.t.sol @@ -5,7 +5,7 @@ import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Av import {MiscAvalanche} from 'aave-address-book/MiscAvalanche.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617} from './AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol'; import {AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617} from './AaveV3Avalanche_UpdatePoRExecutorV3RobotRegister_20240617.sol'; import {IAaveCLRobotOperator} from './interfaces/IAaveCLRobotOperator.sol'; diff --git a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot_20240617.s.sol b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot_20240617.s.sol index c05355b59..f0385a29e 100644 --- a/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot_20240617.s.sol +++ b/src/20240617_AaveV3Avalanche_UpdatePoRExecutorV3Robot/UpdatePoRExecutorV3Robot_20240617.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript, AvalancheScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617} from './AaveV3Avalanche_UpdatePoRExecutorV3RobotCancel_20240617.sol'; diff --git a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol index 60851aeae..ca8988d60 100644 --- a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol +++ b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; /** * @title Tooling Update Allowance diff --git a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.t.sol b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.t.sol index a76cd609f..a772e24fd 100644 --- a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.t.sol +++ b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/AaveV3Ethereum_ToolingUpdateAllowance_20240707.t.sol @@ -5,7 +5,7 @@ import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum_ToolingUpdateAllowance_20240707} from './AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol'; diff --git a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol index c56e3f430..3ec3c49a7 100644 --- a/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol +++ b/src/20240707_AaveV3Ethereum_ToolingUpdateAllowance/ToolingUpdateAllowance_20240707.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_ToolingUpdateAllowance_20240707} from './AaveV3Ethereum_ToolingUpdateAllowance_20240707.sol'; diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol index ef019448d..564ef294d 100644 --- a/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.t.sol @@ -6,7 +6,7 @@ import {MiscGnosis} from 'aave-address-book/MiscGnosis.sol'; import {GovernanceV3Gnosis} from 'aave-address-book/GovernanceV3Gnosis.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708} from './AaveV3Gnosis_RenewalOfAaveGuardian2024_20240708.sol'; import {RenewalV3BaseTest, GuardianUpdateTestParams} from './RenewalV3BaseTest.sol'; diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol index f79e65565..ffb3cfa5a 100644 --- a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalOfAaveGuardian2024_20240708.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, MetisScript, BaseScript, GnosisScript, ScrollScript, BNBScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708} from './AaveV2Ethereum_RenewalOfAaveGuardian2024_20240708.sol'; diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BasePayload.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BasePayload.sol index fc2e02184..8b66afae0 100644 --- a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BasePayload.sol +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BasePayload.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {ILendingPoolAddressesProvider} from 'aave-address-book/AaveV2.sol'; struct RenewalV2Params { diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BaseTest.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BaseTest.sol index 2d24023d0..f0a363d65 100644 --- a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BaseTest.sol +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV2BaseTest.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {ILendingPoolAddressesProvider, ILendingPoolConfigurator} from 'aave-address-book/AaveV2.sol'; import 'forge-std/Test.sol'; -import {ProtocolV2TestBase} from 'aave-helpers/ProtocolV2TestBase.sol'; +import {ProtocolV2TestBase} from 'aave-helpers/src/ProtocolV2TestBase.sol'; struct GuardianUpdateTestParams { address proposal; diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BasePayload.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BasePayload.sol index 53d23c4e2..b54f6109d 100644 --- a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BasePayload.sol +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BasePayload.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {IACLManager} from 'aave-address-book/AaveV3.sol'; import {IOwnableWithGuardian} from './interfaces/IOwnableWithGuardian.sol'; diff --git a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BaseTest.sol b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BaseTest.sol index eeaabcab9..4b66d6961 100644 --- a/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BaseTest.sol +++ b/src/20240708_Multi_RenewalOfAaveGuardian2024/RenewalV3BaseTest.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {IACLManager, IPoolConfigurator} from 'aave-address-book/AaveV3.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {IOwnableWithGuardian} from './interfaces/IOwnableWithGuardian.sol'; struct GuardianUpdateTestParams { diff --git a/src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol b/src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol index 90df36401..63452dcd3 100644 --- a/src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol +++ b/src/20240709_Multi_ADIShuffleUpdate/ADIShuffleUpdate_20240709.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, MetisScript, BaseScript, GnosisScript, ScrollScript, BNBScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol index a6f331cb0..4344a2056 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {AaveV2Avalanche, AaveV2AvalancheAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Avalanche.sol'; /** diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol index a8e4634a6..e713c3896 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol'; import 'forge-std/Test.sol'; -import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; import {AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711} from './AaveV2Avalanche_ReserveFactorUpdatesMidJuly_20240711.sol'; /** diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol index 2cce9695e..bbbb1af0e 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {AaveV2Ethereum, AaveV2EthereumAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Ethereum.sol'; /** diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol index 489bb08a4..b6576065d 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; import {AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711} from './AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol'; /** diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol index 9c8a91381..00187312d 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol @@ -2,10 +2,10 @@ pragma solidity ^0.8.0; import {AaveV2Polygon, AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol'; -import {AaveV2PayloadPolygon} from 'aave-helpers/v2-config-engine/AaveV2PayloadPolygon.sol'; +import {AaveV2PayloadPolygon} from 'aave-helpers/src/v2-config-engine/AaveV2PayloadPolygon.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; -import {IAaveV2ConfigEngine} from 'aave-helpers/v2-config-engine/IAaveV2ConfigEngine.sol'; -import {IV2RateStrategyFactory} from 'aave-helpers/v2-config-engine/IV2RateStrategyFactory.sol'; +import {IAaveV2ConfigEngine} from 'aave-helpers/src/v2-config-engine/IAaveV2ConfigEngine.sol'; +import {IV2RateStrategyFactory} from 'aave-helpers/src/v2-config-engine/IV2RateStrategyFactory.sol'; /** * @title Reserve Factor Updates Mid July diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol index c78774776..11a0a332f 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV2Polygon} from 'aave-address-book/AaveV2Polygon.sol'; import 'forge-std/Test.sol'; -import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/ProtocolV2TestBase.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; import {AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711} from './AaveV2Polygon_ReserveFactorUpdatesMidJuly_20240711.sol'; /** diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol index bfe7a6e7e..4d74be778 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {AaveV3PayloadArbitrum} from 'aave-helpers/v3-config-engine/AaveV3PayloadArbitrum.sol'; +import {AaveV3PayloadArbitrum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadArbitrum.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol index 176c32bf0..42bb36f2f 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Arbitrum_ReserveFactorUpdatesMidJuly_20240711.sol'; /** diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol index fc4628058..bc1f6ed65 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; -import {AaveV3PayloadBase} from 'aave-helpers/v3-config-engine/AaveV3PayloadBase.sol'; +import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol index 95bb01024..c43fb2627 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Base_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Base_ReserveFactorUpdatesMidJuly_20240711.sol'; /** diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol index 05b7328d5..1d9fb2521 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3Optimism, AaveV3OptimismAssets, IPoolConfigurator} from 'aave-address-book/AaveV3Optimism.sol'; -import {AaveV3PayloadOptimism} from 'aave-helpers/v3-config-engine/AaveV3PayloadOptimism.sol'; +import {AaveV3PayloadOptimism} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadOptimism.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol index 2714ae047..a0b431c65 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Optimism_ReserveFactorUpdatesMidJuly_20240711.sol'; /** diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol index 01c5457ff..b60362fb3 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; -import {AaveV3PayloadPolygon} from 'aave-helpers/v3-config-engine/AaveV3PayloadPolygon.sol'; +import {AaveV3PayloadPolygon} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadPolygon.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol index ac8b3a4c0..7218cb085 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711} from './AaveV3Polygon_ReserveFactorUpdatesMidJuly_20240711.sol'; /** diff --git a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol index 6f8471afc..38dff8f90 100644 --- a/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol +++ b/src/20240711_Multi_ReserveFactorUpdatesMidJuly/ReserveFactorUpdatesMidJuly_20240711.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, BaseScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711} from './AaveV2Ethereum_ReserveFactorUpdatesMidJuly_20240711.sol'; diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol index 8cb6c773f..7fc4fb863 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {AaveV3PayloadArbitrum} from 'aave-helpers/v3-config-engine/AaveV3PayloadArbitrum.sol'; +import {AaveV3PayloadArbitrum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadArbitrum.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol index 6d151cdc1..865d95179 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Arbitrum_ReduceReserveFactorOnWstETH_20240716.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol index d165fc482..2815e033d 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; -import {AaveV3PayloadBase} from 'aave-helpers/v3-config-engine/AaveV3PayloadBase.sol'; +import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol index 738457f54..e68abd2bf 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Base_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Base_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Base_ReduceReserveFactorOnWstETH_20240716.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol index 79909ff24..47e4c0ba4 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol index 79a790d11..76f9eebc3 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol index c47457207..f9a5ff47c 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol'; -import {AaveV3PayloadGnosis} from 'aave-helpers/v3-config-engine/AaveV3PayloadGnosis.sol'; +import {AaveV3PayloadGnosis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadGnosis.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol index 6c83cec46..1365e939e 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Gnosis_ReduceReserveFactorOnWstETH_20240716.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol index bf0e5c3ba..032ff2631 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; -import {AaveV3PayloadOptimism} from 'aave-helpers/v3-config-engine/AaveV3PayloadOptimism.sol'; +import {AaveV3PayloadOptimism} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadOptimism.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol index 31c139edc..2398508f4 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Optimism_ReduceReserveFactorOnWstETH_20240716.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol index fc688eb8d..796c4fb3f 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; -import {AaveV3PayloadPolygon} from 'aave-helpers/v3-config-engine/AaveV3PayloadPolygon.sol'; +import {AaveV3PayloadPolygon} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadPolygon.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol index 8d2c73d94..c617d38df 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Polygon_ReduceReserveFactorOnWstETH_20240716.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol index 7373d8f7b..d07045897 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3ScrollAssets} from 'aave-address-book/AaveV3Scroll.sol'; -import {AaveV3PayloadScroll} from 'aave-helpers/v3-config-engine/AaveV3PayloadScroll.sol'; +import {AaveV3PayloadScroll} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadScroll.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol index e1ae8a22c..d24c47d27 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Scroll_ReduceReserveFactorOnWstETH_20240716.sol'; /** diff --git a/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol b/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol index e1f9dd83d..1c4fdc0a4 100644 --- a/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol +++ b/src/20240716_Multi_ReduceReserveFactorOnWstETH/ReduceReserveFactorOnWstETH_20240716.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript, PolygonScript, OptimismScript, ArbitrumScript, BaseScript, GnosisScript, ScrollScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716} from './AaveV3Ethereum_ReduceReserveFactorOnWstETH_20240716.sol'; diff --git a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol index 32db4804d..3b8ad62d7 100644 --- a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol +++ b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3Gnosis, AaveV3GnosisEModes} from 'aave-address-book/AaveV3Gnosis.sol'; -import {AaveV3PayloadGnosis} from 'aave-helpers/v3-config-engine/AaveV3PayloadGnosis.sol'; +import {AaveV3PayloadGnosis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadGnosis.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; diff --git a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol index 1319cd0bc..24efdacc8 100644 --- a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol +++ b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.t.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717} from './AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol'; /** diff --git a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis_20240717.s.sol b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis_20240717.s.sol index ae2953b67..894cb3758 100644 --- a/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis_20240717.s.sol +++ b/src/20240717_AaveV3Gnosis_OnboardUSDCEOnGnosis/OnboardUSDCEOnGnosis_20240717.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript, GnosisScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717} from './AaveV3Gnosis_OnboardUSDCEOnGnosis_20240717.sol'; diff --git a/src/20240718_AaveV3Ethereum_EventsGrant2024/AaveV3Ethereum_EventsGrant2024_20240718.sol b/src/20240718_AaveV3Ethereum_EventsGrant2024/AaveV3Ethereum_EventsGrant2024_20240718.sol index 92ec83adc..a33b3d814 100644 --- a/src/20240718_AaveV3Ethereum_EventsGrant2024/AaveV3Ethereum_EventsGrant2024_20240718.sol +++ b/src/20240718_AaveV3Ethereum_EventsGrant2024/AaveV3Ethereum_EventsGrant2024_20240718.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; /** diff --git a/src/20240718_AaveV3Ethereum_EventsGrant2024/AaveV3Ethereum_EventsGrant2024_20240718.t.sol b/src/20240718_AaveV3Ethereum_EventsGrant2024/AaveV3Ethereum_EventsGrant2024_20240718.t.sol index 4beef3220..74a81f59a 100644 --- a/src/20240718_AaveV3Ethereum_EventsGrant2024/AaveV3Ethereum_EventsGrant2024_20240718.t.sol +++ b/src/20240718_AaveV3Ethereum_EventsGrant2024/AaveV3Ethereum_EventsGrant2024_20240718.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum_EventsGrant2024_20240718} from './AaveV3Ethereum_EventsGrant2024_20240718.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; diff --git a/src/20240718_AaveV3Ethereum_EventsGrant2024/EventsGrant2024_20240718.s.sol b/src/20240718_AaveV3Ethereum_EventsGrant2024/EventsGrant2024_20240718.s.sol index ee70f76e1..014fa5df1 100644 --- a/src/20240718_AaveV3Ethereum_EventsGrant2024/EventsGrant2024_20240718.s.sol +++ b/src/20240718_AaveV3Ethereum_EventsGrant2024/EventsGrant2024_20240718.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_EventsGrant2024_20240718} from './AaveV3Ethereum_EventsGrant2024_20240718.sol'; diff --git a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol index bc95d02c0..0678f2b7a 100644 --- a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol +++ b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol'; import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {AaveV3PayloadEthereumLido} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereumLido.sol'; +import {AaveV3PayloadEthereumLido} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereumLido.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; diff --git a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.t.sol b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.t.sol index 0418f6673..7228434d9 100644 --- a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.t.sol +++ b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol'; import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; @@ -10,7 +10,7 @@ import {IEmissionManager} from 'aave-v3-periphery/contracts/rewards/interfaces/I import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720} from './AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; diff --git a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol index 4bc433fa3..bcbed57c4 100644 --- a/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol +++ b/src/20240720_AaveV3EthereumLido_LidoEthereumInstanceActivation/LidoEthereumInstanceActivation_20240720.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720} from './AaveV3EthereumLido_LidoEthereumInstanceActivation_20240720.sol'; diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol index 3e5b91141..2bf93f38e 100644 --- a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol'; import {IGhoToken} from 'src/interfaces/IGhoToken.sol'; -import {AaveV3PayloadArbitrum} from 'aave-helpers/v3-config-engine/AaveV3PayloadArbitrum.sol'; +import {AaveV3PayloadArbitrum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadArbitrum.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-origin/periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol index 20e3bb8a8..ea6f8b87f 100644 --- a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.t.sol @@ -2,11 +2,11 @@ pragma solidity ^0.8.0; import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722} from './AaveV3Arbitrum_IncreaseGHOFacilitatorCapacity_20240722.sol'; import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; import {MiscArbitrum} from 'aave-address-book/MiscArbitrum.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {IGhoToken} from 'src/interfaces/IGhoToken.sol'; diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol index 536890ae3..108fef7bd 100644 --- a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3E2e_IncreaseGHOFacilitatorCapacity_20240722.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol index 1c8beda1c..8c612ff60 100644 --- a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; interface UpgradeableLockReleaseTokenPool { function setBridgeLimit(uint256 limit) external; diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol index 0b5c342a1..a328b55dc 100644 --- a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; import {IUpgradeableLockReleaseTokenPool} from 'src/interfaces/ccip/IUpgradeableLockReleaseTokenPool.sol'; diff --git a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol index bfd5cd282..098a621e3 100644 --- a/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol +++ b/src/20240722_Multi_IncreaseGHOFacilitatorCapacity/IncreaseGHOFacilitatorCapacity_20240722.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript, ArbitrumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722} from './AaveV3Ethereum_IncreaseGHOFacilitatorCapacity_20240722.sol'; diff --git a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol index fe366b98a..74f7657fc 100644 --- a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol +++ b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; /** diff --git a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol index 26aefadd2..9785e270f 100644 --- a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol +++ b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.t.sol @@ -5,7 +5,7 @@ import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723} from './AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol'; /** diff --git a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol index 9f6246194..65d06b944 100644 --- a/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol +++ b/src/20240723_AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2/TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723} from './AaveV3Ethereum_TokenLogicKarpatkeyServiceProviderPartnershipPhase2_20240723.sol'; diff --git a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol index 4835f3e3c..a650da378 100644 --- a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol +++ b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; -import {AaveV3PayloadAvalanche} from 'aave-helpers/v3-config-engine/AaveV3PayloadAvalanche.sol'; +import {AaveV3PayloadAvalanche} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadAvalanche.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** diff --git a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol index 5e150311d..c4305d93b 100644 --- a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol +++ b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Avalanche, AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724} from './AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.sol'; /** diff --git a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol index 88c3b174e..9c37c5991 100644 --- a/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol +++ b/src/20240724_AaveV3Avalanche_RiskParameterUpdatesSAVAXOnAaveV3Avalanche/RiskParameterUpdatesSAVAXOnAaveV3Avalanche_20240724.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript, AvalancheScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; diff --git a/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation_20240726.s.sol b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation_20240726.s.sol index 6ad1ca2e7..a774bddb0 100644 --- a/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation_20240726.s.sol +++ b/src/20240726_AaveV3Ethereum_ADIZkSyncPathActivation/ADIZkSyncPathActivation_20240726.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; diff --git a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol index a1a8775a8..224b61675 100644 --- a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol +++ b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3Scroll, AaveV3ScrollEModes} from 'aave-address-book/AaveV3Scroll.sol'; -import {AaveV3PayloadScroll} from 'aave-helpers/v3-config-engine/AaveV3PayloadScroll.sol'; +import {AaveV3PayloadScroll} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadScroll.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; diff --git a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol index 6870693db..a3433f4a0 100644 --- a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol +++ b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.t.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731} from './AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll_20240731.sol'; /** diff --git a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol index e0ed27ff9..b66747b79 100644 --- a/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol +++ b/src/20240731_AaveV3Scroll_OnboardingWeETHToAaveV3OnScroll/OnboardingWeETHToAaveV3OnScroll_20240731.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript, ScrollScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; diff --git a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol index 675eb1d7b..363960f5a 100644 --- a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol +++ b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; /** diff --git a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol index b651bdfc1..2333d2711 100644 --- a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol +++ b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801} from './AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol'; /** diff --git a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol index 6b80dec0a..cc6e48382 100644 --- a/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol +++ b/src/20240801_AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum/RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801} from './AaveV3Ethereum_RiskParameterUpdatesIncreaseUSDeDebtCeilingOnV3Ethereum_20240801.sol'; diff --git a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol index 11a4e644a..579a9154d 100644 --- a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol +++ b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729} from './AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol'; diff --git a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol index 192be877a..908d5ed01 100644 --- a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol +++ b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; -import {AaveV3PayloadEthereumLido} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereumLido.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +import {AaveV3PayloadEthereumLido} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereumLido.sol'; import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; diff --git a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol index 6bb92bd87..63f806025 100644 --- a/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol +++ b/src/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729/AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729} from './AaveV3EthereumLido_WETHLTV0AaveV3LidoInstance_20240729.sol'; /** diff --git a/yarn.lock b/yarn.lock index 2f0a7b90f..44d5e2686 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,16 +42,16 @@ chalk "^2.4.2" js-tokens "^4.0.0" +"@bgd-labs/aave-address-book@3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.1.1.tgz#46e528f5b86dff0a26b17fd7573e2abf4c2c1c44" + integrity sha512-H3oQFMCgnL0BsQuSTAaj9M3zBm1uK3Uk6qfPH29ktLxhipE4UVqglhC/ZQVMT2wlgf1bMBjmsvwgTDRDOwXuFQ== + "@bgd-labs/aave-address-book@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.0.tgz#a75cf2e217688e63728bec1b9c956b0134bc647c" integrity sha512-ALT9T/aIZ7BztozWvGhjVKGAEfe6wLhop0z+0ZSwAdyHXrBfpXXDZa9siHNtOZfNojPVMPvkpgsiPnFmDD8OJQ== -"@bgd-labs/aave-address-book@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.4.tgz#3aaad1c4ddd7947c689e06f6d49b0596e8470428" - integrity sha512-AcddA1Ru/r47WO+mE8L3G9Z4qr5pkZleQvdO51sxu/+N77ncghQKE39ZegovPkaFouO5GLUxLLRgR9nHVZNjlg== - "@bgd-labs/aave-cli@0.16.2": version "0.16.2" resolved "https://registry.yarnpkg.com/@bgd-labs/aave-cli/-/aave-cli-0.16.2.tgz#b995358aa5f3a86bdd61e7b539c56ba071e53e18" From 5c2397e4f7acf16aea0a7f86a21fdebfaf74986e Mon Sep 17 00:00:00 2001 From: Marc Zeller <21088542+marczeller@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:08:21 +0200 Subject: [PATCH 35/68] Superfest Incentives Funding - Review (#423) * Payload for merit on Base & superfest matching * rm mention of GHO * Update src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching.md Co-authored-by: Harsh Pandey * new imports * lib imports * fix logic to compensate rounding errors * fix transfer logic --------- Co-authored-by: Rozengarden Co-authored-by: marczeller Co-authored-by: Harsh Pandey --- ...ivesAndSuperfestMatching_20240812_after.md | 48 ++++++++++ ...ivesAndSuperfestMatching_20240812_after.md | 5 + ...ncentivesAndSuperfestMatching_20240812.sol | 82 +++++++++++++++++ ...entivesAndSuperfestMatching_20240812.t.sol | 91 +++++++++++++++++++ ...ncentivesAndSuperfestMatching_20240812.sol | 20 ++++ ...entivesAndSuperfestMatching_20240812.t.sol | 55 +++++++++++ ...MeritBaseIncentivesAndSuperfestMatching.md | 57 ++++++++++++ ...entivesAndSuperfestMatching_20240812.s.sol | 90 ++++++++++++++++++ .../config.ts | 20 ++++ 9 files changed, 468 insertions(+) create mode 100644 diffs/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812_before_AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812_after.md create mode 100644 diffs/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812_before_AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812_after.md create mode 100644 src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.sol create mode 100644 src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol create mode 100644 src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.sol create mode 100644 src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol create mode 100644 src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching.md create mode 100644 src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching_20240812.s.sol create mode 100644 src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/config.ts diff --git a/diffs/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812_before_AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812_after.md b/diffs/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812_before_AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812_after.md new file mode 100644 index 000000000..23eafa8c9 --- /dev/null +++ b/diffs/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812_before_AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812_after.md @@ -0,0 +1,48 @@ +## Reserve changes + +### Reserve altered + +#### USDC ([0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913](https://basescan.org/address/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 4,899,769.9052 USDC [4899769905210] | 4,819,769.9052 USDC [4819769905210] | +| virtualBalance | 4,899,769.8285 USDC [4899769828594] | 4,819,769.8285 USDC [4819769828594] | + + +#### USDbC ([0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA](https://basescan.org/address/0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 447,784.6876 USDbC [447784687618] | 427,784.6876 USDbC [427784687618] | +| virtualBalance | 447,784.6876 USDbC [447784687618] | 427,784.6876 USDbC [427784687618] | + + +## Raw diff + +```json +{ + "reserves": { + "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913": { + "aTokenUnderlyingBalance": { + "from": 4899769905210, + "to": 4819769905210 + }, + "virtualBalance": { + "from": 4899769828594, + "to": 4819769828594 + } + }, + "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA": { + "aTokenUnderlyingBalance": { + "from": 447784687618, + "to": 427784687618 + }, + "virtualBalance": { + "from": 447784687618, + "to": 427784687618 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812_before_AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812_after.md b/diffs/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812_before_AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812_before_AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.sol b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.sol new file mode 100644 index 000000000..8504b8973 --- /dev/null +++ b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.sol @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +import {AaveV3Base, AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; +import {IEmissionManager} from 'aave-v3-periphery/contracts/rewards/interfaces/IEmissionManager.sol'; +import {ICollector} from 'aave-v3-periphery/contracts/treasury/ICollector.sol'; +import {IPool} from 'aave-v3-core/contracts/interfaces/IPool.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; + +/** + * @title Merit Base Incentives and Superfest Matching + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x15cbc6b6c5b4ef76a1fb8cf8747460bf327c459fa01b69907fab0119457939a8 + * - Discussion: https://governance.aave.com/t/arfc-merit-base-incentives-and-superfest-matching/18450 + */ +contract AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812 is IProposalGenericExecutor { + using SafeERC20 for IERC20; + + // Used for emission admin + struct EmissionAdmin { + address asset; + address admin; + } + + // Used to withdraw and transfer funds + struct Transfer { + address asset; //underlying + address recipient; + uint256 amount; + } + + IEmissionManager public constant EMISSION_MANAGER = IEmissionManager(AaveV3Base.EMISSION_MANAGER); + + address public constant ACI_MULTISIG = 0xac140648435d03f784879cd789130F22Ef588Fcd; + + function execute() external { + // Emission admin setting + EmissionAdmin[4] memory admins = getEmissionAdmins(); + for (uint256 i = 0; i < admins.length; i++) { + EMISSION_MANAGER.setEmissionAdmin(admins[i].asset, admins[i].admin); + } + + // Funds 100k$ to ACI + // 80k from USDC & 20k from USDbC + // those are aToken so we need to withdraw them + Transfer[2] memory transfers = getTransfers(); + for (uint256 i = 0; i < transfers.length; i++) { + AaveV3Base.COLLECTOR.transfer( + AaveV3Base.POOL.getReserveData(transfers[i].asset).aTokenAddress, + address(this), + transfers[i].amount + ); + AaveV3Base.POOL.withdraw(transfers[i].asset, type(uint256).max, transfers[i].recipient); + } + } + + function getEmissionAdmins() public pure returns (EmissionAdmin[4] memory) { + return [ + EmissionAdmin({asset: AaveV3BaseAssets.USDC_UNDERLYING, admin: ACI_MULTISIG}), + EmissionAdmin({asset: AaveV3BaseAssets.WETH_UNDERLYING, admin: ACI_MULTISIG}), + EmissionAdmin({asset: AaveV3BaseAssets.USDC_A_TOKEN, admin: ACI_MULTISIG}), + EmissionAdmin({asset: AaveV3BaseAssets.WETH_A_TOKEN, admin: ACI_MULTISIG}) + ]; + } + + function getTransfers() public pure returns (Transfer[2] memory) { + return [ + Transfer({ + asset: AaveV3BaseAssets.USDC_UNDERLYING, + recipient: ACI_MULTISIG, + amount: 80_000e6 + }), + Transfer({ + asset: AaveV3BaseAssets.USDbC_UNDERLYING, + recipient: ACI_MULTISIG, + amount: 20_000e6 + }) + ]; + } +} diff --git a/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol new file mode 100644 index 000000000..0d76e4027 --- /dev/null +++ b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; +import {IEmissionManager} from 'aave-v3-periphery/contracts/rewards/interfaces/IEmissionManager.sol'; +import {ICollector} from 'aave-v3-periphery/contracts/treasury/ICollector.sol'; +import {IPool} from 'aave-v3-core/contracts/interfaces/IPool.sol'; +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812} from './AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; + +/** + * @dev Test for AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812 + * command: FOUNDRY_PROFILE=base forge test --match-path=src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol -vv + */ +contract AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812_Test is ProtocolV3TestBase { + using SafeERC20 for IERC20; + AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('base'), 18354993); + proposal = new AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812', + AaveV3Base.POOL, + address(proposal) + ); + } + + function test_emissionAdmin() public { + GovV3Helpers.executePayload(vm, address(proposal)); + AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.EmissionAdmin[4] + memory admins = proposal.getEmissionAdmins(); + for (uint56 i = 0; i < admins.length; i++) { + assertEq( + IEmissionManager(AaveV3Base.EMISSION_MANAGER).getEmissionAdmin(admins[i].asset), + admins[i].admin + ); + } + } + + function test_transfer() public { + AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.Transfer[2] + memory transfers = proposal.getTransfers(); + uint256[2] memory aTokenBalBefore; + uint256[2] memory aTokenBalAfter; + uint256[2] memory uTokenBalBefore; + uint256[2] memory uTokenBalAfter; + + for (uint56 i = 0; i < transfers.length; i++) { + uTokenBalBefore[i] = IERC20(transfers[i].asset).balanceOf(transfers[i].recipient); + aTokenBalBefore[i] = IERC20(AaveV3Base.POOL.getReserveData(transfers[i].asset).aTokenAddress) + .balanceOf(address(AaveV3Base.COLLECTOR)); + } + + GovV3Helpers.executePayload(vm, address(proposal)); + + for (uint56 i = 0; i < transfers.length; i++) { + uTokenBalAfter[i] = IERC20(transfers[i].asset).balanceOf(transfers[i].recipient); + aTokenBalAfter[i] = IERC20(AaveV3Base.POOL.getReserveData(transfers[i].asset).aTokenAddress) + .balanceOf(address(AaveV3Base.COLLECTOR)); + } + + for (uint56 i = 0; i < transfers.length; i++) { + // Check that the recipient received approximately the expected amount + assertApproxEqAbs( + uTokenBalAfter[i] - uTokenBalBefore[i], + transfers[i].amount, + 1 wei, + 'Recipient balance change should be close to expected amount' + ); + + // Check that the aToken balance decreased by approximately the expected amount + assertApproxEqAbs( + aTokenBalBefore[i] - aTokenBalAfter[i], + transfers[i].amount, + 1 wei, + 'aToken balance change should be close to expected amount' + ); + } + } +} diff --git a/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.sol b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.sol new file mode 100644 index 000000000..e7a73d5c6 --- /dev/null +++ b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +/** + * @title Merit Base Incentives and Superfest Matching + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x15cbc6b6c5b4ef76a1fb8cf8747460bf327c459fa01b69907fab0119457939a8 + * - Discussion: https://governance.aave.com/t/arfc-merit-base-incentives-and-superfest-matching/18450 + */ +contract AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812 is + IProposalGenericExecutor +{ + address public constant ACI_MULTISIG = 0xac140648435d03f784879cd789130F22Ef588Fcd; + uint256 public constant ALLOWANCE = 200_000e6; + function execute() external { + AaveV3Ethereum.COLLECTOR.approve(AaveV3EthereumAssets.USDC_UNDERLYING, ACI_MULTISIG, ALLOWANCE); + } +} diff --git a/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol new file mode 100644 index 000000000..1c94414e5 --- /dev/null +++ b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812} from './AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; +/** + * @dev Test for AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol -vv + */ +contract AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812_Test is + ProtocolV3TestBase +{ + AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20514462); + proposal = new AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812', + AaveV3Ethereum.POOL, + address(proposal) + ); + } + + function test_approval() public { + assertEq( + IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).allowance( + address(AaveV3Ethereum.COLLECTOR), + proposal.ACI_MULTISIG() + ), + 0 + ); + + GovV3Helpers.executePayload(vm, address(proposal)); + + assertEq( + IERC20(AaveV3EthereumAssets.USDC_UNDERLYING).allowance( + address(AaveV3Ethereum.COLLECTOR), + proposal.ACI_MULTISIG() + ), + proposal.ALLOWANCE() + ); + } +} diff --git a/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching.md b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching.md new file mode 100644 index 000000000..e7043cb7f --- /dev/null +++ b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching.md @@ -0,0 +1,57 @@ +--- +title: "Merit Base Incentives and Superfest Matching" +author: "Aave Chan Initiative" +discussions: "https://governance.aave.com/t/arfc-merit-base-incentives-and-superfest-matching/18450" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x15cbc6b6c5b4ef76a1fb8cf8747460bf327c459fa01b69907fab0119457939a8" +--- + +## Simple Summary + +This AIP seeks to plan and implement an incentive program on Base with the goal of increasing Aave’s market share and matching additional incentives from Optimism foundation. The program will involve the following key actions: + +1. Inclusion of Base in Merit boosters for round 7 +2. Incentives matching, up to 150k OP, (at max $2 per OP) + +These will be in service of the eventual launch of GHO on Base and Umbrella coverage of aUSD and awETH for Aave v3 Base. + +## Motivation + +The primary motivation behind this proposal is to strengthen Aave’s position on Base by leveraging incentive programs that can attract more users and liquidity. + +The addition of Superfest incentives and weETH has been a success and push Aave v3 to the largest lending protocol on Base. To continue momentum, this proposal will allocate Merit program incentives as well as additional incentives given by Optimism Foundation. These include incentives from Superfest and Optimism’s Retro Grants Round 4. + +Base will be a good network to continue expansion of GHO and the upcoming Umbrella coverage program. By deploying GHO and providing umbrella coverage for key assets, as well as including Base in the Merit program, Aave can capitalize on the growth potential of the Base ecosystem. Additionally, offering matching incentives will help align with Superfest and further drive user engagement. + +The GHO and Umbrella deployments will take some time, so we propose starting with initial Merit incentives to continue attracting liquidity to the network ahead of these launches. + +Incentives will be set up as follows: + +- Supply wETH will receive all OP incentives from Superfest program. +- Borrow USDC will receive USDC incentives funded by the Merit program. + +## Specification + +1. **Inclusion of Base in Merit:** + +- Add Base to the Merit program to recognize and reward users who contribute to the growth and stability of the Aave ecosystem on Base this will be done by the ad-hoc proposal to create new boosters in round 7. + +2. **Incentives Matching:** + +- Match incentives up to 150k OP (Optimism tokens), with a maximum value of $2 per OP. This will provide additional motivation for users to engage with Aave on Base and align Aave DAO with the Superchain ecosystem. +- This will be funded with 100,000 USDC first batch, sourced from the Aave Collector on Base to be “reinvested” in the ecosystem. +- The ACI treasury will receive allowance for a total of 200,000 USDC from the Mainnet collector contract, and will be responsible from claim and bridging this funds to match futher incentives from the superfest program up to a total of 300k$ +- to allow this LM program, the AIP will appoint the ACI multisig `0xac140648435d03f784879cd789130F22Ef588Fcd` as emission_admin to handle the distribution on behalf of the DAO +- The ACI multisig will be whitelisted for USDC, aUSDC, wETH and aWETH tokens as rewards tokens to allow for some flexibility in distribution. + +We invite Aave Finance service providers to finance the remaining amount according to Superfest matching. + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x15cbc6b6c5b4ef76a1fb8cf8747460bf327c459fa01b69907fab0119457939a8) +- [Discussion](https://governance.aave.com/t/arfc-merit-base-incentives-and-superfest-matching/18450) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching_20240812.s.sol b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching_20240812.s.sol new file mode 100644 index 000000000..9d2e864df --- /dev/null +++ b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching_20240812.s.sol @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, BaseScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812} from './AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.sol'; +import {AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812} from './AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching_20240812.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/MeritBaseIncentivesAndSuperfestMatching_20240812.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Base + * deploy-command: make deploy-ledger contract=src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching_20240812.s.sol:DeployBase chain=base + * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/MeritBaseIncentivesAndSuperfestMatching_20240812.s.sol/8453/run-latest.json + */ +contract DeployBase is BaseScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching_20240812.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](2); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction( + type(AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812).creationCode + ); + payloads[1] = GovV3Helpers.buildBasePayload(vm, actionsBase); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching.md' + ) + ); + } +} diff --git a/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/config.ts b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/config.ts new file mode 100644 index 000000000..48d4e9658 --- /dev/null +++ b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/config.ts @@ -0,0 +1,20 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + configFile: 'src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/config.ts', + author: 'Aave Chan Initiative', + pools: ['AaveV3Ethereum', 'AaveV3Base'], + title: 'Merit Base Incentives and Superfest Matching', + shortName: 'MeritBaseIncentivesAndSuperfestMatching', + date: '20240812', + discussion: + 'https://governance.aave.com/t/arfc-merit-base-incentives-and-superfest-matching/18450', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x15cbc6b6c5b4ef76a1fb8cf8747460bf327c459fa01b69907fab0119457939a8', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20514462}}, + AaveV3Base: {configs: {OTHERS: {}}, cache: {blockNumber: 18354993}}, + }, +}; From 3dc0862d3cc9d743a1528a49a2c719b9e3bc9989 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 14 Aug 2024 15:08:50 +0000 Subject: [PATCH 36/68] fix(cache): automated cache update [skip ci] --- .../MeritBaseIncentivesAndSuperfestMatching.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching.md b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching.md index e7043cb7f..57e2c3c29 100644 --- a/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching.md +++ b/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/MeritBaseIncentivesAndSuperfestMatching.md @@ -47,8 +47,8 @@ We invite Aave Finance service providers to finance the remaining amount accordi ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/5c2397e4f7acf16aea0a7f86a21fdebfaf74986e/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/5c2397e4f7acf16aea0a7f86a21fdebfaf74986e/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/5c2397e4f7acf16aea0a7f86a21fdebfaf74986e/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Ethereum_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/5c2397e4f7acf16aea0a7f86a21fdebfaf74986e/src/20240812_Multi_MeritBaseIncentivesAndSuperfestMatching/AaveV3Base_MeritBaseIncentivesAndSuperfestMatching_20240812.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x15cbc6b6c5b4ef76a1fb8cf8747460bf327c459fa01b69907fab0119457939a8) - [Discussion](https://governance.aave.com/t/arfc-merit-base-incentives-and-superfest-matching/18450) From 7e9aaa019afed78f36b3f87c3c8c1bbc069053a5 Mon Sep 17 00:00:00 2001 From: Alice <121383428+Rozengarden@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:19:45 +0200 Subject: [PATCH 37/68] [ACI] Allow metis token to be used as a collateral (#425) Co-authored-by: marczeller --- ...AsCollateralOnMetisChain_20240814_after.md | 50 ++++++++++++++++ foundry.toml | 2 +- ...MetisAsCollateralOnMetisChain_20240814.sol | 40 +++++++++++++ ...tisAsCollateralOnMetisChain_20240814.t.sol | 32 ++++++++++ .../EnableMetisAsCollateralOnMetisChain.md | 40 +++++++++++++ ...tisAsCollateralOnMetisChain_20240814.s.sol | 60 +++++++++++++++++++ .../config.ts | 33 ++++++++++ 7 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 diffs/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814_before_AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814_after.md create mode 100644 src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.sol create mode 100644 src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.t.sol create mode 100644 src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain.md create mode 100644 src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain_20240814.s.sol create mode 100644 src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/config.ts diff --git a/diffs/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814_before_AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814_after.md b/diffs/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814_before_AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814_after.md new file mode 100644 index 000000000..e2fb9c8f6 --- /dev/null +++ b/diffs/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814_before_AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814_after.md @@ -0,0 +1,50 @@ +## Reserve changes + +### Reserves altered + +#### Metis ([0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000](https://explorer.metis.io/address/0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000)) + +| description | value before | value after | +| --- | --- | --- | +| debtCeiling | 0 $ [0] | 1,000,000 $ [100000000] | +| usageAsCollateralEnabled | false | true | +| ltv | 0 % [0] | 30 % [3000] | +| liquidationThreshold | 0 % [0] | 40 % [4000] | +| liquidationBonus | 0 % | 10 % | +| liquidationProtocolFee | 0 % [0] | 10 % [1000] | + + +## Raw diff + +```json +{ + "reserves": { + "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000": { + "debtCeiling": { + "from": 0, + "to": 100000000 + }, + "liquidationBonus": { + "from": 0, + "to": 11000 + }, + "liquidationProtocolFee": { + "from": 0, + "to": 1000 + }, + "liquidationThreshold": { + "from": 0, + "to": 4000 + }, + "ltv": { + "from": 0, + "to": 3000 + }, + "usageAsCollateralEnabled": { + "from": false, + "to": true + } + } + } +} +``` \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 427563361..3c815db9b 100644 --- a/foundry.toml +++ b/foundry.toml @@ -30,7 +30,7 @@ zksolc = '1.5.1' # incomplete list at https://www.evmdiff.com/features?name=PUSH0&kind=opcode [profile.metis] -evm_version = 'paris' +evm_version = 'shanghai' [profile.mainnet] evm_version = 'shanghai' diff --git a/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.sol b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.sol new file mode 100644 index 000000000..6436687ce --- /dev/null +++ b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Metis, AaveV3MetisAssets} from 'aave-address-book/AaveV3Metis.sol'; +import {AaveV3PayloadMetis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadMetis.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; + +/** + * @title Enable Metis as Collateral on Metis Chain + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2e15c7011a6696de1be8fb3476db30395225eb533f849b63bdbff2b33a605ffd + * - Discussion: https://governance.aave.com/t/arfc-enable-metis-as-collateral-on-metis-chain/16658 + */ +contract AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814 is AaveV3PayloadMetis { + function _preExecute() internal override { + AaveV3Metis.POOL_CONFIGURATOR.setDebtCeiling(AaveV3MetisAssets.Metis_UNDERLYING, 1_000_000_00); + } + + function collateralsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.CollateralUpdate[] memory) + { + IAaveV3ConfigEngine.CollateralUpdate[] + memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1); + + collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({ + asset: AaveV3MetisAssets.Metis_UNDERLYING, + ltv: 30_00, + liqThreshold: 40_00, + liqBonus: 10_00, + debtCeiling: EngineFlags.KEEP_CURRENT, + liqProtocolFee: 10_00 + }); + + return collateralUpdate; + } +} diff --git a/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.t.sol b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.t.sol new file mode 100644 index 000000000..d8ea5cf75 --- /dev/null +++ b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Metis} from 'aave-address-book/AaveV3Metis.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814} from './AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.sol'; + +/** + * @dev Test for AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814 + * command: FOUNDRY_PROFILE=metis forge test --match-path=src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.t.sol -vv + */ +contract AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814_Test is ProtocolV3TestBase { + AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('metis'), 18088801); + proposal = new AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814', + AaveV3Metis.POOL, + address(proposal) + ); + } +} diff --git a/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain.md b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain.md new file mode 100644 index 000000000..d6e780a18 --- /dev/null +++ b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain.md @@ -0,0 +1,40 @@ +--- +title: "Enable Metis as Collateral on Metis Chain" +author: "Aave Chan Initiative" +discussions: "https://governance.aave.com/t/arfc-enable-metis-as-collateral-on-metis-chain/16658" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x2e15c7011a6696de1be8fb3476db30395225eb533f849b63bdbff2b33a605ffd" +--- + +## Simple Summary + +This proposal recommends enabling Metis token as collateral on Aave V3 within the Metis Chain + +## Motivation + +Integrating Metis as collateral positions Aave as a key player in the Metis ecosystem, alongside upcoming incentives for builders and new projects. This move is anticipated to bolster Aave’s prominence as the leading lending platform on Metis Chain. + +## Specification + +The proposed risk parameters for incorporating Metis as collateral are outlined below following @ChaosLabs TEMP CHECK recommendation: + +| Parameter | Value | +| -------------------------- | ------ | +| Isolation Mode | Yes | +| Borrowable | Yes | +| Collateral Enabled | Yes | +| Debt Ceiling | $1M | +| Loan to Value (LTV) | 30.00% | +| Liquidation Threshold (LT) | 40.00% | +| Liquidation Bonus | 10.00% | +| Liquidation Protocol Fee | 10.00% | + +## References + +- Implementation: [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.sol) +- Tests: [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x2e15c7011a6696de1be8fb3476db30395225eb533f849b63bdbff2b33a605ffd) +- [Discussion](https://governance.aave.com/t/arfc-enable-metis-as-collateral-on-metis-chain/16658) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain_20240814.s.sol b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain_20240814.s.sol new file mode 100644 index 000000000..bafe2557b --- /dev/null +++ b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain_20240814.s.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, MetisScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814} from './AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.sol'; + +/** + * @dev Deploy Metis + * deploy-command: make deploy-ledger contract=src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain_20240814.s.sol:DeployMetis chain=metis + * verify-command: FOUNDRY_PROFILE=metis npx catapulta-verify -b broadcast/EnableMetisAsCollateralOnMetisChain_20240814.s.sol/1088/run-latest.json + */ +contract DeployMetis is MetisScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain_20240814.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsMetis[0] = GovV3Helpers.buildAction( + type(AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814).creationCode + ); + payloads[0] = GovV3Helpers.buildMetisPayload(vm, actionsMetis); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain.md' + ) + ); + } +} diff --git a/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/config.ts b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/config.ts new file mode 100644 index 000000000..fd9ff6d98 --- /dev/null +++ b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/config.ts @@ -0,0 +1,33 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + configFile: 'src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/config.ts', + author: 'Aave Chan Initiative', + pools: ['AaveV3Metis'], + title: 'Enable Metis as Collateral on Metis Chain', + shortName: 'EnableMetisAsCollateralOnMetisChain', + date: '20240814', + discussion: + 'https://governance.aave.com/t/arfc-enable-metis-as-collateral-on-metis-chain/16658', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x2e15c7011a6696de1be8fb3476db30395225eb533f849b63bdbff2b33a605ffd', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Metis: { + configs: { + COLLATERALS_UPDATE: [ + { + asset: 'Metis', + ltv: '30', + liqThreshold: '40', + liqBonus: '10', + debtCeiling: '1000000', + liqProtocolFee: '10', + }, + ], + }, + cache: {blockNumber: 18088801}, + }, + }, +}; From 1ae1e995cd7314c83687532a41d11c00b2374aaa Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 14 Aug 2024 15:20:13 +0000 Subject: [PATCH 38/68] fix(cache): automated cache update [skip ci] --- .../EnableMetisAsCollateralOnMetisChain.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain.md b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain.md index d6e780a18..022683926 100644 --- a/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain.md +++ b/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/EnableMetisAsCollateralOnMetisChain.md @@ -30,8 +30,8 @@ The proposed risk parameters for incorporating Metis as collateral are outlined ## References -- Implementation: [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.sol) -- Tests: [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.t.sol) +- Implementation: [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/7e9aaa019afed78f36b3f87c3c8c1bbc069053a5/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.sol) +- Tests: [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/7e9aaa019afed78f36b3f87c3c8c1bbc069053a5/src/20240814_AaveV3Metis_EnableMetisAsCollateralOnMetisChain/AaveV3Metis_EnableMetisAsCollateralOnMetisChain_20240814.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x2e15c7011a6696de1be8fb3476db30395225eb533f849b63bdbff2b33a605ffd) - [Discussion](https://governance.aave.com/t/arfc-enable-metis-as-collateral-on-metis-chain/16658) From 23262d60fe343d44069da668abd4f3fcbfaadd44 Mon Sep 17 00:00:00 2001 From: Marc Zeller <21088542+marczeller@users.noreply.github.com> Date: Thu, 15 Aug 2024 22:18:17 +0200 Subject: [PATCH 39/68] Gho Borrow Rate Update - Review (#424) --- ...62f0b0c1bf55e0693fd4e1b0116731fd62a430.svg | 1 + ...265298aa7a998c6931ace04e7860b8b360a5ba.svg | 1 + ...1c424012f6b8f7d49339c1ad1f6d8be7814e8f.svg | 1 + ...93d3ef35333192ec820f1bc848b5189674555c.svg | 1 + ...f0ae5f67532a528e6b3d83623f49f7646148c3.svg | 1 + ...6b85c50b6d8a3cac78bba7acc69af991e8b359.svg | 1 + ...6681206ba1647c8da5212801c687932059c1c3.svg | 1 + ...ce7a55ac04d754c31aada64a733b5a0ecd6dd5.svg | 1 + ...54df8148ba17f5ffc961aea7512567c91e2a3d.svg | 1 + ...89ad3b3ce52cc75ae008e02f0902e656628a29.svg | 1 + ...4db5711739fa231386033bdb64a3cceb8462a8.svg | 1 + ...4e0d79fec49d4d84b9250e643f1773f16214a5.svg | 1 + ...d6d26d5c1caf9a8735a932555ad64bcb400031.svg | 1 + ...48d80179d57144859fe9a7186b742ec3e9387c.svg | 1 + ...a7ab1f1b9fcdf6ffa41ac7a8b4daf2daf98328.svg | 1 + ...fcef60b1dfb35de994f96040b1b43df9719d28.svg | 1 + ...690b11066430bfb069e06227cc53f8654a7b5a.svg | 1 + ...3975867d1c729d1a52bbec364211baff2dab5a.svg | 1 + ...31a10768e2145bf6969b6e65d7c875df780821.svg | 1 + ...cd41bda67a1fc3ece7a4100d0a7455722f244a.svg | 1 + ...reum_GHOBorrowRateUpdate_20240814_after.md | 30 ++++++++++ package.json | 4 +- ...3Ethereum_GHOBorrowRateUpdate_20240814.sol | 35 +++++++++++ ...thereum_GHOBorrowRateUpdate_20240814.t.sol | 32 ++++++++++ .../GHOBorrowRateUpdate.md | 37 ++++++++++++ .../GHOBorrowRateUpdate_20240814.s.sol | 60 +++++++++++++++++++ .../config.ts | 31 ++++++++++ yarn.lock | 13 ++-- 28 files changed, 256 insertions(+), 6 deletions(-) create mode 100644 .assets/0d62f0b0c1bf55e0693fd4e1b0116731fd62a430.svg create mode 100644 .assets/15265298aa7a998c6931ace04e7860b8b360a5ba.svg create mode 100644 .assets/221c424012f6b8f7d49339c1ad1f6d8be7814e8f.svg create mode 100644 .assets/2493d3ef35333192ec820f1bc848b5189674555c.svg create mode 100644 .assets/32f0ae5f67532a528e6b3d83623f49f7646148c3.svg create mode 100644 .assets/3a6b85c50b6d8a3cac78bba7acc69af991e8b359.svg create mode 100644 .assets/5d6681206ba1647c8da5212801c687932059c1c3.svg create mode 100644 .assets/63ce7a55ac04d754c31aada64a733b5a0ecd6dd5.svg create mode 100644 .assets/6554df8148ba17f5ffc961aea7512567c91e2a3d.svg create mode 100644 .assets/6c89ad3b3ce52cc75ae008e02f0902e656628a29.svg create mode 100644 .assets/6e4db5711739fa231386033bdb64a3cceb8462a8.svg create mode 100644 .assets/794e0d79fec49d4d84b9250e643f1773f16214a5.svg create mode 100644 .assets/7fd6d26d5c1caf9a8735a932555ad64bcb400031.svg create mode 100644 .assets/8748d80179d57144859fe9a7186b742ec3e9387c.svg create mode 100644 .assets/a1a7ab1f1b9fcdf6ffa41ac7a8b4daf2daf98328.svg create mode 100644 .assets/a8fcef60b1dfb35de994f96040b1b43df9719d28.svg create mode 100644 .assets/c1690b11066430bfb069e06227cc53f8654a7b5a.svg create mode 100644 .assets/e03975867d1c729d1a52bbec364211baff2dab5a.svg create mode 100644 .assets/e231a10768e2145bf6969b6e65d7c875df780821.svg create mode 100644 .assets/e3cd41bda67a1fc3ece7a4100d0a7455722f244a.svg create mode 100644 diffs/AaveV3Ethereum_GHOBorrowRateUpdate_20240814_before_AaveV3Ethereum_GHOBorrowRateUpdate_20240814_after.md create mode 100644 src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol create mode 100644 src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol create mode 100644 src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md create mode 100644 src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate_20240814.s.sol create mode 100644 src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/config.ts diff --git a/.assets/0d62f0b0c1bf55e0693fd4e1b0116731fd62a430.svg b/.assets/0d62f0b0c1bf55e0693fd4e1b0116731fd62a430.svg new file mode 100644 index 000000000..403a5e0f3 --- /dev/null +++ b/.assets/0d62f0b0c1bf55e0693fd4e1b0116731fd62a430.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/15265298aa7a998c6931ace04e7860b8b360a5ba.svg b/.assets/15265298aa7a998c6931ace04e7860b8b360a5ba.svg new file mode 100644 index 000000000..3c15ce1a6 --- /dev/null +++ b/.assets/15265298aa7a998c6931ace04e7860b8b360a5ba.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/221c424012f6b8f7d49339c1ad1f6d8be7814e8f.svg b/.assets/221c424012f6b8f7d49339c1ad1f6d8be7814e8f.svg new file mode 100644 index 000000000..6af590b85 --- /dev/null +++ b/.assets/221c424012f6b8f7d49339c1ad1f6d8be7814e8f.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/2493d3ef35333192ec820f1bc848b5189674555c.svg b/.assets/2493d3ef35333192ec820f1bc848b5189674555c.svg new file mode 100644 index 000000000..5212f2d4a --- /dev/null +++ b/.assets/2493d3ef35333192ec820f1bc848b5189674555c.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/32f0ae5f67532a528e6b3d83623f49f7646148c3.svg b/.assets/32f0ae5f67532a528e6b3d83623f49f7646148c3.svg new file mode 100644 index 000000000..d348fb2d6 --- /dev/null +++ b/.assets/32f0ae5f67532a528e6b3d83623f49f7646148c3.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/3a6b85c50b6d8a3cac78bba7acc69af991e8b359.svg b/.assets/3a6b85c50b6d8a3cac78bba7acc69af991e8b359.svg new file mode 100644 index 000000000..93fde991f --- /dev/null +++ b/.assets/3a6b85c50b6d8a3cac78bba7acc69af991e8b359.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%200%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/5d6681206ba1647c8da5212801c687932059c1c3.svg b/.assets/5d6681206ba1647c8da5212801c687932059c1c3.svg new file mode 100644 index 000000000..d003381d1 --- /dev/null +++ b/.assets/5d6681206ba1647c8da5212801c687932059c1c3.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/63ce7a55ac04d754c31aada64a733b5a0ecd6dd5.svg b/.assets/63ce7a55ac04d754c31aada64a733b5a0ecd6dd5.svg new file mode 100644 index 000000000..4a059d94f --- /dev/null +++ b/.assets/63ce7a55ac04d754c31aada64a733b5a0ecd6dd5.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/6554df8148ba17f5ffc961aea7512567c91e2a3d.svg b/.assets/6554df8148ba17f5ffc961aea7512567c91e2a3d.svg new file mode 100644 index 000000000..df2260094 --- /dev/null +++ b/.assets/6554df8148ba17f5ffc961aea7512567c91e2a3d.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/6c89ad3b3ce52cc75ae008e02f0902e656628a29.svg b/.assets/6c89ad3b3ce52cc75ae008e02f0902e656628a29.svg new file mode 100644 index 000000000..f9bccbdd6 --- /dev/null +++ b/.assets/6c89ad3b3ce52cc75ae008e02f0902e656628a29.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 70%Optimal utilization 70% \ No newline at end of file diff --git a/.assets/6e4db5711739fa231386033bdb64a3cceb8462a8.svg b/.assets/6e4db5711739fa231386033bdb64a3cceb8462a8.svg new file mode 100644 index 000000000..ad84fcb3b --- /dev/null +++ b/.assets/6e4db5711739fa231386033bdb64a3cceb8462a8.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/794e0d79fec49d4d84b9250e643f1773f16214a5.svg b/.assets/794e0d79fec49d4d84b9250e643f1773f16214a5.svg new file mode 100644 index 000000000..48159d224 --- /dev/null +++ b/.assets/794e0d79fec49d4d84b9250e643f1773f16214a5.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/7fd6d26d5c1caf9a8735a932555ad64bcb400031.svg b/.assets/7fd6d26d5c1caf9a8735a932555ad64bcb400031.svg new file mode 100644 index 000000000..a7eaa7d81 --- /dev/null +++ b/.assets/7fd6d26d5c1caf9a8735a932555ad64bcb400031.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/8748d80179d57144859fe9a7186b742ec3e9387c.svg b/.assets/8748d80179d57144859fe9a7186b742ec3e9387c.svg new file mode 100644 index 000000000..5dff1554b --- /dev/null +++ b/.assets/8748d80179d57144859fe9a7186b742ec3e9387c.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/a1a7ab1f1b9fcdf6ffa41ac7a8b4daf2daf98328.svg b/.assets/a1a7ab1f1b9fcdf6ffa41ac7a8b4daf2daf98328.svg new file mode 100644 index 000000000..7a92d3f64 --- /dev/null +++ b/.assets/a1a7ab1f1b9fcdf6ffa41ac7a8b4daf2daf98328.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%2%4%6%Optimal utilization 99%Optimal utilization 99% \ No newline at end of file diff --git a/.assets/a8fcef60b1dfb35de994f96040b1b43df9719d28.svg b/.assets/a8fcef60b1dfb35de994f96040b1b43df9719d28.svg new file mode 100644 index 000000000..81a6b4feb --- /dev/null +++ b/.assets/a8fcef60b1dfb35de994f96040b1b43df9719d28.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 92%Optimal utilization 92% \ No newline at end of file diff --git a/.assets/c1690b11066430bfb069e06227cc53f8654a7b5a.svg b/.assets/c1690b11066430bfb069e06227cc53f8654a7b5a.svg new file mode 100644 index 000000000..d009aef0d --- /dev/null +++ b/.assets/c1690b11066430bfb069e06227cc53f8654a7b5a.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 35%Optimal utilization 35% \ No newline at end of file diff --git a/.assets/e03975867d1c729d1a52bbec364211baff2dab5a.svg b/.assets/e03975867d1c729d1a52bbec364211baff2dab5a.svg new file mode 100644 index 000000000..8a8749626 --- /dev/null +++ b/.assets/e03975867d1c729d1a52bbec364211baff2dab5a.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%2%4%6%8%Optimal utilization 99%Optimal utilization 99% \ No newline at end of file diff --git a/.assets/e231a10768e2145bf6969b6e65d7c875df780821.svg b/.assets/e231a10768e2145bf6969b6e65d7c875df780821.svg new file mode 100644 index 000000000..85a5bf372 --- /dev/null +++ b/.assets/e231a10768e2145bf6969b6e65d7c875df780821.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/e3cd41bda67a1fc3ece7a4100d0a7455722f244a.svg b/.assets/e3cd41bda67a1fc3ece7a4100d0a7455722f244a.svg new file mode 100644 index 000000000..e82eb3487 --- /dev/null +++ b/.assets/e3cd41bda67a1fc3ece7a4100d0a7455722f244a.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 92%Optimal utilization 92% \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_GHOBorrowRateUpdate_20240814_before_AaveV3Ethereum_GHOBorrowRateUpdate_20240814_after.md b/diffs/AaveV3Ethereum_GHOBorrowRateUpdate_20240814_before_AaveV3Ethereum_GHOBorrowRateUpdate_20240814_after.md new file mode 100644 index 000000000..b3227d31d --- /dev/null +++ b/diffs/AaveV3Ethereum_GHOBorrowRateUpdate_20240814_before_AaveV3Ethereum_GHOBorrowRateUpdate_20240814_after.md @@ -0,0 +1,30 @@ +## Reserve changes + +### Reserves altered + +#### GHO ([0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f](https://etherscan.io/address/0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 7 % | 6 % | +| baseVariableBorrowRate | 7 % | 6 % | +| interestRate | ![before](/.assets/e03975867d1c729d1a52bbec364211baff2dab5a.svg) | ![after](/.assets/a1a7ab1f1b9fcdf6ffa41ac7a8b4daf2daf98328.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f": { + "baseVariableBorrowRate": { + "from": "70000000000000000000000000", + "to": "60000000000000000000000000" + }, + "maxVariableBorrowRate": { + "from": "70000000000000000000000000", + "to": "60000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/package.json b/package.json index 24bc10bad..f99687d33 100644 --- a/package.json +++ b/package.json @@ -31,8 +31,8 @@ "vitest": "^2.0.4" }, "dependencies": { - "@bgd-labs/aave-address-book": "3.1.1", - "@bgd-labs/aave-cli": "0.16.2", + "@bgd-labs/aave-address-book": "^3.0.4", + "@bgd-labs/aave-cli": "0.16.4", "@bgd-labs/js-utils": "^1.4.2", "@inquirer/prompts": "^3.3.0", "@inquirer/testing": "^2.1.13", diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol new file mode 100644 index 000000000..8cce95f95 --- /dev/null +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title GHO Borrow Rate Update + * @author ACI + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/gho-stewards-adjustments-gho-borrow-rate/18649 + */ +contract AaveV3Ethereum_GHOBorrowRateUpdate_20240814 is AaveV3PayloadEthereum { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3EthereumAssets.GHO_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: 6_00, + variableRateSlope1: EngineFlags.KEEP_CURRENT, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol new file mode 100644 index 000000000..ff733fb6e --- /dev/null +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_GHOBorrowRateUpdate_20240814} from './AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol'; + +/** + * @dev Test for AaveV3Ethereum_GHOBorrowRateUpdate_20240814 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol -vv + */ +contract AaveV3Ethereum_GHOBorrowRateUpdate_20240814_Test is ProtocolV3TestBase { + AaveV3Ethereum_GHOBorrowRateUpdate_20240814 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20526943); + proposal = new AaveV3Ethereum_GHOBorrowRateUpdate_20240814(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_GHOBorrowRateUpdate_20240814', + AaveV3Ethereum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md new file mode 100644 index 000000000..fdafdb360 --- /dev/null +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md @@ -0,0 +1,37 @@ +--- +title: "GHO Borrow Rate Update" +author: "ACI" +discussions: "https://governance.aave.com/t/gho-stewards-adjustments-gho-borrow-rate/18649" +--- + +## Simple Summary + +This AIP aims to decrease the GHO borrow rate from its current level to 6% to enhance its competitiveness in the current market conditions. + +## Motivation + +The DeFi landscape is constantly evolving, and stablecoin protocols must adapt to remain competitive. Recent market analysis indicates: + +1. A general decrease in borrowing demand for stablecoins across DeFi platforms. +2. Competing stablecoins offering more attractive rates, potentially drawing users away from GHO. +3. An opportunity to increase GHO's market share by offering more competitive rates. + +By reducing the borrow rate, we aim to: + +- Increase the attractiveness of GHO for borrowers +- Stimulate the growth of GHO's total supply +- Enhance GHO's position in the stablecoin market + +## Specification + +BaseVariableBorrowRate of GHO is decreased to 6% + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) +- [Discussion](https://governance.aave.com/t/gho-stewards-adjustments-gho-borrow-rate/18649) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate_20240814.s.sol b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate_20240814.s.sol new file mode 100644 index 000000000..ef507b287 --- /dev/null +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate_20240814.s.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Ethereum_GHOBorrowRateUpdate_20240814} from './AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate_20240814.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/GHOBorrowRateUpdate_20240814.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_GHOBorrowRateUpdate_20240814).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate_20240814.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_GHOBorrowRateUpdate_20240814).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md' + ) + ); + } +} diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/config.ts b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/config.ts new file mode 100644 index 000000000..be2801f61 --- /dev/null +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/config.ts @@ -0,0 +1,31 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'GHO Borrow Rate Update', + shortName: 'GHOBorrowRateUpdate', + date: '20240814', + author: 'ACI', + discussion: 'https://governance.aave.com/t/gho-stewards-adjustments-gho-borrow-rate/18649', + snapshot: 'Direct-to-AIP', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Ethereum: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'GHO', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '6', + variableRateSlope1: '', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 20526943}, + }, + }, +}; diff --git a/yarn.lock b/yarn.lock index 44d5e2686..1d762c25e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,10 +52,15 @@ resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.0.tgz#a75cf2e217688e63728bec1b9c956b0134bc647c" integrity sha512-ALT9T/aIZ7BztozWvGhjVKGAEfe6wLhop0z+0ZSwAdyHXrBfpXXDZa9siHNtOZfNojPVMPvkpgsiPnFmDD8OJQ== -"@bgd-labs/aave-cli@0.16.2": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@bgd-labs/aave-cli/-/aave-cli-0.16.2.tgz#b995358aa5f3a86bdd61e7b539c56ba071e53e18" - integrity sha512-+X7crEcX1HPdbi+9ZUF0c2TJ0oA9hLseYBWM/ogN04P6hjoRzOCGb5Wv2lK0bhesI2+OWTAHI23am986veZiPQ== +"@bgd-labs/aave-address-book@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.4.tgz#3aaad1c4ddd7947c689e06f6d49b0596e8470428" + integrity sha512-AcddA1Ru/r47WO+mE8L3G9Z4qr5pkZleQvdO51sxu/+N77ncghQKE39ZegovPkaFouO5GLUxLLRgR9nHVZNjlg== + +"@bgd-labs/aave-cli@0.16.4": + version "0.16.4" + resolved "https://registry.yarnpkg.com/@bgd-labs/aave-cli/-/aave-cli-0.16.4.tgz#be97caea0b74e96b46b12984f4e656269badef59" + integrity sha512-5AmfCXKXC0tjTn2ZZpodqSkqccammykwhP86+GEFT5N0zcqizqv/wHT9opb4ctZjLcxCvwXEKjdcdm7a6MApwA== dependencies: "@bgd-labs/aave-address-book" "^3.0.0" "@bgd-labs/aave-v3-governance-cache" "^1.0.6" From 56bc3dd1113eae7d41876430a25e234440801ab0 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Thu, 15 Aug 2024 20:21:04 +0000 Subject: [PATCH 40/68] fix(cache): automated cache update [skip ci] --- .../GHOBorrowRateUpdate.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md index fdafdb360..0e9c42fa2 100644 --- a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md @@ -28,8 +28,8 @@ BaseVariableBorrowRate of GHO is decreased to 6% ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/23262d60fe343d44069da668abd4f3fcbfaadd44/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/23262d60fe343d44069da668abd4f3fcbfaadd44/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) - [Discussion](https://governance.aave.com/t/gho-stewards-adjustments-gho-borrow-rate/18649) ## Copyright From 789aa1e7f377f28d021ccea0e1f60799664d2c93 Mon Sep 17 00:00:00 2001 From: Lukas Date: Thu, 15 Aug 2024 22:37:22 +0200 Subject: [PATCH 41/68] fix: file patches (#426) * fix: patch files * fix: add main again --- package.json | 2 +- .../AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol | 3 ++- ...aveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol | 2 +- .../GHOBorrowRateUpdate.md | 4 ++-- .../GHOBorrowRateUpdate_20240814.s.sol | 2 +- yarn.lock | 13 ++++--------- 6 files changed, 11 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index f99687d33..cffb56f70 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "vitest": "^2.0.4" }, "dependencies": { - "@bgd-labs/aave-address-book": "^3.0.4", + "@bgd-labs/aave-address-book": "^3.1.1", "@bgd-labs/aave-cli": "0.16.4", "@bgd-labs/js-utils": "^1.4.2", "@inquirer/prompts": "^3.3.0", diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol index 8cce95f95..96fbbbe64 100644 --- a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol @@ -2,9 +2,10 @@ pragma solidity ^0.8.0; import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; -import {AaveV3PayloadEthereum} from 'aave-helpers/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; + /** * @title GHO Borrow Rate Update * @author ACI diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol index ff733fb6e..d5f57c791 100644 --- a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; import 'forge-std/Test.sol'; -import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; import {AaveV3Ethereum_GHOBorrowRateUpdate_20240814} from './AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol'; /** diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md index 0e9c42fa2..fdafdb360 100644 --- a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md @@ -28,8 +28,8 @@ BaseVariableBorrowRate of GHO is decreased to 6% ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/23262d60fe343d44069da668abd4f3fcbfaadd44/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/23262d60fe343d44069da668abd4f3fcbfaadd44/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) - [Discussion](https://governance.aave.com/t/gho-stewards-adjustments-gho-borrow-rate/18649) ## Copyright diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate_20240814.s.sol b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate_20240814.s.sol index ef507b287..43ae23933 100644 --- a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate_20240814.s.sol +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate_20240814.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; import {AaveV3Ethereum_GHOBorrowRateUpdate_20240814} from './AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol'; diff --git a/yarn.lock b/yarn.lock index 1d762c25e..8f41c4031 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,20 +42,15 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@bgd-labs/aave-address-book@3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.1.1.tgz#46e528f5b86dff0a26b17fd7573e2abf4c2c1c44" - integrity sha512-H3oQFMCgnL0BsQuSTAaj9M3zBm1uK3Uk6qfPH29ktLxhipE4UVqglhC/ZQVMT2wlgf1bMBjmsvwgTDRDOwXuFQ== - "@bgd-labs/aave-address-book@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.0.tgz#a75cf2e217688e63728bec1b9c956b0134bc647c" integrity sha512-ALT9T/aIZ7BztozWvGhjVKGAEfe6wLhop0z+0ZSwAdyHXrBfpXXDZa9siHNtOZfNojPVMPvkpgsiPnFmDD8OJQ== -"@bgd-labs/aave-address-book@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.4.tgz#3aaad1c4ddd7947c689e06f6d49b0596e8470428" - integrity sha512-AcddA1Ru/r47WO+mE8L3G9Z4qr5pkZleQvdO51sxu/+N77ncghQKE39ZegovPkaFouO5GLUxLLRgR9nHVZNjlg== +"@bgd-labs/aave-address-book@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.1.1.tgz#46e528f5b86dff0a26b17fd7573e2abf4c2c1c44" + integrity sha512-H3oQFMCgnL0BsQuSTAaj9M3zBm1uK3Uk6qfPH29ktLxhipE4UVqglhC/ZQVMT2wlgf1bMBjmsvwgTDRDOwXuFQ== "@bgd-labs/aave-cli@0.16.4": version "0.16.4" From 23193eadf552d90ed3f499a7a6e4e50ffbfe0e92 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Thu, 15 Aug 2024 20:38:06 +0000 Subject: [PATCH 42/68] fix(cache): automated cache update [skip ci] --- .../GHOBorrowRateUpdate.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md index fdafdb360..8c8fbc3b2 100644 --- a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md @@ -28,8 +28,8 @@ BaseVariableBorrowRate of GHO is decreased to 6% ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/789aa1e7f377f28d021ccea0e1f60799664d2c93/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/789aa1e7f377f28d021ccea0e1f60799664d2c93/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) - [Discussion](https://governance.aave.com/t/gho-stewards-adjustments-gho-borrow-rate/18649) ## Copyright From 3eb72bf4ca74ab04137b7650030c620e98519325 Mon Sep 17 00:00:00 2001 From: defi jesus Date: Fri, 16 Aug 2024 06:30:24 +0100 Subject: [PATCH 43/68] Reserve Factor Updates August (#396) * ready for review. assets not included. * update imports, block #s and diffs * fix typo in .md --------- Co-authored-by: defijesus.eth --- ...serveFactorUpdatesAugust_20240726_after.md | 90 ++++++++ ...serveFactorUpdatesAugust_20240726_after.md | 90 ++++++++ ...serveFactorUpdatesAugust_20240726_after.md | 158 +++++++++++++ ...serveFactorUpdatesAugust_20240726_after.md | 25 ++ ...serveFactorUpdatesAugust_20240726_after.md | 25 ++ ...serveFactorUpdatesAugust_20240726_after.md | 25 ++ ...serveFactorUpdatesAugust_20240726_after.md | 25 ++ ...he_ReserveFactorUpdatesAugust_20240726.sol | 32 +++ ..._ReserveFactorUpdatesAugust_20240726.t.sol | 78 +++++++ ...um_ReserveFactorUpdatesAugust_20240726.sol | 32 +++ ..._ReserveFactorUpdatesAugust_20240726.t.sol | 78 +++++++ ...on_ReserveFactorUpdatesAugust_20240726.sol | 94 ++++++++ ..._ReserveFactorUpdatesAugust_20240726.t.sol | 32 +++ ...um_ReserveFactorUpdatesAugust_20240726.sol | 37 +++ ..._ReserveFactorUpdatesAugust_20240726.t.sol | 32 +++ ...se_ReserveFactorUpdatesAugust_20240726.sol | 37 +++ ..._ReserveFactorUpdatesAugust_20240726.t.sol | 32 +++ ...sm_ReserveFactorUpdatesAugust_20240726.sol | 37 +++ ..._ReserveFactorUpdatesAugust_20240726.t.sol | 32 +++ ...on_ReserveFactorUpdatesAugust_20240726.sol | 37 +++ ..._ReserveFactorUpdatesAugust_20240726.t.sol | 32 +++ .../ReserveFactorUpdatesAugust.md | 75 ++++++ .../ReserveFactorUpdatesAugust_20240726.s.sol | 218 ++++++++++++++++++ .../config.ts | 164 +++++++++++++ 24 files changed, 1517 insertions(+) create mode 100644 diffs/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726_before_AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726_after.md create mode 100644 diffs/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726_before_AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726_after.md create mode 100644 diffs/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726_before_AaveV2Polygon_ReserveFactorUpdatesAugust_20240726_after.md create mode 100644 diffs/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726_before_AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726_after.md create mode 100644 diffs/AaveV3Base_ReserveFactorUpdatesAugust_20240726_before_AaveV3Base_ReserveFactorUpdatesAugust_20240726_after.md create mode 100644 diffs/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726_before_AaveV3Optimism_ReserveFactorUpdatesAugust_20240726_after.md create mode 100644 diffs/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726_before_AaveV3Polygon_ReserveFactorUpdatesAugust_20240726_after.md create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.t.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.t.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.t.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.t.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.t.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.t.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.t.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust.md create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol create mode 100644 src/20240726_Multi_ReserveFactorUpdatesAugust/config.ts diff --git a/diffs/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726_before_AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726_after.md b/diffs/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726_before_AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726_after.md new file mode 100644 index 000000000..a5e158b36 --- /dev/null +++ b/diffs/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726_before_AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726_after.md @@ -0,0 +1,90 @@ +## Reserve changes + +### Reserve altered + +#### WETH.e ([0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB](https://snowscan.xyz/address/0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 60 % [6000] | 65 % [6500] | + + +#### WBTC.e ([0x50b7545627a5162F82A992c33b87aDc75187B218](https://snowscan.xyz/address/0x50b7545627a5162F82A992c33b87aDc75187B218)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +#### USDC.e ([0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664](https://snowscan.xyz/address/0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 60 % [6000] | 65 % [6500] | + + +#### WAVAX ([0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7](https://snowscan.xyz/address/0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 60 % [6000] | 65 % [6500] | + + +#### USDT.e ([0xc7198437980c041c805A1EDcbA50c1Ce5db95118](https://snowscan.xyz/address/0xc7198437980c041c805A1EDcbA50c1Ce5db95118)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 60 % [6000] | 65 % [6500] | + + +#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowscan.xyz/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 60 % [6000] | 65 % [6500] | + + +## Raw diff + +```json +{ + "reserves": { + "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB": { + "reserveFactor": { + "from": 6000, + "to": 6500 + } + }, + "0x50b7545627a5162F82A992c33b87aDc75187B218": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + }, + "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": { + "reserveFactor": { + "from": 6000, + "to": 6500 + } + }, + "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7": { + "reserveFactor": { + "from": 6000, + "to": 6500 + } + }, + "0xc7198437980c041c805A1EDcbA50c1Ce5db95118": { + "reserveFactor": { + "from": 6000, + "to": 6500 + } + }, + "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": { + "reserveFactor": { + "from": 6000, + "to": 6500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726_before_AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726_after.md b/diffs/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726_before_AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726_after.md new file mode 100644 index 000000000..253f8da65 --- /dev/null +++ b/diffs/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726_before_AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726_after.md @@ -0,0 +1,90 @@ +## Reserve changes + +### Reserve altered + +#### WBTC ([0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599](https://etherscan.io/address/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 70 % [7000] | 75 % [7500] | + + +#### LINK ([0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 70 % [7000] | 75 % [7500] | + + +#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +## Raw diff + +```json +{ + "reserves": { + "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": { + "reserveFactor": { + "from": 7000, + "to": 7500 + } + }, + "0x514910771AF9Ca656af840dff83E8264EcF986CA": { + "reserveFactor": { + "from": 7000, + "to": 7500 + } + }, + "0x6B175474E89094C44Da98b954EedeAC495271d0F": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + }, + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + }, + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + }, + "0xdAC17F958D2ee523a2206206994597C13D831ec7": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726_before_AaveV2Polygon_ReserveFactorUpdatesAugust_20240726_after.md b/diffs/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726_before_AaveV2Polygon_ReserveFactorUpdatesAugust_20240726_after.md new file mode 100644 index 000000000..35d8959fd --- /dev/null +++ b/diffs/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726_before_AaveV2Polygon_ReserveFactorUpdatesAugust_20240726_after.md @@ -0,0 +1,158 @@ +## Reserve changes + +### Reserve altered + +#### WMATIC ([0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270](https://polygonscan.com/address/0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x30F7E0862FFC80Ff4cA2D6d202c31364A8034A56](https://polygonscan.com/address/0x30F7E0862FFC80Ff4cA2D6d202c31364A8034A56) | [0x24EFC8B78763aDb295f59bF86A03e4857720B6e4](https://polygonscan.com/address/0x24EFC8B78763aDb295f59bF86A03e4857720B6e4) | +| variableRateSlope1 | 9 % | 9.75 % | +| interestRate | ![before](/.assets/4beacd9bf014f00dc4753ba95ce6a97ef8c89a08.svg) | ![after](/.assets/56688b893bbb0f550d9a9127af90b7d853dc31cc.svg) | + +#### WBTC ([0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6](https://polygonscan.com/address/0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0xA251080dda3Eb5738aE9725F7E5295Fc9E0cc6C6](https://polygonscan.com/address/0xA251080dda3Eb5738aE9725F7E5295Fc9E0cc6C6) | [0x588DEd8C297DE231005028553f902FA60B4535d7](https://polygonscan.com/address/0x588DEd8C297DE231005028553f902FA60B4535d7) | +| variableRateSlope1 | 7 % | 7.75 % | +| interestRate | ![before](/.assets/8e32e19fa0018d20a28aece032aef3716ba2e7c9.svg) | ![after](/.assets/713630540c92e36cb90b3c2fe52e0fec11749832.svg) | + +#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x40648f731198AD8ba5757a0bE5DaDaE034ffCf76](https://polygonscan.com/address/0x40648f731198AD8ba5757a0bE5DaDaE034ffCf76) | [0xc7A565fec411b6fB2F974dd79552Cd038d5Bc575](https://polygonscan.com/address/0xc7A565fec411b6fB2F974dd79552Cd038d5Bc575) | +| variableRateSlope1 | 12 % | 12.75 % | +| interestRate | ![before](/.assets/a2e130a1008912eaa4e955f50518be181bd67f80.svg) | ![after](/.assets/105f4aa6c58b2e6a78db7ae300bcd9c754d22c1b.svg) | + +#### WETH ([0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619](https://polygonscan.com/address/0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0xf6f51775135c17543913B7122Da33921F58c3D19](https://polygonscan.com/address/0xf6f51775135c17543913B7122Da33921F58c3D19) | [0xca2D6f36F395b72DC16506a65e65f94F14455cAd](https://polygonscan.com/address/0xca2D6f36F395b72DC16506a65e65f94F14455cAd) | +| variableRateSlope1 | 7 % | 7.75 % | +| interestRate | ![before](/.assets/841d7a6689936d44e8b7984180d4179f3405aad4.svg) | ![after](/.assets/07a00db3efaa0b57b58074846429eafb199edf15.svg) | + +#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x21E5a30dFebD364F135a50AA1365D729a4A424a6](https://polygonscan.com/address/0x21E5a30dFebD364F135a50AA1365D729a4A424a6) | [0xa68fF0Ee7Bac9bD5cf68667fBEf0870804Fce734](https://polygonscan.com/address/0xa68fF0Ee7Bac9bD5cf68667fBEf0870804Fce734) | +| variableRateSlope1 | 12 % | 12.75 % | +| interestRate | ![before](/.assets/477048510aec2f55e291e76c0b4b27f73b8b7879.svg) | ![after](/.assets/3ea6b15e0bf1d98b12fb9f1d726f5311a14bb4b4.svg) | + +#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0xfE6691dEFB078658bA79E2204f74371eD9db48cf](https://polygonscan.com/address/0xfE6691dEFB078658bA79E2204f74371eD9db48cf) | [0x38580592Fd23E5cc6FF5c3c76966733A43e69120](https://polygonscan.com/address/0x38580592Fd23E5cc6FF5c3c76966733A43e69120) | +| variableRateSlope1 | 12 % | 12.75 % | +| interestRate | ![before](/.assets/c377d504bf0f7b7031f6da3d33e8009c1e505a1b.svg) | ![after](/.assets/0ab9d2d2bb94026740d38164d9ea7d2a491c7e5d.svg) | + +## Raw diff + +```json +{ + "reserves": { + "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270": { + "interestRateStrategy": { + "from": "0x30F7E0862FFC80Ff4cA2D6d202c31364A8034A56", + "to": "0x24EFC8B78763aDb295f59bF86A03e4857720B6e4" + } + }, + "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6": { + "interestRateStrategy": { + "from": "0xA251080dda3Eb5738aE9725F7E5295Fc9E0cc6C6", + "to": "0x588DEd8C297DE231005028553f902FA60B4535d7" + } + }, + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { + "interestRateStrategy": { + "from": "0x40648f731198AD8ba5757a0bE5DaDaE034ffCf76", + "to": "0xc7A565fec411b6fB2F974dd79552Cd038d5Bc575" + } + }, + "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": { + "interestRateStrategy": { + "from": "0xf6f51775135c17543913B7122Da33921F58c3D19", + "to": "0xca2D6f36F395b72DC16506a65e65f94F14455cAd" + } + }, + "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": { + "interestRateStrategy": { + "from": "0x21E5a30dFebD364F135a50AA1365D729a4A424a6", + "to": "0xa68fF0Ee7Bac9bD5cf68667fBEf0870804Fce734" + } + }, + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": { + "interestRateStrategy": { + "from": "0xfE6691dEFB078658bA79E2204f74371eD9db48cf", + "to": "0x38580592Fd23E5cc6FF5c3c76966733A43e69120" + } + } + }, + "strategies": { + "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270": { + "address": { + "from": "0x30F7E0862FFC80Ff4cA2D6d202c31364A8034A56", + "to": "0x24EFC8B78763aDb295f59bF86A03e4857720B6e4" + }, + "variableRateSlope1": { + "from": "90000000000000000000000000", + "to": "97500000000000000000000000" + } + }, + "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6": { + "address": { + "from": "0xA251080dda3Eb5738aE9725F7E5295Fc9E0cc6C6", + "to": "0x588DEd8C297DE231005028553f902FA60B4535d7" + }, + "variableRateSlope1": { + "from": "70000000000000000000000000", + "to": "77500000000000000000000000" + } + }, + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { + "address": { + "from": "0x40648f731198AD8ba5757a0bE5DaDaE034ffCf76", + "to": "0xc7A565fec411b6fB2F974dd79552Cd038d5Bc575" + }, + "variableRateSlope1": { + "from": "120000000000000000000000000", + "to": "127500000000000000000000000" + } + }, + "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": { + "address": { + "from": "0xf6f51775135c17543913B7122Da33921F58c3D19", + "to": "0xca2D6f36F395b72DC16506a65e65f94F14455cAd" + }, + "variableRateSlope1": { + "from": "70000000000000000000000000", + "to": "77500000000000000000000000" + } + }, + "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": { + "address": { + "from": "0x21E5a30dFebD364F135a50AA1365D729a4A424a6", + "to": "0xa68fF0Ee7Bac9bD5cf68667fBEf0870804Fce734" + }, + "variableRateSlope1": { + "from": "120000000000000000000000000", + "to": "127500000000000000000000000" + } + }, + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": { + "address": { + "from": "0xfE6691dEFB078658bA79E2204f74371eD9db48cf", + "to": "0x38580592Fd23E5cc6FF5c3c76966733A43e69120" + }, + "variableRateSlope1": { + "from": "120000000000000000000000000", + "to": "127500000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726_before_AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726_after.md b/diffs/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726_before_AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726_after.md new file mode 100644 index 000000000..5fffe89a1 --- /dev/null +++ b/diffs/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726_before_AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8](https://arbiscan.io/address/0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 30 % [3000] | 35 % [3500] | + + +## Raw diff + +```json +{ + "reserves": { + "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": { + "reserveFactor": { + "from": 3000, + "to": 3500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_ReserveFactorUpdatesAugust_20240726_before_AaveV3Base_ReserveFactorUpdatesAugust_20240726_after.md b/diffs/AaveV3Base_ReserveFactorUpdatesAugust_20240726_before_AaveV3Base_ReserveFactorUpdatesAugust_20240726_after.md new file mode 100644 index 000000000..3252d745a --- /dev/null +++ b/diffs/AaveV3Base_ReserveFactorUpdatesAugust_20240726_before_AaveV3Base_ReserveFactorUpdatesAugust_20240726_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDbC ([0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA](https://basescan.org/address/0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 30 % [3000] | 35 % [3500] | + + +## Raw diff + +```json +{ + "reserves": { + "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA": { + "reserveFactor": { + "from": 3000, + "to": 3500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726_before_AaveV3Optimism_ReserveFactorUpdatesAugust_20240726_after.md b/diffs/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726_before_AaveV3Optimism_ReserveFactorUpdatesAugust_20240726_after.md new file mode 100644 index 000000000..fc9a38db2 --- /dev/null +++ b/diffs/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726_before_AaveV3Optimism_ReserveFactorUpdatesAugust_20240726_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0x7F5c764cBc14f9669B88837ca1490cCa17c31607](https://optimistic.etherscan.io/address/0x7F5c764cBc14f9669B88837ca1490cCa17c31607)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 30 % [3000] | 35 % [3500] | + + +## Raw diff + +```json +{ + "reserves": { + "0x7F5c764cBc14f9669B88837ca1490cCa17c31607": { + "reserveFactor": { + "from": 3000, + "to": 3500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726_before_AaveV3Polygon_ReserveFactorUpdatesAugust_20240726_after.md b/diffs/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726_before_AaveV3Polygon_ReserveFactorUpdatesAugust_20240726_after.md new file mode 100644 index 000000000..5bcaad421 --- /dev/null +++ b/diffs/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726_before_AaveV3Polygon_ReserveFactorUpdatesAugust_20240726_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 30 % [3000] | 35 % [3500] | + + +## Raw diff + +```json +{ + "reserves": { + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { + "reserveFactor": { + "from": 3000, + "to": 3500 + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.sol new file mode 100644 index 000000000..68cc8dd00 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +import {AaveV2Avalanche, AaveV2AvalancheAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Avalanche.sol'; + +/** + * @title Reserve Factor Updates August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726 is IProposalGenericExecutor { + ILendingPoolConfigurator public constant POOL_CONFIGURATOR = + ILendingPoolConfigurator(AaveV2Avalanche.POOL_CONFIGURATOR); + + uint256 public constant DAIe_RF = 65_00; + uint256 public constant USDCe_RF = 65_00; + uint256 public constant USDTe_RF = 65_00; + uint256 public constant WAVAX_RF = 65_00; + uint256 public constant WBTCe_RF = 70_00; + uint256 public constant WETHe_RF = 65_00; + + function execute() external { + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.DAIe_UNDERLYING, DAIe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.USDCe_UNDERLYING, USDCe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.USDTe_UNDERLYING, USDTe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WAVAX_UNDERLYING, WAVAX_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WBTCe_UNDERLYING, WBTCe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WETHe_UNDERLYING, WETHe_RF); + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.t.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.t.sol new file mode 100644 index 000000000..0079631e8 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.t.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; +import {AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726} from './AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.sol'; + +/** + * @dev Test for AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726 + * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.t.sol -vv + */ +contract AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726_Test is ProtocolV2TestBase { + AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726 internal proposal; + + struct Changes { + address asset; + uint256 reserveFactor; + } + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 49251980); + proposal = new AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest( + 'AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726', + AaveV2Avalanche.POOL, + address(proposal) + ); + + address[] memory assetsChanged = new address[](6); + assetsChanged[0] = AaveV2AvalancheAssets.DAIe_UNDERLYING; + assetsChanged[1] = AaveV2AvalancheAssets.USDCe_UNDERLYING; + assetsChanged[2] = AaveV2AvalancheAssets.USDTe_UNDERLYING; + assetsChanged[3] = AaveV2AvalancheAssets.WAVAX_UNDERLYING; + assetsChanged[4] = AaveV2AvalancheAssets.WBTCe_UNDERLYING; + assetsChanged[5] = AaveV2AvalancheAssets.WETHe_UNDERLYING; + + Changes[] memory assetChanges = new Changes[](6); + assetChanges[0] = Changes({ + asset: AaveV2AvalancheAssets.DAIe_UNDERLYING, + reserveFactor: proposal.DAIe_RF() + }); + assetChanges[1] = Changes({ + asset: AaveV2AvalancheAssets.USDCe_UNDERLYING, + reserveFactor: proposal.USDCe_RF() + }); + assetChanges[2] = Changes({ + asset: AaveV2AvalancheAssets.USDTe_UNDERLYING, + reserveFactor: proposal.USDTe_RF() + }); + assetChanges[3] = Changes({ + asset: AaveV2AvalancheAssets.WAVAX_UNDERLYING, + reserveFactor: proposal.WAVAX_RF() + }); + assetChanges[4] = Changes({ + asset: AaveV2AvalancheAssets.WBTCe_UNDERLYING, + reserveFactor: proposal.WBTCe_RF() + }); + assetChanges[5] = Changes({ + asset: AaveV2AvalancheAssets.WETHe_UNDERLYING, + reserveFactor: proposal.WETHe_RF() + }); + + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + for (uint i = 0; i < assetChanges.length; i++) { + ReserveConfig memory cfg = _findReserveConfig(allConfigsAfter, assetChanges[i].asset); + assertEq(cfg.reserveFactor, assetChanges[i].reserveFactor); + } + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.sol new file mode 100644 index 000000000..f61e3f410 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +import {AaveV2Ethereum, AaveV2EthereumAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Ethereum.sol'; + +/** + * @title Reserve Factor Updates August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726 is IProposalGenericExecutor { + ILendingPoolConfigurator public constant POOL_CONFIGURATOR = + ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR); + + uint256 public constant DAI_RF = 70_00; + uint256 public constant LINK_RF = 75_00; + uint256 public constant USDC_RF = 70_00; + uint256 public constant USDT_RF = 70_00; + uint256 public constant WBTC_RF = 75_00; + uint256 public constant WETH_RF = 70_00; + + function execute() external { + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.DAI_UNDERLYING, DAI_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.LINK_UNDERLYING, LINK_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDC_UNDERLYING, USDC_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDT_UNDERLYING, USDT_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.WBTC_UNDERLYING, WBTC_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.WETH_UNDERLYING, WETH_RF); + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.t.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.t.sol new file mode 100644 index 000000000..ed7e65afd --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.t.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; +import {AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726} from './AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.sol'; + +/** + * @dev Test for AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.t.sol -vv + */ +contract AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726_Test is ProtocolV2TestBase { + AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726 internal proposal; + + struct Changes { + address asset; + uint256 reserveFactor; + } + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20527680); + proposal = new AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest( + 'AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726', + AaveV2Ethereum.POOL, + address(proposal) + ); + + address[] memory assetsChanged = new address[](6); + assetsChanged[0] = AaveV2EthereumAssets.DAI_UNDERLYING; + assetsChanged[1] = AaveV2EthereumAssets.LINK_UNDERLYING; + assetsChanged[2] = AaveV2EthereumAssets.USDC_UNDERLYING; + assetsChanged[3] = AaveV2EthereumAssets.USDT_UNDERLYING; + assetsChanged[4] = AaveV2EthereumAssets.WBTC_UNDERLYING; + assetsChanged[5] = AaveV2EthereumAssets.WETH_UNDERLYING; + + Changes[] memory assetChanges = new Changes[](6); + assetChanges[0] = Changes({ + asset: AaveV2EthereumAssets.DAI_UNDERLYING, + reserveFactor: proposal.DAI_RF() + }); + assetChanges[1] = Changes({ + asset: AaveV2EthereumAssets.LINK_UNDERLYING, + reserveFactor: proposal.LINK_RF() + }); + assetChanges[2] = Changes({ + asset: AaveV2EthereumAssets.USDC_UNDERLYING, + reserveFactor: proposal.USDC_RF() + }); + assetChanges[3] = Changes({ + asset: AaveV2EthereumAssets.USDT_UNDERLYING, + reserveFactor: proposal.USDT_RF() + }); + assetChanges[4] = Changes({ + asset: AaveV2EthereumAssets.WBTC_UNDERLYING, + reserveFactor: proposal.WBTC_RF() + }); + assetChanges[5] = Changes({ + asset: AaveV2EthereumAssets.WETH_UNDERLYING, + reserveFactor: proposal.WETH_RF() + }); + + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + for (uint i = 0; i < assetChanges.length; i++) { + ReserveConfig memory cfg = _findReserveConfig(allConfigsAfter, assetChanges[i].asset); + assertEq(cfg.reserveFactor, assetChanges[i].reserveFactor); + } + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.sol new file mode 100644 index 000000000..8b1d94f71 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.sol @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol'; +import {AaveV2PayloadPolygon} from 'aave-helpers/src/v2-config-engine/AaveV2PayloadPolygon.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV2ConfigEngine} from 'aave-helpers/src/v2-config-engine/IAaveV2ConfigEngine.sol'; +import {IV2RateStrategyFactory} from 'aave-helpers/src/v2-config-engine/IV2RateStrategyFactory.sol'; + +/** + * @title Reserve Factor Updates August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV2Polygon_ReserveFactorUpdatesAugust_20240726 is AaveV2PayloadPolygon { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV2ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV2ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV2ConfigEngine.RateStrategyUpdate[](6); + rateStrategies[0] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.DAI_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(12_75), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.USDC_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(12_75), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.USDT_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(12_75), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[3] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.WBTC_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(7_75), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[4] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.WETH_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(7_75), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[5] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.WMATIC_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(9_75), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.t.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.t.sol new file mode 100644 index 000000000..8cedac520 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Polygon} from 'aave-address-book/AaveV2Polygon.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; +import {AaveV2Polygon_ReserveFactorUpdatesAugust_20240726} from './AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.sol'; + +/** + * @dev Test for AaveV2Polygon_ReserveFactorUpdatesAugust_20240726 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.t.sol -vv + */ +contract AaveV2Polygon_ReserveFactorUpdatesAugust_20240726_Test is ProtocolV2TestBase { + AaveV2Polygon_ReserveFactorUpdatesAugust_20240726 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 60583790); + proposal = new AaveV2Polygon_ReserveFactorUpdatesAugust_20240726(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV2Polygon_ReserveFactorUpdatesAugust_20240726', + AaveV2Polygon.POOL, + address(proposal) + ); + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.sol new file mode 100644 index 000000000..6382217d6 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {AaveV3PayloadArbitrum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadArbitrum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; + +/** + * @title Reserve Factor Updates August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726 is AaveV3PayloadArbitrum { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3ArbitrumAssets.USDC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 35_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.t.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.t.sol new file mode 100644 index 000000000..8d2505993 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726} from './AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.sol'; + +/** + * @dev Test for AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726 + * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.t.sol -vv + */ +contract AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726_Test is ProtocolV3TestBase { + AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('arbitrum'), 242816390); + proposal = new AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726', + AaveV3Arbitrum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.sol new file mode 100644 index 000000000..3a21240be --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; +import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; + +/** + * @title Reserve Factor Updates August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Base_ReserveFactorUpdatesAugust_20240726 is AaveV3PayloadBase { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3BaseAssets.USDbC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 35_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.t.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.t.sol new file mode 100644 index 000000000..2dd8eacf4 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Base_ReserveFactorUpdatesAugust_20240726} from './AaveV3Base_ReserveFactorUpdatesAugust_20240726.sol'; + +/** + * @dev Test for AaveV3Base_ReserveFactorUpdatesAugust_20240726 + * command: FOUNDRY_PROFILE=base forge test --match-path=src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.t.sol -vv + */ +contract AaveV3Base_ReserveFactorUpdatesAugust_20240726_Test is ProtocolV3TestBase { + AaveV3Base_ReserveFactorUpdatesAugust_20240726 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('base'), 18429550); + proposal = new AaveV3Base_ReserveFactorUpdatesAugust_20240726(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Base_ReserveFactorUpdatesAugust_20240726', + AaveV3Base.POOL, + address(proposal) + ); + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.sol new file mode 100644 index 000000000..b8d7348d5 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; +import {AaveV3PayloadOptimism} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadOptimism.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; + +/** + * @title Reserve Factor Updates August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Optimism_ReserveFactorUpdatesAugust_20240726 is AaveV3PayloadOptimism { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3OptimismAssets.USDC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 35_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.t.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.t.sol new file mode 100644 index 000000000..b552b04e2 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Optimism_ReserveFactorUpdatesAugust_20240726} from './AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.sol'; + +/** + * @dev Test for AaveV3Optimism_ReserveFactorUpdatesAugust_20240726 + * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.t.sol -vv + */ +contract AaveV3Optimism_ReserveFactorUpdatesAugust_20240726_Test is ProtocolV3TestBase { + AaveV3Optimism_ReserveFactorUpdatesAugust_20240726 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('optimism'), 124024860); + proposal = new AaveV3Optimism_ReserveFactorUpdatesAugust_20240726(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Optimism_ReserveFactorUpdatesAugust_20240726', + AaveV3Optimism.POOL, + address(proposal) + ); + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.sol new file mode 100644 index 000000000..49c049c2c --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; +import {AaveV3PayloadPolygon} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadPolygon.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; + +/** + * @title Reserve Factor Updates August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Polygon_ReserveFactorUpdatesAugust_20240726 is AaveV3PayloadPolygon { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3PolygonAssets.USDC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 35_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.t.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.t.sol new file mode 100644 index 000000000..d74e34860 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Polygon_ReserveFactorUpdatesAugust_20240726} from './AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.sol'; + +/** + * @dev Test for AaveV3Polygon_ReserveFactorUpdatesAugust_20240726 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.t.sol -vv + */ +contract AaveV3Polygon_ReserveFactorUpdatesAugust_20240726_Test is ProtocolV3TestBase { + AaveV3Polygon_ReserveFactorUpdatesAugust_20240726 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 60583790); + proposal = new AaveV3Polygon_ReserveFactorUpdatesAugust_20240726(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Polygon_ReserveFactorUpdatesAugust_20240726', + AaveV3Polygon.POOL, + address(proposal) + ); + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust.md b/src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust.md new file mode 100644 index 000000000..1aac94f6e --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust.md @@ -0,0 +1,75 @@ +--- +title: "Reserve Factor Updates August" +author: "karpatkey_TokenLogic" +discussions: "https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06" +--- + +## Simple Summary + +This AIP shall implement the following parameter adjustments: + +- Increase Slope1 across Polygon v2 by 75bps; +- Increase Reserve Factor (RF) on Ethereum v2 and Avalanche v2 by 5.00%; and, +- Increase USDC.e and USDbC RF by 5.00% on Arbitrum, Optimism, Polygon, and Base. + +## Motivation + +This AIP will reduce deposit yield for assets on Ethereum v2 and Avalanche v2 instances of Aave Protocol by increasing the RF by 5.00%. By increasing the RF a greater portion of the interest paid by borrowers is directed to the Aave DAO's treasury. + +This results in a lower deposit rate for users and encourages migration from v2 instances of the Aave Protocol to v3. User's funds are not at risk of liquidation and the borrowing rate remains unchanged. + +The RF across all USDC.e and USDbC reserves will be increased by 5.00% to encourage migration from bridged USDC to native USDC on each respective network. + +By increasing the Slope1 parameter by 75bps on Polygon v2, the cost of capital to users increases and further encourages migration to Polygon v3. + +## Specification + +Slope1 Parameter 75bps Increases: + +| Asset | Market | Current Slope1 | Proposed Slope1 | +| :----: | :--------: | :------------: | :-------------: | +| DAI | Polygon v2 | 12% | 12.75% | +| USDT | Polygon v2 | 12% | 12.75% | +| wBTC | Polygon v2 | 7% | 7.75% | +| wETH | Polygon v2 | 7% | 7.75% | +| USDC | Polygon v2 | 12% | 12.75% | +| wMATIC | Polygon v2 | 9% | 9.75% | + +Reserve Factor 5.00% Increases: + +| Asset | Market | Current RF | Proposed RF | +| ------ | :----------: | :--------: | :---------: | +| DAI.e | Avalanche v2 | 60.00% | 65.00% | +| USDC.e | Avalanche v2 | 60.00% | 65.00% | +| USDT.e | Avalanche v2 | 60.00% | 65.00% | +| wAVAX | Avalanche v2 | 60.00% | 65.00% | +| WBTC.e | Avalanche v2 | 65.00% | 70.00% | +| WETH.e | Avalanche v2 | 60.00% | 65.00% | +| DAI | Ethereum v2 | 65.00% | 70.00% | +| LINK | Ethereum v2 | 70.00% | 75.00% | +| USDC | Ethereum v2 | 65.00% | 70.00% | +| USDT | Ethereum v2 | 65.00% | 70.00% | +| wBTC | Ethereum v2 | 70.00% | 75.00% | +| wETH | Ethereum v2 | 65.00% | 70.00% | +| USDC.e | Arbitrum | 30.00% | 35.00% | +| USDC.e | Optimism | 30.00% | 35.00% | +| USDC.e | Polygon | 30.00% | 35.00% | +| USDbC | Base | 30.00% | 35.00% | + +## References + +- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.sol) +- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.t.sol) +- [Snapshot for USDCe updates](https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06) +- [Discussion for USDCe updates](https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787/6) +- [Discussion for Ethereum V2 Reserve Factor Updates](https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/15) +- [Snapshot for Ethereum V2 Reserve Factor Updates](https://snapshot.org/#/aave.eth/proposal/0x26a03c08359c340f63b78b0c3e96d37aa0adeda65814643b0886d4719048ea7e) +- [Discussion for Avalanche V2 Reserve Factor Updates](https://governance.aave.com/t/arfc-avalanche-v2-reserve-factor-adjustment/17040/10) +- [Snapshot for Avalanche V2 Reserve Factor Updates](https://snapshot.org/#/aave.eth/proposal/0x770ff4e02634c77aaa09952345551168920f7878b32ab03fcef92763a5fb70ab) +- [Discussion for Polygon V2 Borrow Rate Updates](https://governance.aave.com/t/arfc-polygon-v2-borrow-rate-adjustments/17252/10) +- [Snapshot for Polygon V2 Borrow Rate Updates](https://snapshot.org/#/aave.eth/proposal/0x95643085ee16eb0eaa4110a9f0ea8223009f9521e596e1a958303705a5001363) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol b/src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol new file mode 100644 index 000000000..c236d72a2 --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol @@ -0,0 +1,218 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, BaseScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726} from './AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.sol'; +import {AaveV2Polygon_ReserveFactorUpdatesAugust_20240726} from './AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.sol'; +import {AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726} from './AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.sol'; +import {AaveV3Polygon_ReserveFactorUpdatesAugust_20240726} from './AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.sol'; +import {AaveV3Optimism_ReserveFactorUpdatesAugust_20240726} from './AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.sol'; +import {AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726} from './AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.sol'; +import {AaveV3Base_ReserveFactorUpdatesAugust_20240726} from './AaveV3Base_ReserveFactorUpdatesAugust_20240726.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ReserveFactorUpdatesAugust_20240726.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Polygon + * deploy-command: make deploy-ledger contract=src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol:DeployPolygon chain=polygon + * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/ReserveFactorUpdatesAugust_20240726.s.sol/137/run-latest.json + */ +contract DeployPolygon is PolygonScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Polygon_ReserveFactorUpdatesAugust_20240726).creationCode + ); + address payload1 = GovV3Helpers.deployDeterministic( + type(AaveV3Polygon_ReserveFactorUpdatesAugust_20240726).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](2); + actions[0] = GovV3Helpers.buildAction(payload0); + actions[1] = GovV3Helpers.buildAction(payload1); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Avalanche + * deploy-command: make deploy-ledger contract=src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol:DeployAvalanche chain=avalanche + * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/ReserveFactorUpdatesAugust_20240726.s.sol/43114/run-latest.json + */ +contract DeployAvalanche is AvalancheScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Optimism + * deploy-command: make deploy-ledger contract=src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol:DeployOptimism chain=optimism + * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/ReserveFactorUpdatesAugust_20240726.s.sol/10/run-latest.json + */ +contract DeployOptimism is OptimismScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Optimism_ReserveFactorUpdatesAugust_20240726).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Arbitrum + * deploy-command: make deploy-ledger contract=src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol:DeployArbitrum chain=arbitrum + * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/ReserveFactorUpdatesAugust_20240726.s.sol/42161/run-latest.json + */ +contract DeployArbitrum is ArbitrumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Base + * deploy-command: make deploy-ledger contract=src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol:DeployBase chain=base + * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/ReserveFactorUpdatesAugust_20240726.s.sol/8453/run-latest.json + */ +contract DeployBase is BaseScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Base_ReserveFactorUpdatesAugust_20240726).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust_20240726.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](6); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](2); + actionsPolygon[0] = GovV3Helpers.buildAction( + type(AaveV2Polygon_ReserveFactorUpdatesAugust_20240726).creationCode + ); + actionsPolygon[1] = GovV3Helpers.buildAction( + type(AaveV3Polygon_ReserveFactorUpdatesAugust_20240726).creationCode + ); + payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); + actionsAvalanche[0] = GovV3Helpers.buildAction( + type(AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726).creationCode + ); + payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); + actionsOptimism[0] = GovV3Helpers.buildAction( + type(AaveV3Optimism_ReserveFactorUpdatesAugust_20240726).creationCode + ); + payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsArbitrum[0] = GovV3Helpers.buildAction( + type(AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726).creationCode + ); + payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction( + type(AaveV3Base_ReserveFactorUpdatesAugust_20240726).creationCode + ); + payloads[5] = GovV3Helpers.buildBasePayload(vm, actionsBase); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust.md' + ) + ); + } +} diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/config.ts b/src/20240726_Multi_ReserveFactorUpdatesAugust/config.ts new file mode 100644 index 000000000..1044774ea --- /dev/null +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/config.ts @@ -0,0 +1,164 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: [ + 'AaveV2Ethereum', + 'AaveV2Polygon', + 'AaveV2Avalanche', + 'AaveV3Polygon', + 'AaveV3Optimism', + 'AaveV3Arbitrum', + 'AaveV3Base', + ], + title: 'Reserve Factor Updates August', + shortName: 'ReserveFactorUpdatesAugust', + date: '20240726', + author: 'karpatkey_TokenLogic', + discussion: + 'https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV2Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20527680}}, + AaveV2Polygon: { + configs: { + RATE_UPDATE_V2: [ + { + asset: 'DAI', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '12.75', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'USDC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '12.75', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'USDT', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '12.75', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'WBTC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '7.75', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'WETH', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '7.75', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'WMATIC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '9.75', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 60583790}, + }, + AaveV2Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 49251980}}, + AaveV3Polygon: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '35', + asset: 'USDC', + }, + ], + }, + cache: {blockNumber: 60583790}, + }, + AaveV3Optimism: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '35', + asset: 'USDC', + }, + ], + }, + cache: {blockNumber: 124024860}, + }, + AaveV3Arbitrum: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '35', + asset: 'USDC', + }, + ], + }, + cache: {blockNumber: 242816390}, + }, + AaveV3Base: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '35', + asset: 'USDbC', + }, + ], + }, + cache: {blockNumber: 18429550}, + }, + }, +}; From 0815ac680dde73bbc9334c56e9ccd80caf4cc4fc Mon Sep 17 00:00:00 2001 From: Cache bot Date: Fri, 16 Aug 2024 05:30:55 +0000 Subject: [PATCH 44/68] fix(cache): automated cache update [skip ci] --- .../ReserveFactorUpdatesAugust.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust.md b/src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust.md index 1aac94f6e..0c44efbeb 100644 --- a/src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust.md +++ b/src/20240726_Multi_ReserveFactorUpdatesAugust/ReserveFactorUpdatesAugust.md @@ -59,8 +59,8 @@ Reserve Factor 5.00% Increases: ## References -- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.sol) -- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.t.sol) +- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.sol) +- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Ethereum_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Polygon_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV2Avalanche_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Polygon_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Optimism_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Arbitrum_ReserveFactorUpdatesAugust_20240726.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/3eb72bf4ca74ab04137b7650030c620e98519325/src/20240726_Multi_ReserveFactorUpdatesAugust/AaveV3Base_ReserveFactorUpdatesAugust_20240726.t.sol) - [Snapshot for USDCe updates](https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06) - [Discussion for USDCe updates](https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787/6) - [Discussion for Ethereum V2 Reserve Factor Updates](https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/15) From e83675c63fec54ad94ea1d56fc2f26b00b8c3e27 Mon Sep 17 00:00:00 2001 From: Lukas Date: Fri, 16 Aug 2024 11:35:54 +0200 Subject: [PATCH 45/68] docs: add docs for verification (#427) * docs: add docs for verification * fix: revert to shanghai --- .gitignore | 2 ++ README.md | 11 +++++++++++ foundry.toml | 34 ++++++++++++++++++---------------- verify.example.json | 8 ++++++++ 4 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 verify.example.json diff --git a/.gitignore b/.gitignore index 7415e074f..9634c09db 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ reports/ # tooling download folder etherscan + +verify.json diff --git a/README.md b/README.md index e2e364778..d211784a0 100644 --- a/README.md +++ b/README.md @@ -101,3 +101,14 @@ This repository will manage the upload to ipfs automatically once a pr is merged The proposal requires at least one `payload` and the `encodedHash`. :tada: + +## Troubleshooting Verification + +If for whatever reason verification fails, there's a good chance the error is on the foundry side, not in our tooling. +To retry a specific verification you can follow the following steps: + +1. copy verify.example.json to verify.json +2. replace the `chain` with the appropriate chainId +3. replace the `hash` with the transaction hash of the deployment transaction (make sure it's the deployment transaction, not the one registering the payload on the payloadscontroller) +4. run `FOUNDRY_PROFILE= forge build --force` +5. run `FOUNDRY_PROFILE= npx catapulta-verify -b verify.json` diff --git a/foundry.toml b/foundry.toml index 3c815db9b..16ecffdbe 100644 --- a/foundry.toml +++ b/foundry.toml @@ -6,10 +6,12 @@ solc = '0.8.20' out = 'out' bytecode_hash = 'none' libs = ['lib'] -remappings = [ -] +remappings = [] ffi = true -fs_permissions = [{ access = "write", path = "./reports" }, { access = "read", path = "./zkout" }] +fs_permissions = [ + { access = "write", path = "./reports" }, + { access = "read", path = "./zkout" }, +] evm_version = 'shanghai' [profile.zksync] @@ -73,18 +75,18 @@ scroll = "${RPC_SCROLL}" zksync = "${RPC_ZK_SYNC}" [etherscan] -mainnet = { key="${ETHERSCAN_API_KEY_MAINNET}", chain=1 } -optimism = { key="${ETHERSCAN_API_KEY_OPTIMISM}", chain=10 } -avalanche = { key="${ETHERSCAN_API_KEY_AVALANCHE}", chain=43114 } -polygon = { key="${ETHERSCAN_API_KEY_POLYGON}", chain=137 } -arbitrum = { key="${ETHERSCAN_API_KEY_ARBITRUM}", chain=42161 } -fantom = { key="${ETHERSCAN_API_KEY_FANTOM}", chain=250 } -metis = { key="any", chainId=1088, url='https://andromeda-explorer.metis.io/' } -base = { key="${ETHERSCAN_API_KEY_BASE}", chainId=8453 } -zkevm = { key="${ETHERSCAN_API_KEY_ZKEVM}", chainId=1101 } -gnosis = { key="${ETHERSCAN_API_KEY_GNOSIS}", chainId=100 } -bnb = { key="${ETHERSCAN_API_KEY_BNB}", chainId=56, url='https://api.bscscan.com/api'} -scroll = { key="${ETHERSCAN_API_KEY_SCROLL}", chainId=534352 } -zksync = { key="${ETHERSCAN_API_KEY_ZK_SYNC}", chain = 324 } +mainnet = { key = "${ETHERSCAN_API_KEY_MAINNET}", chain = 1 } +optimism = { key = "${ETHERSCAN_API_KEY_OPTIMISM}", chain = 10 } +avalanche = { key = "${ETHERSCAN_API_KEY_AVALANCHE}", chain = 43114 } +polygon = { key = "${ETHERSCAN_API_KEY_POLYGON}", chain = 137 } +arbitrum = { key = "${ETHERSCAN_API_KEY_ARBITRUM}", chain = 42161 } +fantom = { key = "${ETHERSCAN_API_KEY_FANTOM}", chain = 250 } +metis = { key = "any", chainId = 1088, url = 'https://andromeda-explorer.metis.io/' } +base = { key = "${ETHERSCAN_API_KEY_BASE}", chainId = 8453 } +zkevm = { key = "${ETHERSCAN_API_KEY_ZKEVM}", chainId = 1101 } +gnosis = { key = "${ETHERSCAN_API_KEY_GNOSIS}", chainId = 100 } +bnb = { key = "${ETHERSCAN_API_KEY_BNB}", chainId = 56, url = 'https://api.bscscan.com/api' } +scroll = { key = "${ETHERSCAN_API_KEY_SCROLL}", chainId = 534352 } +zksync = { key = "${ETHERSCAN_API_KEY_ZK_SYNC}", chain = 324 } # See more config options https://github.com/gakonst/foundry/tree/master/config diff --git a/verify.example.json b/verify.example.json new file mode 100644 index 000000000..511f3a64a --- /dev/null +++ b/verify.example.json @@ -0,0 +1,8 @@ +{ + "transactions": [ + { + "hash": "0x47fc8c1fdbde4ce50c7eba7ac865ad6ce667fa17a4e033d019ba76c47438a5c7" + } + ], + "chain": 1088 +} From 91fdcd8b5a82fcafb2feff88746e23f1d1bf4d72 Mon Sep 17 00:00:00 2001 From: Harsh Pandey Date: Fri, 16 Aug 2024 19:05:28 +0530 Subject: [PATCH 46/68] feat: zkSync activation (#422) * fix: zksync config remamppings and imports * feat: activation payload * feat: update test block and libs * chore: remove old assets * chore: update address-book package * feat: add diffs to writeup * chore: update address book link with commit hash * fix: diff writeup * feat: set aci multisig as emissions admin * fix: cleanup tests * fix: update capo feeds * feat: update risk params * chore: remove old assets * chore: update writeup * fix: env example * fix: update capo feed * chore: update test block * chore: update diffs --- ...6d1cd7ab99074fae610258d10d06e999d7a83c.svg | 1 + ...70b8faf360fc5de364fb5d60d51c16bdba173f.svg | 1 + ...c49025799ee26cec000a04cbf5a83eef41844f.svg | 1 + ...a8c0626de986f85fcd11e86a47637bc7444e08.svg | 1 + .env.example | 4 +- ...c_AaveV3ZkSyncActivation_20240805_after.md | 577 ++++++++++++++++++ foundry.toml | 28 +- .../AaveV3ZkSyncActivation.md | 103 ++++ .../AaveV3ZkSyncActivation_20240805.s.sol | 39 ++ .../config.ts | 153 +++++ yarn.lock | 1 + .../AaveV3ZkSyncActivation_20240805.s.sol | 37 ++ ...ZkSync_AaveV3ZkSyncActivation_20240805.sol | 206 +++++++ ...Sync_AaveV3ZkSyncActivation_20240805.t.sol | 87 +++ 14 files changed, 1223 insertions(+), 16 deletions(-) create mode 100644 .assets/9d6d1cd7ab99074fae610258d10d06e999d7a83c.svg create mode 100644 .assets/ac70b8faf360fc5de364fb5d60d51c16bdba173f.svg create mode 100644 .assets/acc49025799ee26cec000a04cbf5a83eef41844f.svg create mode 100644 .assets/cea8c0626de986f85fcd11e86a47637bc7444e08.svg create mode 100644 diffs/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_before_AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_after.md create mode 100644 src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md create mode 100644 src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol create mode 100644 src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/config.ts create mode 100644 zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol create mode 100644 zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol create mode 100644 zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol diff --git a/.assets/9d6d1cd7ab99074fae610258d10d06e999d7a83c.svg b/.assets/9d6d1cd7ab99074fae610258d10d06e999d7a83c.svg new file mode 100644 index 000000000..9665d29c3 --- /dev/null +++ b/.assets/9d6d1cd7ab99074fae610258d10d06e999d7a83c.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/ac70b8faf360fc5de364fb5d60d51c16bdba173f.svg b/.assets/ac70b8faf360fc5de364fb5d60d51c16bdba173f.svg new file mode 100644 index 000000000..6af590b85 --- /dev/null +++ b/.assets/ac70b8faf360fc5de364fb5d60d51c16bdba173f.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/acc49025799ee26cec000a04cbf5a83eef41844f.svg b/.assets/acc49025799ee26cec000a04cbf5a83eef41844f.svg new file mode 100644 index 000000000..081891402 --- /dev/null +++ b/.assets/acc49025799ee26cec000a04cbf5a83eef41844f.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/cea8c0626de986f85fcd11e86a47637bc7444e08.svg b/.assets/cea8c0626de986f85fcd11e86a47637bc7444e08.svg new file mode 100644 index 000000000..5dff1554b --- /dev/null +++ b/.assets/cea8c0626de986f85fcd11e86a47637bc7444e08.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.env.example b/.env.example index a387a95cc..b437ac105 100644 --- a/.env.example +++ b/.env.example @@ -19,7 +19,7 @@ RPC_ZKEVM=https://zkevm-rpc.com RPC_GNOSIS=https://rpc.ankr.com/gnosis RPC_BNB=https://binance.llamarpc.com RPC_SCROLL=https://rpc.scroll.io -RPC_ZK_SYNC=https://mainnet.era.zksync.io +RPC_ZKSYNC=https://mainnet.era.zksync.io # Etherscan api keys for verification & download utils ETHERSCAN_API_KEY_MAINNET= @@ -33,7 +33,7 @@ ETHERSCAN_API_KEY_ZKEVM= ETHERSCAN_API_KEY_GNOSIS= ETHERSCAN_API_KEY_BNB= ETHERSCAN_API_KEY_SCROLL= -ETHERESCAN_API_KEY_ZK_SYNC= +ETHERESCAN_API_KEY_ZKSYNC= # Simulation/fork creation TENDERLY_ACCESS_TOKEN= diff --git a/diffs/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_before_AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_after.md b/diffs/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_before_AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_after.md new file mode 100644 index 000000000..0fffbd8c2 --- /dev/null +++ b/diffs/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_before_AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_after.md @@ -0,0 +1,577 @@ +## Reserve changes + +### Reserve added + +#### USDC ([0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4](https://era.zksync.network//address/0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4)) + +| description | value | +| --- | --- | +| decimals | 6 | +| isActive | true | +| isFrozen | false | +| supplyCap | 1,000,000 USDC | +| borrowCap | 900,000 USDC | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 0 | +| oracle | [0x162C97F6B4FA5a915A44D430bb7AE0eE716b3b87](https://era.zksync.network//address/0x162C97F6B4FA5a915A44D430bb7AE0eE716b3b87) | +| oracleDecimals | 8 | +| oracleDescription | Capped USDC/USD | +| oracleLatestAnswer | 0.99994997 | +| usageAsCollateralEnabled | true | +| ltv | 75 % [7500] | +| liquidationThreshold | 78 % [7800] | +| liquidationBonus | 5 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 10 % [1000] | +| aToken | [0x97448808a366BDCC3A0fF84E36573dD8Ef1Ff5Fb](https://era.zksync.network//address/0x97448808a366BDCC3A0fF84E36573dD8Ef1Ff5Fb) | +| aTokenImpl | [0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4](https://era.zksync.network//address/0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4) | +| variableDebtToken | [0xb30d45038b1373827A0336cD6EB0b94723C76783](https://era.zksync.network//address/0xb30d45038b1373827A0336cD6EB0b94723C76783) | +| variableDebtTokenImpl | [0x7c310e97Bdba5E7603D772df324B8dd33771c094](https://era.zksync.network//address/0x7c310e97Bdba5E7603D772df324B8dd33771c094) | +| stableDebtToken | [0x9bC045f0aB33a498dA84F09fDAbd0C3c8Ed278c0](https://era.zksync.network//address/0x9bC045f0aB33a498dA84F09fDAbd0C3c8Ed278c0) | +| stableDebtTokenImpl | [0xc25037446067240880b7B6d81fae544309a5fE02](https://era.zksync.network//address/0xc25037446067240880b7B6d81fae544309a5fE02) | +| borrowingEnabled | true | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | true | +| interestRateStrategy | [0x7BcE25db0C430059C4277D6A747d7fd0C1214beA](https://era.zksync.network//address/0x7BcE25db0C430059C4277D6A747d7fd0C1214beA) | +| aTokenName | Aave ZkSync USDC | +| aTokenSymbol | aZksUSDC | +| aTokenUnderlyingBalance | 0 USDC [0] | +| isPaused | false | +| stableDebtTokenName | Aave ZkSync Stable Debt USDC | +| stableDebtTokenSymbol | stableDebtZksUSDC | +| variableDebtTokenName | Aave ZkSync Variable Debt USDC | +| variableDebtTokenSymbol | variableDebtZksUSDC | +| virtualAccountingActive | false | +| virtualBalance | 0 USDC [0] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 65.5 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 5.5 % | +| variableRateSlope2 | 60 % | +| interestRate | ![ir](/.assets/acc49025799ee26cec000a04cbf5a83eef41844f.svg) | + + +#### USDT ([0x493257fD37EDB34451f62EDf8D2a0C418852bA4C](https://era.zksync.network//address/0x493257fD37EDB34451f62EDf8D2a0C418852bA4C)) + +| description | value | +| --- | --- | +| decimals | 6 | +| isActive | true | +| isFrozen | false | +| supplyCap | 3,000,000 USDT | +| borrowCap | 2,700,000 USDT | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 0 | +| oracle | [0x92DaB7275859C5399a326874897daddb0F4ed7A4](https://era.zksync.network//address/0x92DaB7275859C5399a326874897daddb0F4ed7A4) | +| oracleDecimals | 8 | +| oracleDescription | Capped USDT/USD | +| oracleLatestAnswer | 1.00017 | +| usageAsCollateralEnabled | true | +| ltv | 75 % [7500] | +| liquidationThreshold | 78 % [7800] | +| liquidationBonus | 5 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 10 % [1000] | +| aToken | [0xa7d6B2dFe6cDB4c2D017294636065ac77265114c](https://era.zksync.network//address/0xa7d6B2dFe6cDB4c2D017294636065ac77265114c) | +| aTokenImpl | [0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4](https://era.zksync.network//address/0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4) | +| variableDebtToken | [0x02C39C4Ed5D7345fD96E9f83805467B9D3c33252](https://era.zksync.network//address/0x02C39C4Ed5D7345fD96E9f83805467B9D3c33252) | +| variableDebtTokenImpl | [0x7c310e97Bdba5E7603D772df324B8dd33771c094](https://era.zksync.network//address/0x7c310e97Bdba5E7603D772df324B8dd33771c094) | +| stableDebtToken | [0x3d58EC46eE7b50ff54E5277Bbb02A8fdE774F193](https://era.zksync.network//address/0x3d58EC46eE7b50ff54E5277Bbb02A8fdE774F193) | +| stableDebtTokenImpl | [0xc25037446067240880b7B6d81fae544309a5fE02](https://era.zksync.network//address/0xc25037446067240880b7B6d81fae544309a5fE02) | +| borrowingEnabled | true | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | true | +| interestRateStrategy | [0x7BcE25db0C430059C4277D6A747d7fd0C1214beA](https://era.zksync.network//address/0x7BcE25db0C430059C4277D6A747d7fd0C1214beA) | +| aTokenName | Aave ZkSync USDT | +| aTokenSymbol | aZksUSDT | +| aTokenUnderlyingBalance | 0 USDT [0] | +| isPaused | false | +| stableDebtTokenName | Aave ZkSync Stable Debt USDT | +| stableDebtTokenSymbol | stableDebtZksUSDT | +| variableDebtTokenName | Aave ZkSync Variable Debt USDT | +| variableDebtTokenSymbol | variableDebtZksUSDT | +| virtualAccountingActive | false | +| virtualBalance | 0 USDT [0] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 65.5 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 5.5 % | +| variableRateSlope2 | 60 % | +| interestRate | ![ir](/.assets/acc49025799ee26cec000a04cbf5a83eef41844f.svg) | + + +#### ZK ([0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E](https://era.zksync.network//address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 18,000,000 ZK | +| borrowCap | 10,000,000 ZK | +| debtCeiling | 800,000 $ [80000000] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 0 | +| oracle | [0xD1ce60dc8AE060DDD17cA8716C96f193bC88DD13](https://era.zksync.network//address/0xD1ce60dc8AE060DDD17cA8716C96f193bC88DD13) | +| oracleDecimals | 8 | +| oracleDescription | ZK / USD | +| oracleLatestAnswer | 0.10448438 | +| usageAsCollateralEnabled | true | +| ltv | 40 % [4000] | +| liquidationThreshold | 45 % [4500] | +| liquidationBonus | 10 % | +| liquidationProtocolFee | 20 % [2000] | +| reserveFactor | 20 % [2000] | +| aToken | [0xFA8789719Ff34325362FF901bb3B34f34Ce4768A](https://era.zksync.network//address/0xFA8789719Ff34325362FF901bb3B34f34Ce4768A) | +| aTokenImpl | [0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4](https://era.zksync.network//address/0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4) | +| variableDebtToken | [0xfaa231f2B7D0De0644b38a36deF591B3B8c7a409](https://era.zksync.network//address/0xfaa231f2B7D0De0644b38a36deF591B3B8c7a409) | +| variableDebtTokenImpl | [0x7c310e97Bdba5E7603D772df324B8dd33771c094](https://era.zksync.network//address/0x7c310e97Bdba5E7603D772df324B8dd33771c094) | +| stableDebtToken | [0x9EAAc5b543258E44a189D1dF02dD2CEAAb8Af7B0](https://era.zksync.network//address/0x9EAAc5b543258E44a189D1dF02dD2CEAAb8Af7B0) | +| stableDebtTokenImpl | [0xc25037446067240880b7B6d81fae544309a5fE02](https://era.zksync.network//address/0xc25037446067240880b7B6d81fae544309a5fE02) | +| borrowingEnabled | true | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x7BcE25db0C430059C4277D6A747d7fd0C1214beA](https://era.zksync.network//address/0x7BcE25db0C430059C4277D6A747d7fd0C1214beA) | +| aTokenName | Aave ZkSync ZK | +| aTokenSymbol | aZksZK | +| aTokenUnderlyingBalance | 0 ZK [0] | +| isPaused | false | +| stableDebtTokenName | Aave ZkSync Stable Debt ZK | +| stableDebtTokenSymbol | stableDebtZksZK | +| variableDebtTokenName | Aave ZkSync Variable Debt ZK | +| variableDebtTokenSymbol | variableDebtZksZK | +| virtualAccountingActive | false | +| virtualBalance | 0 ZK [0] | +| optimalUsageRatio | 45 % | +| maxVariableBorrowRate | 309 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 9 % | +| variableRateSlope2 | 300 % | +| interestRate | ![ir](/.assets/cea8c0626de986f85fcd11e86a47637bc7444e08.svg) | + + +#### WETH ([0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91](https://era.zksync.network//address/0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 1,000 WETH | +| borrowCap | 900 WETH | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 1 | +| oracle | [0x6D41d1dc818112880b40e26BD6FD347E41008eDA](https://era.zksync.network//address/0x6D41d1dc818112880b40e26BD6FD347E41008eDA) | +| oracleDecimals | 8 | +| oracleDescription | ETH / USD | +| oracleLatestAnswer | 2605.19 | +| usageAsCollateralEnabled | true | +| ltv | 75 % [7500] | +| liquidationThreshold | 78 % [7800] | +| liquidationBonus | 6 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 15 % [1500] | +| aToken | [0xe471A799FA3DC0738Cf9FB7346574843f5219C30](https://era.zksync.network//address/0xe471A799FA3DC0738Cf9FB7346574843f5219C30) | +| aTokenImpl | [0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4](https://era.zksync.network//address/0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4) | +| variableDebtToken | [0x912413f4Ab1fBFD31414DE2fB1b63816c95e4d91](https://era.zksync.network//address/0x912413f4Ab1fBFD31414DE2fB1b63816c95e4d91) | +| variableDebtTokenImpl | [0x7c310e97Bdba5E7603D772df324B8dd33771c094](https://era.zksync.network//address/0x7c310e97Bdba5E7603D772df324B8dd33771c094) | +| stableDebtToken | [0x415BeF014E69564Fe68f6b8d5fBbDE4310794C5d](https://era.zksync.network//address/0x415BeF014E69564Fe68f6b8d5fBbDE4310794C5d) | +| stableDebtTokenImpl | [0xc25037446067240880b7B6d81fae544309a5fE02](https://era.zksync.network//address/0xc25037446067240880b7B6d81fae544309a5fE02) | +| borrowingEnabled | true | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x7BcE25db0C430059C4277D6A747d7fd0C1214beA](https://era.zksync.network//address/0x7BcE25db0C430059C4277D6A747d7fd0C1214beA) | +| aTokenName | Aave ZkSync WETH | +| aTokenSymbol | aZksWETH | +| aTokenUnderlyingBalance | 0 WETH [0] | +| isPaused | false | +| stableDebtTokenName | Aave ZkSync Stable Debt WETH | +| stableDebtTokenSymbol | stableDebtZksWETH | +| variableDebtTokenName | Aave ZkSync Variable Debt WETH | +| variableDebtTokenSymbol | variableDebtZksWETH | +| virtualAccountingActive | false | +| virtualBalance | 0 WETH [0] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 82.7 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 2.7 % | +| variableRateSlope2 | 80 % | +| interestRate | ![ir](/.assets/ac70b8faf360fc5de364fb5d60d51c16bdba173f.svg) | +| eMode.label | ETH correlated | +| eMode.ltv | 90 % | +| eMode.liquidationThreshold | 93 % | +| eMode.liquidationBonus | 1 % | +| eMode.priceSource | 0x0000000000000000000000000000000000000000 | + + +#### wstETH ([0x703b52F2b28fEbcB60E1372858AF5b18849FE867](https://era.zksync.network//address/0x703b52F2b28fEbcB60E1372858AF5b18849FE867)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 300 wstETH | +| borrowCap | 30 wstETH | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 1 | +| oracle | [0xB19d366dC599904Aa026440d4E805F0E13512682](https://era.zksync.network//address/0xB19d366dC599904Aa026440d4E805F0E13512682) | +| oracleDecimals | 8 | +| oracleDescription | Capped wstETH / stETH(ETH) / USD | +| oracleLatestAnswer | 3063.75333621 | +| usageAsCollateralEnabled | true | +| ltv | 71 % [7100] | +| liquidationThreshold | 76 % [7600] | +| liquidationBonus | 7 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 5 % [500] | +| aToken | [0x318CfbA2CDDBF6522d855A589938EC6f5B990Fc1](https://era.zksync.network//address/0x318CfbA2CDDBF6522d855A589938EC6f5B990Fc1) | +| aTokenImpl | [0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4](https://era.zksync.network//address/0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4) | +| variableDebtToken | [0x29191BEa63b15E70E2f4c2647695aD1C8EdCb3d5](https://era.zksync.network//address/0x29191BEa63b15E70E2f4c2647695aD1C8EdCb3d5) | +| variableDebtTokenImpl | [0x7c310e97Bdba5E7603D772df324B8dd33771c094](https://era.zksync.network//address/0x7c310e97Bdba5E7603D772df324B8dd33771c094) | +| stableDebtToken | [0x60a6E8f92482Fe6F11B57697Ca4f962c0cDA3369](https://era.zksync.network//address/0x60a6E8f92482Fe6F11B57697Ca4f962c0cDA3369) | +| stableDebtTokenImpl | [0xc25037446067240880b7B6d81fae544309a5fE02](https://era.zksync.network//address/0xc25037446067240880b7B6d81fae544309a5fE02) | +| borrowingEnabled | true | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x7BcE25db0C430059C4277D6A747d7fd0C1214beA](https://era.zksync.network//address/0x7BcE25db0C430059C4277D6A747d7fd0C1214beA) | +| aTokenName | Aave ZkSync wstETH | +| aTokenSymbol | aZkswstETH | +| aTokenUnderlyingBalance | 0 wstETH [0] | +| isPaused | false | +| stableDebtTokenName | Aave ZkSync Stable Debt wstETH | +| stableDebtTokenSymbol | stableDebtZkswstETH | +| variableDebtTokenName | Aave ZkSync Variable Debt wstETH | +| variableDebtTokenSymbol | variableDebtZkswstETH | +| virtualAccountingActive | false | +| virtualBalance | 0 wstETH [0] | +| optimalUsageRatio | 45 % | +| maxVariableBorrowRate | 84.5 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 4.5 % | +| variableRateSlope2 | 80 % | +| interestRate | ![ir](/.assets/9d6d1cd7ab99074fae610258d10d06e999d7a83c.svg) | +| eMode.label | ETH correlated | +| eMode.ltv | 90 % | +| eMode.liquidationThreshold | 93 % | +| eMode.liquidationBonus | 1 % | +| eMode.priceSource | 0x0000000000000000000000000000000000000000 | + + +## Raw diff + +```json +{ + "eModes": { + "1": { + "from": null, + "to": { + "eModeCategory": 1, + "label": "ETH correlated", + "liquidationBonus": 10100, + "liquidationThreshold": 9300, + "ltv": 9000, + "priceSource": "0x0000000000000000000000000000000000000000" + } + } + }, + "reserves": { + "0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4": { + "from": null, + "to": { + "aToken": "0x97448808a366BDCC3A0fF84E36573dD8Ef1Ff5Fb", + "aTokenImpl": "0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4", + "aTokenName": "Aave ZkSync USDC", + "aTokenSymbol": "aZksUSDC", + "aTokenUnderlyingBalance": 0, + "borrowCap": 900000, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 6, + "eModeCategory": 0, + "interestRateStrategy": "0x7BcE25db0C430059C4277D6A747d7fd0C1214beA", + "isActive": true, + "isBorrowableInIsolation": true, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10500, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 7800, + "ltv": 7500, + "oracle": "0x162C97F6B4FA5a915A44D430bb7AE0eE716b3b87", + "oracleDecimals": 8, + "oracleDescription": "Capped USDC/USD", + "oracleLatestAnswer": 99994997, + "reserveFactor": 1000, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0x9bC045f0aB33a498dA84F09fDAbd0C3c8Ed278c0", + "stableDebtTokenImpl": "0xc25037446067240880b7B6d81fae544309a5fE02", + "stableDebtTokenName": "Aave ZkSync Stable Debt USDC", + "stableDebtTokenSymbol": "stableDebtZksUSDC", + "supplyCap": 1000000, + "symbol": "USDC", + "underlying": "0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0xb30d45038b1373827A0336cD6EB0b94723C76783", + "variableDebtTokenImpl": "0x7c310e97Bdba5E7603D772df324B8dd33771c094", + "variableDebtTokenName": "Aave ZkSync Variable Debt USDC", + "variableDebtTokenSymbol": "variableDebtZksUSDC", + "virtualAccountingActive": false, + "virtualBalance": 0 + } + }, + "0x493257fD37EDB34451f62EDf8D2a0C418852bA4C": { + "from": null, + "to": { + "aToken": "0xa7d6B2dFe6cDB4c2D017294636065ac77265114c", + "aTokenImpl": "0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4", + "aTokenName": "Aave ZkSync USDT", + "aTokenSymbol": "aZksUSDT", + "aTokenUnderlyingBalance": 0, + "borrowCap": 2700000, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 6, + "eModeCategory": 0, + "interestRateStrategy": "0x7BcE25db0C430059C4277D6A747d7fd0C1214beA", + "isActive": true, + "isBorrowableInIsolation": true, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10500, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 7800, + "ltv": 7500, + "oracle": "0x92DaB7275859C5399a326874897daddb0F4ed7A4", + "oracleDecimals": 8, + "oracleDescription": "Capped USDT/USD", + "oracleLatestAnswer": 100017000, + "reserveFactor": 1000, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0x3d58EC46eE7b50ff54E5277Bbb02A8fdE774F193", + "stableDebtTokenImpl": "0xc25037446067240880b7B6d81fae544309a5fE02", + "stableDebtTokenName": "Aave ZkSync Stable Debt USDT", + "stableDebtTokenSymbol": "stableDebtZksUSDT", + "supplyCap": 3000000, + "symbol": "USDT", + "underlying": "0x493257fD37EDB34451f62EDf8D2a0C418852bA4C", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0x02C39C4Ed5D7345fD96E9f83805467B9D3c33252", + "variableDebtTokenImpl": "0x7c310e97Bdba5E7603D772df324B8dd33771c094", + "variableDebtTokenName": "Aave ZkSync Variable Debt USDT", + "variableDebtTokenSymbol": "variableDebtZksUSDT", + "virtualAccountingActive": false, + "virtualBalance": 0 + } + }, + "0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E": { + "from": null, + "to": { + "aToken": "0xFA8789719Ff34325362FF901bb3B34f34Ce4768A", + "aTokenImpl": "0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4", + "aTokenName": "Aave ZkSync ZK", + "aTokenSymbol": "aZksZK", + "aTokenUnderlyingBalance": 0, + "borrowCap": 10000000, + "borrowingEnabled": true, + "debtCeiling": 80000000, + "decimals": 18, + "eModeCategory": 0, + "interestRateStrategy": "0x7BcE25db0C430059C4277D6A747d7fd0C1214beA", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 11000, + "liquidationProtocolFee": 2000, + "liquidationThreshold": 4500, + "ltv": 4000, + "oracle": "0xD1ce60dc8AE060DDD17cA8716C96f193bC88DD13", + "oracleDecimals": 8, + "oracleDescription": "ZK / USD", + "oracleLatestAnswer": 10448438, + "reserveFactor": 2000, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0x9EAAc5b543258E44a189D1dF02dD2CEAAb8Af7B0", + "stableDebtTokenImpl": "0xc25037446067240880b7B6d81fae544309a5fE02", + "stableDebtTokenName": "Aave ZkSync Stable Debt ZK", + "stableDebtTokenSymbol": "stableDebtZksZK", + "supplyCap": 18000000, + "symbol": "ZK", + "underlying": "0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0xfaa231f2B7D0De0644b38a36deF591B3B8c7a409", + "variableDebtTokenImpl": "0x7c310e97Bdba5E7603D772df324B8dd33771c094", + "variableDebtTokenName": "Aave ZkSync Variable Debt ZK", + "variableDebtTokenSymbol": "variableDebtZksZK", + "virtualAccountingActive": false, + "virtualBalance": 0 + } + }, + "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91": { + "from": null, + "to": { + "aToken": "0xe471A799FA3DC0738Cf9FB7346574843f5219C30", + "aTokenImpl": "0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4", + "aTokenName": "Aave ZkSync WETH", + "aTokenSymbol": "aZksWETH", + "aTokenUnderlyingBalance": 0, + "borrowCap": 900, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 18, + "eModeCategory": 1, + "interestRateStrategy": "0x7BcE25db0C430059C4277D6A747d7fd0C1214beA", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10600, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 7800, + "ltv": 7500, + "oracle": "0x6D41d1dc818112880b40e26BD6FD347E41008eDA", + "oracleDecimals": 8, + "oracleDescription": "ETH / USD", + "oracleLatestAnswer": 260519000000, + "reserveFactor": 1500, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0x415BeF014E69564Fe68f6b8d5fBbDE4310794C5d", + "stableDebtTokenImpl": "0xc25037446067240880b7B6d81fae544309a5fE02", + "stableDebtTokenName": "Aave ZkSync Stable Debt WETH", + "stableDebtTokenSymbol": "stableDebtZksWETH", + "supplyCap": 1000, + "symbol": "WETH", + "underlying": "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0x912413f4Ab1fBFD31414DE2fB1b63816c95e4d91", + "variableDebtTokenImpl": "0x7c310e97Bdba5E7603D772df324B8dd33771c094", + "variableDebtTokenName": "Aave ZkSync Variable Debt WETH", + "variableDebtTokenSymbol": "variableDebtZksWETH", + "virtualAccountingActive": false, + "virtualBalance": 0 + } + }, + "0x703b52F2b28fEbcB60E1372858AF5b18849FE867": { + "from": null, + "to": { + "aToken": "0x318CfbA2CDDBF6522d855A589938EC6f5B990Fc1", + "aTokenImpl": "0x58C1F5d7Ea1F419588CF8eC9D22cB982C7C630D4", + "aTokenName": "Aave ZkSync wstETH", + "aTokenSymbol": "aZkswstETH", + "aTokenUnderlyingBalance": 0, + "borrowCap": 30, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 18, + "eModeCategory": 1, + "interestRateStrategy": "0x7BcE25db0C430059C4277D6A747d7fd0C1214beA", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10700, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 7600, + "ltv": 7100, + "oracle": "0xB19d366dC599904Aa026440d4E805F0E13512682", + "oracleDecimals": 8, + "oracleDescription": "Capped wstETH / stETH(ETH) / USD", + "oracleLatestAnswer": 306375333621, + "reserveFactor": 500, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0x60a6E8f92482Fe6F11B57697Ca4f962c0cDA3369", + "stableDebtTokenImpl": "0xc25037446067240880b7B6d81fae544309a5fE02", + "stableDebtTokenName": "Aave ZkSync Stable Debt wstETH", + "stableDebtTokenSymbol": "stableDebtZkswstETH", + "supplyCap": 300, + "symbol": "wstETH", + "underlying": "0x703b52F2b28fEbcB60E1372858AF5b18849FE867", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0x29191BEa63b15E70E2f4c2647695aD1C8EdCb3d5", + "variableDebtTokenImpl": "0x7c310e97Bdba5E7603D772df324B8dd33771c094", + "variableDebtTokenName": "Aave ZkSync Variable Debt wstETH", + "variableDebtTokenSymbol": "variableDebtZkswstETH", + "virtualAccountingActive": false, + "virtualBalance": 0 + } + } + }, + "strategies": { + "0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4": { + "from": null, + "to": { + "address": "0x7BcE25db0C430059C4277D6A747d7fd0C1214beA", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "655000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "55000000000000000000000000", + "variableRateSlope2": "600000000000000000000000000" + } + }, + "0x493257fD37EDB34451f62EDf8D2a0C418852bA4C": { + "from": null, + "to": { + "address": "0x7BcE25db0C430059C4277D6A747d7fd0C1214beA", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "655000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "55000000000000000000000000", + "variableRateSlope2": "600000000000000000000000000" + } + }, + "0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E": { + "from": null, + "to": { + "address": "0x7BcE25db0C430059C4277D6A747d7fd0C1214beA", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "3090000000000000000000000000", + "optimalUsageRatio": "450000000000000000000000000", + "variableRateSlope1": "90000000000000000000000000", + "variableRateSlope2": "3000000000000000000000000000" + } + }, + "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91": { + "from": null, + "to": { + "address": "0x7BcE25db0C430059C4277D6A747d7fd0C1214beA", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "827000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "27000000000000000000000000", + "variableRateSlope2": "800000000000000000000000000" + } + }, + "0x703b52F2b28fEbcB60E1372858AF5b18849FE867": { + "from": null, + "to": { + "address": "0x7BcE25db0C430059C4277D6A747d7fd0C1214beA", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "845000000000000000000000000", + "optimalUsageRatio": "450000000000000000000000000", + "variableRateSlope1": "45000000000000000000000000", + "variableRateSlope2": "800000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 16ecffdbe..69c0aafe9 100644 --- a/foundry.toml +++ b/foundry.toml @@ -72,21 +72,21 @@ zkevm = "${RPC_ZKEVM}" gnosis = "${RPC_GNOSIS}" bnb = "${RPC_BNB}" scroll = "${RPC_SCROLL}" -zksync = "${RPC_ZK_SYNC}" +zksync = "${RPC_ZKSYNC}" [etherscan] -mainnet = { key = "${ETHERSCAN_API_KEY_MAINNET}", chain = 1 } -optimism = { key = "${ETHERSCAN_API_KEY_OPTIMISM}", chain = 10 } -avalanche = { key = "${ETHERSCAN_API_KEY_AVALANCHE}", chain = 43114 } -polygon = { key = "${ETHERSCAN_API_KEY_POLYGON}", chain = 137 } -arbitrum = { key = "${ETHERSCAN_API_KEY_ARBITRUM}", chain = 42161 } -fantom = { key = "${ETHERSCAN_API_KEY_FANTOM}", chain = 250 } -metis = { key = "any", chainId = 1088, url = 'https://andromeda-explorer.metis.io/' } -base = { key = "${ETHERSCAN_API_KEY_BASE}", chainId = 8453 } -zkevm = { key = "${ETHERSCAN_API_KEY_ZKEVM}", chainId = 1101 } -gnosis = { key = "${ETHERSCAN_API_KEY_GNOSIS}", chainId = 100 } -bnb = { key = "${ETHERSCAN_API_KEY_BNB}", chainId = 56, url = 'https://api.bscscan.com/api' } -scroll = { key = "${ETHERSCAN_API_KEY_SCROLL}", chainId = 534352 } -zksync = { key = "${ETHERSCAN_API_KEY_ZK_SYNC}", chain = 324 } +mainnet = { key="${ETHERSCAN_API_KEY_MAINNET}", chain=1 } +optimism = { key="${ETHERSCAN_API_KEY_OPTIMISM}", chain=10 } +avalanche = { key="${ETHERSCAN_API_KEY_AVALANCHE}", chain=43114 } +polygon = { key="${ETHERSCAN_API_KEY_POLYGON}", chain=137 } +arbitrum = { key="${ETHERSCAN_API_KEY_ARBITRUM}", chain=42161 } +fantom = { key="${ETHERSCAN_API_KEY_FANTOM}", chain=250 } +metis = { key="any", chainId=1088, url='https://andromeda-explorer.metis.io/' } +base = { key="${ETHERSCAN_API_KEY_BASE}", chainId=8453 } +zkevm = { key="${ETHERSCAN_API_KEY_ZKEVM}", chainId=1101 } +gnosis = { key="${ETHERSCAN_API_KEY_GNOSIS}", chainId=100 } +bnb = { key="${ETHERSCAN_API_KEY_BNB}", chainId=56, url='https://api.bscscan.com/api'} +scroll = { key="${ETHERSCAN_API_KEY_SCROLL}", chainId=534352 } +zksync = { key="${ETHERSCAN_API_KEY_ZKSYNC}", chain = 324 } # See more config options https://github.com/gakonst/foundry/tree/master/config diff --git a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md new file mode 100644 index 000000000..1db03e270 --- /dev/null +++ b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md @@ -0,0 +1,103 @@ +--- +title: "Aave v3 zkSync Activation" +author: "BGD Labs (@bgdlabs)" +discussions: "https://governance.aave.com/t/arfc-deployment-of-aave-on-zksync/17937" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0xb74537a0528f484e9cc76d8c7931eedef7b6290e7d2dc725b2c98e623a214f95" +--- + +## Simple Summary + +This proposal allows the Aave governance to activate the Aave V3 zkSync pool (3.1) by completing all the initial setup and listing USDC, USDT, WETH, wstETH, ZK as suggested by the risk service providers engaged with the DAO on the [governance forum](https://governance.aave.com/t/arfc-deployment-of-aave-on-zksync/17937/7). + +All the Aave zkSync V3 addresses can be found in the [aave-address-book](https://github.com/bgd-labs/aave-address-book/blob/4ddb4646a8c743a0bad578675279cde9723d7b91/src/AaveV3ZkSync.sol). + +## Motivation + +All the governance procedures for the expansion of Aave v3 to zkSync have been finished, said: + +- Positive signaling and approval regarding the expansion on the [governance forum](https://governance.aave.com/t/temp-check-aave-v3-deployment-on-zksync-era-mainnet/12477), [temp check snapshot](https://snapshot.org/#/aave.eth/proposal/0x46cf72da892eb216edc1b7fe2f24f7491d8c37344b2b1f67632fa6950be034f7), and [final snapshot](https://snapshot.org/#/aave.eth/proposal/0xb74537a0528f484e9cc76d8c7931eedef7b6290e7d2dc725b2c98e623a214f95). +- Positive technical evaluation done by BGD Labs of the zkSync network, as described in the [forum](https://governance.aave.com/t/bgd-aave-zksync-infrastructure-technical-evaluation/18503) in detail. +- Positive risk analysis and assets/parameters recommendation by the risk service providers. + +## Specification + +The proposal will do the following: + +- List the following assets on Aave V3 zkSync: USDC, USDT, WETH, wstETH, ZK +- Set the guardian address as the pool admin by executing `ACL_MANAGER.addPoolAdmin()`. This is following the standard procedure of keeping pool admin on the Aave Guardian during the bootstrap period, for security. +- Set ACI as liquidity mining admin for the ZK token by calling `EMISSION_MANAGER.setEmissionAdmin()` method. + +_Note: The risk params suggested by risk service providers have changed post-snapshot, and the updated one's from the [forum](https://governance.aave.com/t/arfc-deployment-of-aave-on-zksync/17937/7) are being used._ + +The table below illustrates the initial suggested risk parameters for each asset: + +| Emode Category Id | LTV | Liquidation Threshold | Liquidation Bonus | +| ------------------ | --- | --------------------: | ----------------: | +| 1 (ETH correlated) | 90% | 93% | 1% | + +| Parameter | [USDC](https://era.zksync.network/address/0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4) | [USDT](https://era.zksync.network/address/0x493257fD37EDB34451f62EDf8D2a0C418852bA4C) | [WETH](https://era.zksync.network/address/0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91) | [wstETH](https://era.zksync.network/address/0x703b52F2b28fEbcB60E1372858AF5b18849FE867) | [ZK](https://era.zksync.network/address/0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E) | +| ------------------------- | -----------------------------------------------------------------------------------------------: | -----------------------------------------------------------------------------------------------: | ----------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------: | ---------------------------------------------------------------------------------------: | +| Supply Cap | 1,000,000 | 3,000,000 | 1,000 | 300 | 18,000,000 | +| Borrow Cap | 900,000 | 2,700,000 | 900 | 30 | 10,000,000 | +| Borrowable | ENABLED | ENABLED | ENABLED | ENABLED | ENABLED | +| Collateral Enabled | true | true | true | true | true | +| LTV | 75 % | 75 % | 75 % | 71 % | 40 % | +| LT | 78 % | 78 % | 78 % | 76 % | 45 % | +| Liquidation Bonus | 5 % | 5 % | 6 % | 7 % | 10 % | +| Liquidation Protocol Fee | 10 % | 10 % | 10 % | 10 % | 20 % | +| Reserve Factor | 10 % | 10 % | 15 % | 5 % | 20 % | +| Base Variable Borrow Rate | 0 % | 0 % | 0 % | 0 % | 0 % | +| Variable Slope 1 | 5.5 % | 5.5 % | 2.7 % | 4.5 % | 9 % | +| Variable Slope 2 | 60 % | 60 % | 80 % | 80 % | 300 % | +| Uoptimal | 90 % | 90 % | 90 % | 45 % | 45 % | +| Oracle | [Capped USDC/USD](https://era.zksync.network/address/0x162C97F6B4FA5a915A44D430bb7AE0eE716b3b87) | [Capped USDT/USD](https://era.zksync.network/address/0x92DaB7275859C5399a326874897daddb0F4ed7A4) | [ETH/USD](https://era.zksync.network//address/0x6D41d1dc818112880b40e26BD6FD347E41008eDA) | [Capped wstETH/ETH/USD](https://era.zksync.network//address/0xfba43A6b73649F002d37274663CC971BF7d215D9) | [ZK/USD](https://era.zksync.network//address/0xD1ce60dc8AE060DDD17cA8716C96f193bC88DD13) | +| Flashloanable | ENABLED | ENABLED | ENABLED | ENABLED | ENABLED | +| Isolation Mode | false | false | false | false | true | +| Debt Ceiling | USD 0 | USD 0 | USD 0 | USD 0 | USD 800,000 | +| Borrowable in Isolation | ENABLED | ENABLED | DISABLED | DISABLED | DISABLED | +| Siloed Borrowing | DISABLED | DISABLED | DISABLED | DISABLED | DISABLED | +| Stable Borrowing | DISABLED | DISABLED | DISABLED | DISABLED | DISABLED | +| Emode Category | N/A | N/A | 1 (ETH correlated) | 1 (ETH correlated) | N/A | + +### Security procedures + +- The proposal execution is simulated within the tests and the resulting pool configuration is tested for correctness. + +- The deployed pool and other permissions have been programmatically verified, which can be found on the [aave-permissions-book](https://github.com/bgd-labs/aave-permissions-book/blob/4ce5f4a0c40818e5b837eb035243f7b729279553/out/ZK_SYNC-V3.md#contracts) + +- In addition, we have also checked the code diffs of the deployed zkSync contracts with the deployed contracts on Ethereum, which can be found [here](https://github.com/bgd-labs/aave-v3-origin/pull/10). + +
+Below are the per contract comparative diffs of the contract modifications relative to Ethereum network +
+ +zkSync uses the Aave v3.1 version, and there are some minor diffs because production instances (e.g. Ethereum) didn't require this change to be applied + +- [Collector](https://github.com/bgd-labs/aave-v3-origin/pull/10/files#diff-2d2e4b82a1481118e886d5dd780cc16200b579d7ad65e2050cf2a6cea8bf80ed) + +- [AToken](https://github.com/bgd-labs/aave-v3-origin/pull/10/files#diff-ce2e23d83d458b9427a925ad95f53364290f070923aebcee09c5aa6e80f5e675) + +- [StableDebtToken](https://github.com/bgd-labs/aave-v3-origin/pull/10/files#diff-e842d4a31b7539548dd24872dd8b81f0175bdcd7e7ca951495ec5439afa84e8a) + +- [VariableDebtToken](https://github.com/bgd-labs/aave-v3-origin/pull/10/files#diff-8b0c737dd51a790145194cb5b1bf11a46a9db6049f2a914093bd754303dd3999) + +- [IncentivesController](https://github.com/bgd-labs/aave-v3-origin/pull/10/files#diff-96c59cb2f1cc1468419446aa859acf21ddd24cd75a87636fc4a3003bdc288d8f) + +- [PoolAddressesProvider](https://github.com/bgd-labs/aave-v3-origin/pull/10/files#diff-9b575a3437ceb6c996f29c77aff78de0f201be0d9993154566ee3c91863a0f38) + +- [UIIncentiveDataProvider](https://github.com/bgd-labs/aave-v3-origin/pull/10/files#diff-c4fa9d74a0a751ca38905d10e309cf5ae9425b31101c508ea0c453db18c0e042) + +- [WETH Gateway](https://github.com/bgd-labs/aave-v3-origin/pull/10/files#diff-b89e24fe08c06cb9f120c2981abc18a998bf971c9052dc309729599a63e6293f) + +
+ +## References + +- Implementation: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/main/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol) +- Tests: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/main/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xb74537a0528f484e9cc76d8c7931eedef7b6290e7d2dc725b2c98e623a214f95) +- [Discussion](https://governance.aave.com/t/arfc-deployment-of-aave-on-zksync/17937) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol new file mode 100644 index 000000000..c03c1413a --- /dev/null +++ b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsZkSync = new IPayloadsControllerCore.ExecutionAction[](1); + actionsZkSync[0] = GovV3Helpers.buildActionZkSync( + vm, + 'AaveV3ZkSync_AaveV3ZkSyncActivation_20240805' + ); + payloads[0] = GovV3Helpers.buildZkSyncPayload(vm, actionsZkSync); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md' + ) + ); + } +} diff --git a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/config.ts b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/config.ts new file mode 100644 index 000000000..110ee4527 --- /dev/null +++ b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/config.ts @@ -0,0 +1,153 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3ZkSync'], + title: 'Aave v3 zkSync Activation', + shortName: 'AaveV3ZkSyncActivation', + date: '20240805', + author: 'BGD Labs (@bgdlabs)', + discussion: 'https://governance.aave.com/t/arfc-deployment-of-aave-on-zksync/17937', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0xb74537a0528f484e9cc76d8c7931eedef7b6290e7d2dc725b2c98e623a214f95', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3ZkSync: { + configs: { + ASSET_LISTING: [ + { + assetSymbol: 'USDC', + decimals: 6, + priceFeed: '0xA715ED3eC1C078EEf8437Cf717Cf76004f29eAED', + ltv: '75', + liqThreshold: '78', + liqBonus: '5', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'ENABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'ENABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '10', + supplyCap: '1000000', + borrowCap: '900000', + rateStrategyParams: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '0', + variableRateSlope1: '9', + variableRateSlope2: '75', + }, + eModeCategory: '0', + asset: '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4', + }, + { + assetSymbol: 'USDT', + decimals: 6, + priceFeed: '0x336EC4bcb65C1A141318fBd3f8E7379c085E8B15', + ltv: '75', + liqThreshold: '78', + liqBonus: '5', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'ENABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'ENABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '10', + supplyCap: '3000000', + borrowCap: '2700000', + rateStrategyParams: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '0', + variableRateSlope1: '9', + variableRateSlope2: '75', + }, + eModeCategory: '0', + asset: '0x493257fD37EDB34451f62EDf8D2a0C418852bA4C', + }, + { + assetSymbol: 'WETH', + decimals: 18, + priceFeed: '0x6D41d1dc818112880b40e26BD6FD347E41008eDA', + ltv: '75', + liqThreshold: '78', + liqBonus: '6', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'ENABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '15', + supplyCap: '1000', + borrowCap: '800', + rateStrategyParams: { + optimalUtilizationRate: '80', + baseVariableBorrowRate: '0', + variableRateSlope1: '3.3', + variableRateSlope2: '80', + }, + eModeCategory: '0', + asset: '0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91', + }, + { + assetSymbol: 'wstETH', + decimals: 18, + priceFeed: '0x624FEc7DDeb62Dcbce1fc456D7cc5c6A47cC69aF', + ltv: '71', + liqThreshold: '76', + liqBonus: '7', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'ENABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '15', + supplyCap: '500', + borrowCap: '50', + rateStrategyParams: { + optimalUtilizationRate: '45', + baseVariableBorrowRate: '0', + variableRateSlope1: '4.5', + variableRateSlope2: '80', + }, + eModeCategory: '0', + asset: '0x703b52F2b28fEbcB60E1372858AF5b18849FE867', + }, + { + assetSymbol: 'ZK', + decimals: 18, + priceFeed: '0xD1ce60dc8AE060DDD17cA8716C96f193bC88DD13', + ltv: '40', + liqThreshold: '45', + liqBonus: '10', + debtCeiling: '1000000', + liqProtocolFee: '20', + enabledToBorrow: 'ENABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '20', + supplyCap: '24000000', + borrowCap: '10000000', + rateStrategyParams: { + optimalUtilizationRate: '45', + baseVariableBorrowRate: '0', + variableRateSlope1: '9', + variableRateSlope2: '300', + }, + eModeCategory: '0', + asset: '0x5a7d6b2f92c77fad6ccabd7ee0624e64907eaf3e', + }, + ], + }, + cache: {blockNumber: 40901979}, + }, + }, +}; diff --git a/yarn.lock b/yarn.lock index 8f41c4031..cd098cf6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -56,6 +56,7 @@ version "0.16.4" resolved "https://registry.yarnpkg.com/@bgd-labs/aave-cli/-/aave-cli-0.16.4.tgz#be97caea0b74e96b46b12984f4e656269badef59" integrity sha512-5AmfCXKXC0tjTn2ZZpodqSkqccammykwhP86+GEFT5N0zcqizqv/wHT9opb4ctZjLcxCvwXEKjdcdm7a6MApwA== + dependencies: "@bgd-labs/aave-address-book" "^3.0.0" "@bgd-labs/aave-v3-governance-cache" "^1.0.6" diff --git a/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol b/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol new file mode 100644 index 000000000..b6a61046f --- /dev/null +++ b/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore} from 'aave-helpers/src/GovV3Helpers.sol'; +import {ZkSyncScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3ZkSync_AaveV3ZkSyncActivation_20240805} from './AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol'; + +// @dev wrapper factory contract for deploying the payload +contract Deploy_AaveV3ZkSync_AaveV3ZkSyncActivation_20240805 { + address public immutable PAYLOAD; + + constructor() { + PAYLOAD = GovV3Helpers.deployDeterministicZkSync( + type(AaveV3ZkSync_AaveV3ZkSyncActivation_20240805).creationCode + ); + } +} + +/** + * @dev Deploy ZkSync + * deploy-command: make deploy-ledger contract=zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol:DeployZkSync chain=zksync + * verify-command: FOUNDRY_PROFILE=zksync npx catapulta-verify -b broadcast/AaveV3ZkSyncActivation_20240805.s.sol/324/run-latest.json + */ +contract DeployZkSync is ZkSyncScript { + function run() external broadcast { + // deploy payloads + address payload0 = new Deploy_AaveV3ZkSync_AaveV3ZkSyncActivation_20240805().PAYLOAD(); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} diff --git a/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol b/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol new file mode 100644 index 000000000..6d5e8a033 --- /dev/null +++ b/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol @@ -0,0 +1,206 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3ZkSync, IPool} from 'aave-address-book/AaveV3ZkSync.sol'; +import {MiscZkSync} from 'aave-address-book/MiscZkSync.sol'; +import {AaveV3PayloadZkSync} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadZkSync.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; +import {IEmissionManager} from 'aave-v3-periphery/contracts/rewards/interfaces/IEmissionManager.sol'; + +/** + * @title Aave v3 zkSync Activation + * @author BGD Labs (@bgdlabs) + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xb74537a0528f484e9cc76d8c7931eedef7b6290e7d2dc725b2c98e623a214f95 + * - Discussion: https://governance.aave.com/t/arfc-deployment-of-aave-on-zksync/17937 + */ +contract AaveV3ZkSync_AaveV3ZkSyncActivation_20240805 is AaveV3PayloadZkSync { + using SafeERC20 for IERC20; + + address public constant USDC = 0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4; + uint256 public constant USDC_SEED_AMOUNT = 10e6; + address public constant USDT = 0x493257fD37EDB34451f62EDf8D2a0C418852bA4C; + uint256 public constant USDT_SEED_AMOUNT = 10e6; + address public constant WETH = 0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91; + uint256 public constant WETH_SEED_AMOUNT = 0.01 ether; + address public constant wstETH = 0x703b52F2b28fEbcB60E1372858AF5b18849FE867; + uint256 public constant wstETH_SEED_AMOUNT = 0.01 ether; + address public constant ZK = 0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E; + uint256 public constant ZK_SEED_AMOUNT = 100 ether; + address public constant ACI_MULTISIG = 0x95Cbff6e45C499d45dd8627f3ce179057B5Fbfcc; + + function _postExecute() internal override { + AaveV3ZkSync.ACL_MANAGER.addPoolAdmin(MiscZkSync.PROTOCOL_GUARDIAN); + IEmissionManager(AaveV3ZkSync.EMISSION_MANAGER).setEmissionAdmin(ZK, ACI_MULTISIG); + + _supply(AaveV3ZkSync.POOL, USDC, USDC_SEED_AMOUNT, address(AaveV3ZkSync.COLLECTOR)); + _supply(AaveV3ZkSync.POOL, USDT, USDT_SEED_AMOUNT, address(AaveV3ZkSync.COLLECTOR)); + _supply(AaveV3ZkSync.POOL, WETH, WETH_SEED_AMOUNT, address(AaveV3ZkSync.COLLECTOR)); + _supply(AaveV3ZkSync.POOL, wstETH, wstETH_SEED_AMOUNT, address(AaveV3ZkSync.COLLECTOR)); + _supply(AaveV3ZkSync.POOL, ZK, ZK_SEED_AMOUNT, address(AaveV3ZkSync.COLLECTOR)); + } + + function eModeCategoriesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory) + { + IAaveV3ConfigEngine.EModeCategoryUpdate[] + memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1); + + eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({ + eModeCategory: 1, + ltv: 90_00, + liqThreshold: 93_00, + liqBonus: 1_00, + priceSource: 0x0000000000000000000000000000000000000000, + label: 'ETH correlated' + }); + + return eModeUpdates; + } + + function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { + IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](5); + + listings[0] = IAaveV3ConfigEngine.Listing({ + asset: USDC, + assetSymbol: 'USDC', + priceFeed: 0x162C97F6B4FA5a915A44D430bb7AE0eE716b3b87, + eModeCategory: 0, + enabledToBorrow: EngineFlags.ENABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.ENABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 75_00, + liqThreshold: 78_00, + liqBonus: 5_00, + reserveFactor: 10_00, + supplyCap: 1_000_000, + borrowCap: 900_000, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 5_50, + variableRateSlope2: 60_00 + }) + }); + + listings[1] = IAaveV3ConfigEngine.Listing({ + asset: USDT, + assetSymbol: 'USDT', + priceFeed: 0x92DaB7275859C5399a326874897daddb0F4ed7A4, + eModeCategory: 0, + enabledToBorrow: EngineFlags.ENABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.ENABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 75_00, + liqThreshold: 78_00, + liqBonus: 5_00, + reserveFactor: 10_00, + supplyCap: 3_000_000, + borrowCap: 2_700_000, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 5_50, + variableRateSlope2: 60_00 + }) + }); + + listings[2] = IAaveV3ConfigEngine.Listing({ + asset: WETH, + assetSymbol: 'WETH', + priceFeed: 0x6D41d1dc818112880b40e26BD6FD347E41008eDA, + eModeCategory: 1, + enabledToBorrow: EngineFlags.ENABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.DISABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 75_00, + liqThreshold: 78_00, + liqBonus: 6_00, + reserveFactor: 15_00, + supplyCap: 1_000, + borrowCap: 900, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 2_70, + variableRateSlope2: 80_00 + }) + }); + + listings[3] = IAaveV3ConfigEngine.Listing({ + asset: wstETH, + assetSymbol: 'wstETH', + priceFeed: 0xB19d366dC599904Aa026440d4E805F0E13512682, + eModeCategory: 1, + enabledToBorrow: EngineFlags.ENABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.DISABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 71_00, + liqThreshold: 76_00, + liqBonus: 7_00, + reserveFactor: 5_00, + supplyCap: 300, + borrowCap: 30, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 45_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 4_50, + variableRateSlope2: 80_00 + }) + }); + + listings[4] = IAaveV3ConfigEngine.Listing({ + asset: ZK, + assetSymbol: 'ZK', + priceFeed: 0xD1ce60dc8AE060DDD17cA8716C96f193bC88DD13, + eModeCategory: 0, + enabledToBorrow: EngineFlags.ENABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.DISABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 40_00, + liqThreshold: 45_00, + liqBonus: 10_00, + reserveFactor: 20_00, + supplyCap: 18_000_000, + borrowCap: 10_000_000, + debtCeiling: 800_000, + liqProtocolFee: 20_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 45_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 9_00, + variableRateSlope2: 300_00 + }) + }); + + return listings; + } + + function _supply(IPool pool, address asset, uint256 amount, address onBehalfOf) internal { + IERC20(asset).forceApprove(address(pool), amount); + pool.supply(asset, amount, onBehalfOf, 0); + } +} diff --git a/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol b/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol new file mode 100644 index 000000000..35dcee17f --- /dev/null +++ b/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {ProtocolV3TestBase} from 'aave-helpers/zksync/src/ProtocolV3TestBase.sol'; +import {AaveV3ZkSync_AaveV3ZkSyncActivation_20240805} from './AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol'; +import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; +import {MiscZkSync} from 'aave-address-book/MiscZkSync.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {IEmissionManager} from 'aave-v3-periphery/contracts/rewards/interfaces/IEmissionManager.sol'; + +/** + * @dev Test for AaveV3ZkSync_AaveV3ZkSyncActivation_20240805 + * command: FOUNDRY_PROFILE=zksync forge test --zksync --match-path=zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol -vv + */ +contract AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_Test is ProtocolV3TestBase { + AaveV3ZkSync_AaveV3ZkSyncActivation_20240805 internal proposal; + + function setUp() public override { + vm.createSelectFork(vm.rpcUrl('zksync'), 41829358); + proposal = new AaveV3ZkSync_AaveV3ZkSyncActivation_20240805(); + + super.setUp(); + } + + /** + * @dev executes the generic test suite including e2e + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3ZkSync_AaveV3ZkSyncActivation_20240805', + AaveV3ZkSync.POOL, + address(proposal) + ); + } + + function test_permissions() public { + assertFalse(AaveV3ZkSync.ACL_MANAGER.isPoolAdmin(MiscZkSync.PROTOCOL_GUARDIAN)); + executePayload(vm, address(proposal)); + + assertTrue(AaveV3ZkSync.ACL_MANAGER.isPoolAdmin(MiscZkSync.PROTOCOL_GUARDIAN)); + assertEq( + IEmissionManager(AaveV3ZkSync.EMISSION_MANAGER).getEmissionAdmin(proposal.ZK()), + proposal.ACI_MULTISIG() + ); + } + + function test_collectorHasFunds() public { + executePayload(vm, address(proposal)); + + (address aUsdcAddress, , ) = AaveV3ZkSync.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( + proposal.USDC() + ); + (address aUsdtAddress, , ) = AaveV3ZkSync.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( + proposal.USDT() + ); + (address aWethAddress, , ) = AaveV3ZkSync.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( + proposal.WETH() + ); + (address aWstEthAddress, , ) = AaveV3ZkSync + .AAVE_PROTOCOL_DATA_PROVIDER + .getReserveTokensAddresses(proposal.wstETH()); + (address aZkAddress, , ) = AaveV3ZkSync.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( + proposal.ZK() + ); + + assertGe( + IERC20(aUsdcAddress).balanceOf(address(AaveV3ZkSync.COLLECTOR)), + proposal.USDC_SEED_AMOUNT() + ); + assertGe( + IERC20(aUsdtAddress).balanceOf(address(AaveV3ZkSync.COLLECTOR)), + proposal.USDT_SEED_AMOUNT() + ); + assertGe( + IERC20(aWethAddress).balanceOf(address(AaveV3ZkSync.COLLECTOR)), + proposal.WETH_SEED_AMOUNT() + ); + assertGe( + IERC20(aWstEthAddress).balanceOf(address(AaveV3ZkSync.COLLECTOR)), + proposal.wstETH_SEED_AMOUNT() + ); + assertGe( + IERC20(aZkAddress).balanceOf(address(AaveV3ZkSync.COLLECTOR)), + proposal.ZK_SEED_AMOUNT() + ); + } +} From ba7ed9ac691768f1ab60f4a0b502fb039aaff9c9 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Fri, 16 Aug 2024 13:36:05 +0000 Subject: [PATCH 47/68] fix(cache): automated cache update [skip ci] --- .../AaveV3ZkSyncActivation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md index 1db03e270..2d244319c 100644 --- a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md +++ b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md @@ -93,8 +93,8 @@ zkSync uses the Aave v3.1 version, and there are some minor diffs because produc ## References -- Implementation: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/main/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol) -- Tests: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/main/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol) +- Implementation: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/91fdcd8b5a82fcafb2feff88746e23f1d1bf4d72/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol) +- Tests: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/91fdcd8b5a82fcafb2feff88746e23f1d1bf4d72/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xb74537a0528f484e9cc76d8c7931eedef7b6290e7d2dc725b2c98e623a214f95) - [Discussion](https://governance.aave.com/t/arfc-deployment-of-aave-on-zksync/17937) From 36780e354a520799162937274072afb76b22bf44 Mon Sep 17 00:00:00 2001 From: Harsh Pandey Date: Fri, 16 Aug 2024 20:53:29 +0530 Subject: [PATCH 48/68] fix: script and readme (#429) --- .../AaveV3ZkSyncActivation.md | 16 +++++----------- .../AaveV3ZkSyncActivation_20240805.s.sol | 19 +++++++++---------- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md index 2d244319c..eb7be564b 100644 --- a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md +++ b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md @@ -50,7 +50,7 @@ The table below illustrates the initial suggested risk parameters for each asset | Variable Slope 1 | 5.5 % | 5.5 % | 2.7 % | 4.5 % | 9 % | | Variable Slope 2 | 60 % | 60 % | 80 % | 80 % | 300 % | | Uoptimal | 90 % | 90 % | 90 % | 45 % | 45 % | -| Oracle | [Capped USDC/USD](https://era.zksync.network/address/0x162C97F6B4FA5a915A44D430bb7AE0eE716b3b87) | [Capped USDT/USD](https://era.zksync.network/address/0x92DaB7275859C5399a326874897daddb0F4ed7A4) | [ETH/USD](https://era.zksync.network//address/0x6D41d1dc818112880b40e26BD6FD347E41008eDA) | [Capped wstETH/ETH/USD](https://era.zksync.network//address/0xfba43A6b73649F002d37274663CC971BF7d215D9) | [ZK/USD](https://era.zksync.network//address/0xD1ce60dc8AE060DDD17cA8716C96f193bC88DD13) | +| Oracle | [Capped USDC/USD](https://era.zksync.network/address/0x162C97F6B4FA5a915A44D430bb7AE0eE716b3b87) | [Capped USDT/USD](https://era.zksync.network/address/0x92DaB7275859C5399a326874897daddb0F4ed7A4) | [ETH/USD](https://era.zksync.network//address/0x6D41d1dc818112880b40e26BD6FD347E41008eDA) | [Capped wstETH/ETH/USD](https://era.zksync.network//address/0xB19d366dC599904Aa026440d4E805F0E13512682) | [ZK/USD](https://era.zksync.network//address/0xD1ce60dc8AE060DDD17cA8716C96f193bC88DD13) | | Flashloanable | ENABLED | ENABLED | ENABLED | ENABLED | ENABLED | | Isolation Mode | false | false | false | false | true | | Debt Ceiling | USD 0 | USD 0 | USD 0 | USD 0 | USD 800,000 | @@ -65,13 +65,9 @@ The table below illustrates the initial suggested risk parameters for each asset - The deployed pool and other permissions have been programmatically verified, which can be found on the [aave-permissions-book](https://github.com/bgd-labs/aave-permissions-book/blob/4ce5f4a0c40818e5b837eb035243f7b729279553/out/ZK_SYNC-V3.md#contracts) -- In addition, we have also checked the code diffs of the deployed zkSync contracts with the deployed contracts on Ethereum, which can be found [here](https://github.com/bgd-labs/aave-v3-origin/pull/10). +- In addition, we have also checked the code diffs of the deployed zkSync contracts with the deployed contracts on Ethereum, which can be found [here](https://github.com/bgd-labs/aave-v3-origin/pull/10). zkSync uses the Aave v3.1 version, and there are some minor diffs because production instances (e.g. Ethereum) didn't require this change to be applied -
-Below are the per contract comparative diffs of the contract modifications relative to Ethereum network -
- -zkSync uses the Aave v3.1 version, and there are some minor diffs because production instances (e.g. Ethereum) didn't require this change to be applied +Below are the per contract comparative diffs of the contract modifications relative to Ethereum network: - [Collector](https://github.com/bgd-labs/aave-v3-origin/pull/10/files#diff-2d2e4b82a1481118e886d5dd780cc16200b579d7ad65e2050cf2a6cea8bf80ed) @@ -89,12 +85,10 @@ zkSync uses the Aave v3.1 version, and there are some minor diffs because produc - [WETH Gateway](https://github.com/bgd-labs/aave-v3-origin/pull/10/files#diff-b89e24fe08c06cb9f120c2981abc18a998bf971c9052dc309729599a63e6293f) -
- ## References -- Implementation: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/91fdcd8b5a82fcafb2feff88746e23f1d1bf4d72/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol) -- Tests: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/91fdcd8b5a82fcafb2feff88746e23f1d1bf4d72/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol) +- Implementation: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/main/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol) +- Tests: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/main/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xb74537a0528f484e9cc76d8c7931eedef7b6290e7d2dc725b2c98e623a214f95) - [Discussion](https://governance.aave.com/t/arfc-deployment-of-aave-on-zksync/17937) diff --git a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol index c03c1413a..c4a7e06a0 100644 --- a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol +++ b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation_20240805.s.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; -import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol'; +import {GovV3Helpers, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; -import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {GovernanceV3ZkSync} from 'aave-address-book/GovernanceV3ZkSync.sol'; +import {EthereumScript, ChainIds} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; /** * @dev Create Proposal @@ -16,13 +16,12 @@ contract CreateProposal is EthereumScript { PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); // compose actions for validation - IPayloadsControllerCore.ExecutionAction[] - memory actionsZkSync = new IPayloadsControllerCore.ExecutionAction[](1); - actionsZkSync[0] = GovV3Helpers.buildActionZkSync( - vm, - 'AaveV3ZkSync_AaveV3ZkSyncActivation_20240805' - ); - payloads[0] = GovV3Helpers.buildZkSyncPayload(vm, actionsZkSync); + payloads[0] = PayloadsControllerUtils.Payload({ + chain: ChainIds.ZKSYNC, + accessLevel: PayloadsControllerUtils.AccessControl.Level_1, + payloadsController: address(GovernanceV3ZkSync.PAYLOADS_CONTROLLER), + payloadId: 2 + }); // create proposal vm.startBroadcast(); From f83c581e373ddef86f4ac926e3486f463bffa4a8 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Fri, 16 Aug 2024 15:23:59 +0000 Subject: [PATCH 49/68] fix(cache): automated cache update [skip ci] --- .../AaveV3ZkSyncActivation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md index eb7be564b..856cb6192 100644 --- a/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md +++ b/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSyncActivation.md @@ -87,8 +87,8 @@ Below are the per contract comparative diffs of the contract modifications relat ## References -- Implementation: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/main/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol) -- Tests: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/main/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol) +- Implementation: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/36780e354a520799162937274072afb76b22bf44/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.sol) +- Tests: [AaveV3ZkSync](https://github.com/bgd-labs/aave-proposals-v3/blob/36780e354a520799162937274072afb76b22bf44/zksync/src/20240805_AaveV3ZkSync_AaveV3ZkSyncActivation/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xb74537a0528f484e9cc76d8c7931eedef7b6290e7d2dc725b2c98e623a214f95) - [Discussion](https://governance.aave.com/t/arfc-deployment-of-aave-on-zksync/17937) From a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4 Mon Sep 17 00:00:00 2001 From: Marc Zeller <21088542+marczeller@users.noreply.github.com> Date: Tue, 20 Aug 2024 16:00:03 +0200 Subject: [PATCH 50/68] Increase wETH Optimal Ratio - Review (#430) * init * fix: patch cli * fix: add assets as well * Update src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md Co-authored-by: Lukas * improved MD quality * init fix import issue prev AIP * init * Update src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio.md --------- Co-authored-by: marczeller Co-authored-by: sakulstra --- ...207451ec38eb4a7c392a3d9c43ab7e77836211.svg | 1 + ...75f8a0498d1ea4887afbacbc457fd177b93138.svg | 1 + ...332461172bd8fa96ccd1a6269e8b18fab75ffe.svg | 1 + ...8c2ef82ae6b76d58bbf510d3cc1f33ddda7ab4.svg | 1 + ...948e0081ff6de7a89e181cd34be415a7a68ce0.svg | 1 + ...1e053c2e6422c83e9ea6c1486a702ad9224ade.svg | 1 + ...b62fafe4592946c59bca0c8c74e8000a82a95f.svg | 1 + ...91edaee6d983649ffc6efcc1c3cfc52fa90336.svg | 1 + ...e63860fa8f03629242d7c499e8b53221ee130a.svg | 1 + ...e2a9e85beeca35fb4b8f8845b046cf253d3604.svg | 1 + ...44097cc58003c1aad8dd7147a8287f660fc210.svg | 1 + ...cd187222e872527ce37c51195d7640eac06c41.svg | 1 + ...d8da0d6db0aecdba0789fe2dff9f903cb21cfc.svg | 1 + ...f481f3dae577e453564d6e975b96b0eb0bf288.svg | 1 + ...8178b70e2e1d9be97f627f529f7680d26bd083.svg | 1 + ...42765d036179693f01f07a11408b5faebbeb5d.svg | 1 + ...5123819558b2679cc9d427d997ff7916be309b.svg | 1 + ...bcb1a6932fed3bbf04d7077987b653f2697867.svg | 1 + ...57642c05a3a70e60c1de9caa27d686b8bb1362.svg | 1 + ...c7e5557a1f8ff476d4d4d122c044f9c332e983.svg | 1 + ...3e539abb0c988dd28cc3517ad407509df7b9de.svg | 1 + ...cb45ad7b578977a453ebc2c04d2b0f9c66252e.svg | 1 + ...86c194f50d7b55c5321771b14a13c4690bbbc0.svg | 1 + ...44ab61c91f5186d639c9f38544daac282df499.svg | 1 + ...e17dfb1f59acc822d3f9db2ed8a99de7f72a9f.svg | 1 + ...8dd0b29af2a7ddfe8cbd0de959c4c24b5ea9ef.svg | 1 + ...70ddf4bc344f0585edba6e6d2210b5b01972ef.svg | 1 + ...000c9b0f38fb906c182c50b60f6c846aff233c.svg | 1 + ...e233eeee7bae70256ff5ae2354edc5339f8250.svg | 1 + ...d85c79489fe0154b545232de234ff8b5b26977.svg | 1 + ...82eaef94e0b09bad831160b0da80f2328914fd.svg | 1 + ...1157ea61e7ec553892dfe2072a2d2d59dc8a16.svg | 1 + ...0f3cda1a9e93a90c0334cf76260569ebad0e66.svg | 1 + ...50234e3f8f72294825f3cc061531aee8b21665.svg | 1 + ...4ed5f5babdd12bc4f369c0ebc698f790544557.svg | 1 + ...6341be65a8deb48a568fc7bd8b8bb67541c2a9.svg | 1 + ...142671fc1206f692dc9c6906686dfc9eb5b355.svg | 1 + ...b43a1b862147a923b25b5d7c0568d54de8384c.svg | 1 + ...60577075cd9a0a2e900fd194aea1e4679e5d2d.svg | 1 + ...46af1ac7b1ac8e277029e8ba07e0df5c0cc142.svg | 1 + ...2d9144d6937d795a23d4864f7e30b8efbfa233.svg | 1 + ...869f24b8f12e55433a53510ff00425d44dbfd2.svg | 1 + ...IncreaseWETHOptimalRatio_20240818_after.md | 25 +++ ...IncreaseWETHOptimalRatio_20240818_after.md | 25 +++ ...IncreaseWETHOptimalRatio_20240818_after.md | 25 +++ ...IncreaseWETHOptimalRatio_20240818_after.md | 25 +++ ...IncreaseWETHOptimalRatio_20240818_after.md | 25 +++ ...IncreaseWETHOptimalRatio_20240818_after.md | 25 +++ .../GHOBorrowRateUpdate.md | 4 +- ...nche_IncreaseWETHOptimalRatio_20240818.sol | 35 +++ ...he_IncreaseWETHOptimalRatio_20240818.t.sol | 32 +++ ...Base_IncreaseWETHOptimalRatio_20240818.sol | 35 +++ ...se_IncreaseWETHOptimalRatio_20240818.t.sol | 28 +++ ...osis_IncreaseWETHOptimalRatio_20240818.sol | 35 +++ ...is_IncreaseWETHOptimalRatio_20240818.t.sol | 32 +++ ...etis_IncreaseWETHOptimalRatio_20240818.sol | 35 +++ ...is_IncreaseWETHOptimalRatio_20240818.t.sol | 32 +++ ...ygon_IncreaseWETHOptimalRatio_20240818.sol | 35 +++ ...on_IncreaseWETHOptimalRatio_20240818.t.sol | 32 +++ ...roll_IncreaseWETHOptimalRatio_20240818.sol | 35 +++ ...ll_IncreaseWETHOptimalRatio_20240818.t.sol | 32 +++ .../IncreaseWETHOptimalRatio.md | 41 ++++ .../IncreaseWETHOptimalRatio_20240818.s.sol | 210 ++++++++++++++++++ .../config.ts | 120 ++++++++++ yarn.lock | 1 + 65 files changed, 964 insertions(+), 2 deletions(-) create mode 100644 .assets/0b207451ec38eb4a7c392a3d9c43ab7e77836211.svg create mode 100644 .assets/1175f8a0498d1ea4887afbacbc457fd177b93138.svg create mode 100644 .assets/16332461172bd8fa96ccd1a6269e8b18fab75ffe.svg create mode 100644 .assets/168c2ef82ae6b76d58bbf510d3cc1f33ddda7ab4.svg create mode 100644 .assets/18948e0081ff6de7a89e181cd34be415a7a68ce0.svg create mode 100644 .assets/1b1e053c2e6422c83e9ea6c1486a702ad9224ade.svg create mode 100644 .assets/1eb62fafe4592946c59bca0c8c74e8000a82a95f.svg create mode 100644 .assets/1f91edaee6d983649ffc6efcc1c3cfc52fa90336.svg create mode 100644 .assets/22e63860fa8f03629242d7c499e8b53221ee130a.svg create mode 100644 .assets/2ae2a9e85beeca35fb4b8f8845b046cf253d3604.svg create mode 100644 .assets/3344097cc58003c1aad8dd7147a8287f660fc210.svg create mode 100644 .assets/3fcd187222e872527ce37c51195d7640eac06c41.svg create mode 100644 .assets/3fd8da0d6db0aecdba0789fe2dff9f903cb21cfc.svg create mode 100644 .assets/42f481f3dae577e453564d6e975b96b0eb0bf288.svg create mode 100644 .assets/4a8178b70e2e1d9be97f627f529f7680d26bd083.svg create mode 100644 .assets/4d42765d036179693f01f07a11408b5faebbeb5d.svg create mode 100644 .assets/5a5123819558b2679cc9d427d997ff7916be309b.svg create mode 100644 .assets/5bbcb1a6932fed3bbf04d7077987b653f2697867.svg create mode 100644 .assets/5e57642c05a3a70e60c1de9caa27d686b8bb1362.svg create mode 100644 .assets/60c7e5557a1f8ff476d4d4d122c044f9c332e983.svg create mode 100644 .assets/673e539abb0c988dd28cc3517ad407509df7b9de.svg create mode 100644 .assets/76cb45ad7b578977a453ebc2c04d2b0f9c66252e.svg create mode 100644 .assets/7886c194f50d7b55c5321771b14a13c4690bbbc0.svg create mode 100644 .assets/7e44ab61c91f5186d639c9f38544daac282df499.svg create mode 100644 .assets/86e17dfb1f59acc822d3f9db2ed8a99de7f72a9f.svg create mode 100644 .assets/938dd0b29af2a7ddfe8cbd0de959c4c24b5ea9ef.svg create mode 100644 .assets/9970ddf4bc344f0585edba6e6d2210b5b01972ef.svg create mode 100644 .assets/9e000c9b0f38fb906c182c50b60f6c846aff233c.svg create mode 100644 .assets/a0e233eeee7bae70256ff5ae2354edc5339f8250.svg create mode 100644 .assets/a3d85c79489fe0154b545232de234ff8b5b26977.svg create mode 100644 .assets/bb82eaef94e0b09bad831160b0da80f2328914fd.svg create mode 100644 .assets/c61157ea61e7ec553892dfe2072a2d2d59dc8a16.svg create mode 100644 .assets/cd0f3cda1a9e93a90c0334cf76260569ebad0e66.svg create mode 100644 .assets/d050234e3f8f72294825f3cc061531aee8b21665.svg create mode 100644 .assets/d94ed5f5babdd12bc4f369c0ebc698f790544557.svg create mode 100644 .assets/d96341be65a8deb48a568fc7bd8b8bb67541c2a9.svg create mode 100644 .assets/dc142671fc1206f692dc9c6906686dfc9eb5b355.svg create mode 100644 .assets/ddb43a1b862147a923b25b5d7c0568d54de8384c.svg create mode 100644 .assets/e560577075cd9a0a2e900fd194aea1e4679e5d2d.svg create mode 100644 .assets/f546af1ac7b1ac8e277029e8ba07e0df5c0cc142.svg create mode 100644 .assets/fa2d9144d6937d795a23d4864f7e30b8efbfa233.svg create mode 100644 .assets/fd869f24b8f12e55433a53510ff00425d44dbfd2.svg create mode 100644 diffs/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818_before_AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818_after.md create mode 100644 diffs/AaveV3Base_IncreaseWETHOptimalRatio_20240818_before_AaveV3Base_IncreaseWETHOptimalRatio_20240818_after.md create mode 100644 diffs/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818_before_AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818_after.md create mode 100644 diffs/AaveV3Metis_IncreaseWETHOptimalRatio_20240818_before_AaveV3Metis_IncreaseWETHOptimalRatio_20240818_after.md create mode 100644 diffs/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818_before_AaveV3Polygon_IncreaseWETHOptimalRatio_20240818_after.md create mode 100644 diffs/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818_before_AaveV3Scroll_IncreaseWETHOptimalRatio_20240818_after.md create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.t.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.t.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.t.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.t.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.t.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.t.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio.md create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol create mode 100644 src/20240818_Multi_IncreaseWETHOptimalRatio/config.ts diff --git a/.assets/0b207451ec38eb4a7c392a3d9c43ab7e77836211.svg b/.assets/0b207451ec38eb4a7c392a3d9c43ab7e77836211.svg new file mode 100644 index 000000000..a09281518 --- /dev/null +++ b/.assets/0b207451ec38eb4a7c392a3d9c43ab7e77836211.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/1175f8a0498d1ea4887afbacbc457fd177b93138.svg b/.assets/1175f8a0498d1ea4887afbacbc457fd177b93138.svg new file mode 100644 index 000000000..3c15ce1a6 --- /dev/null +++ b/.assets/1175f8a0498d1ea4887afbacbc457fd177b93138.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/16332461172bd8fa96ccd1a6269e8b18fab75ffe.svg b/.assets/16332461172bd8fa96ccd1a6269e8b18fab75ffe.svg new file mode 100644 index 000000000..477b263f7 --- /dev/null +++ b/.assets/16332461172bd8fa96ccd1a6269e8b18fab75ffe.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 75%Optimal utilization 75% \ No newline at end of file diff --git a/.assets/168c2ef82ae6b76d58bbf510d3cc1f33ddda7ab4.svg b/.assets/168c2ef82ae6b76d58bbf510d3cc1f33ddda7ab4.svg new file mode 100644 index 000000000..a09281518 --- /dev/null +++ b/.assets/168c2ef82ae6b76d58bbf510d3cc1f33ddda7ab4.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/18948e0081ff6de7a89e181cd34be415a7a68ce0.svg b/.assets/18948e0081ff6de7a89e181cd34be415a7a68ce0.svg new file mode 100644 index 000000000..d009aef0d --- /dev/null +++ b/.assets/18948e0081ff6de7a89e181cd34be415a7a68ce0.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 35%Optimal utilization 35% \ No newline at end of file diff --git a/.assets/1b1e053c2e6422c83e9ea6c1486a702ad9224ade.svg b/.assets/1b1e053c2e6422c83e9ea6c1486a702ad9224ade.svg new file mode 100644 index 000000000..42b7d274c --- /dev/null +++ b/.assets/1b1e053c2e6422c83e9ea6c1486a702ad9224ade.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/1eb62fafe4592946c59bca0c8c74e8000a82a95f.svg b/.assets/1eb62fafe4592946c59bca0c8c74e8000a82a95f.svg new file mode 100644 index 000000000..6af590b85 --- /dev/null +++ b/.assets/1eb62fafe4592946c59bca0c8c74e8000a82a95f.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/1f91edaee6d983649ffc6efcc1c3cfc52fa90336.svg b/.assets/1f91edaee6d983649ffc6efcc1c3cfc52fa90336.svg new file mode 100644 index 000000000..9163739c4 --- /dev/null +++ b/.assets/1f91edaee6d983649ffc6efcc1c3cfc52fa90336.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/22e63860fa8f03629242d7c499e8b53221ee130a.svg b/.assets/22e63860fa8f03629242d7c499e8b53221ee130a.svg new file mode 100644 index 000000000..f9bccbdd6 --- /dev/null +++ b/.assets/22e63860fa8f03629242d7c499e8b53221ee130a.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 70%Optimal utilization 70% \ No newline at end of file diff --git a/.assets/2ae2a9e85beeca35fb4b8f8845b046cf253d3604.svg b/.assets/2ae2a9e85beeca35fb4b8f8845b046cf253d3604.svg new file mode 100644 index 000000000..de33714df --- /dev/null +++ b/.assets/2ae2a9e85beeca35fb4b8f8845b046cf253d3604.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/3344097cc58003c1aad8dd7147a8287f660fc210.svg b/.assets/3344097cc58003c1aad8dd7147a8287f660fc210.svg new file mode 100644 index 000000000..0a97f2f47 --- /dev/null +++ b/.assets/3344097cc58003c1aad8dd7147a8287f660fc210.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/3fcd187222e872527ce37c51195d7640eac06c41.svg b/.assets/3fcd187222e872527ce37c51195d7640eac06c41.svg new file mode 100644 index 000000000..6af590b85 --- /dev/null +++ b/.assets/3fcd187222e872527ce37c51195d7640eac06c41.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/3fd8da0d6db0aecdba0789fe2dff9f903cb21cfc.svg b/.assets/3fd8da0d6db0aecdba0789fe2dff9f903cb21cfc.svg new file mode 100644 index 000000000..de33714df --- /dev/null +++ b/.assets/3fd8da0d6db0aecdba0789fe2dff9f903cb21cfc.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/42f481f3dae577e453564d6e975b96b0eb0bf288.svg b/.assets/42f481f3dae577e453564d6e975b96b0eb0bf288.svg new file mode 100644 index 000000000..86ac27306 --- /dev/null +++ b/.assets/42f481f3dae577e453564d6e975b96b0eb0bf288.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/4a8178b70e2e1d9be97f627f529f7680d26bd083.svg b/.assets/4a8178b70e2e1d9be97f627f529f7680d26bd083.svg new file mode 100644 index 000000000..a09281518 --- /dev/null +++ b/.assets/4a8178b70e2e1d9be97f627f529f7680d26bd083.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/4d42765d036179693f01f07a11408b5faebbeb5d.svg b/.assets/4d42765d036179693f01f07a11408b5faebbeb5d.svg new file mode 100644 index 000000000..5dff1554b --- /dev/null +++ b/.assets/4d42765d036179693f01f07a11408b5faebbeb5d.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/5a5123819558b2679cc9d427d997ff7916be309b.svg b/.assets/5a5123819558b2679cc9d427d997ff7916be309b.svg new file mode 100644 index 000000000..03283e57a --- /dev/null +++ b/.assets/5a5123819558b2679cc9d427d997ff7916be309b.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/5bbcb1a6932fed3bbf04d7077987b653f2697867.svg b/.assets/5bbcb1a6932fed3bbf04d7077987b653f2697867.svg new file mode 100644 index 000000000..4a059d94f --- /dev/null +++ b/.assets/5bbcb1a6932fed3bbf04d7077987b653f2697867.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/5e57642c05a3a70e60c1de9caa27d686b8bb1362.svg b/.assets/5e57642c05a3a70e60c1de9caa27d686b8bb1362.svg new file mode 100644 index 000000000..6af590b85 --- /dev/null +++ b/.assets/5e57642c05a3a70e60c1de9caa27d686b8bb1362.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/60c7e5557a1f8ff476d4d4d122c044f9c332e983.svg b/.assets/60c7e5557a1f8ff476d4d4d122c044f9c332e983.svg new file mode 100644 index 000000000..5212f2d4a --- /dev/null +++ b/.assets/60c7e5557a1f8ff476d4d4d122c044f9c332e983.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/673e539abb0c988dd28cc3517ad407509df7b9de.svg b/.assets/673e539abb0c988dd28cc3517ad407509df7b9de.svg new file mode 100644 index 000000000..0a97f2f47 --- /dev/null +++ b/.assets/673e539abb0c988dd28cc3517ad407509df7b9de.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/76cb45ad7b578977a453ebc2c04d2b0f9c66252e.svg b/.assets/76cb45ad7b578977a453ebc2c04d2b0f9c66252e.svg new file mode 100644 index 000000000..0a97f2f47 --- /dev/null +++ b/.assets/76cb45ad7b578977a453ebc2c04d2b0f9c66252e.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/7886c194f50d7b55c5321771b14a13c4690bbbc0.svg b/.assets/7886c194f50d7b55c5321771b14a13c4690bbbc0.svg new file mode 100644 index 000000000..5dff1554b --- /dev/null +++ b/.assets/7886c194f50d7b55c5321771b14a13c4690bbbc0.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/7e44ab61c91f5186d639c9f38544daac282df499.svg b/.assets/7e44ab61c91f5186d639c9f38544daac282df499.svg new file mode 100644 index 000000000..3c15ce1a6 --- /dev/null +++ b/.assets/7e44ab61c91f5186d639c9f38544daac282df499.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/86e17dfb1f59acc822d3f9db2ed8a99de7f72a9f.svg b/.assets/86e17dfb1f59acc822d3f9db2ed8a99de7f72a9f.svg new file mode 100644 index 000000000..b6b65a38c --- /dev/null +++ b/.assets/86e17dfb1f59acc822d3f9db2ed8a99de7f72a9f.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/938dd0b29af2a7ddfe8cbd0de959c4c24b5ea9ef.svg b/.assets/938dd0b29af2a7ddfe8cbd0de959c4c24b5ea9ef.svg new file mode 100644 index 000000000..4a059d94f --- /dev/null +++ b/.assets/938dd0b29af2a7ddfe8cbd0de959c4c24b5ea9ef.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/9970ddf4bc344f0585edba6e6d2210b5b01972ef.svg b/.assets/9970ddf4bc344f0585edba6e6d2210b5b01972ef.svg new file mode 100644 index 000000000..3c15ce1a6 --- /dev/null +++ b/.assets/9970ddf4bc344f0585edba6e6d2210b5b01972ef.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/9e000c9b0f38fb906c182c50b60f6c846aff233c.svg b/.assets/9e000c9b0f38fb906c182c50b60f6c846aff233c.svg new file mode 100644 index 000000000..e254b65f4 --- /dev/null +++ b/.assets/9e000c9b0f38fb906c182c50b60f6c846aff233c.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/a0e233eeee7bae70256ff5ae2354edc5339f8250.svg b/.assets/a0e233eeee7bae70256ff5ae2354edc5339f8250.svg new file mode 100644 index 000000000..93fde991f --- /dev/null +++ b/.assets/a0e233eeee7bae70256ff5ae2354edc5339f8250.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%200%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/a3d85c79489fe0154b545232de234ff8b5b26977.svg b/.assets/a3d85c79489fe0154b545232de234ff8b5b26977.svg new file mode 100644 index 000000000..a09281518 --- /dev/null +++ b/.assets/a3d85c79489fe0154b545232de234ff8b5b26977.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/bb82eaef94e0b09bad831160b0da80f2328914fd.svg b/.assets/bb82eaef94e0b09bad831160b0da80f2328914fd.svg new file mode 100644 index 000000000..932a8a370 --- /dev/null +++ b/.assets/bb82eaef94e0b09bad831160b0da80f2328914fd.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%150%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/c61157ea61e7ec553892dfe2072a2d2d59dc8a16.svg b/.assets/c61157ea61e7ec553892dfe2072a2d2d59dc8a16.svg new file mode 100644 index 000000000..455d8004f --- /dev/null +++ b/.assets/c61157ea61e7ec553892dfe2072a2d2d59dc8a16.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/cd0f3cda1a9e93a90c0334cf76260569ebad0e66.svg b/.assets/cd0f3cda1a9e93a90c0334cf76260569ebad0e66.svg new file mode 100644 index 000000000..11ad99638 --- /dev/null +++ b/.assets/cd0f3cda1a9e93a90c0334cf76260569ebad0e66.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/d050234e3f8f72294825f3cc061531aee8b21665.svg b/.assets/d050234e3f8f72294825f3cc061531aee8b21665.svg new file mode 100644 index 000000000..df2260094 --- /dev/null +++ b/.assets/d050234e3f8f72294825f3cc061531aee8b21665.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/d94ed5f5babdd12bc4f369c0ebc698f790544557.svg b/.assets/d94ed5f5babdd12bc4f369c0ebc698f790544557.svg new file mode 100644 index 000000000..3c15ce1a6 --- /dev/null +++ b/.assets/d94ed5f5babdd12bc4f369c0ebc698f790544557.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/d96341be65a8deb48a568fc7bd8b8bb67541c2a9.svg b/.assets/d96341be65a8deb48a568fc7bd8b8bb67541c2a9.svg new file mode 100644 index 000000000..df2260094 --- /dev/null +++ b/.assets/d96341be65a8deb48a568fc7bd8b8bb67541c2a9.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/dc142671fc1206f692dc9c6906686dfc9eb5b355.svg b/.assets/dc142671fc1206f692dc9c6906686dfc9eb5b355.svg new file mode 100644 index 000000000..3c15ce1a6 --- /dev/null +++ b/.assets/dc142671fc1206f692dc9c6906686dfc9eb5b355.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/ddb43a1b862147a923b25b5d7c0568d54de8384c.svg b/.assets/ddb43a1b862147a923b25b5d7c0568d54de8384c.svg new file mode 100644 index 000000000..de33714df --- /dev/null +++ b/.assets/ddb43a1b862147a923b25b5d7c0568d54de8384c.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/e560577075cd9a0a2e900fd194aea1e4679e5d2d.svg b/.assets/e560577075cd9a0a2e900fd194aea1e4679e5d2d.svg new file mode 100644 index 000000000..03283e57a --- /dev/null +++ b/.assets/e560577075cd9a0a2e900fd194aea1e4679e5d2d.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/f546af1ac7b1ac8e277029e8ba07e0df5c0cc142.svg b/.assets/f546af1ac7b1ac8e277029e8ba07e0df5c0cc142.svg new file mode 100644 index 000000000..9163739c4 --- /dev/null +++ b/.assets/f546af1ac7b1ac8e277029e8ba07e0df5c0cc142.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/fa2d9144d6937d795a23d4864f7e30b8efbfa233.svg b/.assets/fa2d9144d6937d795a23d4864f7e30b8efbfa233.svg new file mode 100644 index 000000000..1f6321b7c --- /dev/null +++ b/.assets/fa2d9144d6937d795a23d4864f7e30b8efbfa233.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/fd869f24b8f12e55433a53510ff00425d44dbfd2.svg b/.assets/fd869f24b8f12e55433a53510ff00425d44dbfd2.svg new file mode 100644 index 000000000..4a059d94f --- /dev/null +++ b/.assets/fd869f24b8f12e55433a53510ff00425d44dbfd2.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818_before_AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818_after.md b/diffs/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818_before_AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818_after.md new file mode 100644 index 000000000..7f1fba705 --- /dev/null +++ b/diffs/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818_before_AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### WETH.e ([0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB](https://snowtrace.io/address/0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB)) + +| description | value before | value after | +| --- | --- | --- | +| optimalUsageRatio | 80 % | 90 % | +| interestRate | ![before](/.assets/916bad2a371ec778f6a1fbad323bf3b1bf3d2631.svg) | ![after](/.assets/76cb45ad7b578977a453ebc2c04d2b0f9c66252e.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB": { + "optimalUsageRatio": { + "from": "800000000000000000000000000", + "to": "900000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_IncreaseWETHOptimalRatio_20240818_before_AaveV3Base_IncreaseWETHOptimalRatio_20240818_after.md b/diffs/AaveV3Base_IncreaseWETHOptimalRatio_20240818_before_AaveV3Base_IncreaseWETHOptimalRatio_20240818_after.md new file mode 100644 index 000000000..78d0acf31 --- /dev/null +++ b/diffs/AaveV3Base_IncreaseWETHOptimalRatio_20240818_before_AaveV3Base_IncreaseWETHOptimalRatio_20240818_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### WETH ([0x4200000000000000000000000000000000000006](https://basescan.org/address/0x4200000000000000000000000000000000000006)) + +| description | value before | value after | +| --- | --- | --- | +| optimalUsageRatio | 80 % | 90 % | +| interestRate | ![before](/.assets/2ae2a9e85beeca35fb4b8f8845b046cf253d3604.svg) | ![after](/.assets/5e57642c05a3a70e60c1de9caa27d686b8bb1362.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x4200000000000000000000000000000000000006": { + "optimalUsageRatio": { + "from": "800000000000000000000000000", + "to": "900000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818_before_AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818_after.md b/diffs/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818_before_AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818_after.md new file mode 100644 index 000000000..8ff8cf071 --- /dev/null +++ b/diffs/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818_before_AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### WETH ([0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1](https://gnosisscan.io/address/0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1)) + +| description | value before | value after | +| --- | --- | --- | +| optimalUsageRatio | 80 % | 90 % | +| interestRate | ![before](/.assets/ddb43a1b862147a923b25b5d7c0568d54de8384c.svg) | ![after](/.assets/3fcd187222e872527ce37c51195d7640eac06c41.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1": { + "optimalUsageRatio": { + "from": "800000000000000000000000000", + "to": "900000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Metis_IncreaseWETHOptimalRatio_20240818_before_AaveV3Metis_IncreaseWETHOptimalRatio_20240818_after.md b/diffs/AaveV3Metis_IncreaseWETHOptimalRatio_20240818_before_AaveV3Metis_IncreaseWETHOptimalRatio_20240818_after.md new file mode 100644 index 000000000..39358dd09 --- /dev/null +++ b/diffs/AaveV3Metis_IncreaseWETHOptimalRatio_20240818_before_AaveV3Metis_IncreaseWETHOptimalRatio_20240818_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### WETH ([0x420000000000000000000000000000000000000A](https://explorer.metis.io/address/0x420000000000000000000000000000000000000A)) + +| description | value before | value after | +| --- | --- | --- | +| optimalUsageRatio | 80 % | 90 % | +| interestRate | ![before](/.assets/5a5123819558b2679cc9d427d997ff7916be309b.svg) | ![after](/.assets/3344097cc58003c1aad8dd7147a8287f660fc210.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x420000000000000000000000000000000000000A": { + "optimalUsageRatio": { + "from": "800000000000000000000000000", + "to": "900000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818_before_AaveV3Polygon_IncreaseWETHOptimalRatio_20240818_after.md b/diffs/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818_before_AaveV3Polygon_IncreaseWETHOptimalRatio_20240818_after.md new file mode 100644 index 000000000..bf0c27227 --- /dev/null +++ b/diffs/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818_before_AaveV3Polygon_IncreaseWETHOptimalRatio_20240818_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### WETH ([0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619](https://polygonscan.com/address/0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619)) + +| description | value before | value after | +| --- | --- | --- | +| optimalUsageRatio | 80 % | 90 % | +| interestRate | ![before](/.assets/e560577075cd9a0a2e900fd194aea1e4679e5d2d.svg) | ![after](/.assets/673e539abb0c988dd28cc3517ad407509df7b9de.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": { + "optimalUsageRatio": { + "from": "800000000000000000000000000", + "to": "900000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818_before_AaveV3Scroll_IncreaseWETHOptimalRatio_20240818_after.md b/diffs/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818_before_AaveV3Scroll_IncreaseWETHOptimalRatio_20240818_after.md new file mode 100644 index 000000000..4a4d4d48c --- /dev/null +++ b/diffs/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818_before_AaveV3Scroll_IncreaseWETHOptimalRatio_20240818_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### WETH ([0x5300000000000000000000000000000000000004](https://scrollscan.com/address/0x5300000000000000000000000000000000000004)) + +| description | value before | value after | +| --- | --- | --- | +| optimalUsageRatio | 80 % | 90 % | +| interestRate | ![before](/.assets/3fd8da0d6db0aecdba0789fe2dff9f903cb21cfc.svg) | ![after](/.assets/1eb62fafe4592946c59bca0c8c74e8000a82a95f.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x5300000000000000000000000000000000000004": { + "optimalUsageRatio": { + "from": "800000000000000000000000000", + "to": "900000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md index 8c8fbc3b2..fdafdb360 100644 --- a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md @@ -28,8 +28,8 @@ BaseVariableBorrowRate of GHO is decreased to 6% ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/789aa1e7f377f28d021ccea0e1f60799664d2c93/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/789aa1e7f377f28d021ccea0e1f60799664d2c93/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) - [Discussion](https://governance.aave.com/t/gho-stewards-adjustments-gho-borrow-rate/18649) ## Copyright diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.sol new file mode 100644 index 000000000..75937ea40 --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; +import {AaveV3PayloadAvalanche} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadAvalanche.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Increase WETH Optimal Ratio + * @author ACI + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2930599cae3cec0a16bd0aef13524347e0c5e85cff7dd66ae9b2bed90fc5d1fe + * - Discussion: https://governance.aave.com/t/arfc-increase-weth-optimal-ratio-to-90-on-all-aave-markets/18556 + */ +contract AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818 is AaveV3PayloadAvalanche { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3AvalancheAssets.WETHe_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: EngineFlags.KEEP_CURRENT, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.t.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.t.sol new file mode 100644 index 000000000..3b1872d71 --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818} from './AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.sol'; + +/** + * @dev Test for AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818 + * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.t.sol -vv + */ +contract AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818_Test is ProtocolV3TestBase { + AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 49404440); + proposal = new AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818', + AaveV3Avalanche.POOL, + address(proposal) + ); + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.sol new file mode 100644 index 000000000..0f4920921 --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; +import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Increase WETH Optimal Ratio + * @author ACI + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2930599cae3cec0a16bd0aef13524347e0c5e85cff7dd66ae9b2bed90fc5d1fe + * - Discussion: https://governance.aave.com/t/arfc-increase-weth-optimal-ratio-to-90-on-all-aave-markets/18556 + */ +contract AaveV3Base_IncreaseWETHOptimalRatio_20240818 is AaveV3PayloadBase { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3BaseAssets.WETH_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: EngineFlags.KEEP_CURRENT, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.t.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.t.sol new file mode 100644 index 000000000..67c5b294d --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.t.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Base_IncreaseWETHOptimalRatio_20240818} from './AaveV3Base_IncreaseWETHOptimalRatio_20240818.sol'; + +/** + * @dev Test for AaveV3Base_IncreaseWETHOptimalRatio_20240818 + * command: FOUNDRY_PROFILE=base forge test --match-path=src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.t.sol -vv + */ +contract AaveV3Base_IncreaseWETHOptimalRatio_20240818_Test is ProtocolV3TestBase { + AaveV3Base_IncreaseWETHOptimalRatio_20240818 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('base'), 18593229); + proposal = new AaveV3Base_IncreaseWETHOptimalRatio_20240818(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest('AaveV3Base_IncreaseWETHOptimalRatio_20240818', AaveV3Base.POOL, address(proposal)); + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.sol new file mode 100644 index 000000000..b80d9697e --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol'; +import {AaveV3PayloadGnosis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadGnosis.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Increase WETH Optimal Ratio + * @author ACI + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2930599cae3cec0a16bd0aef13524347e0c5e85cff7dd66ae9b2bed90fc5d1fe + * - Discussion: https://governance.aave.com/t/arfc-increase-weth-optimal-ratio-to-90-on-all-aave-markets/18556 + */ +contract AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818 is AaveV3PayloadGnosis { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3GnosisAssets.WETH_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: EngineFlags.KEEP_CURRENT, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.t.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.t.sol new file mode 100644 index 000000000..13dab3d41 --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818} from './AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.sol'; + +/** + * @dev Test for AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818 + * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.t.sol -vv + */ +contract AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818_Test is ProtocolV3TestBase { + AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('gnosis'), 35542977); + proposal = new AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818', + AaveV3Gnosis.POOL, + address(proposal) + ); + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.sol new file mode 100644 index 000000000..1bcc7ce57 --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3MetisAssets} from 'aave-address-book/AaveV3Metis.sol'; +import {AaveV3PayloadMetis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadMetis.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Increase WETH Optimal Ratio + * @author ACI + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2930599cae3cec0a16bd0aef13524347e0c5e85cff7dd66ae9b2bed90fc5d1fe + * - Discussion: https://governance.aave.com/t/arfc-increase-weth-optimal-ratio-to-90-on-all-aave-markets/18556 + */ +contract AaveV3Metis_IncreaseWETHOptimalRatio_20240818 is AaveV3PayloadMetis { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3MetisAssets.WETH_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: EngineFlags.KEEP_CURRENT, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.t.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.t.sol new file mode 100644 index 000000000..f2a3f9474 --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Metis} from 'aave-address-book/AaveV3Metis.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Metis_IncreaseWETHOptimalRatio_20240818} from './AaveV3Metis_IncreaseWETHOptimalRatio_20240818.sol'; + +/** + * @dev Test for AaveV3Metis_IncreaseWETHOptimalRatio_20240818 + * command: FOUNDRY_PROFILE=metis forge test --match-path=src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.t.sol -vv + */ +contract AaveV3Metis_IncreaseWETHOptimalRatio_20240818_Test is ProtocolV3TestBase { + AaveV3Metis_IncreaseWETHOptimalRatio_20240818 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('metis'), 18143308); + proposal = new AaveV3Metis_IncreaseWETHOptimalRatio_20240818(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Metis_IncreaseWETHOptimalRatio_20240818', + AaveV3Metis.POOL, + address(proposal) + ); + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.sol new file mode 100644 index 000000000..7f89cccf8 --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; +import {AaveV3PayloadPolygon} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadPolygon.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Increase WETH Optimal Ratio + * @author ACI + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2930599cae3cec0a16bd0aef13524347e0c5e85cff7dd66ae9b2bed90fc5d1fe + * - Discussion: https://governance.aave.com/t/arfc-increase-weth-optimal-ratio-to-90-on-all-aave-markets/18556 + */ +contract AaveV3Polygon_IncreaseWETHOptimalRatio_20240818 is AaveV3PayloadPolygon { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3PolygonAssets.WETH_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: EngineFlags.KEEP_CURRENT, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.t.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.t.sol new file mode 100644 index 000000000..42a3a13cd --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Polygon_IncreaseWETHOptimalRatio_20240818} from './AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.sol'; + +/** + * @dev Test for AaveV3Polygon_IncreaseWETHOptimalRatio_20240818 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.t.sol -vv + */ +contract AaveV3Polygon_IncreaseWETHOptimalRatio_20240818_Test is ProtocolV3TestBase { + AaveV3Polygon_IncreaseWETHOptimalRatio_20240818 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 60736106); + proposal = new AaveV3Polygon_IncreaseWETHOptimalRatio_20240818(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Polygon_IncreaseWETHOptimalRatio_20240818', + AaveV3Polygon.POOL, + address(proposal) + ); + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.sol new file mode 100644 index 000000000..5cedf455e --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3ScrollAssets} from 'aave-address-book/AaveV3Scroll.sol'; +import {AaveV3PayloadScroll} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadScroll.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Increase WETH Optimal Ratio + * @author ACI + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x2930599cae3cec0a16bd0aef13524347e0c5e85cff7dd66ae9b2bed90fc5d1fe + * - Discussion: https://governance.aave.com/t/arfc-increase-weth-optimal-ratio-to-90-on-all-aave-markets/18556 + */ +contract AaveV3Scroll_IncreaseWETHOptimalRatio_20240818 is AaveV3PayloadScroll { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3ScrollAssets.WETH_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: EngineFlags.KEEP_CURRENT, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.t.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.t.sol new file mode 100644 index 000000000..2759bbec3 --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Scroll_IncreaseWETHOptimalRatio_20240818} from './AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.sol'; + +/** + * @dev Test for AaveV3Scroll_IncreaseWETHOptimalRatio_20240818 + * command: FOUNDRY_PROFILE=scroll forge test --match-path=src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.t.sol -vv + */ +contract AaveV3Scroll_IncreaseWETHOptimalRatio_20240818_Test is ProtocolV3TestBase { + AaveV3Scroll_IncreaseWETHOptimalRatio_20240818 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('scroll'), 8482390); + proposal = new AaveV3Scroll_IncreaseWETHOptimalRatio_20240818(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Scroll_IncreaseWETHOptimalRatio_20240818', + AaveV3Scroll.POOL, + address(proposal) + ); + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio.md b/src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio.md new file mode 100644 index 000000000..ac8876d94 --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio.md @@ -0,0 +1,41 @@ +--- +title: "Increase WETH Optimal Ratio" +author: "ACI" +discussions: "https://governance.aave.com/t/arfc-increase-weth-optimal-ratio-to-90-on-all-aave-markets/18556" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x2930599cae3cec0a16bd0aef13524347e0c5e85cff7dd66ae9b2bed90fc5d1fe" +--- + +## Simple Summary + +This proposal will increase the optimal usageRatio from 80% to 90% across all aave v3 deployments including Gnosis, Polygon, Metis, Base, Avalanche and Scroll + +## Motivation + +Currently, the optimal usage ratios vary across different Aave instances, reflecting a balance between liquidity utilization and risk management. By increasing the optimal usage ratio for WETH to 90%, higher returns for liquidity providers and improved borrowing conditions for users can be achieved. + +## Specification + +This proposal will increase WETH Optimal Usage Ratio to 90% on the following markets which are currently at 80%, in order to unify them all: + +Gnosis V3 + +Polygon V3 + +Metis V3 + +Base V3 + +Avalanche V3 + +Scroll V3 + +## References + +- Implementation: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.sol) +- Tests: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x2930599cae3cec0a16bd0aef13524347e0c5e85cff7dd66ae9b2bed90fc5d1fe) +- [Discussion](https://governance.aave.com/t/arfc-increase-weth-optimal-ratio-to-90-on-all-aave-markets/18556) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol b/src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol new file mode 100644 index 000000000..9c5c8ec5f --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol @@ -0,0 +1,210 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, PolygonScript, AvalancheScript, MetisScript, BaseScript, GnosisScript, ScrollScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Polygon_IncreaseWETHOptimalRatio_20240818} from './AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.sol'; +import {AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818} from './AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.sol'; +import {AaveV3Metis_IncreaseWETHOptimalRatio_20240818} from './AaveV3Metis_IncreaseWETHOptimalRatio_20240818.sol'; +import {AaveV3Base_IncreaseWETHOptimalRatio_20240818} from './AaveV3Base_IncreaseWETHOptimalRatio_20240818.sol'; +import {AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818} from './AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.sol'; +import {AaveV3Scroll_IncreaseWETHOptimalRatio_20240818} from './AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.sol'; + +/** + * @dev Deploy Polygon + * deploy-command: make deploy-ledger contract=src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol:DeployPolygon chain=polygon + * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/IncreaseWETHOptimalRatio_20240818.s.sol/137/run-latest.json + */ +contract DeployPolygon is PolygonScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Polygon_IncreaseWETHOptimalRatio_20240818).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Avalanche + * deploy-command: make deploy-ledger contract=src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol:DeployAvalanche chain=avalanche + * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/IncreaseWETHOptimalRatio_20240818.s.sol/43114/run-latest.json + */ +contract DeployAvalanche is AvalancheScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Metis + * deploy-command: make deploy-ledger contract=src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol:DeployMetis chain=metis + * verify-command: FOUNDRY_PROFILE=metis npx catapulta-verify -b broadcast/IncreaseWETHOptimalRatio_20240818.s.sol/1088/run-latest.json + */ +contract DeployMetis is MetisScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Metis_IncreaseWETHOptimalRatio_20240818).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Base + * deploy-command: make deploy-ledger contract=src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol:DeployBase chain=base + * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/IncreaseWETHOptimalRatio_20240818.s.sol/8453/run-latest.json + */ +contract DeployBase is BaseScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Base_IncreaseWETHOptimalRatio_20240818).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Gnosis + * deploy-command: make deploy-ledger contract=src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol:DeployGnosis chain=gnosis + * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/IncreaseWETHOptimalRatio_20240818.s.sol/100/run-latest.json + */ +contract DeployGnosis is GnosisScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Scroll + * deploy-command: make deploy-ledger contract=src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol:DeployScroll chain=scroll + * verify-command: FOUNDRY_PROFILE=scroll npx catapulta-verify -b broadcast/IncreaseWETHOptimalRatio_20240818.s.sol/534352/run-latest.json + */ +contract DeployScroll is ScrollScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Scroll_IncreaseWETHOptimalRatio_20240818).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio_20240818.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](6); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); + actionsPolygon[0] = GovV3Helpers.buildAction( + type(AaveV3Polygon_IncreaseWETHOptimalRatio_20240818).creationCode + ); + payloads[0] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); + actionsAvalanche[0] = GovV3Helpers.buildAction( + type(AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818).creationCode + ); + payloads[1] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsMetis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsMetis[0] = GovV3Helpers.buildAction( + type(AaveV3Metis_IncreaseWETHOptimalRatio_20240818).creationCode + ); + payloads[2] = GovV3Helpers.buildMetisPayload(vm, actionsMetis); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction( + type(AaveV3Base_IncreaseWETHOptimalRatio_20240818).creationCode + ); + payloads[3] = GovV3Helpers.buildBasePayload(vm, actionsBase); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsGnosis[0] = GovV3Helpers.buildAction( + type(AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818).creationCode + ); + payloads[4] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); + actionsScroll[0] = GovV3Helpers.buildAction( + type(AaveV3Scroll_IncreaseWETHOptimalRatio_20240818).creationCode + ); + payloads[5] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio.md' + ) + ); + } +} diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/config.ts b/src/20240818_Multi_IncreaseWETHOptimalRatio/config.ts new file mode 100644 index 000000000..bc46d030e --- /dev/null +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/config.ts @@ -0,0 +1,120 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: [ + 'AaveV3Polygon', + 'AaveV3Avalanche', + 'AaveV3Metis', + 'AaveV3Base', + 'AaveV3Gnosis', + 'AaveV3Scroll', + ], + title: 'Increase WETH Optimal Ratio', + shortName: 'IncreaseWETHOptimalRatio', + date: '20240818', + author: 'ACI', + discussion: + 'https://governance.aave.com/t/arfc-increase-weth-optimal-ratio-to-90-on-all-aave-markets/18556', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x2930599cae3cec0a16bd0aef13524347e0c5e85cff7dd66ae9b2bed90fc5d1fe', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Polygon: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'WETH', + params: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 60736106}, + }, + AaveV3Avalanche: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'WETHe', + params: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 49404440}, + }, + AaveV3Metis: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'WETH', + params: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 18143308}, + }, + AaveV3Base: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'WETH', + params: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 18593229}, + }, + AaveV3Gnosis: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'WETH', + params: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 35542977}, + }, + AaveV3Scroll: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'WETH', + params: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '', + variableRateSlope1: '', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 8482390}, + }, + }, +}; diff --git a/yarn.lock b/yarn.lock index cd098cf6b..67472d585 100644 --- a/yarn.lock +++ b/yarn.lock @@ -47,6 +47,7 @@ resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.0.tgz#a75cf2e217688e63728bec1b9c956b0134bc647c" integrity sha512-ALT9T/aIZ7BztozWvGhjVKGAEfe6wLhop0z+0ZSwAdyHXrBfpXXDZa9siHNtOZfNojPVMPvkpgsiPnFmDD8OJQ== + "@bgd-labs/aave-address-book@^3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.1.1.tgz#46e528f5b86dff0a26b17fd7573e2abf4c2c1c44" From f9dfb217f9b490e2eaaf77569fcaaa19c9f5935d Mon Sep 17 00:00:00 2001 From: Cache bot Date: Tue, 20 Aug 2024 14:00:41 +0000 Subject: [PATCH 51/68] fix(cache): automated cache update [skip ci] --- .../GHOBorrowRateUpdate.md | 4 ++-- .../IncreaseWETHOptimalRatio.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md index fdafdb360..76c977f68 100644 --- a/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md +++ b/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/GHOBorrowRateUpdate.md @@ -28,8 +28,8 @@ BaseVariableBorrowRate of GHO is decreased to 6% ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240814_AaveV3Ethereum_GHOBorrowRateUpdate/AaveV3Ethereum_GHOBorrowRateUpdate_20240814.t.sol) - [Discussion](https://governance.aave.com/t/gho-stewards-adjustments-gho-borrow-rate/18649) ## Copyright diff --git a/src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio.md b/src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio.md index ac8876d94..c9ada8624 100644 --- a/src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio.md +++ b/src/20240818_Multi_IncreaseWETHOptimalRatio/IncreaseWETHOptimalRatio.md @@ -31,8 +31,8 @@ Scroll V3 ## References -- Implementation: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.sol) -- Tests: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.t.sol) +- Implementation: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.sol) +- Tests: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Polygon_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Avalanche_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Metis](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Metis_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Base_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Gnosis_IncreaseWETHOptimalRatio_20240818.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/a0ddfdc8504eec2e76d47e918cb7ff3741a4b7b4/src/20240818_Multi_IncreaseWETHOptimalRatio/AaveV3Scroll_IncreaseWETHOptimalRatio_20240818.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x2930599cae3cec0a16bd0aef13524347e0c5e85cff7dd66ae9b2bed90fc5d1fe) - [Discussion](https://governance.aave.com/t/arfc-increase-weth-optimal-ratio-to-90-on-all-aave-markets/18556) From b5bf2d856a07b2d2f13ee2a0e5a874cd8917fc32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 16:15:06 +0200 Subject: [PATCH 52/68] chore(deps): bump lib/aave-helpers from `31c1e87` to `682c8c5` (#428) Bumps [lib/aave-helpers](https://github.com/bgd-labs/aave-helpers) from `31c1e87` to `682c8c5`. - [Release notes](https://github.com/bgd-labs/aave-helpers/releases) - [Commits](https://github.com/bgd-labs/aave-helpers/compare/31c1e879ddb8a8c85557454c4ec95c4957397567...682c8c542bbeabe60068627f2f84f533ee1130e8) --- updated-dependencies: - dependency-name: lib/aave-helpers dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- lib/aave-helpers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/aave-helpers b/lib/aave-helpers index 31c1e879d..682c8c542 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit 31c1e879ddb8a8c85557454c4ec95c4957397567 +Subproject commit 682c8c542bbeabe60068627f2f84f533ee1130e8 From 50d443daec0ca949ee7a32d1b5b4bf4382050168 Mon Sep 17 00:00:00 2001 From: Lukas Date: Tue, 20 Aug 2024 20:20:47 +0200 Subject: [PATCH 53/68] fix: zksync patch (#431) --- ...c_AaveV3ZkSyncActivation_20240805_after.md | 40 +++++++++---------- lib/aave-helpers | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/diffs/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_before_AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_after.md b/diffs/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_before_AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_after.md index 0fffbd8c2..5539c753a 100644 --- a/diffs/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_before_AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_after.md +++ b/diffs/AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_before_AaveV3ZkSync_AaveV3ZkSyncActivation_20240805_after.md @@ -43,8 +43,8 @@ | stableDebtTokenSymbol | stableDebtZksUSDC | | variableDebtTokenName | Aave ZkSync Variable Debt USDC | | variableDebtTokenSymbol | variableDebtZksUSDC | -| virtualAccountingActive | false | -| virtualBalance | 0 USDC [0] | +| virtualAccountingActive | true | +| virtualBalance | 10 USDC [10000000] | | optimalUsageRatio | 90 % | | maxVariableBorrowRate | 65.5 % | | baseVariableBorrowRate | 0 % | @@ -94,8 +94,8 @@ | stableDebtTokenSymbol | stableDebtZksUSDT | | variableDebtTokenName | Aave ZkSync Variable Debt USDT | | variableDebtTokenSymbol | variableDebtZksUSDT | -| virtualAccountingActive | false | -| virtualBalance | 0 USDT [0] | +| virtualAccountingActive | true | +| virtualBalance | 10 USDT [10000000] | | optimalUsageRatio | 90 % | | maxVariableBorrowRate | 65.5 % | | baseVariableBorrowRate | 0 % | @@ -145,8 +145,8 @@ | stableDebtTokenSymbol | stableDebtZksZK | | variableDebtTokenName | Aave ZkSync Variable Debt ZK | | variableDebtTokenSymbol | variableDebtZksZK | -| virtualAccountingActive | false | -| virtualBalance | 0 ZK [0] | +| virtualAccountingActive | true | +| virtualBalance | 100 ZK [100000000000000000000] | | optimalUsageRatio | 45 % | | maxVariableBorrowRate | 309 % | | baseVariableBorrowRate | 0 % | @@ -196,8 +196,8 @@ | stableDebtTokenSymbol | stableDebtZksWETH | | variableDebtTokenName | Aave ZkSync Variable Debt WETH | | variableDebtTokenSymbol | variableDebtZksWETH | -| virtualAccountingActive | false | -| virtualBalance | 0 WETH [0] | +| virtualAccountingActive | true | +| virtualBalance | 0.01 WETH [10000000000000000] | | optimalUsageRatio | 90 % | | maxVariableBorrowRate | 82.7 % | | baseVariableBorrowRate | 0 % | @@ -252,8 +252,8 @@ | stableDebtTokenSymbol | stableDebtZkswstETH | | variableDebtTokenName | Aave ZkSync Variable Debt wstETH | | variableDebtTokenSymbol | variableDebtZkswstETH | -| virtualAccountingActive | false | -| virtualBalance | 0 wstETH [0] | +| virtualAccountingActive | true | +| virtualBalance | 0.01 wstETH [10000000000000000] | | optimalUsageRatio | 45 % | | maxVariableBorrowRate | 84.5 % | | baseVariableBorrowRate | 0 % | @@ -327,8 +327,8 @@ "variableDebtTokenImpl": "0x7c310e97Bdba5E7603D772df324B8dd33771c094", "variableDebtTokenName": "Aave ZkSync Variable Debt USDC", "variableDebtTokenSymbol": "variableDebtZksUSDC", - "virtualAccountingActive": false, - "virtualBalance": 0 + "virtualAccountingActive": true, + "virtualBalance": 10000000 } }, "0x493257fD37EDB34451f62EDf8D2a0C418852bA4C": { @@ -373,8 +373,8 @@ "variableDebtTokenImpl": "0x7c310e97Bdba5E7603D772df324B8dd33771c094", "variableDebtTokenName": "Aave ZkSync Variable Debt USDT", "variableDebtTokenSymbol": "variableDebtZksUSDT", - "virtualAccountingActive": false, - "virtualBalance": 0 + "virtualAccountingActive": true, + "virtualBalance": 10000000 } }, "0x5A7d6b2F92C77FAD6CCaBd7EE0624E64907Eaf3E": { @@ -419,8 +419,8 @@ "variableDebtTokenImpl": "0x7c310e97Bdba5E7603D772df324B8dd33771c094", "variableDebtTokenName": "Aave ZkSync Variable Debt ZK", "variableDebtTokenSymbol": "variableDebtZksZK", - "virtualAccountingActive": false, - "virtualBalance": 0 + "virtualAccountingActive": true, + "virtualBalance": "100000000000000000000" } }, "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91": { @@ -465,8 +465,8 @@ "variableDebtTokenImpl": "0x7c310e97Bdba5E7603D772df324B8dd33771c094", "variableDebtTokenName": "Aave ZkSync Variable Debt WETH", "variableDebtTokenSymbol": "variableDebtZksWETH", - "virtualAccountingActive": false, - "virtualBalance": 0 + "virtualAccountingActive": true, + "virtualBalance": "10000000000000000" } }, "0x703b52F2b28fEbcB60E1372858AF5b18849FE867": { @@ -511,8 +511,8 @@ "variableDebtTokenImpl": "0x7c310e97Bdba5E7603D772df324B8dd33771c094", "variableDebtTokenName": "Aave ZkSync Variable Debt wstETH", "variableDebtTokenSymbol": "variableDebtZkswstETH", - "virtualAccountingActive": false, - "virtualBalance": 0 + "virtualAccountingActive": true, + "virtualBalance": "10000000000000000" } } }, diff --git a/lib/aave-helpers b/lib/aave-helpers index 682c8c542..f10b4fb59 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit 682c8c542bbeabe60068627f2f84f533ee1130e8 +Subproject commit f10b4fb59609ddebf63a67ea47f2c60d852a27d3 From fce3898d3aefb9c7e965177381c393f03877dd13 Mon Sep 17 00:00:00 2001 From: defi jesus Date: Wed, 21 Aug 2024 10:28:28 +0100 Subject: [PATCH 54/68] July Funding Update (#402) * ready for review, missing gov forum post * add gov url * small fixes to .md * tune slippages * change the weth allowance to aEthWETH. update blocknumber on test * use scaledBalanceOf. increase slippage for DPI * add swap prices tests * update imports paths --------- Co-authored-by: defijesus.eth --- ...hereum_JulyFundingUpdate_20240729_after.md | 48 +++ ...eV3Ethereum_JulyFundingUpdate_20240729.sol | 167 ++++++++++ ...3Ethereum_JulyFundingUpdate_20240729.t.sol | 311 ++++++++++++++++++ .../JulyFundingUpdate.md | 53 +++ .../JulyFundingUpdate_20240729.s.sol | 60 ++++ .../config.ts | 14 + 6 files changed, 653 insertions(+) create mode 100644 diffs/AaveV3Ethereum_JulyFundingUpdate_20240729_before_AaveV3Ethereum_JulyFundingUpdate_20240729_after.md create mode 100644 src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.sol create mode 100644 src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.t.sol create mode 100644 src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate.md create mode 100644 src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate_20240729.s.sol create mode 100644 src/20240729_AaveV3Ethereum_JulyFundingUpdate/config.ts diff --git a/diffs/AaveV3Ethereum_JulyFundingUpdate_20240729_before_AaveV3Ethereum_JulyFundingUpdate_20240729_after.md b/diffs/AaveV3Ethereum_JulyFundingUpdate_20240729_before_AaveV3Ethereum_JulyFundingUpdate_20240729_after.md new file mode 100644 index 000000000..12909e90f --- /dev/null +++ b/diffs/AaveV3Ethereum_JulyFundingUpdate_20240729_before_AaveV3Ethereum_JulyFundingUpdate_20240729_after.md @@ -0,0 +1,48 @@ +## Reserve changes + +### Reserve altered + +#### USDe ([0x4c9EDD5852cd905f086C759E8383e09bff1E68B3](https://etherscan.io/address/0x4c9EDD5852cd905f086C759E8383e09bff1E68B3)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 23,166,145.6545 USDe [23166145654572559584667278] | 23,054,131.1763 USDe [23054131176313290139616864] | +| virtualBalance | 23,166,139.1810 USDe [23166139181028172087858245] | 23,054,124.7027 USDe [23054124702768902642807831] | + + +#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e)) + +| description | value before | value after | +| --- | --- | --- | +| aTokenUnderlyingBalance | 123,747.8749 FRAX [123747874970853291254921] | 115,225.0784 FRAX [115225078472828162220499] | +| virtualBalance | 123,741.4203 FRAX [123741420346933119180188] | 115,218.6238 FRAX [115218623848907990145766] | + + +## Raw diff + +```json +{ + "reserves": { + "0x4c9EDD5852cd905f086C759E8383e09bff1E68B3": { + "aTokenUnderlyingBalance": { + "from": "23166145654572559584667278", + "to": "23054131176313290139616864" + }, + "virtualBalance": { + "from": "23166139181028172087858245", + "to": "23054124702768902642807831" + } + }, + "0x853d955aCEf822Db058eb8505911ED77F175b99e": { + "aTokenUnderlyingBalance": { + "from": "123747874970853291254921", + "to": "115225078472828162220499" + }, + "virtualBalance": { + "from": "123741420346933119180188", + "to": "115218623848907990145766" + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.sol b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.sol new file mode 100644 index 000000000..73899de64 --- /dev/null +++ b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.sol @@ -0,0 +1,167 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {IScaledBalanceToken} from 'aave-v3-origin/core/contracts/interfaces/IScaledBalanceToken.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; +import {AaveSwapper} from 'aave-helpers/src/swaps/AaveSwapper.sol'; + +/** + * @title July Funding Update + * @author karpatkey_TokenLogic + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-july-funding-update/18447 + */ +contract AaveV3Ethereum_JulyFundingUpdate_20240729 is IProposalGenericExecutor { + using SafeERC20 for IERC20; + + address public constant COLLECTOR = address(AaveV3Ethereum.COLLECTOR); + + address public constant MERIT_SAFE = 0xdeadD8aB03075b7FBA81864202a2f59EE25B312b; + address public constant MILKMAN = 0x11C76AD590ABDFFCD980afEC9ad951B160F02797; + address public constant PRICE_CHECKER = 0xe80a1C615F75AFF7Ed8F08c9F21f9d00982D666c; + + address public constant GHO_USD_FEED = 0x3f12643D3f6f874d39C2a4c9f2Cd6f2DbAC877FC; + address public constant USDE_FEED = 0xa569d910839Ae8865Da8F8e70FfFb0cBA869F961; + address public constant USDT_FEED = 0x3E7d1eAB13ad0104d2750B8863b489D65364e32D; + address public constant FRAX_FEED = 0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD; + address public constant DPI_FEED = 0xD2A593BF7594aCE1faD597adb697b5645d5edDB2; + + uint256 public constant USDT_AMOUNT = 500_000e6; + uint256 public constant GHO_AMOUNT = 3_000_000e18; + uint256 public constant WETH_AMOUNT = 645 ether; + + AaveSwapper public constant SWAPPER = AaveSwapper(MiscEthereum.AAVE_SWAPPER); + + function execute() external { + /// ALLOWANCES + AaveV3Ethereum.COLLECTOR.approve(AaveV3EthereumAssets.GHO_UNDERLYING, MERIT_SAFE, GHO_AMOUNT); + + AaveV3Ethereum.COLLECTOR.approve(AaveV3EthereumAssets.WETH_A_TOKEN, MERIT_SAFE, WETH_AMOUNT); + + /// SWAPS + /// aEthUSDe + AaveV3Ethereum.COLLECTOR.transfer( + AaveV3EthereumAssets.USDe_A_TOKEN, + address(this), + IScaledBalanceToken(AaveV3EthereumAssets.USDe_A_TOKEN).scaledBalanceOf(COLLECTOR) - 1e18 + ); + + AaveV3Ethereum.POOL.withdraw( + AaveV3EthereumAssets.USDe_UNDERLYING, + type(uint256).max, + address(SWAPPER) + ); + + uint256 usdeBalance = IERC20(AaveV3EthereumAssets.USDe_UNDERLYING).balanceOf(address(SWAPPER)); + + SWAPPER.swap( + MILKMAN, + PRICE_CHECKER, + AaveV3EthereumAssets.USDe_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + USDE_FEED, + GHO_USD_FEED, + COLLECTOR, + usdeBalance, + 50 + ); + + /// aUSDT + AaveV2Ethereum.COLLECTOR.transfer( + AaveV2EthereumAssets.USDT_A_TOKEN, + address(this), + USDT_AMOUNT + ); + + AaveV2Ethereum.POOL.withdraw( + AaveV2EthereumAssets.USDT_UNDERLYING, + type(uint256).max, + address(SWAPPER) + ); + + uint256 usdtBalance = IERC20(AaveV2EthereumAssets.USDT_UNDERLYING).balanceOf(address(SWAPPER)); + + SWAPPER.swap( + MILKMAN, + PRICE_CHECKER, + AaveV2EthereumAssets.USDT_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + USDT_FEED, + GHO_USD_FEED, + COLLECTOR, + usdtBalance, + 50 + ); + + /// aFRAX & aEthFRAX + AaveV2Ethereum.COLLECTOR.transfer( + AaveV2EthereumAssets.FRAX_A_TOKEN, + address(this), + IScaledBalanceToken(AaveV2EthereumAssets.FRAX_A_TOKEN).scaledBalanceOf(COLLECTOR) - 1e18 + ); + + AaveV3Ethereum.COLLECTOR.transfer( + AaveV3EthereumAssets.FRAX_A_TOKEN, + address(this), + IScaledBalanceToken(AaveV3EthereumAssets.FRAX_A_TOKEN).scaledBalanceOf(COLLECTOR) - 1e18 + ); + + AaveV2Ethereum.POOL.withdraw( + AaveV2EthereumAssets.FRAX_UNDERLYING, + type(uint256).max, + address(SWAPPER) + ); + + AaveV3Ethereum.POOL.withdraw( + AaveV3EthereumAssets.FRAX_UNDERLYING, + type(uint256).max, + address(SWAPPER) + ); + + uint256 fraxBalance = IERC20(AaveV3EthereumAssets.FRAX_UNDERLYING).balanceOf(address(SWAPPER)); + + SWAPPER.swap( + MILKMAN, + PRICE_CHECKER, + AaveV3EthereumAssets.FRAX_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + FRAX_FEED, + GHO_USD_FEED, + COLLECTOR, + fraxBalance, + 100 + ); + + /// aDPI + AaveV2Ethereum.COLLECTOR.transfer( + AaveV2EthereumAssets.DPI_A_TOKEN, + address(this), + IScaledBalanceToken(AaveV2EthereumAssets.DPI_A_TOKEN).scaledBalanceOf(COLLECTOR) - 1e18 + ); + + AaveV2Ethereum.POOL.withdraw( + AaveV2EthereumAssets.DPI_UNDERLYING, + type(uint256).max, + address(SWAPPER) + ); + + uint256 dpiBalance = IERC20(AaveV2EthereumAssets.DPI_UNDERLYING).balanceOf(address(SWAPPER)); + + SWAPPER.swap( + MILKMAN, + PRICE_CHECKER, + AaveV2EthereumAssets.DPI_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + DPI_FEED, + GHO_USD_FEED, + COLLECTOR, + dpiBalance, + 500 + ); + } +} diff --git a/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.t.sol b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.t.sol new file mode 100644 index 000000000..89d96e01a --- /dev/null +++ b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.t.sol @@ -0,0 +1,311 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_JulyFundingUpdate_20240729} from './AaveV3Ethereum_JulyFundingUpdate_20240729.sol'; + +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {IScaledBalanceToken} from 'aave-v3-origin/core/contracts/interfaces/IScaledBalanceToken.sol'; + +/** + * @dev Test for AaveV3Ethereum_JulyFundingUpdate_20240729 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.t.sol -vv + */ +contract AaveV3Ethereum_JulyFundingUpdate_20240729_Test is ProtocolV3TestBase { + event SwapRequested( + address milkman, + address indexed fromToken, + address indexed toToken, + address fromOracle, + address toOracle, + uint256 amount, + address indexed recipient, + uint256 slippage + ); + + AaveV3Ethereum_JulyFundingUpdate_20240729 internal proposal; + + address internal COLLECTOR = address(AaveV3Ethereum.COLLECTOR); + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20421735); + proposal = new AaveV3Ethereum_JulyFundingUpdate_20240729(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_JulyFundingUpdate_20240729', + AaveV3Ethereum.POOL, + address(proposal) + ); + } + + function test_allowances() public { + executePayload(vm, address(proposal)); + + uint256 ghoAllowanceAmount = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).allowance( + COLLECTOR, + proposal.MERIT_SAFE() + ); + + uint256 wethAllowanceAmount = IERC20(AaveV3EthereumAssets.WETH_A_TOKEN).allowance( + COLLECTOR, + proposal.MERIT_SAFE() + ); + + assertEq(ghoAllowanceAmount, proposal.GHO_AMOUNT()); + assertEq(wethAllowanceAmount, proposal.WETH_AMOUNT()); + } + + function test_swapEventsAndPrices() public { + uint256 expectedInUsde = 112014478259269445050414; + uint256 expectedInUsdt = 499999999999; + uint256 expectedInFrax = 31935428199756049088619; + uint256 expectedInDpi = 133444159197713527567; + + vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); + emit SwapRequested( + proposal.MILKMAN(), + AaveV3EthereumAssets.USDe_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.USDE_FEED(), + proposal.GHO_USD_FEED(), + expectedInUsde, // Hardcoded as dynamic + address(AaveV3Ethereum.COLLECTOR), + 50 + ); + + vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); + emit SwapRequested( + proposal.MILKMAN(), + AaveV3EthereumAssets.USDT_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.USDT_FEED(), + proposal.GHO_USD_FEED(), + expectedInUsdt, // Hardcoded as dynamic + address(AaveV3Ethereum.COLLECTOR), + 50 + ); + + vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); + emit SwapRequested( + proposal.MILKMAN(), + AaveV3EthereumAssets.FRAX_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.FRAX_FEED(), + proposal.GHO_USD_FEED(), + expectedInFrax, // Hardcoded as dynamic + address(AaveV3Ethereum.COLLECTOR), + 100 + ); + + vm.expectEmit(true, true, true, true, MiscEthereum.AAVE_SWAPPER); + emit SwapRequested( + proposal.MILKMAN(), + AaveV2EthereumAssets.DPI_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.DPI_FEED(), + proposal.GHO_USD_FEED(), + expectedInDpi, // Hardcoded as dynamic + address(AaveV3Ethereum.COLLECTOR), + 500 + ); + + executePayload(vm, address(proposal)); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + expectedInUsde, // DAI/USD ~ 1.0 exchange rate on 30/07/2024 + expectedInUsde, + 15e14, // 1e18 is 100%, 15e14 is 0.15% + AaveV3EthereumAssets.USDe_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.USDE_FEED(), + AaveV3EthereumAssets.GHO_ORACLE + ); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + 499999e18, // usdt is 6 decimals we get 18 out + expectedInUsdt, + 3e14, // 1e18 is 100%, 3e14 is 0.03% + AaveV3EthereumAssets.USDT_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.USDT_FEED(), + AaveV3EthereumAssets.GHO_ORACLE + ); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + expectedInFrax, // FRAX/USD ~ 1.0 exchange rate on 30/07/2024 + expectedInFrax, + 4e15, // 1e18 is 100%, 4e15 is 0.4% + AaveV3EthereumAssets.FRAX_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.FRAX_FEED(), + AaveV3EthereumAssets.GHO_ORACLE + ); + + _baseSwapTest( + proposal.PRICE_CHECKER(), + expectedInDpi * 90, // DPI/USD ~ 90 exchange rate on 30/07/2024 + expectedInDpi, + 20e14, // 1e18 is 100%, 20e14 is 0.20% + AaveV2EthereumAssets.DPI_UNDERLYING, + AaveV3EthereumAssets.GHO_UNDERLYING, + proposal.DPI_FEED(), + AaveV3EthereumAssets.GHO_ORACLE + ); + } + + function test_withdrawAndSwapForGho() public { + uint256 collectorAusdev3BalanceBefore = IScaledBalanceToken(AaveV3EthereumAssets.USDe_A_TOKEN) + .scaledBalanceOf(COLLECTOR); + + uint256 collectorAusdtv2BalanceBefore = IScaledBalanceToken(AaveV2EthereumAssets.USDT_A_TOKEN) + .scaledBalanceOf(COLLECTOR); + + uint256 collectorAfraxv2BalanceBefore = IScaledBalanceToken(AaveV2EthereumAssets.FRAX_A_TOKEN) + .scaledBalanceOf(COLLECTOR); + + uint256 collectorAfraxv3BalanceBefore = IScaledBalanceToken(AaveV3EthereumAssets.FRAX_A_TOKEN) + .scaledBalanceOf(COLLECTOR); + + uint256 collectorAdpiv2BalanceBefore = IScaledBalanceToken(AaveV2EthereumAssets.DPI_A_TOKEN) + .scaledBalanceOf(COLLECTOR); + + executePayload(vm, address(proposal)); + + uint256 collectorAusdev3BalanceAfter = IScaledBalanceToken(AaveV3EthereumAssets.USDe_A_TOKEN) + .scaledBalanceOf(COLLECTOR); + + uint256 collectorAusdtv2BalanceAfter = IScaledBalanceToken(AaveV2EthereumAssets.USDT_A_TOKEN) + .scaledBalanceOf(COLLECTOR); + + uint256 collectorAfraxv2BalanceAfter = IScaledBalanceToken(AaveV2EthereumAssets.FRAX_A_TOKEN) + .scaledBalanceOf(COLLECTOR); + + uint256 collectorAfraxv3BalanceAfter = IScaledBalanceToken(AaveV3EthereumAssets.FRAX_A_TOKEN) + .scaledBalanceOf(COLLECTOR); + + uint256 collectorAdpiv2BalanceAfter = IScaledBalanceToken(AaveV2EthereumAssets.DPI_A_TOKEN) + .scaledBalanceOf(COLLECTOR); + + /// USDe + uint256 swapperUsdeBalance = IERC20(AaveV3EthereumAssets.USDe_UNDERLYING).balanceOf( + 0x6c4b03Baa6465ec8878eDcA9b7F8f284656877a4 + ); + assertApproxEqAbs(collectorAusdev3BalanceAfter, 1e18, 700e18); + assertApproxEqAbs(swapperUsdeBalance, collectorAusdev3BalanceBefore, 1e18); + + /// USDT + uint256 swapperUsdtBalance = IERC20(AaveV3EthereumAssets.USDT_UNDERLYING).balanceOf( + 0x534AB095A768D053f3E3f592f87ee932D6b3AbBa + ); + + assertApproxEqAbs(collectorAusdtv2BalanceAfter, 1e18, 1e18); + assertApproxEqAbs(swapperUsdtBalance, collectorAusdtv2BalanceBefore, 1e18); + + /// FRAX + uint256 swapperFraxBalance = IERC20(AaveV3EthereumAssets.FRAX_UNDERLYING).balanceOf( + 0x31B7607AdAeBb069F7d0367080297095ADCbAE0A + ); + + assertApproxEqAbs(collectorAfraxv2BalanceAfter, 1e18, 2200e18); + assertApproxEqAbs(collectorAfraxv3BalanceAfter, 1e18, 600e18); + assertApproxEqAbs( + swapperFraxBalance, + collectorAfraxv2BalanceBefore + collectorAfraxv3BalanceBefore, + 2e18 + ); + + /// DPI + uint256 swapperDpiBalance = IERC20(AaveV2EthereumAssets.DPI_UNDERLYING).balanceOf( + 0xC0d8a993Cb1f4246491783a9C75289C52B7c4f4f + ); + + assertApproxEqAbs(collectorAdpiv2BalanceAfter, 1e18, 50e18); + assertApproxEqAbs(swapperDpiBalance, collectorAdpiv2BalanceBefore, 50e18); + } + + function test_swapPrices() public {} + + /// Basic test for swaps that checks the prices returned make sense. + /// For example, if both oracles are the same base (USD or ETH), then + /// getting prices from tradingview.com and using them as `expectedOut` + /// should work with this test and the other parameters. + /// + /// Example: On August 3, 2024, I want to swap 3013 USDC for 1 WETH. If + /// both oracles have the same base USD, then this is going to work. However, + /// if for example USDC has base ETH, it's going to fail because: + /// USDC/ETH = 1 / 3013, rather than USDC/USD = 1 / 1. If the opposite oracle + /// is ETH/USD then it's going to be 3013 / 1. Sending expected out of 1 ETH + /// will fail this test because the actual oracles are going to return 1/3013 ETH. + /// + /// This test will also ensure the oracles have the necessary functions or it will + /// revert. For example, if the oracle does not have the `decimals()` function as + /// some oracles do, then it will fail ahead of time. + /// + /// @param priceChecker The price checker used by Milkman + /// @param expectedOut The amount we've manually checked we should be getting + /// @param amountIn The amount of from token to be swapped + /// @param maxDelta The maximum amount of difference in % between expectedOut and calculatedOut + /// @param from The token to swap from + /// @param to The token to swap to + /// @param fromOracle The oracle of the token to swap from + /// @param toOracle The oracle of the token to swap to + function _baseSwapTest( + address priceChecker, + uint256 expectedOut, + uint256 amountIn, + uint256 maxDelta, + address from, + address to, + address fromOracle, + address toOracle + ) internal { + address calc = IPriceChecker(priceChecker).EXPECTED_OUT_CALCULATOR(); + uint256 outCalc = ICalculator(calc).getExpectedOut( + amountIn, + from, + to, + _encodeOracles(fromOracle, toOracle) + ); + + assertApproxEqRel(outCalc, expectedOut, maxDelta); + } + + function _encodeOracles( + address fromOracle, + address toOracle + ) internal pure returns (bytes memory) { + address[] memory paths = new address[](2); + paths[0] = fromOracle; + paths[1] = toOracle; + + bool[] memory reverses = new bool[](2); + reverses[1] = true; + + return abi.encode(paths, reverses); + } +} + +interface IPriceChecker { + function EXPECTED_OUT_CALCULATOR() external returns (address); +} + +interface ICalculator { + function getExpectedOut( + uint256 _amountIn, + address _fromToken, + address _toToken, + bytes calldata _data + ) external view returns (uint256); +} diff --git a/src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate.md b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate.md new file mode 100644 index 000000000..c05435a71 --- /dev/null +++ b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate.md @@ -0,0 +1,53 @@ +--- +title: "July Funding Update" +author: "karpatkey_TokenLogic" +discussions: "https://governance.aave.com/t/arfc-july-funding-update/18447" +snapshot: "Direct-to-AIP" +--- + +## Simple Summary + +This publication proposes swapping assets held in the Treasury for GHO and funding Phase III of the Merit and Ahab programs. + +## Motivation + +With Phase III of the Merit and Ahab program about to start, August 9th, this publication proposes creating two new Allowances to fund the @ACI led growth programs. + +The budget for these programs is the same as the Phase II, 645 ETH, and 3M GHO. The ETH is expected to be claimed and deposited into the Lido's instance of Aave v3 and the GHO claimed periodically ahead of each subsequent Merit rewards round. + +In addition, this proposal also swaps approximately 640k of Stablecoin assets held in the Treasury to GHO. In combination with the May Funding Part A and Part B, these swaps are enough to offset the GHO spend of the Merit program. + +## Specification + +### Merit + Ahab Programs + +Create allowances to the Merit and Ahab, 3M GHO and 645 ETH from Aave v3 Ethereum: + +SAFE: `0xdeadD8aB03075b7FBA81864202a2f59EE25B312b` + +### Runway Updates + +Swap the following asset for GHO via the Aave Swapper. + +| Withdraw & Swap to GHO | +| :--------------------: | +| aEthUSDe (All-1) | +| aUSDT (0.5M) | +| aFRAX (All-1) | +| aEthFRAX (All-1) | +| aDPI (All-1) | + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.t.sol) +- Snapshot: Direct-to-AIP +- [Discussion](https://governance.aave.com/t/arfc-july-funding-update/18447) + +# Disclosure + +TokenLogic and karpatkey receive no payment for this proposal. TokenLogic and karpatkey are both delegates within the Aave community. + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate_20240729.s.sol b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate_20240729.s.sol new file mode 100644 index 000000000..bf48bb023 --- /dev/null +++ b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate_20240729.s.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Ethereum_JulyFundingUpdate_20240729} from './AaveV3Ethereum_JulyFundingUpdate_20240729.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate_20240729.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/JulyFundingUpdate_20240729.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_JulyFundingUpdate_20240729).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate_20240729.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_JulyFundingUpdate_20240729).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate.md' + ) + ); + } +} diff --git a/src/20240729_AaveV3Ethereum_JulyFundingUpdate/config.ts b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/config.ts new file mode 100644 index 000000000..fb1fc9f77 --- /dev/null +++ b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/config.ts @@ -0,0 +1,14 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'July Funding Update', + shortName: 'JulyFundingUpdate', + date: '20240729', + author: 'karpatkey_TokenLogic', + discussion: 'https://governance.aave.com/t/arfc-july-funding-update/18447', + snapshot: 'Direct-to-AIP', + votingNetwork: 'POLYGON', + }, + poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20421735}}}, +}; From 151f871780e238365f41bcbbf9db287bcedf9c60 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 21 Aug 2024 09:29:04 +0000 Subject: [PATCH 55/68] fix(cache): automated cache update [skip ci] --- .../JulyFundingUpdate.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate.md b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate.md index c05435a71..34fa5dc66 100644 --- a/src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate.md +++ b/src/20240729_AaveV3Ethereum_JulyFundingUpdate/JulyFundingUpdate.md @@ -39,8 +39,8 @@ Swap the following asset for GHO via the Aave Swapper. ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fce3898d3aefb9c7e965177381c393f03877dd13/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fce3898d3aefb9c7e965177381c393f03877dd13/src/20240729_AaveV3Ethereum_JulyFundingUpdate/AaveV3Ethereum_JulyFundingUpdate_20240729.t.sol) - Snapshot: Direct-to-AIP - [Discussion](https://governance.aave.com/t/arfc-july-funding-update/18447) From db37727bbc89deedeb3792227ecbecca9172eb6e Mon Sep 17 00:00:00 2001 From: Marc Zeller <21088542+marczeller@users.noreply.github.com> Date: Mon, 2 Sep 2024 10:38:56 +0200 Subject: [PATCH 56/68] Gho Br Update Aug 2024 - Review (#436) * init * Update src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024.md Co-authored-by: pavelvm5 <56404416+pavelvm5@users.noreply.github.com> --------- Co-authored-by: marczeller Co-authored-by: pavelvm5 <56404416+pavelvm5@users.noreply.github.com> --- ...53d5b0cd101699a6d8582c882fbf70a3ab3aa0.svg | 1 + ...rrowRateUpdateAugust2024_20240831_after.md | 30 ++++++++++ ...GhoBorrowRateUpdateAugust2024_20240831.sol | 34 +++++++++++ ...oBorrowRateUpdateAugust2024_20240831.t.sol | 32 ++++++++++ .../GhoBorrowRateUpdateAugust2024.md | 37 ++++++++++++ ...oBorrowRateUpdateAugust2024_20240831.s.sol | 60 +++++++++++++++++++ .../config.ts | 32 ++++++++++ 7 files changed, 226 insertions(+) create mode 100644 .assets/a953d5b0cd101699a6d8582c882fbf70a3ab3aa0.svg create mode 100644 diffs/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831_before_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831_after.md create mode 100644 src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.sol create mode 100644 src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.t.sol create mode 100644 src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024.md create mode 100644 src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024_20240831.s.sol create mode 100644 src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/config.ts diff --git a/.assets/a953d5b0cd101699a6d8582c882fbf70a3ab3aa0.svg b/.assets/a953d5b0cd101699a6d8582c882fbf70a3ab3aa0.svg new file mode 100644 index 000000000..4b6878e49 --- /dev/null +++ b/.assets/a953d5b0cd101699a6d8582c882fbf70a3ab3aa0.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%2%4%Optimal utilization 99%Optimal utilization 99% \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831_before_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831_after.md b/diffs/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831_before_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831_after.md new file mode 100644 index 000000000..b9988bcba --- /dev/null +++ b/diffs/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831_before_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831_after.md @@ -0,0 +1,30 @@ +## Reserve changes + +### Reserves altered + +#### GHO ([0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f](https://etherscan.io/address/0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 6 % | 5 % | +| baseVariableBorrowRate | 6 % | 5 % | +| interestRate | ![before](/.assets/a1a7ab1f1b9fcdf6ffa41ac7a8b4daf2daf98328.svg) | ![after](/.assets/a953d5b0cd101699a6d8582c882fbf70a3ab3aa0.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f": { + "baseVariableBorrowRate": { + "from": "60000000000000000000000000", + "to": "50000000000000000000000000" + }, + "maxVariableBorrowRate": { + "from": "60000000000000000000000000", + "to": "50000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.sol b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.sol new file mode 100644 index 000000000..8b4f2fa37 --- /dev/null +++ b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Gho Borrow Rate Update August 2024 + * @author ACI + * - Discussion: https://governance.aave.com/t/arfc-gho-stewards-gho-parameter-adjustments/17289/29 + */ +contract AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831 is AaveV3PayloadEthereum { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3EthereumAssets.GHO_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: 5_00, + variableRateSlope1: EngineFlags.KEEP_CURRENT, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.t.sol b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.t.sol new file mode 100644 index 000000000..e52e5e9f3 --- /dev/null +++ b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831} from './AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.sol'; + +/** + * @dev Test for AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.t.sol -vv + */ +contract AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831_Test is ProtocolV3TestBase { + AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20649570); + proposal = new AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831', + AaveV3Ethereum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024.md b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024.md new file mode 100644 index 000000000..fd1865075 --- /dev/null +++ b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024.md @@ -0,0 +1,37 @@ +--- +title: "Gho Borrow Rate Update August 2024" +author: "ACI" +discussions: "https://governance.aave.com/t/arfc-gho-stewards-gho-parameter-adjustments/17289/29" +--- + +## Simple Summary + +This AIP aims to decrease the GHO borrow rate from its current level to 5% to enhance its competitiveness in the current market conditions. + +## Motivation + +The DeFi landscape is constantly evolving, and stablecoin protocols must adapt to remain competitive. Recent market analysis indicates: + +1. A general decrease in borrowing demand for stablecoins across DeFi platforms. +2. Competing stablecoins offering more attractive rates, potentially drawing users away from GHO. +3. An opportunity to increase GHO's market share by offering more competitive rates. + +By reducing the borrow rate, we aim to: + +- Increase the attractiveness of GHO for borrowers +- Stimulate the growth of GHO's total supply +- Enhance GHO's position in the stablecoin market + +## Specification + +`BaseVariableBorrowRate` of GHO is decreased to 5% + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.t.sol) +- [Discussion](https://governance.aave.com/t/arfc-gho-stewards-gho-parameter-adjustments/17289/29) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024_20240831.s.sol b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024_20240831.s.sol new file mode 100644 index 000000000..3aeba297d --- /dev/null +++ b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024_20240831.s.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831} from './AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024_20240831.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/GhoBorrowRateUpdateAugust2024_20240831.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024_20240831.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024.md' + ) + ); + } +} diff --git a/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/config.ts b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/config.ts new file mode 100644 index 000000000..773f34f6c --- /dev/null +++ b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/config.ts @@ -0,0 +1,32 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'Gho Borrow Rate Update August 2024', + shortName: 'GhoBorrowRateUpdateAugust2024', + date: '20240831', + author: 'ACI', + discussion: + 'https://governance.aave.com/t/arfc-gho-stewards-gho-parameter-adjustments/17289/29', + snapshot: 'Direct-to-AIP', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Ethereum: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'GHO', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '5', + variableRateSlope1: '', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 20649570}, + }, + }, +}; From 24e07482dc07569782ac1c7518a108621e5c0ae6 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Mon, 2 Sep 2024 08:39:29 +0000 Subject: [PATCH 57/68] fix(cache): automated cache update [skip ci] --- .../GhoBorrowRateUpdateAugust2024.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024.md b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024.md index fd1865075..7eda7e9b6 100644 --- a/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024.md +++ b/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/GhoBorrowRateUpdateAugust2024.md @@ -28,8 +28,8 @@ By reducing the borrow rate, we aim to: ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/db37727bbc89deedeb3792227ecbecca9172eb6e/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/db37727bbc89deedeb3792227ecbecca9172eb6e/src/20240831_AaveV3Ethereum_GhoBorrowRateUpdateAugust2024/AaveV3Ethereum_GhoBorrowRateUpdateAugust2024_20240831.t.sol) - [Discussion](https://governance.aave.com/t/arfc-gho-stewards-gho-parameter-adjustments/17289/29) ## Copyright From 3190d5b947d8e5185260a1d2ed93049a81fa3d26 Mon Sep 17 00:00:00 2001 From: kartojal Date: Wed, 4 Sep 2024 10:24:13 +0200 Subject: [PATCH 58/68] feat: Initial payload for EtherFi Ethereum activation (#437) --- ...85d05d586d36bde6b1dc240afd52f612ac7623.svg | 1 + ...8d1985084d7dd0676f65709ceffa1636d929ba.svg | 1 + ...52abbc99333b5cc876c1a79c4c51a97a9c654a.svg | 1 + ...194ecd85ebd607c0dbaba5f97db30789e4eb65.svg | 1 + ...therFiEthereumActivation_20240902_after.md | 446 ++++++++++++++++++ generator/types.ts | 1 + lib/aave-helpers | 2 +- package.json | 2 +- ...rFi_EtherFiEthereumActivation_20240902.sol | 186 ++++++++ ...i_EtherFiEthereumActivation_20240902.t.sol | 168 +++++++ .../EtherFiEthereumActivation.md | 80 ++++ .../EtherFiEthereumActivation_20240902.s.sol | 60 +++ .../config.ts | 129 +++++ yarn.lock | 12 +- 14 files changed, 1081 insertions(+), 9 deletions(-) create mode 100644 .assets/1985d05d586d36bde6b1dc240afd52f612ac7623.svg create mode 100644 .assets/6f8d1985084d7dd0676f65709ceffa1636d929ba.svg create mode 100644 .assets/ab52abbc99333b5cc876c1a79c4c51a97a9c654a.svg create mode 100644 .assets/e8194ecd85ebd607c0dbaba5f97db30789e4eb65.svg create mode 100644 diffs/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902_before_AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902_after.md create mode 100644 src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.sol create mode 100644 src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.t.sol create mode 100644 src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation.md create mode 100644 src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation_20240902.s.sol create mode 100644 src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/config.ts diff --git a/.assets/1985d05d586d36bde6b1dc240afd52f612ac7623.svg b/.assets/1985d05d586d36bde6b1dc240afd52f612ac7623.svg new file mode 100644 index 000000000..d009aef0d --- /dev/null +++ b/.assets/1985d05d586d36bde6b1dc240afd52f612ac7623.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 35%Optimal utilization 35% \ No newline at end of file diff --git a/.assets/6f8d1985084d7dd0676f65709ceffa1636d929ba.svg b/.assets/6f8d1985084d7dd0676f65709ceffa1636d929ba.svg new file mode 100644 index 000000000..a09281518 --- /dev/null +++ b/.assets/6f8d1985084d7dd0676f65709ceffa1636d929ba.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/ab52abbc99333b5cc876c1a79c4c51a97a9c654a.svg b/.assets/ab52abbc99333b5cc876c1a79c4c51a97a9c654a.svg new file mode 100644 index 000000000..3662f2b25 --- /dev/null +++ b/.assets/ab52abbc99333b5cc876c1a79c4c51a97a9c654a.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%Optimal utilization 35%Optimal utilization 35% \ No newline at end of file diff --git a/.assets/e8194ecd85ebd607c0dbaba5f97db30789e4eb65.svg b/.assets/e8194ecd85ebd607c0dbaba5f97db30789e4eb65.svg new file mode 100644 index 000000000..dff963d43 --- /dev/null +++ b/.assets/e8194ecd85ebd607c0dbaba5f97db30789e4eb65.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/diffs/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902_before_AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902_after.md b/diffs/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902_before_AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902_after.md new file mode 100644 index 000000000..fe725940f --- /dev/null +++ b/diffs/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902_before_AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902_after.md @@ -0,0 +1,446 @@ +## Reserve changes + +### Reserve added + +#### PYUSD ([0x6c3ea9036406852006290770BEdFcAbA0e23A0e8](https://etherscan.io/address/0x6c3ea9036406852006290770BEdFcAbA0e23A0e8)) + +| description | value | +| --- | --- | +| decimals | 6 | +| isActive | true | +| isFrozen | false | +| supplyCap | 60,000,000 PYUSD | +| borrowCap | 54,000,000 PYUSD | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 0 | +| oracle | [0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022](https://etherscan.io/address/0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022) | +| oracleDecimals | 8 | +| oracleDescription | Capped pyUSD/USD | +| oracleLatestAnswer | 0.99978 | +| usageAsCollateralEnabled | false | +| ltv | 0 % [0] | +| liquidationThreshold | 0 % [0] | +| liquidationBonus | 0 % | +| liquidationProtocolFee | 0 % [0] | +| reserveFactor | 20 % [2000] | +| aToken | [0xdF7f48892244C6106EA784609f7de10AB36F9c7e](https://etherscan.io/address/0xdF7f48892244C6106EA784609f7de10AB36F9c7e) | +| aTokenImpl | [0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b](https://etherscan.io/address/0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b) | +| variableDebtToken | [0xD2cf07dEE40d3D530D15b88d689f5cd97A31FC3D](https://etherscan.io/address/0xD2cf07dEE40d3D530D15b88d689f5cd97A31FC3D) | +| variableDebtTokenImpl | [0xBb077DaFFeb23B2126E7358b0b122ba6838FB881](https://etherscan.io/address/0xBb077DaFFeb23B2126E7358b0b122ba6838FB881) | +| stableDebtToken | [0xba47EDC94d060040ed17fB5c5503DD227CE207AE](https://etherscan.io/address/0xba47EDC94d060040ed17fB5c5503DD227CE207AE) | +| stableDebtTokenImpl | [0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA](https://etherscan.io/address/0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA) | +| borrowingEnabled | true | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2](https://etherscan.io/address/0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2) | +| aTokenName | Aave Ethereum EtherFi PYUSD | +| aTokenSymbol | aEthEtherFiPYUSD | +| aTokenUnderlyingBalance | 100 PYUSD [100000000] | +| isPaused | false | +| stableDebtTokenName | Aave Ethereum EtherFi Stable Debt PYUSD | +| stableDebtTokenSymbol | stableDebtEthEtherFiPYUSD | +| variableDebtTokenName | Aave Ethereum EtherFi Variable Debt PYUSD | +| variableDebtTokenSymbol | variableDebtEthEtherFiPYUSD | +| virtualAccountingActive | true | +| virtualBalance | 100 PYUSD [100000000] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 85.5 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 5.5 % | +| variableRateSlope2 | 80 % | +| interestRate | ![ir](/.assets/e8194ecd85ebd607c0dbaba5f97db30789e4eb65.svg) | + + +#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 15,000,000 FRAX | +| borrowCap | 12,000,000 FRAX | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 0 | +| oracle | [0x45D270263BBee500CF8adcf2AbC0aC227097b036](https://etherscan.io/address/0x45D270263BBee500CF8adcf2AbC0aC227097b036) | +| oracleDecimals | 8 | +| oracleDescription | Capped FRAX/USD | +| oracleLatestAnswer | 0.9965518 | +| usageAsCollateralEnabled | false | +| ltv | 0 % [0] | +| liquidationThreshold | 0 % [0] | +| liquidationBonus | 0 % | +| liquidationProtocolFee | 0 % [0] | +| reserveFactor | 20 % [2000] | +| aToken | [0x6914ECCf50837dC61b43ee478a9BD9B439648956](https://etherscan.io/address/0x6914ECCf50837dC61b43ee478a9BD9B439648956) | +| aTokenImpl | [0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b](https://etherscan.io/address/0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b) | +| variableDebtToken | [0xfd3aDA5AAbdc6531C7C2AC46c00eBf870f5a0E6B](https://etherscan.io/address/0xfd3aDA5AAbdc6531C7C2AC46c00eBf870f5a0E6B) | +| variableDebtTokenImpl | [0xBb077DaFFeb23B2126E7358b0b122ba6838FB881](https://etherscan.io/address/0xBb077DaFFeb23B2126E7358b0b122ba6838FB881) | +| stableDebtToken | [0x6789a5d8103f63b3702F779217F0a7D262F18331](https://etherscan.io/address/0x6789a5d8103f63b3702F779217F0a7D262F18331) | +| stableDebtTokenImpl | [0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA](https://etherscan.io/address/0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA) | +| borrowingEnabled | true | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2](https://etherscan.io/address/0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2) | +| aTokenName | Aave Ethereum EtherFi FRAX | +| aTokenSymbol | aEthEtherFiFRAX | +| aTokenUnderlyingBalance | 1 FRAX [1000000000000000000] | +| isPaused | false | +| stableDebtTokenName | Aave Ethereum EtherFi Stable Debt FRAX | +| stableDebtTokenSymbol | stableDebtEthEtherFiFRAX | +| variableDebtTokenName | Aave Ethereum EtherFi Variable Debt FRAX | +| variableDebtTokenSymbol | variableDebtEthEtherFiFRAX | +| virtualAccountingActive | true | +| virtualBalance | 1 FRAX [1000000000000000000] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 85.5 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 5.5 % | +| variableRateSlope2 | 80 % | +| interestRate | ![ir](/.assets/e8194ecd85ebd607c0dbaba5f97db30789e4eb65.svg) | + + +#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)) + +| description | value | +| --- | --- | +| decimals | 6 | +| isActive | true | +| isFrozen | false | +| supplyCap | 140,000,000 USDC | +| borrowCap | 135,000,000 USDC | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 0 | +| oracle | [0x736bF902680e68989886e9807CD7Db4B3E015d3C](https://etherscan.io/address/0x736bF902680e68989886e9807CD7Db4B3E015d3C) | +| oracleDecimals | 8 | +| oracleDescription | Capped USDC/USD | +| oracleLatestAnswer | 0.99995 | +| usageAsCollateralEnabled | false | +| ltv | 0 % [0] | +| liquidationThreshold | 0 % [0] | +| liquidationBonus | 0 % | +| liquidationProtocolFee | 0 % [0] | +| reserveFactor | 10 % [1000] | +| aToken | [0x7380c583cDe4409eFF5DD3320D93a45D96B80E2e](https://etherscan.io/address/0x7380c583cDe4409eFF5DD3320D93a45D96B80E2e) | +| aTokenImpl | [0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b](https://etherscan.io/address/0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b) | +| variableDebtToken | [0x9355032d747f1e08F8720CD01950E652eE15cdB7](https://etherscan.io/address/0x9355032d747f1e08F8720CD01950E652eE15cdB7) | +| variableDebtTokenImpl | [0xBb077DaFFeb23B2126E7358b0b122ba6838FB881](https://etherscan.io/address/0xBb077DaFFeb23B2126E7358b0b122ba6838FB881) | +| stableDebtToken | [0x7157fD098fd11fD9BB8C0a39d8a3Eb57e3f8F079](https://etherscan.io/address/0x7157fD098fd11fD9BB8C0a39d8a3Eb57e3f8F079) | +| stableDebtTokenImpl | [0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA](https://etherscan.io/address/0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA) | +| borrowingEnabled | true | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2](https://etherscan.io/address/0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2) | +| aTokenName | Aave Ethereum EtherFi USDC | +| aTokenSymbol | aEthEtherFiUSDC | +| aTokenUnderlyingBalance | 100 USDC [100000000] | +| isPaused | false | +| stableDebtTokenName | Aave Ethereum EtherFi Stable Debt USDC | +| stableDebtTokenSymbol | stableDebtEthEtherFiUSDC | +| variableDebtTokenName | Aave Ethereum EtherFi Variable Debt USDC | +| variableDebtTokenSymbol | variableDebtEthEtherFiUSDC | +| virtualAccountingActive | true | +| virtualBalance | 100 USDC [100000000] | +| optimalUsageRatio | 90 % | +| maxVariableBorrowRate | 66.5 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 6.5 % | +| variableRateSlope2 | 60 % | +| interestRate | ![ir](/.assets/6f8d1985084d7dd0676f65709ceffa1636d929ba.svg) | + + +#### weETH ([0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee](https://etherscan.io/address/0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee)) + +| description | value | +| --- | --- | +| decimals | 18 | +| isActive | true | +| isFrozen | false | +| supplyCap | 50,000 weETH | +| borrowCap | 0 weETH | +| debtCeiling | 0 $ [0] | +| isSiloed | false | +| isFlashloanable | true | +| eModeCategory | 0 | +| oracle | [0xf112aF6F0A332B815fbEf3Ff932c057E570b62d3](https://etherscan.io/address/0xf112aF6F0A332B815fbEf3Ff932c057E570b62d3) | +| oracleDecimals | 8 | +| oracleDescription | Capped weETH / eETH(ETH) / USD | +| oracleLatestAnswer | 2642.48235338 | +| usageAsCollateralEnabled | true | +| ltv | 78 % [7800] | +| liquidationThreshold | 81 % [8100] | +| liquidationBonus | 6 % | +| liquidationProtocolFee | 10 % [1000] | +| reserveFactor | 45 % [4500] | +| aToken | [0xbe1F842e7e0afd2c2322aae5d34bA899544b29db](https://etherscan.io/address/0xbe1F842e7e0afd2c2322aae5d34bA899544b29db) | +| aTokenImpl | [0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b](https://etherscan.io/address/0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b) | +| variableDebtToken | [0x16264412CB72F0d16A446f7D928Dd0D822810048](https://etherscan.io/address/0x16264412CB72F0d16A446f7D928Dd0D822810048) | +| variableDebtTokenImpl | [0xBb077DaFFeb23B2126E7358b0b122ba6838FB881](https://etherscan.io/address/0xBb077DaFFeb23B2126E7358b0b122ba6838FB881) | +| stableDebtToken | [0x57A994227592652D58BBF3D52e34261dF8b354D0](https://etherscan.io/address/0x57A994227592652D58BBF3D52e34261dF8b354D0) | +| stableDebtTokenImpl | [0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA](https://etherscan.io/address/0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA) | +| borrowingEnabled | false | +| stableBorrowRateEnabled | false | +| isBorrowableInIsolation | false | +| interestRateStrategy | [0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2](https://etherscan.io/address/0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2) | +| aTokenName | Aave Ethereum EtherFi weETH | +| aTokenSymbol | aEthEtherFiweETH | +| aTokenUnderlyingBalance | 0.1 weETH [100000000000000000] | +| isPaused | false | +| stableDebtTokenName | Aave Ethereum EtherFi Stable Debt weETH | +| stableDebtTokenSymbol | stableDebtEthEtherFiweETH | +| variableDebtTokenName | Aave Ethereum EtherFi Variable Debt weETH | +| variableDebtTokenSymbol | variableDebtEthEtherFiweETH | +| virtualAccountingActive | true | +| virtualBalance | 0.1 weETH [100000000000000000] | +| optimalUsageRatio | 35 % | +| maxVariableBorrowRate | 307 % | +| baseVariableBorrowRate | 0 % | +| variableRateSlope1 | 7 % | +| variableRateSlope2 | 300 % | +| interestRate | ![ir](/.assets/1985d05d586d36bde6b1dc240afd52f612ac7623.svg) | + + +## Raw diff + +```json +{ + "reserves": { + "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8": { + "from": null, + "to": { + "aToken": "0xdF7f48892244C6106EA784609f7de10AB36F9c7e", + "aTokenImpl": "0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b", + "aTokenName": "Aave Ethereum EtherFi PYUSD", + "aTokenSymbol": "aEthEtherFiPYUSD", + "aTokenUnderlyingBalance": 100000000, + "borrowCap": 54000000, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 6, + "eModeCategory": 0, + "interestRateStrategy": "0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 0, + "liquidationProtocolFee": 0, + "liquidationThreshold": 0, + "ltv": 0, + "oracle": "0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022", + "oracleDecimals": 8, + "oracleDescription": "Capped pyUSD/USD", + "oracleLatestAnswer": 99978000, + "reserveFactor": 2000, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0xba47EDC94d060040ed17fB5c5503DD227CE207AE", + "stableDebtTokenImpl": "0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA", + "stableDebtTokenName": "Aave Ethereum EtherFi Stable Debt PYUSD", + "stableDebtTokenSymbol": "stableDebtEthEtherFiPYUSD", + "supplyCap": 60000000, + "symbol": "PYUSD", + "underlying": "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8", + "usageAsCollateralEnabled": false, + "variableDebtToken": "0xD2cf07dEE40d3D530D15b88d689f5cd97A31FC3D", + "variableDebtTokenImpl": "0xBb077DaFFeb23B2126E7358b0b122ba6838FB881", + "variableDebtTokenName": "Aave Ethereum EtherFi Variable Debt PYUSD", + "variableDebtTokenSymbol": "variableDebtEthEtherFiPYUSD", + "virtualAccountingActive": true, + "virtualBalance": 100000000 + } + }, + "0x853d955aCEf822Db058eb8505911ED77F175b99e": { + "from": null, + "to": { + "aToken": "0x6914ECCf50837dC61b43ee478a9BD9B439648956", + "aTokenImpl": "0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b", + "aTokenName": "Aave Ethereum EtherFi FRAX", + "aTokenSymbol": "aEthEtherFiFRAX", + "aTokenUnderlyingBalance": "1000000000000000000", + "borrowCap": 12000000, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 18, + "eModeCategory": 0, + "interestRateStrategy": "0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 0, + "liquidationProtocolFee": 0, + "liquidationThreshold": 0, + "ltv": 0, + "oracle": "0x45D270263BBee500CF8adcf2AbC0aC227097b036", + "oracleDecimals": 8, + "oracleDescription": "Capped FRAX/USD", + "oracleLatestAnswer": 99655180, + "reserveFactor": 2000, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0x6789a5d8103f63b3702F779217F0a7D262F18331", + "stableDebtTokenImpl": "0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA", + "stableDebtTokenName": "Aave Ethereum EtherFi Stable Debt FRAX", + "stableDebtTokenSymbol": "stableDebtEthEtherFiFRAX", + "supplyCap": 15000000, + "symbol": "FRAX", + "underlying": "0x853d955aCEf822Db058eb8505911ED77F175b99e", + "usageAsCollateralEnabled": false, + "variableDebtToken": "0xfd3aDA5AAbdc6531C7C2AC46c00eBf870f5a0E6B", + "variableDebtTokenImpl": "0xBb077DaFFeb23B2126E7358b0b122ba6838FB881", + "variableDebtTokenName": "Aave Ethereum EtherFi Variable Debt FRAX", + "variableDebtTokenSymbol": "variableDebtEthEtherFiFRAX", + "virtualAccountingActive": true, + "virtualBalance": "1000000000000000000" + } + }, + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": { + "from": null, + "to": { + "aToken": "0x7380c583cDe4409eFF5DD3320D93a45D96B80E2e", + "aTokenImpl": "0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b", + "aTokenName": "Aave Ethereum EtherFi USDC", + "aTokenSymbol": "aEthEtherFiUSDC", + "aTokenUnderlyingBalance": 100000000, + "borrowCap": 135000000, + "borrowingEnabled": true, + "debtCeiling": 0, + "decimals": 6, + "eModeCategory": 0, + "interestRateStrategy": "0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 0, + "liquidationProtocolFee": 0, + "liquidationThreshold": 0, + "ltv": 0, + "oracle": "0x736bF902680e68989886e9807CD7Db4B3E015d3C", + "oracleDecimals": 8, + "oracleDescription": "Capped USDC/USD", + "oracleLatestAnswer": 99995000, + "reserveFactor": 1000, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0x7157fD098fd11fD9BB8C0a39d8a3Eb57e3f8F079", + "stableDebtTokenImpl": "0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA", + "stableDebtTokenName": "Aave Ethereum EtherFi Stable Debt USDC", + "stableDebtTokenSymbol": "stableDebtEthEtherFiUSDC", + "supplyCap": 140000000, + "symbol": "USDC", + "underlying": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "usageAsCollateralEnabled": false, + "variableDebtToken": "0x9355032d747f1e08F8720CD01950E652eE15cdB7", + "variableDebtTokenImpl": "0xBb077DaFFeb23B2126E7358b0b122ba6838FB881", + "variableDebtTokenName": "Aave Ethereum EtherFi Variable Debt USDC", + "variableDebtTokenSymbol": "variableDebtEthEtherFiUSDC", + "virtualAccountingActive": true, + "virtualBalance": 100000000 + } + }, + "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee": { + "from": null, + "to": { + "aToken": "0xbe1F842e7e0afd2c2322aae5d34bA899544b29db", + "aTokenImpl": "0xaFFA06528Bd92625de2e7A0cfa0119319265Ea4b", + "aTokenName": "Aave Ethereum EtherFi weETH", + "aTokenSymbol": "aEthEtherFiweETH", + "aTokenUnderlyingBalance": "100000000000000000", + "borrowCap": 0, + "borrowingEnabled": false, + "debtCeiling": 0, + "decimals": 18, + "eModeCategory": 0, + "interestRateStrategy": "0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2", + "isActive": true, + "isBorrowableInIsolation": false, + "isFlashloanable": true, + "isFrozen": false, + "isPaused": false, + "isSiloed": false, + "liquidationBonus": 10600, + "liquidationProtocolFee": 1000, + "liquidationThreshold": 8100, + "ltv": 7800, + "oracle": "0xf112aF6F0A332B815fbEf3Ff932c057E570b62d3", + "oracleDecimals": 8, + "oracleDescription": "Capped weETH / eETH(ETH) / USD", + "oracleLatestAnswer": 264248235338, + "reserveFactor": 4500, + "stableBorrowRateEnabled": false, + "stableDebtToken": "0x57A994227592652D58BBF3D52e34261dF8b354D0", + "stableDebtTokenImpl": "0xb53F0547722AE5fa5b433a7acc44571aD68CEdAA", + "stableDebtTokenName": "Aave Ethereum EtherFi Stable Debt weETH", + "stableDebtTokenSymbol": "stableDebtEthEtherFiweETH", + "supplyCap": 50000, + "symbol": "weETH", + "underlying": "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", + "usageAsCollateralEnabled": true, + "variableDebtToken": "0x16264412CB72F0d16A446f7D928Dd0D822810048", + "variableDebtTokenImpl": "0xBb077DaFFeb23B2126E7358b0b122ba6838FB881", + "variableDebtTokenName": "Aave Ethereum EtherFi Variable Debt weETH", + "variableDebtTokenSymbol": "variableDebtEthEtherFiweETH", + "virtualAccountingActive": true, + "virtualBalance": "100000000000000000" + } + } + }, + "strategies": { + "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8": { + "from": null, + "to": { + "address": "0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "855000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "55000000000000000000000000", + "variableRateSlope2": "800000000000000000000000000" + } + }, + "0x853d955aCEf822Db058eb8505911ED77F175b99e": { + "from": null, + "to": { + "address": "0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "855000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "55000000000000000000000000", + "variableRateSlope2": "800000000000000000000000000" + } + }, + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": { + "from": null, + "to": { + "address": "0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "665000000000000000000000000", + "optimalUsageRatio": "900000000000000000000000000", + "variableRateSlope1": "65000000000000000000000000", + "variableRateSlope2": "600000000000000000000000000" + } + }, + "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee": { + "from": null, + "to": { + "address": "0x5024e947ef81B9184Faf0CfF9b485446f01c8eD2", + "baseVariableBorrowRate": "0", + "maxVariableBorrowRate": "3070000000000000000000000000", + "optimalUsageRatio": "350000000000000000000000000", + "variableRateSlope1": "70000000000000000000000000", + "variableRateSlope2": "3000000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/generator/types.ts b/generator/types.ts index 0bd86cfad..ada78c537 100644 --- a/generator/types.ts +++ b/generator/types.ts @@ -24,6 +24,7 @@ export const V2_POOLS = [ export const V3_POOLS = [ 'AaveV3Ethereum', 'AaveV3EthereumLido', + 'AaveV3EthereumEtherFi', 'AaveV3Polygon', 'AaveV3Avalanche', 'AaveV3Optimism', diff --git a/lib/aave-helpers b/lib/aave-helpers index f10b4fb59..c15333e1f 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit f10b4fb59609ddebf63a67ea47f2c60d852a27d3 +Subproject commit c15333e1f96113a9457fbc57e766713aa7456e06 diff --git a/package.json b/package.json index cffb56f70..570037721 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "vitest": "^2.0.4" }, "dependencies": { - "@bgd-labs/aave-address-book": "^3.1.1", + "@bgd-labs/aave-address-book": "3.2.1", "@bgd-labs/aave-cli": "0.16.4", "@bgd-labs/js-utils": "^1.4.2", "@inquirer/prompts": "^3.3.0", diff --git a/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.sol b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.sol new file mode 100644 index 000000000..5ff59d987 --- /dev/null +++ b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.sol @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumEtherFi, AaveV3EthereumEtherFiEModes} from 'aave-address-book/AaveV3EthereumEtherFi.sol'; +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; +import {MiscEthereum} from 'aave-address-book/MiscEthereum.sol'; +import {AaveV3PayloadEthereumEtherFi} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereumEtherFi.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; +import {IPoolAddressesProviderRegistry} from 'aave-v3-core/contracts/interfaces/IPoolAddressesProviderRegistry.sol'; + +/** + * @title EtherFi Ethereum Activation + * @author Catapulta @catapulta_sh + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x4acd11c6100a6b85a553e21359f3720fa5cd4783a76c77857436ace134f88c05 + * - Discussion: https://governance.aave.com/t/arfc-deploy-an-etherfi-stablecoin-aave-v3-instance/18440 + */ +contract AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902 is AaveV3PayloadEthereumEtherFi { + using SafeERC20 for IERC20; + + address public constant weETH = 0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee; + uint256 public constant weETH_SEED_AMOUNT = 1e17; + address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; + uint256 public constant USDC_SEED_AMOUNT = 100e6; + address public constant PYUSD = 0x6c3ea9036406852006290770BEdFcAbA0e23A0e8; + uint256 public constant PYUSD_SEED_AMOUNT = 100e6; + address public constant FRAX = 0x853d955aCEf822Db058eb8505911ED77F175b99e; + uint256 public constant FRAX_SEED_AMOUNT = 1e18; + + function _preExecute() internal override { + // Set EtherFi Ethereum as ID 45, previous instance is ZkSync with ID 44 + IPoolAddressesProviderRegistry(AaveV3Ethereum.POOL_ADDRESSES_PROVIDER_REGISTRY) + .registerAddressesProvider(address(AaveV3EthereumEtherFi.POOL_ADDRESSES_PROVIDER), 45); + } + + function _postExecute() internal override { + // Roles + AaveV3EthereumEtherFi.ACL_MANAGER.addPoolAdmin(0x2CFe3ec4d5a6811f4B8067F0DE7e47DfA938Aa30); + AaveV3EthereumEtherFi.ACL_MANAGER.addRiskAdmin(AaveV3EthereumEtherFi.CAPS_PLUS_RISK_STEWARD); + + // Seed amounts + IERC20(weETH).forceApprove(address(AaveV3EthereumEtherFi.POOL), weETH_SEED_AMOUNT); + AaveV3EthereumEtherFi.POOL.supply( + weETH, + weETH_SEED_AMOUNT, + address(AaveV3EthereumEtherFi.COLLECTOR), + 0 + ); + IERC20(USDC).forceApprove(address(AaveV3EthereumEtherFi.POOL), USDC_SEED_AMOUNT); + AaveV3EthereumEtherFi.POOL.supply( + USDC, + USDC_SEED_AMOUNT, + address(AaveV3EthereumEtherFi.COLLECTOR), + 0 + ); + IERC20(PYUSD).forceApprove(address(AaveV3EthereumEtherFi.POOL), PYUSD_SEED_AMOUNT); + AaveV3EthereumEtherFi.POOL.supply( + PYUSD, + PYUSD_SEED_AMOUNT, + address(AaveV3EthereumEtherFi.COLLECTOR), + 0 + ); + IERC20(FRAX).forceApprove(address(AaveV3EthereumEtherFi.POOL), FRAX_SEED_AMOUNT); + AaveV3EthereumEtherFi.POOL.supply( + FRAX, + FRAX_SEED_AMOUNT, + address(AaveV3EthereumEtherFi.COLLECTOR), + 0 + ); + + // Catapulta service fee + AaveV3Ethereum.COLLECTOR.transfer( + MiscEthereum.GHO_TOKEN, + 0x6D53be86136c3d4AA6448Ce4bF6178AD66e63661, + 15000e18 + ); + } + + function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { + IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](4); + listings[0] = IAaveV3ConfigEngine.Listing({ + asset: weETH, + assetSymbol: 'weETH', + priceFeed: 0xf112aF6F0A332B815fbEf3Ff932c057E570b62d3, + eModeCategory: AaveV3EthereumEtherFiEModes.NONE, + enabledToBorrow: EngineFlags.DISABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.DISABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 78_00, + liqThreshold: 81_00, + liqBonus: 6_00, + reserveFactor: 45_00, + supplyCap: 50_000, + borrowCap: 0, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 35_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 7_00, + variableRateSlope2: 300_00 + }) + }); + listings[1] = IAaveV3ConfigEngine.Listing({ + asset: USDC, + assetSymbol: 'USDC', + priceFeed: 0x736bF902680e68989886e9807CD7Db4B3E015d3C, + eModeCategory: AaveV3EthereumEtherFiEModes.NONE, + enabledToBorrow: EngineFlags.ENABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.DISABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 0, + liqThreshold: 0, + liqBonus: 0, + reserveFactor: 10_00, + supplyCap: 140_000_000, + borrowCap: 135_000_000, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 6_50, + variableRateSlope2: 60_00 + }) + }); + listings[2] = IAaveV3ConfigEngine.Listing({ + asset: PYUSD, + assetSymbol: 'PYUSD', + priceFeed: 0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022, + eModeCategory: AaveV3EthereumEtherFiEModes.NONE, + enabledToBorrow: EngineFlags.ENABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.DISABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 0, + liqThreshold: 0, + liqBonus: 0, + reserveFactor: 20_00, + supplyCap: 60_000_000, + borrowCap: 54_000_000, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 5_50, + variableRateSlope2: 80_00 + }) + }); + listings[3] = IAaveV3ConfigEngine.Listing({ + asset: FRAX, + assetSymbol: 'FRAX', + priceFeed: 0x45D270263BBee500CF8adcf2AbC0aC227097b036, + eModeCategory: AaveV3EthereumEtherFiEModes.NONE, + enabledToBorrow: EngineFlags.ENABLED, + stableRateModeEnabled: EngineFlags.DISABLED, + borrowableInIsolation: EngineFlags.DISABLED, + withSiloedBorrowing: EngineFlags.DISABLED, + flashloanable: EngineFlags.ENABLED, + ltv: 0, + liqThreshold: 0, + liqBonus: 0, + reserveFactor: 20_00, + supplyCap: 15_000_000, + borrowCap: 12_000_000, + debtCeiling: 0, + liqProtocolFee: 10_00, + rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: 90_00, + baseVariableBorrowRate: 0, + variableRateSlope1: 5_50, + variableRateSlope2: 80_00 + }) + }); + + return listings; + } +} diff --git a/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.t.sol b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.t.sol new file mode 100644 index 000000000..37e621359 --- /dev/null +++ b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.t.sol @@ -0,0 +1,168 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; +import {AaveV3EthereumEtherFi} from 'aave-address-book/AaveV3EthereumEtherFi.sol'; +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol'; +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902} from './AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.sol'; +import {IPoolAddressesProviderRegistry} from 'aave-v3-core/contracts/interfaces/IPoolAddressesProviderRegistry.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @dev Test for AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.t.sol -vv + */ +contract AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902_Test is ProtocolV3TestBase { + AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20662348); + proposal = new AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902(); + + deal(proposal.weETH(), GovernanceV3Ethereum.EXECUTOR_LVL_1, proposal.weETH_SEED_AMOUNT()); + deal(proposal.USDC(), GovernanceV3Ethereum.EXECUTOR_LVL_1, proposal.USDC_SEED_AMOUNT()); + deal(proposal.PYUSD(), GovernanceV3Ethereum.EXECUTOR_LVL_1, proposal.PYUSD_SEED_AMOUNT()); + deal(proposal.FRAX(), GovernanceV3Ethereum.EXECUTOR_LVL_1, proposal.FRAX_SEED_AMOUNT()); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902', + AaveV3EthereumEtherFi.POOL, + address(proposal) + ); + } + + function test_collectorHasweETHFunds() public { + GovV3Helpers.executePayload(vm, address(proposal)); + (address aTokenAddress, , ) = AaveV3EthereumEtherFi + .AAVE_PROTOCOL_DATA_PROVIDER + .getReserveTokensAddresses(proposal.weETH()); + assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3EthereumEtherFi.COLLECTOR)), 10 ** 17); + } + + function test_collectorHasUSDCFunds() public { + GovV3Helpers.executePayload(vm, address(proposal)); + (address aTokenAddress, , ) = AaveV3EthereumEtherFi + .AAVE_PROTOCOL_DATA_PROVIDER + .getReserveTokensAddresses(proposal.USDC()); + assertGe( + IERC20(aTokenAddress).balanceOf(address(AaveV3EthereumEtherFi.COLLECTOR)), + (10 ** 6) * 100 + ); + } + + function test_collectorHasPYUSDFunds() public { + GovV3Helpers.executePayload(vm, address(proposal)); + (address aTokenAddress, , ) = AaveV3EthereumEtherFi + .AAVE_PROTOCOL_DATA_PROVIDER + .getReserveTokensAddresses(proposal.PYUSD()); + assertGe( + IERC20(aTokenAddress).balanceOf(address(AaveV3EthereumEtherFi.COLLECTOR)), + (10 ** 6) * 100 + ); + } + + function test_collectorHasFRAXFunds() public { + GovV3Helpers.executePayload(vm, address(proposal)); + (address aTokenAddress, , ) = AaveV3EthereumEtherFi + .AAVE_PROTOCOL_DATA_PROVIDER + .getReserveTokensAddresses(proposal.FRAX()); + assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3EthereumEtherFi.COLLECTOR)), 10 ** 18); + } + + function test_ethereumAddressesProviderRegistry_registry_EtherFiAddressesProvider() public { + GovV3Helpers.executePayload(vm, address(proposal)); + assertEq( + IPoolAddressesProviderRegistry(AaveV3Ethereum.POOL_ADDRESSES_PROVIDER_REGISTRY) + .getAddressesProviderIdByAddress(address(AaveV3EthereumEtherFi.POOL_ADDRESSES_PROVIDER)), + 45 + ); + } + + function test_EtherFiAclManager_roles() public { + GovV3Helpers.executePayload(vm, address(proposal)); + assertTrue( + AaveV3EthereumEtherFi.ACL_MANAGER.isPoolAdmin(0x2CFe3ec4d5a6811f4B8067F0DE7e47DfA938Aa30) + ); + assertTrue( + AaveV3EthereumEtherFi.ACL_MANAGER.isRiskAdmin(AaveV3EthereumEtherFi.CAPS_PLUS_RISK_STEWARD) + ); + } + + function test_check_etherfi_v3_libraries_against_lido_v3_instance() public { + // Check Pool libraries + assertEq( + AaveV3EthereumEtherFi.POOL.getFlashLoanLogic(), + AaveV3EthereumLido.POOL.getFlashLoanLogic() + ); + assertEq(AaveV3EthereumEtherFi.POOL.getBorrowLogic(), AaveV3EthereumLido.POOL.getBorrowLogic()); + assertEq(AaveV3EthereumEtherFi.POOL.getBridgeLogic(), AaveV3EthereumLido.POOL.getBridgeLogic()); + assertEq(AaveV3EthereumEtherFi.POOL.getEModeLogic(), AaveV3EthereumLido.POOL.getEModeLogic()); + assertEq( + AaveV3EthereumEtherFi.POOL.getLiquidationLogic(), + AaveV3EthereumLido.POOL.getLiquidationLogic() + ); + assertEq(AaveV3EthereumEtherFi.POOL.getPoolLogic(), AaveV3EthereumLido.POOL.getPoolLogic()); + assertEq(AaveV3EthereumEtherFi.POOL.getSupplyLogic(), AaveV3EthereumLido.POOL.getSupplyLogic()); + + // Check AaveV3ConfigEngine libraries + assertEq( + IAaveV3ConfigEngine(AaveV3EthereumEtherFi.CONFIG_ENGINE).BORROW_ENGINE(), + IAaveV3ConfigEngine(AaveV3EthereumLido.CONFIG_ENGINE).BORROW_ENGINE() + ); + assertEq( + IAaveV3ConfigEngine(AaveV3EthereumEtherFi.CONFIG_ENGINE).CAPS_ENGINE(), + IAaveV3ConfigEngine(AaveV3EthereumLido.CONFIG_ENGINE).CAPS_ENGINE() + ); + assertEq( + IAaveV3ConfigEngine(AaveV3EthereumEtherFi.CONFIG_ENGINE).COLLATERAL_ENGINE(), + IAaveV3ConfigEngine(AaveV3EthereumLido.CONFIG_ENGINE).COLLATERAL_ENGINE() + ); + assertEq( + IAaveV3ConfigEngine(AaveV3EthereumEtherFi.CONFIG_ENGINE).EMODE_ENGINE(), + IAaveV3ConfigEngine(AaveV3EthereumLido.CONFIG_ENGINE).EMODE_ENGINE() + ); + assertEq( + IAaveV3ConfigEngine(AaveV3EthereumEtherFi.CONFIG_ENGINE).LISTING_ENGINE(), + IAaveV3ConfigEngine(AaveV3EthereumLido.CONFIG_ENGINE).LISTING_ENGINE() + ); + assertEq( + IAaveV3ConfigEngine(AaveV3EthereumEtherFi.CONFIG_ENGINE).PRICE_FEED_ENGINE(), + IAaveV3ConfigEngine(AaveV3EthereumLido.CONFIG_ENGINE).PRICE_FEED_ENGINE() + ); + assertEq( + IAaveV3ConfigEngine(AaveV3EthereumEtherFi.CONFIG_ENGINE).RATE_ENGINE(), + IAaveV3ConfigEngine(AaveV3EthereumLido.CONFIG_ENGINE).RATE_ENGINE() + ); + } + + function test_check_oracle_feeds_from_etherfi_same_as_main_v3() public { + GovV3Helpers.executePayload(vm, address(proposal)); + + assertEq( + AaveV3EthereumEtherFi.ORACLE.getSourceOfAsset(proposal.USDC()), + AaveV3Ethereum.ORACLE.getSourceOfAsset(proposal.USDC()) + ); + assertEq( + AaveV3EthereumEtherFi.ORACLE.getSourceOfAsset(proposal.PYUSD()), + AaveV3Ethereum.ORACLE.getSourceOfAsset(proposal.PYUSD()) + ); + assertEq( + AaveV3EthereumEtherFi.ORACLE.getSourceOfAsset(proposal.FRAX()), + AaveV3Ethereum.ORACLE.getSourceOfAsset(proposal.FRAX()) + ); + assertEq( + AaveV3EthereumEtherFi.ORACLE.getSourceOfAsset(proposal.weETH()), + AaveV3Ethereum.ORACLE.getSourceOfAsset(proposal.weETH()) + ); + } +} diff --git a/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation.md b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation.md new file mode 100644 index 000000000..663ef07dc --- /dev/null +++ b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation.md @@ -0,0 +1,80 @@ +--- +title: "Aave v3 EtherFi Ethereum Activation" +author: "Catapulta" +discussions: "https://governance.aave.com/t/arfc-deploy-an-etherfi-stablecoin-aave-v3-instance/18440" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x4acd11c6100a6b85a553e21359f3720fa5cd4783a76c77857436ace134f88c05" +--- + +## Simple Summary + +This AIP activates an Aave v3 EtherFi instance in the Ethereum network, following [ARFQ request](https://governance.aave.com/t/arfc-deploy-an-etherfi-stablecoin-aave-v3-instance/18440), focused on weETH holders borrowing stablecoins. + +## Motivation + +The demand for borrowing wETH on Aave using weETH as collateral is extremely high, with caps being filled within minutes each week. + +While this $2B growth is welcomed and responsible for ~$12.5M yearly revenue (at current ETH prices) for the DAO, it has created some frustration for significant users looking to borrow stablecoins using their weETH as collateral. + +With this asset being constantly at cap, users are wary of leveraging Aave for this use case as they have legitimate concerns about their ability to add more collateral/debt to (de)leverage following market conditions. + +To provide weETH holders with more suitable options, we propose creating a dedicated weETH/stablecoin Aave v3 Instance. + +This market also lays the groundwork for future integrations & synergies with EtherFi’s Cash product. + +## Specification + +The Etherfi/Stables Aave v3 instance activation payload implements the following: + +- Pre-execution: + - Register Ethereum EtherFi instance in Ethereum V3 PoolAddressesProviderRegistry with ID 45. +- Execution: + - Listing of weETH, USDC, PYUSD, and FRAX tokens. +- Post execution: + - Add PROTOCOL_GUARDIAN as POOL_ADMIN role + - Add CAPS_PLUS_RISK_STEWARD as RISK_ADMIN role + - Seed amounts + - Pay Catapulta service fee + +The table below illustrates the configured risk parameters\* for Aave v3 EtherFi Ethereum instance: + +| Parameter | weETH | USDC | PYUSD | FRAX | +| ------------------------- | -----------------------------------------: | -----------------------------------------: | -----------------------------------------: | -----------------------------------------: | +| Isolation Mode | false | false | false | false | +| Borrowable | DISABLED | ENABLED | ENABLED | ENABLED | +| Collateral Enabled | true | false | false | false | +| Supply Cap | 50,000 | 140,000,000 | 60,000,000 | 15,000,000 | +| Borrow Cap | 0 | 135,000,000 | 54,000,000 | 12,000,000 | +| Debt Ceiling | USD 0 | USD 0 | USD 0 | USD 0 | +| LTV | 78 % | 0 % | 0 % | 0 % | +| LT | 81 % | 0 % | 0 % | 0 % | +| Liquidation Bonus | 6 % | 0 % | 0 % | 0 % | +| Liquidation Protocol Fee | 10 % | \*\*\* 10 % | 10 % | 10 % | +| Reserve Factor | \*\* 45 % | 10 % | 20 % | 20 % | +| Base Variable Borrow Rate | 0 % | 0 % | 0 % | 0 % | +| Variable Slope 1 | \*\* 7 % | 6.5 % | 5.5 % | 5.5 % | +| Variable Slope 2 | \*\* 300 % | 60 % | 80 % | 80 % | +| Uoptimal | \*\* 35 % | 90 % | 90 % | 90 % | +| Stable Borrowing | DISABLED | DISABLED | DISABLED | DISABLED | +| Flashloanable | ENABLED | ENABLED | ENABLED | ENABLED | +| Siloed Borrowing | DISABLED | DISABLED | DISABLED | DISABLED | +| Borrowable in Isolation | DISABLED | DISABLED | DISABLED | DISABLED | +| Oracle | 0xf112aF6F0A332B815fbEf3Ff932c057E570b62d3 | 0x736bF902680e68989886e9807CD7Db4B3E015d3C | 0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022 | 0x45D270263BBee500CF8adcf2AbC0aC227097b036 | + +\* The risk parameters follows latest [Chaos Labs recommendation](https://governance.aave.com/t/arfc-deploy-an-etherfi-stablecoin-aave-v3-instance/18440/10). + +\*\* Deviation of risk params for `weETH` from original ARFQ due "0" is not a valid value for `RESERVE_FACTOR, Uoptimal, Variable Slope 1, Variable Slope 2` and causes payload to fail due validation errors. The updates values are from Aave V3 Ethereum Mainnet market and this does NOT enable the token as borrowable. + +\*\*\* Deviation of risk param "Liquidation Protocol Fee" for `USDC`, set to "10%" to keep constistency from the rest of tokens. This change does not affect due USDC token will not have collateral enabled. + +## References + +- Implementation: [AaveV3EthereumEtherFi](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.sol) +- Tests: [AaveV3EthereumEtherFi](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.t.sol) +- [Catapulta deployment report](https://catapulta.sh/report/719c68e7-9829-455d-a580-b5c93b25812a) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x4acd11c6100a6b85a553e21359f3720fa5cd4783a76c77857436ace134f88c05) +- [Discussion](https://governance.aave.com/t/arfc-deploy-an-etherfi-stablecoin-aave-v3-instance/18440) +- [Code diff between EtherFi and Lido Aave V3 instances](https://diffy.org/diff/499d8ea81137d) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation_20240902.s.sol b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation_20240902.s.sol new file mode 100644 index 000000000..de775bb74 --- /dev/null +++ b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation_20240902.s.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902} from './AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation_20240902.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/EtherFiEthereumActivation_20240902.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation_20240902.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation.md' + ) + ); + } +} diff --git a/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/config.ts b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/config.ts new file mode 100644 index 000000000..30538b133 --- /dev/null +++ b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/config.ts @@ -0,0 +1,129 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3EthereumEtherFi'], + title: 'EtherFi Ethereum Activation', + shortName: 'EtherFiEthereumActivation', + date: '20240902', + author: 'Catapulta', + discussion: + 'https://governance.aave.com/t/arfc-deploy-an-etherfi-stablecoin-aave-v3-instance/18440', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x4acd11c6100a6b85a553e21359f3720fa5cd4783a76c77857436ace134f88c05', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3EthereumEtherFi: { + configs: { + FLASH_BORROWER: {address: '0x0274a704a6D9129F90A62dDC6f6024b33EcDad36'}, + ASSET_LISTING: [ + { + assetSymbol: 'weETH', + decimals: 18, + priceFeed: '0xf112aF6F0A332B815fbEf3Ff932c057E570b62d3', + ltv: '78', + liqThreshold: '81', + liqBonus: '6', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'DISABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '0', + supplyCap: '50000', + borrowCap: '0', + rateStrategyParams: { + optimalUtilizationRate: '0', + baseVariableBorrowRate: '0', + variableRateSlope1: '0', + variableRateSlope2: '0', + }, + eModeCategory: 'AaveV3EthereumEtherFiEModes.NONE', + asset: '0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee', + }, + { + assetSymbol: 'USDC', + decimals: 6, + priceFeed: '0x736bF902680e68989886e9807CD7Db4B3E015d3C', + ltv: '0', + liqThreshold: '0', + liqBonus: '0', + debtCeiling: '0', + liqProtocolFee: '0', + enabledToBorrow: 'ENABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '10', + supplyCap: '140000000', + borrowCap: '135000000', + rateStrategyParams: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '0', + variableRateSlope1: '6.5', + variableRateSlope2: '60', + }, + eModeCategory: 'AaveV3EthereumEtherFiEModes.NONE', + asset: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + }, + { + assetSymbol: 'PYUSD', + decimals: 6, + priceFeed: '0x150bAe7Ce224555D39AfdBc6Cb4B8204E594E022', + ltv: '0', + liqThreshold: '0', + liqBonus: '0', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'ENABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '20', + supplyCap: '60000000', + borrowCap: '15000000', + rateStrategyParams: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '0', + variableRateSlope1: '5.5', + variableRateSlope2: '80', + }, + eModeCategory: 'AaveV3EthereumEtherFiEModes.NONE', + asset: '0x6c3ea9036406852006290770BEdFcAbA0e23A0e8', + }, + { + assetSymbol: 'FRAX', + decimals: 18, + priceFeed: '0x45D270263BBee500CF8adcf2AbC0aC227097b036', + ltv: '0', + liqThreshold: '0', + liqBonus: '0', + debtCeiling: '0', + liqProtocolFee: '10', + enabledToBorrow: 'ENABLED', + flashloanable: 'ENABLED', + stableRateModeEnabled: 'DISABLED', + borrowableInIsolation: 'DISABLED', + withSiloedBorrowing: 'DISABLED', + reserveFactor: '20', + supplyCap: '54000000', + borrowCap: '12000000', + rateStrategyParams: { + optimalUtilizationRate: '90', + baseVariableBorrowRate: '0', + variableRateSlope1: '5.5', + variableRateSlope2: '80', + }, + eModeCategory: 'AaveV3EthereumEtherFiEModes.NONE', + asset: '0x853d955aCEf822Db058eb8505911ED77F175b99e', + }, + ], + }, + cache: {blockNumber: 20662348}, + }, + }, +}; diff --git a/yarn.lock b/yarn.lock index 67472d585..8ebda87d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,22 +42,20 @@ chalk "^2.4.2" js-tokens "^4.0.0" +"@bgd-labs/aave-address-book@3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.2.1.tgz#9ecdb92303170e754e048d25f7d6cd27312c530b" + integrity sha512-IlXHWYAhcgbiteTU50I6v8Awl7PBAHfXGz2IyjR5MPXy4xvW4UXYKbCRUtOCFxY/sdLtu/Gb+GgypyF76sd4Qg== + "@bgd-labs/aave-address-book@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.0.0.tgz#a75cf2e217688e63728bec1b9c956b0134bc647c" integrity sha512-ALT9T/aIZ7BztozWvGhjVKGAEfe6wLhop0z+0ZSwAdyHXrBfpXXDZa9siHNtOZfNojPVMPvkpgsiPnFmDD8OJQ== - -"@bgd-labs/aave-address-book@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@bgd-labs/aave-address-book/-/aave-address-book-3.1.1.tgz#46e528f5b86dff0a26b17fd7573e2abf4c2c1c44" - integrity sha512-H3oQFMCgnL0BsQuSTAaj9M3zBm1uK3Uk6qfPH29ktLxhipE4UVqglhC/ZQVMT2wlgf1bMBjmsvwgTDRDOwXuFQ== - "@bgd-labs/aave-cli@0.16.4": version "0.16.4" resolved "https://registry.yarnpkg.com/@bgd-labs/aave-cli/-/aave-cli-0.16.4.tgz#be97caea0b74e96b46b12984f4e656269badef59" integrity sha512-5AmfCXKXC0tjTn2ZZpodqSkqccammykwhP86+GEFT5N0zcqizqv/wHT9opb4ctZjLcxCvwXEKjdcdm7a6MApwA== - dependencies: "@bgd-labs/aave-address-book" "^3.0.0" "@bgd-labs/aave-v3-governance-cache" "^1.0.6" From 4f947e69a6709fa73b076882a644b86a70e35e03 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 4 Sep 2024 08:24:51 +0000 Subject: [PATCH 59/68] fix(cache): automated cache update [skip ci] --- .../EtherFiEthereumActivation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation.md b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation.md index 663ef07dc..35612d613 100644 --- a/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation.md +++ b/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/EtherFiEthereumActivation.md @@ -68,8 +68,8 @@ The table below illustrates the configured risk parameters\* for Aave v3 EtherFi ## References -- Implementation: [AaveV3EthereumEtherFi](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.sol) -- Tests: [AaveV3EthereumEtherFi](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.t.sol) +- Implementation: [AaveV3EthereumEtherFi](https://github.com/bgd-labs/aave-proposals-v3/blob/3190d5b947d8e5185260a1d2ed93049a81fa3d26/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.sol) +- Tests: [AaveV3EthereumEtherFi](https://github.com/bgd-labs/aave-proposals-v3/blob/3190d5b947d8e5185260a1d2ed93049a81fa3d26/src/20240902_AaveV3EthereumEtherFi_EtherFiEthereumActivation/AaveV3EthereumEtherFi_EtherFiEthereumActivation_20240902.t.sol) - [Catapulta deployment report](https://catapulta.sh/report/719c68e7-9829-455d-a580-b5c93b25812a) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x4acd11c6100a6b85a553e21359f3720fa5cd4783a76c77857436ace134f88c05) - [Discussion](https://governance.aave.com/t/arfc-deploy-an-etherfi-stablecoin-aave-v3-instance/18440) From 93023bc9ee8cd0058665e122b15dc411fad9705b Mon Sep 17 00:00:00 2001 From: Alice <121383428+Rozengarden@users.noreply.github.com> Date: Thu, 5 Sep 2024 12:47:19 +0200 Subject: [PATCH 60/68] [aci] amend the stables IR curve - August edition (#435) * feat: AIp to amend the stables IR curve * feat: proper snapshot reference * feat: removal of AvalancheV2 market from scope * removing unused reference to Avalanche V2 payload --- ...06558ca945fa6bf094ed4dc3c695b090af4273.svg | 1 + ...4b7e636be6f83f1c45b3309ca802e2133ae28f.svg | 1 + ...27d87f08a02013cbc2cc83f90edb2bd3121ae9.svg | 1 + ...e67c7d46dd80f36d580b243c5716c84080a34f.svg | 1 + ...f09bd59fd9d937b0095494daa4eb1e9bba074f.svg | 1 + ...03d9f34bbf84ceb6513f5e937d7c004e9ee12a.svg | 1 + ...6eef0835ac19ee0c898e4b760d8970954291bf.svg | 1 + ...0ec9b7468e77521a3de2fca047c1cbdf97cd95.svg | 1 + ...e8b4e8ca779dca15dad80d4e2d35851e9936e0.svg | 1 + ...6680e4254d0e06db0b26ecfb8ab8fb3d9d298a.svg | 1 + ...d81a829bfe358f506a4e7b9c9cd91bd31cbb1c.svg | 1 + ...b8d94b33b4219344f3a5409640bc44cb6c5979.svg | 1 + ...01d8a163c1631c522dfa4e690ece4f705e1e75.svg | 1 + ...48c9478437c54125028a1d71100121cc58dcd0.svg | 1 + ...1d49070e612a5403fc1f2dd3d2ddc01451b318.svg | 1 + ...4b70ffe8e97eef41ddd82f6d7bbcc62f19f899.svg | 1 + ...5225d2527d0291dbe4574aa3ce9f1f7d877630.svg | 1 + ...c0aceaa49e1b7b29b7ac5bfdef770548c468d6.svg | 1 + ...bc7bf4eed396c51899b824e4f27f1778769816.svg | 1 + ...1ecd05f671ebefee2c3db6c5419cfd8db4cc6d.svg | 1 + ...642612960c27e9b6f4e1835002382f60084647.svg | 1 + ...acfa5411927b1e11f45e03da6fe62446569b2d.svg | 1 + ...ddd2130611cb445002caf4960064cec7b0692c.svg | 1 + ...7664e2bba5abe215b912a5fe562266fbcca6fd.svg | 1 + ...56f485e0a4f77f2e519fa5fdeb44454e53900e.svg | 1 + ...c1af0d146c8e551ee939f2b5fa07cceab4f7e5.svg | 1 + ...1244b35151ba88ee39a0d6cb7c37ba71cc2b53.svg | 1 + ...60bdc5514185b4dbe953a444830fa62df1e05b.svg | 1 + ...d643451e15e805ee62a25de69d34fe9bc6ed06.svg | 1 + ...c9093a6438fd3f547513a97d88d37319d11c5d.svg | 1 + ...c18f984b71e5f66cebf23ccf14dfe374c5aea5.svg | 1 + ...15a37d5a61d1ed5496ea99c569d21f0c44a834.svg | 1 + ...ed2ed6768425fa4d6a23fc1e9108aa39506079.svg | 1 + ...ablecoinIRCurveAmendment_20240829_after.md | 86 ++++ ...ablecoinIRCurveAmendment_20240829_after.md | 120 +++++ ...ablecoinIRCurveAmendment_20240829_after.md | 84 ++++ ...ablecoinIRCurveAmendment_20240829_after.md | 66 +++ ...ablecoinIRCurveAmendment_20240829_after.md | 30 ++ ...ablecoinIRCurveAmendment_20240829_after.md | 138 ++++++ ...ablecoinIRCurveAmendment_20240829_after.md | 66 +++ ...ablecoinIRCurveAmendment_20240829_after.md | 120 +++++ ...ablecoinIRCurveAmendment_20240829_after.md | 120 +++++ ...ablecoinIRCurveAmendment_20240829_after.md | 30 ++ ...um_StablecoinIRCurveAmendment_20240829.sol | 60 +++ ..._StablecoinIRCurveAmendment_20240829.t.sol | 32 ++ ...um_StablecoinIRCurveAmendment_20240829.sol | 80 +++ ..._StablecoinIRCurveAmendment_20240829.t.sol | 32 ++ ...he_StablecoinIRCurveAmendment_20240829.sol | 62 +++ ..._StablecoinIRCurveAmendment_20240829.t.sol | 32 ++ ...NB_StablecoinIRCurveAmendment_20240829.sol | 53 ++ ..._StablecoinIRCurveAmendment_20240829.t.sol | 28 ++ ...se_StablecoinIRCurveAmendment_20240829.sol | 35 ++ ..._StablecoinIRCurveAmendment_20240829.t.sol | 32 ++ ...um_StablecoinIRCurveAmendment_20240829.sol | 89 ++++ ..._StablecoinIRCurveAmendment_20240829.t.sol | 32 ++ ...is_StablecoinIRCurveAmendment_20240829.sol | 53 ++ ..._StablecoinIRCurveAmendment_20240829.t.sol | 32 ++ ...sm_StablecoinIRCurveAmendment_20240829.sol | 80 +++ ..._StablecoinIRCurveAmendment_20240829.t.sol | 32 ++ ...on_StablecoinIRCurveAmendment_20240829.sol | 80 +++ ..._StablecoinIRCurveAmendment_20240829.t.sol | 32 ++ ...ll_StablecoinIRCurveAmendment_20240829.sol | 35 ++ ..._StablecoinIRCurveAmendment_20240829.t.sol | 32 ++ .../StablecoinIRCurveAmendment.md | 81 +++ .../StablecoinIRCurveAmendment_20240829.s.sol | 308 ++++++++++++ .../config.ts | 463 ++++++++++++++++++ 66 files changed, 2688 insertions(+) create mode 100644 .assets/0306558ca945fa6bf094ed4dc3c695b090af4273.svg create mode 100644 .assets/064b7e636be6f83f1c45b3309ca802e2133ae28f.svg create mode 100644 .assets/1927d87f08a02013cbc2cc83f90edb2bd3121ae9.svg create mode 100644 .assets/23e67c7d46dd80f36d580b243c5716c84080a34f.svg create mode 100644 .assets/50f09bd59fd9d937b0095494daa4eb1e9bba074f.svg create mode 100644 .assets/5603d9f34bbf84ceb6513f5e937d7c004e9ee12a.svg create mode 100644 .assets/5f6eef0835ac19ee0c898e4b760d8970954291bf.svg create mode 100644 .assets/730ec9b7468e77521a3de2fca047c1cbdf97cd95.svg create mode 100644 .assets/77e8b4e8ca779dca15dad80d4e2d35851e9936e0.svg create mode 100644 .assets/796680e4254d0e06db0b26ecfb8ab8fb3d9d298a.svg create mode 100644 .assets/79d81a829bfe358f506a4e7b9c9cd91bd31cbb1c.svg create mode 100644 .assets/84b8d94b33b4219344f3a5409640bc44cb6c5979.svg create mode 100644 .assets/8501d8a163c1631c522dfa4e690ece4f705e1e75.svg create mode 100644 .assets/8f48c9478437c54125028a1d71100121cc58dcd0.svg create mode 100644 .assets/951d49070e612a5403fc1f2dd3d2ddc01451b318.svg create mode 100644 .assets/994b70ffe8e97eef41ddd82f6d7bbcc62f19f899.svg create mode 100644 .assets/a05225d2527d0291dbe4574aa3ce9f1f7d877630.svg create mode 100644 .assets/a6c0aceaa49e1b7b29b7ac5bfdef770548c468d6.svg create mode 100644 .assets/a9bc7bf4eed396c51899b824e4f27f1778769816.svg create mode 100644 .assets/b01ecd05f671ebefee2c3db6c5419cfd8db4cc6d.svg create mode 100644 .assets/b0642612960c27e9b6f4e1835002382f60084647.svg create mode 100644 .assets/b0acfa5411927b1e11f45e03da6fe62446569b2d.svg create mode 100644 .assets/b1ddd2130611cb445002caf4960064cec7b0692c.svg create mode 100644 .assets/b27664e2bba5abe215b912a5fe562266fbcca6fd.svg create mode 100644 .assets/b756f485e0a4f77f2e519fa5fdeb44454e53900e.svg create mode 100644 .assets/b7c1af0d146c8e551ee939f2b5fa07cceab4f7e5.svg create mode 100644 .assets/c31244b35151ba88ee39a0d6cb7c37ba71cc2b53.svg create mode 100644 .assets/c460bdc5514185b4dbe953a444830fa62df1e05b.svg create mode 100644 .assets/c7d643451e15e805ee62a25de69d34fe9bc6ed06.svg create mode 100644 .assets/c9c9093a6438fd3f547513a97d88d37319d11c5d.svg create mode 100644 .assets/d7c18f984b71e5f66cebf23ccf14dfe374c5aea5.svg create mode 100644 .assets/de15a37d5a61d1ed5496ea99c569d21f0c44a834.svg create mode 100644 .assets/e5ed2ed6768425fa4d6a23fc1e9108aa39506079.svg create mode 100644 diffs/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829_before_AaveV2Ethereum_StablecoinIRCurveAmendment_20240829_after.md create mode 100644 diffs/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829_before_AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829_after.md create mode 100644 diffs/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829_before_AaveV3Avalanche_StablecoinIRCurveAmendment_20240829_after.md create mode 100644 diffs/AaveV3BNB_StablecoinIRCurveAmendment_20240829_before_AaveV3BNB_StablecoinIRCurveAmendment_20240829_after.md create mode 100644 diffs/AaveV3Base_StablecoinIRCurveAmendment_20240829_before_AaveV3Base_StablecoinIRCurveAmendment_20240829_after.md create mode 100644 diffs/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829_before_AaveV3Ethereum_StablecoinIRCurveAmendment_20240829_after.md create mode 100644 diffs/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829_before_AaveV3Gnosis_StablecoinIRCurveAmendment_20240829_after.md create mode 100644 diffs/AaveV3Optimism_StablecoinIRCurveAmendment_20240829_before_AaveV3Optimism_StablecoinIRCurveAmendment_20240829_after.md create mode 100644 diffs/AaveV3Polygon_StablecoinIRCurveAmendment_20240829_before_AaveV3Polygon_StablecoinIRCurveAmendment_20240829_after.md create mode 100644 diffs/AaveV3Scroll_StablecoinIRCurveAmendment_20240829_before_AaveV3Scroll_StablecoinIRCurveAmendment_20240829_after.md create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.t.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.t.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.t.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.t.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.t.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.t.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.t.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.t.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.t.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.t.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment.md create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol create mode 100644 src/20240829_Multi_StablecoinIRCurveAmendment/config.ts diff --git a/.assets/0306558ca945fa6bf094ed4dc3c695b090af4273.svg b/.assets/0306558ca945fa6bf094ed4dc3c695b090af4273.svg new file mode 100644 index 000000000..1f6321b7c --- /dev/null +++ b/.assets/0306558ca945fa6bf094ed4dc3c695b090af4273.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/064b7e636be6f83f1c45b3309ca802e2133ae28f.svg b/.assets/064b7e636be6f83f1c45b3309ca802e2133ae28f.svg new file mode 100644 index 000000000..5283877c6 --- /dev/null +++ b/.assets/064b7e636be6f83f1c45b3309ca802e2133ae28f.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/1927d87f08a02013cbc2cc83f90edb2bd3121ae9.svg b/.assets/1927d87f08a02013cbc2cc83f90edb2bd3121ae9.svg new file mode 100644 index 000000000..081891402 --- /dev/null +++ b/.assets/1927d87f08a02013cbc2cc83f90edb2bd3121ae9.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/23e67c7d46dd80f36d580b243c5716c84080a34f.svg b/.assets/23e67c7d46dd80f36d580b243c5716c84080a34f.svg new file mode 100644 index 000000000..a09281518 --- /dev/null +++ b/.assets/23e67c7d46dd80f36d580b243c5716c84080a34f.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/50f09bd59fd9d937b0095494daa4eb1e9bba074f.svg b/.assets/50f09bd59fd9d937b0095494daa4eb1e9bba074f.svg new file mode 100644 index 000000000..081891402 --- /dev/null +++ b/.assets/50f09bd59fd9d937b0095494daa4eb1e9bba074f.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/5603d9f34bbf84ceb6513f5e937d7c004e9ee12a.svg b/.assets/5603d9f34bbf84ceb6513f5e937d7c004e9ee12a.svg new file mode 100644 index 000000000..a7eaa7d81 --- /dev/null +++ b/.assets/5603d9f34bbf84ceb6513f5e937d7c004e9ee12a.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/5f6eef0835ac19ee0c898e4b760d8970954291bf.svg b/.assets/5f6eef0835ac19ee0c898e4b760d8970954291bf.svg new file mode 100644 index 000000000..1f6321b7c --- /dev/null +++ b/.assets/5f6eef0835ac19ee0c898e4b760d8970954291bf.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/730ec9b7468e77521a3de2fca047c1cbdf97cd95.svg b/.assets/730ec9b7468e77521a3de2fca047c1cbdf97cd95.svg new file mode 100644 index 000000000..b919e6b6a --- /dev/null +++ b/.assets/730ec9b7468e77521a3de2fca047c1cbdf97cd95.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/77e8b4e8ca779dca15dad80d4e2d35851e9936e0.svg b/.assets/77e8b4e8ca779dca15dad80d4e2d35851e9936e0.svg new file mode 100644 index 000000000..5283877c6 --- /dev/null +++ b/.assets/77e8b4e8ca779dca15dad80d4e2d35851e9936e0.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/796680e4254d0e06db0b26ecfb8ab8fb3d9d298a.svg b/.assets/796680e4254d0e06db0b26ecfb8ab8fb3d9d298a.svg new file mode 100644 index 000000000..de0657eb7 --- /dev/null +++ b/.assets/796680e4254d0e06db0b26ecfb8ab8fb3d9d298a.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/79d81a829bfe358f506a4e7b9c9cd91bd31cbb1c.svg b/.assets/79d81a829bfe358f506a4e7b9c9cd91bd31cbb1c.svg new file mode 100644 index 000000000..081891402 --- /dev/null +++ b/.assets/79d81a829bfe358f506a4e7b9c9cd91bd31cbb1c.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/84b8d94b33b4219344f3a5409640bc44cb6c5979.svg b/.assets/84b8d94b33b4219344f3a5409640bc44cb6c5979.svg new file mode 100644 index 000000000..de0657eb7 --- /dev/null +++ b/.assets/84b8d94b33b4219344f3a5409640bc44cb6c5979.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/8501d8a163c1631c522dfa4e690ece4f705e1e75.svg b/.assets/8501d8a163c1631c522dfa4e690ece4f705e1e75.svg new file mode 100644 index 000000000..db81caacb --- /dev/null +++ b/.assets/8501d8a163c1631c522dfa4e690ece4f705e1e75.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/8f48c9478437c54125028a1d71100121cc58dcd0.svg b/.assets/8f48c9478437c54125028a1d71100121cc58dcd0.svg new file mode 100644 index 000000000..50adfed87 --- /dev/null +++ b/.assets/8f48c9478437c54125028a1d71100121cc58dcd0.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/951d49070e612a5403fc1f2dd3d2ddc01451b318.svg b/.assets/951d49070e612a5403fc1f2dd3d2ddc01451b318.svg new file mode 100644 index 000000000..de0657eb7 --- /dev/null +++ b/.assets/951d49070e612a5403fc1f2dd3d2ddc01451b318.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/994b70ffe8e97eef41ddd82f6d7bbcc62f19f899.svg b/.assets/994b70ffe8e97eef41ddd82f6d7bbcc62f19f899.svg new file mode 100644 index 000000000..db81caacb --- /dev/null +++ b/.assets/994b70ffe8e97eef41ddd82f6d7bbcc62f19f899.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/a05225d2527d0291dbe4574aa3ce9f1f7d877630.svg b/.assets/a05225d2527d0291dbe4574aa3ce9f1f7d877630.svg new file mode 100644 index 000000000..db81caacb --- /dev/null +++ b/.assets/a05225d2527d0291dbe4574aa3ce9f1f7d877630.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/a6c0aceaa49e1b7b29b7ac5bfdef770548c468d6.svg b/.assets/a6c0aceaa49e1b7b29b7ac5bfdef770548c468d6.svg new file mode 100644 index 000000000..db81caacb --- /dev/null +++ b/.assets/a6c0aceaa49e1b7b29b7ac5bfdef770548c468d6.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/a9bc7bf4eed396c51899b824e4f27f1778769816.svg b/.assets/a9bc7bf4eed396c51899b824e4f27f1778769816.svg new file mode 100644 index 000000000..01584d9c0 --- /dev/null +++ b/.assets/a9bc7bf4eed396c51899b824e4f27f1778769816.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%50%100%Optimal utilization 80%Optimal utilization 80% \ No newline at end of file diff --git a/.assets/b01ecd05f671ebefee2c3db6c5419cfd8db4cc6d.svg b/.assets/b01ecd05f671ebefee2c3db6c5419cfd8db4cc6d.svg new file mode 100644 index 000000000..3856beabb --- /dev/null +++ b/.assets/b01ecd05f671ebefee2c3db6c5419cfd8db4cc6d.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/b0642612960c27e9b6f4e1835002382f60084647.svg b/.assets/b0642612960c27e9b6f4e1835002382f60084647.svg new file mode 100644 index 000000000..db81caacb --- /dev/null +++ b/.assets/b0642612960c27e9b6f4e1835002382f60084647.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/b0acfa5411927b1e11f45e03da6fe62446569b2d.svg b/.assets/b0acfa5411927b1e11f45e03da6fe62446569b2d.svg new file mode 100644 index 000000000..e673fbc39 --- /dev/null +++ b/.assets/b0acfa5411927b1e11f45e03da6fe62446569b2d.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 92%Optimal utilization 92% \ No newline at end of file diff --git a/.assets/b1ddd2130611cb445002caf4960064cec7b0692c.svg b/.assets/b1ddd2130611cb445002caf4960064cec7b0692c.svg new file mode 100644 index 000000000..198ef3b72 --- /dev/null +++ b/.assets/b1ddd2130611cb445002caf4960064cec7b0692c.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%100%200%300%Optimal utilization 45%Optimal utilization 45% \ No newline at end of file diff --git a/.assets/b27664e2bba5abe215b912a5fe562266fbcca6fd.svg b/.assets/b27664e2bba5abe215b912a5fe562266fbcca6fd.svg new file mode 100644 index 000000000..081891402 --- /dev/null +++ b/.assets/b27664e2bba5abe215b912a5fe562266fbcca6fd.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/b756f485e0a4f77f2e519fa5fdeb44454e53900e.svg b/.assets/b756f485e0a4f77f2e519fa5fdeb44454e53900e.svg new file mode 100644 index 000000000..4a059d94f --- /dev/null +++ b/.assets/b756f485e0a4f77f2e519fa5fdeb44454e53900e.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/b7c1af0d146c8e551ee939f2b5fa07cceab4f7e5.svg b/.assets/b7c1af0d146c8e551ee939f2b5fa07cceab4f7e5.svg new file mode 100644 index 000000000..081891402 --- /dev/null +++ b/.assets/b7c1af0d146c8e551ee939f2b5fa07cceab4f7e5.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/c31244b35151ba88ee39a0d6cb7c37ba71cc2b53.svg b/.assets/c31244b35151ba88ee39a0d6cb7c37ba71cc2b53.svg new file mode 100644 index 000000000..a09281518 --- /dev/null +++ b/.assets/c31244b35151ba88ee39a0d6cb7c37ba71cc2b53.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/c460bdc5514185b4dbe953a444830fa62df1e05b.svg b/.assets/c460bdc5514185b4dbe953a444830fa62df1e05b.svg new file mode 100644 index 000000000..081891402 --- /dev/null +++ b/.assets/c460bdc5514185b4dbe953a444830fa62df1e05b.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/c7d643451e15e805ee62a25de69d34fe9bc6ed06.svg b/.assets/c7d643451e15e805ee62a25de69d34fe9bc6ed06.svg new file mode 100644 index 000000000..248e5387a --- /dev/null +++ b/.assets/c7d643451e15e805ee62a25de69d34fe9bc6ed06.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/c9c9093a6438fd3f547513a97d88d37319d11c5d.svg b/.assets/c9c9093a6438fd3f547513a97d88d37319d11c5d.svg new file mode 100644 index 000000000..db81caacb --- /dev/null +++ b/.assets/c9c9093a6438fd3f547513a97d88d37319d11c5d.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/d7c18f984b71e5f66cebf23ccf14dfe374c5aea5.svg b/.assets/d7c18f984b71e5f66cebf23ccf14dfe374c5aea5.svg new file mode 100644 index 000000000..081891402 --- /dev/null +++ b/.assets/d7c18f984b71e5f66cebf23ccf14dfe374c5aea5.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/.assets/de15a37d5a61d1ed5496ea99c569d21f0c44a834.svg b/.assets/de15a37d5a61d1ed5496ea99c569d21f0c44a834.svg new file mode 100644 index 000000000..b5810667c --- /dev/null +++ b/.assets/de15a37d5a61d1ed5496ea99c569d21f0c44a834.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 92%Optimal utilization 92% \ No newline at end of file diff --git a/.assets/e5ed2ed6768425fa4d6a23fc1e9108aa39506079.svg b/.assets/e5ed2ed6768425fa4d6a23fc1e9108aa39506079.svg new file mode 100644 index 000000000..4a059d94f --- /dev/null +++ b/.assets/e5ed2ed6768425fa4d6a23fc1e9108aa39506079.svg @@ -0,0 +1 @@ + Borrow APR, variableBorrow APR, stable0%25%50%75%100%0%20%40%60%80%Optimal utilization 90%Optimal utilization 90% \ No newline at end of file diff --git a/diffs/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829_before_AaveV2Ethereum_StablecoinIRCurveAmendment_20240829_after.md b/diffs/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829_before_AaveV2Ethereum_StablecoinIRCurveAmendment_20240829_after.md new file mode 100644 index 000000000..aa574e576 --- /dev/null +++ b/diffs/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829_before_AaveV2Ethereum_StablecoinIRCurveAmendment_20240829_after.md @@ -0,0 +1,86 @@ +## Reserve changes + +### Reserve altered + +#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0xffeae1Bf7ddc089b8820B223220d76E537bf058E](https://etherscan.io/address/0xffeae1Bf7ddc089b8820B223220d76E537bf058E) | [0xA939B1f36E9a14B044B8149933184a18E0dFC17D](https://etherscan.io/address/0xA939B1f36E9a14B044B8149933184a18E0dFC17D) | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/5f6eef0835ac19ee0c898e4b760d8970954291bf.svg) | ![after](/.assets/84b8d94b33b4219344f3a5409640bc44cb6c5979.svg) | + +#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0xF1722FBCAc1C49bA57a77c3F4373A4bb86a46e60](https://etherscan.io/address/0xF1722FBCAc1C49bA57a77c3F4373A4bb86a46e60) | [0x6a8C8119b2BA9460162B8C999f5A8C84f28a033f](https://etherscan.io/address/0x6a8C8119b2BA9460162B8C999f5A8C84f28a033f) | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/23e67c7d46dd80f36d580b243c5716c84080a34f.svg) | ![after](/.assets/50f09bd59fd9d937b0095494daa4eb1e9bba074f.svg) | + +#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x5A3a8Aa25F0D61eF834Da59B4cD5bC48B8AB9910](https://etherscan.io/address/0x5A3a8Aa25F0D61eF834Da59B4cD5bC48B8AB9910) | [0xa8850b94E4A0B881c3b08aE065D189D87F34F175](https://etherscan.io/address/0xa8850b94E4A0B881c3b08aE065D189D87F34F175) | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/8f48c9478437c54125028a1d71100121cc58dcd0.svg) | ![after](/.assets/730ec9b7468e77521a3de2fca047c1cbdf97cd95.svg) | + +## Raw diff + +```json +{ + "reserves": { + "0x6B175474E89094C44Da98b954EedeAC495271d0F": { + "interestRateStrategy": { + "from": "0xffeae1Bf7ddc089b8820B223220d76E537bf058E", + "to": "0xA939B1f36E9a14B044B8149933184a18E0dFC17D" + } + }, + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": { + "interestRateStrategy": { + "from": "0xF1722FBCAc1C49bA57a77c3F4373A4bb86a46e60", + "to": "0x6a8C8119b2BA9460162B8C999f5A8C84f28a033f" + } + }, + "0xdAC17F958D2ee523a2206206994597C13D831ec7": { + "interestRateStrategy": { + "from": "0x5A3a8Aa25F0D61eF834Da59B4cD5bC48B8AB9910", + "to": "0xa8850b94E4A0B881c3b08aE065D189D87F34F175" + } + } + }, + "strategies": { + "0x6B175474E89094C44Da98b954EedeAC495271d0F": { + "address": { + "from": "0xffeae1Bf7ddc089b8820B223220d76E537bf058E", + "to": "0xA939B1f36E9a14B044B8149933184a18E0dFC17D" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": { + "address": { + "from": "0xF1722FBCAc1C49bA57a77c3F4373A4bb86a46e60", + "to": "0x6a8C8119b2BA9460162B8C999f5A8C84f28a033f" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xdAC17F958D2ee523a2206206994597C13D831ec7": { + "address": { + "from": "0x5A3a8Aa25F0D61eF834Da59B4cD5bC48B8AB9910", + "to": "0xa8850b94E4A0B881c3b08aE065D189D87F34F175" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829_before_AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829_after.md b/diffs/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829_before_AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829_after.md new file mode 100644 index 000000000..af0acc3ab --- /dev/null +++ b/diffs/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829_before_AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829_after.md @@ -0,0 +1,120 @@ +## Reserve changes + +### Reserve altered + +#### FRAX ([0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F](https://arbiscan.io/address/0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/b756f485e0a4f77f2e519fa5fdeb44454e53900e.svg) | ![after](/.assets/a6c0aceaa49e1b7b29b7ac5bfdef770548c468d6.svg) | + +#### LUSD ([0x93b346b6BC2548dA6A1E7d98E9a421B42541425b](https://arbiscan.io/address/0x93b346b6BC2548dA6A1E7d98E9a421B42541425b)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 93.5 % | 92.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/5603d9f34bbf84ceb6513f5e937d7c004e9ee12a.svg) | ![after](/.assets/77e8b4e8ca779dca15dad80d4e2d35851e9936e0.svg) | + +#### EURS ([0xD22a58f79e9481D1a88e00c343885A588b34b68B](https://arbiscan.io/address/0xD22a58f79e9481D1a88e00c343885A588b34b68B)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/0306558ca945fa6bf094ed4dc3c695b090af4273.svg) | ![after](/.assets/951d49070e612a5403fc1f2dd3d2ddc01451b318.svg) | + +#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://arbiscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/b756f485e0a4f77f2e519fa5fdeb44454e53900e.svg) | ![after](/.assets/a6c0aceaa49e1b7b29b7ac5bfdef770548c468d6.svg) | + +#### USDT ([0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9](https://arbiscan.io/address/0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/b756f485e0a4f77f2e519fa5fdeb44454e53900e.svg) | ![after](/.assets/a6c0aceaa49e1b7b29b7ac5bfdef770548c468d6.svg) | + +#### USDC ([0xaf88d065e77c8cC2239327C5EDb3A432268e5831](https://arbiscan.io/address/0xaf88d065e77c8cC2239327C5EDb3A432268e5831)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 69 % | 65.5 % | +| variableRateSlope1 | 9 % | 5.5 % | +| interestRate | ![before](/.assets/c7d643451e15e805ee62a25de69d34fe9bc6ed06.svg) | ![after](/.assets/d7c18f984b71e5f66cebf23ccf14dfe374c5aea5.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0x93b346b6BC2548dA6A1E7d98E9a421B42541425b": { + "maxVariableBorrowRate": { + "from": "935000000000000000000000000", + "to": "925000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xD22a58f79e9481D1a88e00c343885A588b34b68B": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xaf88d065e77c8cC2239327C5EDb3A432268e5831": { + "maxVariableBorrowRate": { + "from": "690000000000000000000000000", + "to": "655000000000000000000000000" + }, + "variableRateSlope1": { + "from": "90000000000000000000000000", + "to": "55000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829_before_AaveV3Avalanche_StablecoinIRCurveAmendment_20240829_after.md b/diffs/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829_before_AaveV3Avalanche_StablecoinIRCurveAmendment_20240829_after.md new file mode 100644 index 000000000..5238135ec --- /dev/null +++ b/diffs/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829_before_AaveV3Avalanche_StablecoinIRCurveAmendment_20240829_after.md @@ -0,0 +1,84 @@ +## Reserve changes + +### Reserve altered + +#### USDt ([0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7](https://snowtrace.io/address/0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/5bbcb1a6932fed3bbf04d7077987b653f2697867.svg) | ![after](/.assets/8501d8a163c1631c522dfa4e690ece4f705e1e75.svg) | + +#### USDC ([0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E](https://snowtrace.io/address/0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 66.5 % | 65.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/168c2ef82ae6b76d58bbf510d3cc1f33ddda7ab4.svg) | ![after](/.assets/c460bdc5514185b4dbe953a444830fa62df1e05b.svg) | + +#### FRAX ([0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64](https://snowtrace.io/address/0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/5bbcb1a6932fed3bbf04d7077987b653f2697867.svg) | ![after](/.assets/8501d8a163c1631c522dfa4e690ece4f705e1e75.svg) | + +#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowtrace.io/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/5bbcb1a6932fed3bbf04d7077987b653f2697867.svg) | ![after](/.assets/8501d8a163c1631c522dfa4e690ece4f705e1e75.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E": { + "maxVariableBorrowRate": { + "from": "665000000000000000000000000", + "to": "655000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xD24C2Ad096400B6FBcd2ad8B24E7acBc21A1da64": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3BNB_StablecoinIRCurveAmendment_20240829_before_AaveV3BNB_StablecoinIRCurveAmendment_20240829_after.md b/diffs/AaveV3BNB_StablecoinIRCurveAmendment_20240829_before_AaveV3BNB_StablecoinIRCurveAmendment_20240829_after.md new file mode 100644 index 000000000..5079c81dc --- /dev/null +++ b/diffs/AaveV3BNB_StablecoinIRCurveAmendment_20240829_before_AaveV3BNB_StablecoinIRCurveAmendment_20240829_after.md @@ -0,0 +1,66 @@ +## Reserve changes + +### Reserve altered + +#### USDT ([0x55d398326f99059fF775485246999027B3197955](https://bscscan.com/address/0x55d398326f99059fF775485246999027B3197955)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/e5ed2ed6768425fa4d6a23fc1e9108aa39506079.svg) | ![after](/.assets/994b70ffe8e97eef41ddd82f6d7bbcc62f19f899.svg) | + +#### USDC ([0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d](https://bscscan.com/address/0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 66.5 % | 65.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/c31244b35151ba88ee39a0d6cb7c37ba71cc2b53.svg) | ![after](/.assets/1927d87f08a02013cbc2cc83f90edb2bd3121ae9.svg) | + +#### FDUSD ([0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409](https://bscscan.com/address/0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/e5ed2ed6768425fa4d6a23fc1e9108aa39506079.svg) | ![after](/.assets/994b70ffe8e97eef41ddd82f6d7bbcc62f19f899.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x55d398326f99059fF775485246999027B3197955": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d": { + "maxVariableBorrowRate": { + "from": "665000000000000000000000000", + "to": "655000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_StablecoinIRCurveAmendment_20240829_before_AaveV3Base_StablecoinIRCurveAmendment_20240829_after.md b/diffs/AaveV3Base_StablecoinIRCurveAmendment_20240829_before_AaveV3Base_StablecoinIRCurveAmendment_20240829_after.md new file mode 100644 index 000000000..bbcc2df5d --- /dev/null +++ b/diffs/AaveV3Base_StablecoinIRCurveAmendment_20240829_before_AaveV3Base_StablecoinIRCurveAmendment_20240829_after.md @@ -0,0 +1,30 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913](https://basescan.org/address/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 66.5 % | 65.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/a3d85c79489fe0154b545232de234ff8b5b26977.svg) | ![after](/.assets/b7c1af0d146c8e551ee939f2b5fa07cceab4f7e5.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913": { + "maxVariableBorrowRate": { + "from": "665000000000000000000000000", + "to": "655000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829_before_AaveV3Ethereum_StablecoinIRCurveAmendment_20240829_after.md b/diffs/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829_before_AaveV3Ethereum_StablecoinIRCurveAmendment_20240829_after.md new file mode 100644 index 000000000..4d236d1ab --- /dev/null +++ b/diffs/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829_before_AaveV3Ethereum_StablecoinIRCurveAmendment_20240829_after.md @@ -0,0 +1,138 @@ +## Reserve changes + +### Reserve altered + +#### LUSD ([0x5f98805A4E8be255a32880FDeC7F6728C6568bA0](https://etherscan.io/address/0x5f98805A4E8be255a32880FDeC7F6728C6568bA0)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 93.5 % | 92.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/7fd6d26d5c1caf9a8735a932555ad64bcb400031.svg) | ![after](/.assets/064b7e636be6f83f1c45b3309ca802e2133ae28f.svg) | + +#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/e3cd41bda67a1fc3ece7a4100d0a7455722f244a.svg) | ![after](/.assets/de15a37d5a61d1ed5496ea99c569d21f0c44a834.svg) | + +#### PYUSD ([0x6c3ea9036406852006290770BEdFcAbA0e23A0e8](https://etherscan.io/address/0x6c3ea9036406852006290770BEdFcAbA0e23A0e8)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 86.5 % | 85.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/794e0d79fec49d4d84b9250e643f1773f16214a5.svg) | ![after](/.assets/a9bc7bf4eed396c51899b824e4f27f1778769816.svg) | + +#### FRAX ([0x853d955aCEf822Db058eb8505911ED77F175b99e](https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/63ce7a55ac04d754c31aada64a733b5a0ecd6dd5.svg) | ![after](/.assets/a05225d2527d0291dbe4574aa3ce9f1f7d877630.svg) | + +#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 66.5 % | 65.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/a8fcef60b1dfb35de994f96040b1b43df9719d28.svg) | ![after](/.assets/b0acfa5411927b1e11f45e03da6fe62446569b2d.svg) | + +#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/e3cd41bda67a1fc3ece7a4100d0a7455722f244a.svg) | ![after](/.assets/de15a37d5a61d1ed5496ea99c569d21f0c44a834.svg) | + +#### crvUSD ([0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E](https://etherscan.io/address/0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 86.5 % | 85.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/794e0d79fec49d4d84b9250e643f1773f16214a5.svg) | ![after](/.assets/a9bc7bf4eed396c51899b824e4f27f1778769816.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0": { + "maxVariableBorrowRate": { + "from": "935000000000000000000000000", + "to": "925000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0x6B175474E89094C44Da98b954EedeAC495271d0F": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8": { + "maxVariableBorrowRate": { + "from": "865000000000000000000000000", + "to": "855000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0x853d955aCEf822Db058eb8505911ED77F175b99e": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": { + "maxVariableBorrowRate": { + "from": "665000000000000000000000000", + "to": "655000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xdAC17F958D2ee523a2206206994597C13D831ec7": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E": { + "maxVariableBorrowRate": { + "from": "865000000000000000000000000", + "to": "855000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829_before_AaveV3Gnosis_StablecoinIRCurveAmendment_20240829_after.md b/diffs/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829_before_AaveV3Gnosis_StablecoinIRCurveAmendment_20240829_after.md new file mode 100644 index 000000000..c91e74a52 --- /dev/null +++ b/diffs/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829_before_AaveV3Gnosis_StablecoinIRCurveAmendment_20240829_after.md @@ -0,0 +1,66 @@ +## Reserve changes + +### Reserve altered + +#### USDC ([0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83](https://gnosisscan.io/address/0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/fd869f24b8f12e55433a53510ff00425d44dbfd2.svg) | ![after](/.assets/b0642612960c27e9b6f4e1835002382f60084647.svg) | + +#### EURe ([0xcB444e90D8198415266c6a2724b7900fb12FC56E](https://gnosisscan.io/address/0xcB444e90D8198415266c6a2724b7900fb12FC56E)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/fd869f24b8f12e55433a53510ff00425d44dbfd2.svg) | ![after](/.assets/b0642612960c27e9b6f4e1835002382f60084647.svg) | + +#### WXDAI ([0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d](https://gnosisscan.io/address/0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/fd869f24b8f12e55433a53510ff00425d44dbfd2.svg) | ![after](/.assets/b0642612960c27e9b6f4e1835002382f60084647.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xcB444e90D8198415266c6a2724b7900fb12FC56E": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_StablecoinIRCurveAmendment_20240829_before_AaveV3Optimism_StablecoinIRCurveAmendment_20240829_after.md b/diffs/AaveV3Optimism_StablecoinIRCurveAmendment_20240829_before_AaveV3Optimism_StablecoinIRCurveAmendment_20240829_after.md new file mode 100644 index 000000000..7028f2ad1 --- /dev/null +++ b/diffs/AaveV3Optimism_StablecoinIRCurveAmendment_20240829_before_AaveV3Optimism_StablecoinIRCurveAmendment_20240829_after.md @@ -0,0 +1,120 @@ +## Reserve changes + +### Reserve altered + +#### USDC ([0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85](https://optimistic.etherscan.io/address/0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 69 % | 65.5 % | +| variableRateSlope1 | 9 % | 5.5 % | +| interestRate | ![before](/.assets/c7d643451e15e805ee62a25de69d34fe9bc6ed06.svg) | ![after](/.assets/d7c18f984b71e5f66cebf23ccf14dfe374c5aea5.svg) | + +#### sUSD ([0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9](https://optimistic.etherscan.io/address/0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/0306558ca945fa6bf094ed4dc3c695b090af4273.svg) | ![after](/.assets/951d49070e612a5403fc1f2dd3d2ddc01451b318.svg) | + +#### USDT ([0x94b008aA00579c1307B0EF2c499aD98a8ce58e58](https://optimistic.etherscan.io/address/0x94b008aA00579c1307B0EF2c499aD98a8ce58e58)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/b756f485e0a4f77f2e519fa5fdeb44454e53900e.svg) | ![after](/.assets/a6c0aceaa49e1b7b29b7ac5bfdef770548c468d6.svg) | + +#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://optimistic.etherscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/b756f485e0a4f77f2e519fa5fdeb44454e53900e.svg) | ![after](/.assets/a6c0aceaa49e1b7b29b7ac5bfdef770548c468d6.svg) | + +#### LUSD ([0xc40F949F8a4e094D1b49a23ea9241D289B7b2819](https://optimistic.etherscan.io/address/0xc40F949F8a4e094D1b49a23ea9241D289B7b2819)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 93.5 % | 92.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/5603d9f34bbf84ceb6513f5e937d7c004e9ee12a.svg) | ![after](/.assets/77e8b4e8ca779dca15dad80d4e2d35851e9936e0.svg) | + +#### MAI ([0xdFA46478F9e5EA86d57387849598dbFB2e964b02](https://optimistic.etherscan.io/address/0xdFA46478F9e5EA86d57387849598dbFB2e964b02)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 306.5 % | 305.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/b1ddd2130611cb445002caf4960064cec7b0692c.svg) | ![after](/.assets/b01ecd05f671ebefee2c3db6c5419cfd8db4cc6d.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85": { + "maxVariableBorrowRate": { + "from": "690000000000000000000000000", + "to": "655000000000000000000000000" + }, + "variableRateSlope1": { + "from": "90000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819": { + "maxVariableBorrowRate": { + "from": "935000000000000000000000000", + "to": "925000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xdFA46478F9e5EA86d57387849598dbFB2e964b02": { + "maxVariableBorrowRate": { + "from": "3065000000000000000000000000", + "to": "3055000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_StablecoinIRCurveAmendment_20240829_before_AaveV3Polygon_StablecoinIRCurveAmendment_20240829_after.md b/diffs/AaveV3Polygon_StablecoinIRCurveAmendment_20240829_before_AaveV3Polygon_StablecoinIRCurveAmendment_20240829_after.md new file mode 100644 index 000000000..9690cff9a --- /dev/null +++ b/diffs/AaveV3Polygon_StablecoinIRCurveAmendment_20240829_before_AaveV3Polygon_StablecoinIRCurveAmendment_20240829_after.md @@ -0,0 +1,120 @@ +## Reserve changes + +### Reserve altered + +#### USDC ([0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359](https://polygonscan.com/address/0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 66.5 % | 65.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/0b207451ec38eb4a7c392a3d9c43ab7e77836211.svg) | ![after](/.assets/b27664e2bba5abe215b912a5fe562266fbcca6fd.svg) | + +#### jEUR ([0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c](https://polygonscan.com/address/0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 66.5 % | 65.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/0b207451ec38eb4a7c392a3d9c43ab7e77836211.svg) | ![after](/.assets/b27664e2bba5abe215b912a5fe562266fbcca6fd.svg) | + +#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/938dd0b29af2a7ddfe8cbd0de959c4c24b5ea9ef.svg) | ![after](/.assets/c9c9093a6438fd3f547513a97d88d37319d11c5d.svg) | + +#### EURA ([0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4](https://polygonscan.com/address/0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/fa2d9144d6937d795a23d4864f7e30b8efbfa233.svg) | ![after](/.assets/796680e4254d0e06db0b26ecfb8ab8fb3d9d298a.svg) | + +#### EURS ([0xE111178A87A3BFf0c8d18DECBa5798827539Ae99](https://polygonscan.com/address/0xE111178A87A3BFf0c8d18DECBa5798827539Ae99)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/fa2d9144d6937d795a23d4864f7e30b8efbfa233.svg) | ![after](/.assets/796680e4254d0e06db0b26ecfb8ab8fb3d9d298a.svg) | + +#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 81.5 % | 80.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/938dd0b29af2a7ddfe8cbd0de959c4c24b5ea9ef.svg) | ![after](/.assets/c9c9093a6438fd3f547513a97d88d37319d11c5d.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359": { + "maxVariableBorrowRate": { + "from": "665000000000000000000000000", + "to": "655000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c": { + "maxVariableBorrowRate": { + "from": "665000000000000000000000000", + "to": "655000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xE111178A87A3BFf0c8d18DECBa5798827539Ae99": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + }, + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": { + "maxVariableBorrowRate": { + "from": "815000000000000000000000000", + "to": "805000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Scroll_StablecoinIRCurveAmendment_20240829_before_AaveV3Scroll_StablecoinIRCurveAmendment_20240829_after.md b/diffs/AaveV3Scroll_StablecoinIRCurveAmendment_20240829_before_AaveV3Scroll_StablecoinIRCurveAmendment_20240829_after.md new file mode 100644 index 000000000..33e4fc45a --- /dev/null +++ b/diffs/AaveV3Scroll_StablecoinIRCurveAmendment_20240829_before_AaveV3Scroll_StablecoinIRCurveAmendment_20240829_after.md @@ -0,0 +1,30 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4](https://scrollscan.com/address/0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 66.5 % | 65.5 % | +| variableRateSlope1 | 6.5 % | 5.5 % | +| interestRate | ![before](/.assets/4a8178b70e2e1d9be97f627f529f7680d26bd083.svg) | ![after](/.assets/79d81a829bfe358f506a4e7b9c9cd91bd31cbb1c.svg) | + +## Raw diff + +```json +{ + "strategies": { + "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4": { + "maxVariableBorrowRate": { + "from": "665000000000000000000000000", + "to": "655000000000000000000000000" + }, + "variableRateSlope1": { + "from": "65000000000000000000000000", + "to": "55000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.sol new file mode 100644 index 000000000..cea95c58c --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; +import {AaveV2PayloadEthereum} from 'aave-helpers/src/v2-config-engine/AaveV2PayloadEthereum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV2ConfigEngine} from 'aave-helpers/src/v2-config-engine/IAaveV2ConfigEngine.sol'; +import {IV2RateStrategyFactory} from 'aave-helpers/src/v2-config-engine/IV2RateStrategyFactory.sol'; +/** + * @title Stablecoin IR Curve Amendment + * @author Aave Chan Initiative + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669 + */ +contract AaveV2Ethereum_StablecoinIRCurveAmendment_20240829 is AaveV2PayloadEthereum { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV2ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV2ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV2ConfigEngine.RateStrategyUpdate[](3); + rateStrategies[0] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2EthereumAssets.USDT_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(5_50), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2EthereumAssets.DAI_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(5_50), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2EthereumAssets.USDC_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(5_50), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.t.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.t.sol new file mode 100644 index 000000000..24b7e6693 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Ethereum} from 'aave-address-book/AaveV2Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; +import {AaveV2Ethereum_StablecoinIRCurveAmendment_20240829} from './AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Test for AaveV2Ethereum_StablecoinIRCurveAmendment_20240829 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.t.sol -vv + */ +contract AaveV2Ethereum_StablecoinIRCurveAmendment_20240829_Test is ProtocolV2TestBase { + AaveV2Ethereum_StablecoinIRCurveAmendment_20240829 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20633700); + proposal = new AaveV2Ethereum_StablecoinIRCurveAmendment_20240829(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV2Ethereum_StablecoinIRCurveAmendment_20240829', + AaveV2Ethereum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.sol new file mode 100644 index 000000000..0e8a619e6 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.sol @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {AaveV3PayloadArbitrum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadArbitrum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Stablecoin IR Curve Amendment + * @author Aave Chan Initiative + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669 + */ +contract AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829 is AaveV3PayloadArbitrum { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](6); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3ArbitrumAssets.DAI_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3ArbitrumAssets.USDT_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3ArbitrumAssets.EURS_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[3] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3ArbitrumAssets.LUSD_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[4] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3ArbitrumAssets.USDCn_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[5] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3ArbitrumAssets.FRAX_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.t.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.t.sol new file mode 100644 index 000000000..befbf7c99 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829} from './AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Test for AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829 + * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.t.sol -vv + */ +contract AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829_Test is ProtocolV3TestBase { + AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('arbitrum'), 247931985); + proposal = new AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829', + AaveV3Arbitrum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.sol new file mode 100644 index 000000000..507006cc6 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3AvalancheAssets} from 'aave-address-book/AaveV3Avalanche.sol'; +import {AaveV3PayloadAvalanche} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadAvalanche.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Stablecoin IR Curve Amendment + * @author Aave Chan Initiative + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669 + */ +contract AaveV3Avalanche_StablecoinIRCurveAmendment_20240829 is AaveV3PayloadAvalanche { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](4); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3AvalancheAssets.DAIe_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3AvalancheAssets.USDC_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3AvalancheAssets.USDt_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[3] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3AvalancheAssets.FRAX_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.t.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.t.sol new file mode 100644 index 000000000..8524e71e4 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Avalanche_StablecoinIRCurveAmendment_20240829} from './AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Test for AaveV3Avalanche_StablecoinIRCurveAmendment_20240829 + * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.t.sol -vv + */ +contract AaveV3Avalanche_StablecoinIRCurveAmendment_20240829_Test is ProtocolV3TestBase { + AaveV3Avalanche_StablecoinIRCurveAmendment_20240829 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 49860294); + proposal = new AaveV3Avalanche_StablecoinIRCurveAmendment_20240829(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Avalanche_StablecoinIRCurveAmendment_20240829', + AaveV3Avalanche.POOL, + address(proposal) + ); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.sol new file mode 100644 index 000000000..aa32d69e5 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BNBAssets} from 'aave-address-book/AaveV3BNB.sol'; +import {AaveV3PayloadBNB} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBNB.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Stablecoin IR Curve Amendment + * @author Aave Chan Initiative + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669 + */ +contract AaveV3BNB_StablecoinIRCurveAmendment_20240829 is AaveV3PayloadBNB { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](3); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3BNBAssets.USDC_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3BNBAssets.USDT_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3BNBAssets.FDUSD_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.t.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.t.sol new file mode 100644 index 000000000..8b66634a6 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.t.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3BNB_StablecoinIRCurveAmendment_20240829} from './AaveV3BNB_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Test for AaveV3BNB_StablecoinIRCurveAmendment_20240829 + * command: FOUNDRY_PROFILE=bnb forge test --match-path=src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.t.sol -vv + */ +contract AaveV3BNB_StablecoinIRCurveAmendment_20240829_Test is ProtocolV3TestBase { + AaveV3BNB_StablecoinIRCurveAmendment_20240829 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('bnb'), 41786640); + proposal = new AaveV3BNB_StablecoinIRCurveAmendment_20240829(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest('AaveV3BNB_StablecoinIRCurveAmendment_20240829', AaveV3BNB.POOL, address(proposal)); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.sol new file mode 100644 index 000000000..30ab702d8 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; +import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Stablecoin IR Curve Amendment + * @author Aave Chan Initiative + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669 + */ +contract AaveV3Base_StablecoinIRCurveAmendment_20240829 is AaveV3PayloadBase { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3BaseAssets.USDC_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.t.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.t.sol new file mode 100644 index 000000000..f8d26c298 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Base_StablecoinIRCurveAmendment_20240829} from './AaveV3Base_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Test for AaveV3Base_StablecoinIRCurveAmendment_20240829 + * command: FOUNDRY_PROFILE=base forge test --match-path=src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.t.sol -vv + */ +contract AaveV3Base_StablecoinIRCurveAmendment_20240829_Test is ProtocolV3TestBase { + AaveV3Base_StablecoinIRCurveAmendment_20240829 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('base'), 19072163); + proposal = new AaveV3Base_StablecoinIRCurveAmendment_20240829(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Base_StablecoinIRCurveAmendment_20240829', + AaveV3Base.POOL, + address(proposal) + ); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.sol new file mode 100644 index 000000000..efddc45a0 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.sol @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Stablecoin IR Curve Amendment + * @author Aave Chan Initiative + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669 + */ +contract AaveV3Ethereum_StablecoinIRCurveAmendment_20240829 is AaveV3PayloadEthereum { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](7); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3EthereumAssets.USDC_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3EthereumAssets.DAI_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3EthereumAssets.USDT_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[3] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3EthereumAssets.LUSD_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[4] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3EthereumAssets.FRAX_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[5] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3EthereumAssets.crvUSD_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[6] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3EthereumAssets.PYUSD_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.t.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.t.sol new file mode 100644 index 000000000..b8dc2e980 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_StablecoinIRCurveAmendment_20240829} from './AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Test for AaveV3Ethereum_StablecoinIRCurveAmendment_20240829 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.t.sol -vv + */ +contract AaveV3Ethereum_StablecoinIRCurveAmendment_20240829_Test is ProtocolV3TestBase { + AaveV3Ethereum_StablecoinIRCurveAmendment_20240829 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20633810); + proposal = new AaveV3Ethereum_StablecoinIRCurveAmendment_20240829(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_StablecoinIRCurveAmendment_20240829', + AaveV3Ethereum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.sol new file mode 100644 index 000000000..4f5c7979b --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol'; +import {AaveV3PayloadGnosis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadGnosis.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Stablecoin IR Curve Amendment + * @author Aave Chan Initiative + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669 + */ +contract AaveV3Gnosis_StablecoinIRCurveAmendment_20240829 is AaveV3PayloadGnosis { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](3); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3GnosisAssets.USDC_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3GnosisAssets.WXDAI_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3GnosisAssets.EURe_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.t.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.t.sol new file mode 100644 index 000000000..8d23ff5f8 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Gnosis_StablecoinIRCurveAmendment_20240829} from './AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Test for AaveV3Gnosis_StablecoinIRCurveAmendment_20240829 + * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.t.sol -vv + */ +contract AaveV3Gnosis_StablecoinIRCurveAmendment_20240829_Test is ProtocolV3TestBase { + AaveV3Gnosis_StablecoinIRCurveAmendment_20240829 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('gnosis'), 35732029); + proposal = new AaveV3Gnosis_StablecoinIRCurveAmendment_20240829(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Gnosis_StablecoinIRCurveAmendment_20240829', + AaveV3Gnosis.POOL, + address(proposal) + ); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.sol new file mode 100644 index 000000000..dfed02cb5 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.sol @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; +import {AaveV3PayloadOptimism} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadOptimism.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Stablecoin IR Curve Amendment + * @author Aave Chan Initiative + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669 + */ +contract AaveV3Optimism_StablecoinIRCurveAmendment_20240829 is AaveV3PayloadOptimism { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](6); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3OptimismAssets.DAI_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3OptimismAssets.USDT_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3OptimismAssets.sUSD_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[3] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3OptimismAssets.LUSD_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[4] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3OptimismAssets.MAI_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[5] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3OptimismAssets.USDCn_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.t.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.t.sol new file mode 100644 index 000000000..ca1860084 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Optimism_StablecoinIRCurveAmendment_20240829} from './AaveV3Optimism_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Test for AaveV3Optimism_StablecoinIRCurveAmendment_20240829 + * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.t.sol -vv + */ +contract AaveV3Optimism_StablecoinIRCurveAmendment_20240829_Test is ProtocolV3TestBase { + AaveV3Optimism_StablecoinIRCurveAmendment_20240829 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('optimism'), 124667325); + proposal = new AaveV3Optimism_StablecoinIRCurveAmendment_20240829(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Optimism_StablecoinIRCurveAmendment_20240829', + AaveV3Optimism.POOL, + address(proposal) + ); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.sol new file mode 100644 index 000000000..824c5b626 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.sol @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; +import {AaveV3PayloadPolygon} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadPolygon.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Stablecoin IR Curve Amendment + * @author Aave Chan Initiative + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669 + */ +contract AaveV3Polygon_StablecoinIRCurveAmendment_20240829 is AaveV3PayloadPolygon { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](6); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3PolygonAssets.DAI_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3PolygonAssets.USDT_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3PolygonAssets.EURS_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[3] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3PolygonAssets.jEUR_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[4] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3PolygonAssets.EURA_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[5] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3PolygonAssets.USDCn_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.t.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.t.sol new file mode 100644 index 000000000..fd476d521 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Polygon_StablecoinIRCurveAmendment_20240829} from './AaveV3Polygon_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Test for AaveV3Polygon_StablecoinIRCurveAmendment_20240829 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.t.sol -vv + */ +contract AaveV3Polygon_StablecoinIRCurveAmendment_20240829_Test is ProtocolV3TestBase { + AaveV3Polygon_StablecoinIRCurveAmendment_20240829 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 61179036); + proposal = new AaveV3Polygon_StablecoinIRCurveAmendment_20240829(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Polygon_StablecoinIRCurveAmendment_20240829', + AaveV3Polygon.POOL, + address(proposal) + ); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.sol new file mode 100644 index 000000000..9201e492d --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3ScrollAssets} from 'aave-address-book/AaveV3Scroll.sol'; +import {AaveV3PayloadScroll} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadScroll.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Stablecoin IR Curve Amendment + * @author Aave Chan Initiative + * - Snapshot: Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669 + */ +contract AaveV3Scroll_StablecoinIRCurveAmendment_20240829 is AaveV3PayloadScroll { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3ScrollAssets.USDC_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 5_50, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.t.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.t.sol new file mode 100644 index 000000000..c52ba2d09 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Scroll} from 'aave-address-book/AaveV3Scroll.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Scroll_StablecoinIRCurveAmendment_20240829} from './AaveV3Scroll_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Test for AaveV3Scroll_StablecoinIRCurveAmendment_20240829 + * command: FOUNDRY_PROFILE=scroll forge test --match-path=src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.t.sol -vv + */ +contract AaveV3Scroll_StablecoinIRCurveAmendment_20240829_Test is ProtocolV3TestBase { + AaveV3Scroll_StablecoinIRCurveAmendment_20240829 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('scroll'), 8810767); + proposal = new AaveV3Scroll_StablecoinIRCurveAmendment_20240829(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Scroll_StablecoinIRCurveAmendment_20240829', + AaveV3Scroll.POOL, + address(proposal) + ); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment.md b/src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment.md new file mode 100644 index 000000000..3565e233a --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment.md @@ -0,0 +1,81 @@ +--- +title: "Stablecoin IR Curve Amendment" +author: "Aave Chan Initiative" +discussions: "https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669" +--- + +## Simple Summary + +A proposal to decrease stablecoin Interest Rate parameters across all Aave deployments. + +## Motivation + +Given the decrease in DSR — from 7% to 6% — it is prudent to update Aave stablecoin interest rates to best align with the broader market. Previously, we [recommended ](https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-07-14-24/18252) reducing rates concurrent with the last DSR decrease from 8% to 7% in July. + +The new parameters went into effect in mid-July and have continued to provide stable rates across Aave V3. We note that, following the announcement of the DSR decrease, there has been a notable drop in rates, converging around 5.5%. + +Following our methodology laid out in previous [recommendations ](https://governance.aave.com/t/arfc-stablecoin-ir-curve-amendment-on-aave-v2-and-v3/16864/2), we recommend closely aligning Slope1 with the DSR to reduce the opportunity for rate arbitrage and ensure that Aave remains competitive. As a result, we propose decreasing Slope1 to 0.5% below the DSR, setting it at 5.5%. + +### Caveats: + +1. We do not recommend an update to lower-cap stablecoins on Ethereum V2, as they are currently being deprecated. +2. Similar to the previous proposals, we do not recommend a change on bridged USDC (USDC.e/USDbC) on all deployments. This way, they will have a higher Slope1 to motivate the borrowing of native USDC. + +## Specification + +| **Market** | **Asset** | **Current Slope1** | **Recommended Slope1** | +| ------------ | --------- | ------------------ | ---------------------- | +| Ethereum V2 | USDC | 6.5% | 5.5% | +| Ethereum V2 | USDT | 6.5% | 5.5% | +| Ethereum V2 | DAI | 6.5% | 5.5% | +| Ethereum V3 | USDC | 6.5% | 5.5% | +| Ethereum V3 | USDT | 6.5% | 5.5% | +| Ethereum V3 | FRAX | 6.5% | 5.5% | +| Ethereum V3 | DAI | 6.5% | 5.5% | +| Ethereum V3 | LUSD | 6.5% | 5.5% | +| Ethereum V3 | pyUSD | 6.5% | 5.5% | +| Ethereum V3 | crvUSD | 6.5% | 5.5% | +| Avalanche V3 | USDC | 6.5% | 5.5% | +| Avalanche V3 | USDT | 6.5% | 5.5% | +| Avalanche V3 | DAI | 6.5% | 5.5% | +| Avalanche V3 | FRAX | 6.5% | 5.5% | +| Polygon V3 | USDC | 6.5% | 5.5% | +| Polygon V3 | USDT | 6.5% | 5.5% | +| Polygon V3 | DAI | 6.5% | 5.5% | +| Polygon V3 | EURA | 6.5% | 5.5% | +| Polygon V3 | EURS | 6.5% | 5.5% | +| Polygon V3 | jEUR | 6.5% | 5.5% | +| Optimism V3 | USDC | 9% | 5.5% | +| Optimism V3 | USDT | 6.5% | 5.5% | +| Optimism V3 | DAI | 6.5% | 5.5% | +| Optimism V3 | sUSD | 6.5% | 5.5% | +| Optimism V3 | LUSD | 6.5% | 5.5% | +| Optimism V3 | MAI | 6.5% | 5.5% | +| Arbitrum V3 | USDC | 9% | 5.5% | +| Arbitrum V3 | USDT | 6.5% | 5.5% | +| Arbitrum V3 | DAI | 6.5% | 5.5% | +| Arbitrum V3 | LUSD | 6.5% | 5.5% | +| Arbitrum V3 | FRAX | 6.5% | 5.5% | +| Arbitrum V3 | EURS | 6.5% | 5.5% | +| Base V3 | USDC | 6.5% | 5.5% | +| Metis V3 | m.USDC | 6% | No Change | +| Metis V3 | m.USDT | 6% | No Change | +| Metis V3 | m.DAI | 7% | No Change | +| BNB Chain V3 | USDT | 6.5% | 5.5% | +| BNB Chain V3 | USDC | 6.5% | 5.5% | +| BNB Chain V3 | FDUSD | 6.5% | 5.5% | +| Scroll V3 | USDC | 6.5% | 5.5% | +| Gnosis V3 | WXDAI | 6.5% | 5.5% | +| Gnosis V3 | USDC | 6.5% | 5.5% | +| Gnosis V3 | EURe | 6.5% | 5.5% | + +## References + +- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.sol) +- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.t.sol) +- Snapshot: Direct-to-AIP +- [Discussion](https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol b/src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol new file mode 100644 index 000000000..50eaa0d51 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol @@ -0,0 +1,308 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, BaseScript, GnosisScript, ScrollScript, BNBScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV2Ethereum_StablecoinIRCurveAmendment_20240829} from './AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.sol'; +import {AaveV3Ethereum_StablecoinIRCurveAmendment_20240829} from './AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.sol'; +import {AaveV3Polygon_StablecoinIRCurveAmendment_20240829} from './AaveV3Polygon_StablecoinIRCurveAmendment_20240829.sol'; +import {AaveV3Avalanche_StablecoinIRCurveAmendment_20240829} from './AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.sol'; +import {AaveV3Optimism_StablecoinIRCurveAmendment_20240829} from './AaveV3Optimism_StablecoinIRCurveAmendment_20240829.sol'; +import {AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829} from './AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.sol'; +import {AaveV3Base_StablecoinIRCurveAmendment_20240829} from './AaveV3Base_StablecoinIRCurveAmendment_20240829.sol'; +import {AaveV3Gnosis_StablecoinIRCurveAmendment_20240829} from './AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.sol'; +import {AaveV3Scroll_StablecoinIRCurveAmendment_20240829} from './AaveV3Scroll_StablecoinIRCurveAmendment_20240829.sol'; +import {AaveV3BNB_StablecoinIRCurveAmendment_20240829} from './AaveV3BNB_StablecoinIRCurveAmendment_20240829.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/StablecoinIRCurveAmendment_20240829.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Ethereum_StablecoinIRCurveAmendment_20240829).creationCode + ); + address payload1 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_StablecoinIRCurveAmendment_20240829).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](2); + actions[0] = GovV3Helpers.buildAction(payload0); + actions[1] = GovV3Helpers.buildAction(payload1); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Polygon + * deploy-command: make deploy-ledger contract=src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol:DeployPolygon chain=polygon + * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/StablecoinIRCurveAmendment_20240829.s.sol/137/run-latest.json + */ +contract DeployPolygon is PolygonScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Polygon_StablecoinIRCurveAmendment_20240829).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Avalanche + * deploy-command: make deploy-ledger contract=src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol:DeployAvalanche chain=avalanche + * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/StablecoinIRCurveAmendment_20240829.s.sol/43114/run-latest.json + */ +contract DeployAvalanche is AvalancheScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Avalanche_StablecoinIRCurveAmendment_20240829).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Optimism + * deploy-command: make deploy-ledger contract=src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol:DeployOptimism chain=optimism + * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/StablecoinIRCurveAmendment_20240829.s.sol/10/run-latest.json + */ +contract DeployOptimism is OptimismScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Optimism_StablecoinIRCurveAmendment_20240829).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Arbitrum + * deploy-command: make deploy-ledger contract=src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol:DeployArbitrum chain=arbitrum + * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/StablecoinIRCurveAmendment_20240829.s.sol/42161/run-latest.json + */ +contract DeployArbitrum is ArbitrumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Base + * deploy-command: make deploy-ledger contract=src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol:DeployBase chain=base + * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/StablecoinIRCurveAmendment_20240829.s.sol/8453/run-latest.json + */ +contract DeployBase is BaseScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Base_StablecoinIRCurveAmendment_20240829).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Gnosis + * deploy-command: make deploy-ledger contract=src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol:DeployGnosis chain=gnosis + * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/StablecoinIRCurveAmendment_20240829.s.sol/100/run-latest.json + */ +contract DeployGnosis is GnosisScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Gnosis_StablecoinIRCurveAmendment_20240829).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Scroll + * deploy-command: make deploy-ledger contract=src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol:DeployScroll chain=scroll + * verify-command: FOUNDRY_PROFILE=scroll npx catapulta-verify -b broadcast/StablecoinIRCurveAmendment_20240829.s.sol/534352/run-latest.json + */ +contract DeployScroll is ScrollScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Scroll_StablecoinIRCurveAmendment_20240829).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy BNB + * deploy-command: make deploy-ledger contract=src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol:DeployBNB chain=bnb + * verify-command: FOUNDRY_PROFILE=bnb npx catapulta-verify -b broadcast/StablecoinIRCurveAmendment_20240829.s.sol/56/run-latest.json + */ +contract DeployBNB is BNBScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3BNB_StablecoinIRCurveAmendment_20240829).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment_20240829.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](9); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](2); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV2Ethereum_StablecoinIRCurveAmendment_20240829).creationCode + ); + actionsEthereum[1] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_StablecoinIRCurveAmendment_20240829).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); + actionsPolygon[0] = GovV3Helpers.buildAction( + type(AaveV3Polygon_StablecoinIRCurveAmendment_20240829).creationCode + ); + payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); + actionsAvalanche[0] = GovV3Helpers.buildAction( + type(AaveV3Avalanche_StablecoinIRCurveAmendment_20240829).creationCode + ); + payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); + actionsOptimism[0] = GovV3Helpers.buildAction( + type(AaveV3Optimism_StablecoinIRCurveAmendment_20240829).creationCode + ); + payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsArbitrum[0] = GovV3Helpers.buildAction( + type(AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829).creationCode + ); + payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction( + type(AaveV3Base_StablecoinIRCurveAmendment_20240829).creationCode + ); + payloads[5] = GovV3Helpers.buildBasePayload(vm, actionsBase); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsGnosis[0] = GovV3Helpers.buildAction( + type(AaveV3Gnosis_StablecoinIRCurveAmendment_20240829).creationCode + ); + payloads[6] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsScroll = new IPayloadsControllerCore.ExecutionAction[](1); + actionsScroll[0] = GovV3Helpers.buildAction( + type(AaveV3Scroll_StablecoinIRCurveAmendment_20240829).creationCode + ); + payloads[7] = GovV3Helpers.buildScrollPayload(vm, actionsScroll); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBNB[0] = GovV3Helpers.buildAction( + type(AaveV3BNB_StablecoinIRCurveAmendment_20240829).creationCode + ); + payloads[8] = GovV3Helpers.buildBNBPayload(vm, actionsBNB); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment.md' + ) + ); + } +} diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/config.ts b/src/20240829_Multi_StablecoinIRCurveAmendment/config.ts new file mode 100644 index 000000000..2c3658274 --- /dev/null +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/config.ts @@ -0,0 +1,463 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + author: 'Aave Chan Initiative', + pools: [ + 'AaveV2Ethereum', + 'AaveV3Ethereum', + 'AaveV3Polygon', + 'AaveV3Avalanche', + 'AaveV3Optimism', + 'AaveV3Arbitrum', + 'AaveV3Base', + 'AaveV3Gnosis', + 'AaveV3Scroll', + 'AaveV3BNB', + ], + title: 'Stablecoin IR Curve Amendment', + shortName: 'StablecoinIRCurveAmendment', + date: '20240829', + discussion: + 'https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669', + snapshot: 'Direct-to-AIP', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV2Ethereum: { + configs: { + RATE_UPDATE_V2: [ + { + asset: 'USDT', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'DAI', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'USDC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 20633700}, + }, + AaveV3Ethereum: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'USDC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'DAI', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'USDT', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'LUSD', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'FRAX', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'crvUSD', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'PYUSD', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 20633810}, + }, + AaveV3Polygon: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'DAI', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'USDT', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'EURS', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'jEUR', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'EURA', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'USDCn', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 61179036}, + }, + AaveV3Avalanche: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'DAIe', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'USDC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'USDt', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'FRAX', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 49860294}, + }, + AaveV3Optimism: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'DAI', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'USDT', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'sUSD', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'LUSD', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'MAI', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'USDCn', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 124667325}, + }, + AaveV3Arbitrum: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'DAI', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'USDT', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'EURS', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'LUSD', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'USDCn', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'FRAX', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 247931985}, + }, + AaveV3Base: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'USDC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 19072163}, + }, + AaveV3Gnosis: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'USDC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'WXDAI', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'EURe', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 35727944}, + }, + AaveV3Scroll: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'USDC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 8810767}, + }, + AaveV3BNB: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'USDC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'USDT', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + { + asset: 'FDUSD', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '5.5', + variableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 41786640}, + }, + }, +}; From d2e3bdf0ee20f459885bbc774927dff1ffe31122 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Thu, 5 Sep 2024 10:48:00 +0000 Subject: [PATCH 61/68] fix(cache): automated cache update [skip ci] --- .../StablecoinIRCurveAmendment.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment.md b/src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment.md index 3565e233a..d5e2647be 100644 --- a/src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment.md +++ b/src/20240829_Multi_StablecoinIRCurveAmendment/StablecoinIRCurveAmendment.md @@ -71,8 +71,8 @@ Following our methodology laid out in previous [recommendations ](https://govern ## References -- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.sol) -- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.t.sol) +- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.sol) +- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV2Ethereum_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Ethereum_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Polygon_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Avalanche_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Optimism_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Arbitrum_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Base_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Gnosis_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3Scroll](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3Scroll_StablecoinIRCurveAmendment_20240829.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/93023bc9ee8cd0058665e122b15dc411fad9705b/src/20240829_Multi_StablecoinIRCurveAmendment/AaveV3BNB_StablecoinIRCurveAmendment_20240829.t.sol) - Snapshot: Direct-to-AIP - [Discussion](https://governance.aave.com/t/arfc-chaos-labs-stablecoin-ir-curve-amendment-on-aave-v2-and-v3-2024-08-15/18669) From 26c71f6445e00458db0ebcd5c31f9e7e6f945488 Mon Sep 17 00:00:00 2001 From: defi jesus Date: Fri, 6 Sep 2024 17:00:24 +0100 Subject: [PATCH 62/68] Reserve FactorUpdates Late August (#439) * ready for review * add ethv2 diff * fix typo in .md * add gnosis * add gnosis payload and tests to .md * add deploy scripts for Gnosis * add gnosis changes to md table --------- Co-authored-by: defijesus.eth --- ...eFactorUpdatesLateAugust_20240821_after.md | 90 +++++++ ...eFactorUpdatesLateAugust_20240821_after.md | 90 +++++++ ...eFactorUpdatesLateAugust_20240821_after.md | 158 +++++++++++ ...eFactorUpdatesLateAugust_20240821_after.md | 25 ++ ...eFactorUpdatesLateAugust_20240821_after.md | 25 ++ ...eFactorUpdatesLateAugust_20240821_after.md | 25 ++ ...eFactorUpdatesLateAugust_20240821_after.md | 25 ++ ...eFactorUpdatesLateAugust_20240821_after.md | 25 ++ ...eserveFactorUpdatesLateAugust_20240821.sol | 31 +++ ...erveFactorUpdatesLateAugust_20240821.t.sol | 78 ++++++ ...eserveFactorUpdatesLateAugust_20240821.sol | 32 +++ ...erveFactorUpdatesLateAugust_20240821.t.sol | 78 ++++++ ...eserveFactorUpdatesLateAugust_20240821.sol | 93 +++++++ ...erveFactorUpdatesLateAugust_20240821.t.sol | 32 +++ ...eserveFactorUpdatesLateAugust_20240821.sol | 36 +++ ...erveFactorUpdatesLateAugust_20240821.t.sol | 32 +++ ...eserveFactorUpdatesLateAugust_20240821.sol | 36 +++ ...erveFactorUpdatesLateAugust_20240821.t.sol | 32 +++ ...eserveFactorUpdatesLateAugust_20240821.sol | 36 +++ ...erveFactorUpdatesLateAugust_20240821.t.sol | 32 +++ ...eserveFactorUpdatesLateAugust_20240821.sol | 36 +++ ...erveFactorUpdatesLateAugust_20240821.t.sol | 32 +++ ...eserveFactorUpdatesLateAugust_20240821.sol | 36 +++ ...erveFactorUpdatesLateAugust_20240821.t.sol | 32 +++ .../ReserveFactorUpdatesLateAugust.md | 76 ++++++ ...erveFactorUpdatesLateAugust_20240821.s.sol | 248 ++++++++++++++++++ .../config.ts | 180 +++++++++++++ 27 files changed, 1651 insertions(+) create mode 100644 diffs/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821_after.md create mode 100644 diffs/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821_after.md create mode 100644 diffs/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821_after.md create mode 100644 diffs/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821_after.md create mode 100644 diffs/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Base_ReserveFactorUpdatesLateAugust_20240821_after.md create mode 100644 diffs/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821_after.md create mode 100644 diffs/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821_after.md create mode 100644 diffs/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821_after.md create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.t.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.t.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.t.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.t.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.t.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.t.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust.md create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol create mode 100644 src/20240821_Multi_ReserveFactorUpdatesLateAugust/config.ts diff --git a/diffs/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821_after.md b/diffs/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821_after.md new file mode 100644 index 000000000..f1740751f --- /dev/null +++ b/diffs/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821_after.md @@ -0,0 +1,90 @@ +## Reserve changes + +### Reserve altered + +#### WETH.e ([0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB](https://snowtrace.io/address/0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +#### WBTC.e ([0x50b7545627a5162F82A992c33b87aDc75187B218](https://snowtrace.io/address/0x50b7545627a5162F82A992c33b87aDc75187B218)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 70 % [7000] | 75 % [7500] | + + +#### USDC.e ([0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664](https://snowtrace.io/address/0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +#### WAVAX ([0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7](https://snowtrace.io/address/0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +#### USDT.e ([0xc7198437980c041c805A1EDcbA50c1Ce5db95118](https://snowtrace.io/address/0xc7198437980c041c805A1EDcbA50c1Ce5db95118)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +#### DAI.e ([0xd586E7F844cEa2F87f50152665BCbc2C279D8d70](https://snowtrace.io/address/0xd586E7F844cEa2F87f50152665BCbc2C279D8d70)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 65 % [6500] | 70 % [7000] | + + +## Raw diff + +```json +{ + "reserves": { + "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + }, + "0x50b7545627a5162F82A992c33b87aDc75187B218": { + "reserveFactor": { + "from": 7000, + "to": 7500 + } + }, + "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + }, + "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + }, + "0xc7198437980c041c805A1EDcbA50c1Ce5db95118": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + }, + "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": { + "reserveFactor": { + "from": 6500, + "to": 7000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821_after.md b/diffs/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821_after.md new file mode 100644 index 000000000..5af81ce57 --- /dev/null +++ b/diffs/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821_after.md @@ -0,0 +1,90 @@ +## Reserve changes + +### Reserve altered + +#### WBTC ([0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599](https://etherscan.io/address/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 75 % [7500] | 80 % [8000] | + + +#### LINK ([0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 75 % [7500] | 80 % [8000] | + + +#### DAI ([0x6B175474E89094C44Da98b954EedeAC495271d0F](https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 70 % [7000] | 75 % [7500] | + + +#### USDC ([0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48](https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 70 % [7000] | 75 % [7500] | + + +#### WETH ([0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2](https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 70 % [7000] | 75 % [7500] | + + +#### USDT ([0xdAC17F958D2ee523a2206206994597C13D831ec7](https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 70 % [7000] | 75 % [7500] | + + +## Raw diff + +```json +{ + "reserves": { + "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": { + "reserveFactor": { + "from": 7500, + "to": 8000 + } + }, + "0x514910771AF9Ca656af840dff83E8264EcF986CA": { + "reserveFactor": { + "from": 7500, + "to": 8000 + } + }, + "0x6B175474E89094C44Da98b954EedeAC495271d0F": { + "reserveFactor": { + "from": 7000, + "to": 7500 + } + }, + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": { + "reserveFactor": { + "from": 7000, + "to": 7500 + } + }, + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": { + "reserveFactor": { + "from": 7000, + "to": 7500 + } + }, + "0xdAC17F958D2ee523a2206206994597C13D831ec7": { + "reserveFactor": { + "from": 7000, + "to": 7500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821_after.md b/diffs/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821_after.md new file mode 100644 index 000000000..a3d110dce --- /dev/null +++ b/diffs/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821_before_AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821_after.md @@ -0,0 +1,158 @@ +## Reserve changes + +### Reserve altered + +#### WMATIC ([0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270](https://polygonscan.com/address/0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x24EFC8B78763aDb295f59bF86A03e4857720B6e4](https://polygonscan.com/address/0x24EFC8B78763aDb295f59bF86A03e4857720B6e4) | [0x38Df903141cb0d6Fd6fD79270A727bf1b9c31ebb](https://polygonscan.com/address/0x38Df903141cb0d6Fd6fD79270A727bf1b9c31ebb) | +| variableRateSlope1 | 9.75 % | 10.5 % | +| interestRate | ![before](/.assets/56688b893bbb0f550d9a9127af90b7d853dc31cc.svg) | ![after](/.assets/19924a1e1f612e7c60658167f7c7e2b710be5577.svg) | + +#### WBTC ([0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6](https://polygonscan.com/address/0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x588DEd8C297DE231005028553f902FA60B4535d7](https://polygonscan.com/address/0x588DEd8C297DE231005028553f902FA60B4535d7) | [0x2384F4cD894A474AA5F2D591C74513d6360bF9aF](https://polygonscan.com/address/0x2384F4cD894A474AA5F2D591C74513d6360bF9aF) | +| variableRateSlope1 | 7.75 % | 8.5 % | +| interestRate | ![before](/.assets/713630540c92e36cb90b3c2fe52e0fec11749832.svg) | ![after](/.assets/ffbf4bb14c7845181e7ae70f85a426cacca4d838.svg) | + +#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0xc7A565fec411b6fB2F974dd79552Cd038d5Bc575](https://polygonscan.com/address/0xc7A565fec411b6fB2F974dd79552Cd038d5Bc575) | [0xF8956d286a1f15bf4D90B741C1d065bDA5E4a8a6](https://polygonscan.com/address/0xF8956d286a1f15bf4D90B741C1d065bDA5E4a8a6) | +| variableRateSlope1 | 12.75 % | 13.5 % | +| interestRate | ![before](/.assets/105f4aa6c58b2e6a78db7ae300bcd9c754d22c1b.svg) | ![after](/.assets/56ce51bd6d0ab402a09ca0745755f9e40a1a6710.svg) | + +#### WETH ([0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619](https://polygonscan.com/address/0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0xca2D6f36F395b72DC16506a65e65f94F14455cAd](https://polygonscan.com/address/0xca2D6f36F395b72DC16506a65e65f94F14455cAd) | [0x1Cb00e80e45b6F0983AD6a4387dD1c5767a0Da28](https://polygonscan.com/address/0x1Cb00e80e45b6F0983AD6a4387dD1c5767a0Da28) | +| variableRateSlope1 | 7.75 % | 8.5 % | +| interestRate | ![before](/.assets/07a00db3efaa0b57b58074846429eafb199edf15.svg) | ![after](/.assets/f76f56c8dcaac261a258a67dc3e6f0af4ac4280d.svg) | + +#### DAI ([0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063](https://polygonscan.com/address/0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0xa68fF0Ee7Bac9bD5cf68667fBEf0870804Fce734](https://polygonscan.com/address/0xa68fF0Ee7Bac9bD5cf68667fBEf0870804Fce734) | [0x3697E0090B392A924359450aad26eD612e522d51](https://polygonscan.com/address/0x3697E0090B392A924359450aad26eD612e522d51) | +| variableRateSlope1 | 12.75 % | 13.5 % | +| interestRate | ![before](/.assets/3ea6b15e0bf1d98b12fb9f1d726f5311a14bb4b4.svg) | ![after](/.assets/d48ff7095b24daaff11a0bf59ca069c42e609640.svg) | + +#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F)) + +| description | value before | value after | +| --- | --- | --- | +| interestRateStrategy | [0x38580592Fd23E5cc6FF5c3c76966733A43e69120](https://polygonscan.com/address/0x38580592Fd23E5cc6FF5c3c76966733A43e69120) | [0x1481acF39Ea31B0853f5FBdace6368B0FCd2a3E4](https://polygonscan.com/address/0x1481acF39Ea31B0853f5FBdace6368B0FCd2a3E4) | +| variableRateSlope1 | 12.75 % | 13.5 % | +| interestRate | ![before](/.assets/0ab9d2d2bb94026740d38164d9ea7d2a491c7e5d.svg) | ![after](/.assets/c62a5aa40205eadba8f0cf9a0d24be91a48d29a2.svg) | + +## Raw diff + +```json +{ + "reserves": { + "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270": { + "interestRateStrategy": { + "from": "0x24EFC8B78763aDb295f59bF86A03e4857720B6e4", + "to": "0x38Df903141cb0d6Fd6fD79270A727bf1b9c31ebb" + } + }, + "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6": { + "interestRateStrategy": { + "from": "0x588DEd8C297DE231005028553f902FA60B4535d7", + "to": "0x2384F4cD894A474AA5F2D591C74513d6360bF9aF" + } + }, + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { + "interestRateStrategy": { + "from": "0xc7A565fec411b6fB2F974dd79552Cd038d5Bc575", + "to": "0xF8956d286a1f15bf4D90B741C1d065bDA5E4a8a6" + } + }, + "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": { + "interestRateStrategy": { + "from": "0xca2D6f36F395b72DC16506a65e65f94F14455cAd", + "to": "0x1Cb00e80e45b6F0983AD6a4387dD1c5767a0Da28" + } + }, + "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": { + "interestRateStrategy": { + "from": "0xa68fF0Ee7Bac9bD5cf68667fBEf0870804Fce734", + "to": "0x3697E0090B392A924359450aad26eD612e522d51" + } + }, + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": { + "interestRateStrategy": { + "from": "0x38580592Fd23E5cc6FF5c3c76966733A43e69120", + "to": "0x1481acF39Ea31B0853f5FBdace6368B0FCd2a3E4" + } + } + }, + "strategies": { + "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270": { + "address": { + "from": "0x24EFC8B78763aDb295f59bF86A03e4857720B6e4", + "to": "0x38Df903141cb0d6Fd6fD79270A727bf1b9c31ebb" + }, + "variableRateSlope1": { + "from": "97500000000000000000000000", + "to": "105000000000000000000000000" + } + }, + "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6": { + "address": { + "from": "0x588DEd8C297DE231005028553f902FA60B4535d7", + "to": "0x2384F4cD894A474AA5F2D591C74513d6360bF9aF" + }, + "variableRateSlope1": { + "from": "77500000000000000000000000", + "to": "85000000000000000000000000" + } + }, + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { + "address": { + "from": "0xc7A565fec411b6fB2F974dd79552Cd038d5Bc575", + "to": "0xF8956d286a1f15bf4D90B741C1d065bDA5E4a8a6" + }, + "variableRateSlope1": { + "from": "127500000000000000000000000", + "to": "135000000000000000000000000" + } + }, + "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619": { + "address": { + "from": "0xca2D6f36F395b72DC16506a65e65f94F14455cAd", + "to": "0x1Cb00e80e45b6F0983AD6a4387dD1c5767a0Da28" + }, + "variableRateSlope1": { + "from": "77500000000000000000000000", + "to": "85000000000000000000000000" + } + }, + "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063": { + "address": { + "from": "0xa68fF0Ee7Bac9bD5cf68667fBEf0870804Fce734", + "to": "0x3697E0090B392A924359450aad26eD612e522d51" + }, + "variableRateSlope1": { + "from": "127500000000000000000000000", + "to": "135000000000000000000000000" + } + }, + "0xc2132D05D31c914a87C6611C10748AEb04B58e8F": { + "address": { + "from": "0x38580592Fd23E5cc6FF5c3c76966733A43e69120", + "to": "0x1481acF39Ea31B0853f5FBdace6368B0FCd2a3E4" + }, + "variableRateSlope1": { + "from": "127500000000000000000000000", + "to": "135000000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821_after.md b/diffs/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821_after.md new file mode 100644 index 000000000..29e491e38 --- /dev/null +++ b/diffs/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8](https://arbiscan.io/address/0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 35 % [3500] | 40 % [4000] | + + +## Raw diff + +```json +{ + "reserves": { + "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": { + "reserveFactor": { + "from": 3500, + "to": 4000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Base_ReserveFactorUpdatesLateAugust_20240821_after.md b/diffs/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Base_ReserveFactorUpdatesLateAugust_20240821_after.md new file mode 100644 index 000000000..5d09398d9 --- /dev/null +++ b/diffs/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Base_ReserveFactorUpdatesLateAugust_20240821_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDbC ([0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA](https://basescan.org/address/0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 35 % [3500] | 40 % [4000] | + + +## Raw diff + +```json +{ + "reserves": { + "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA": { + "reserveFactor": { + "from": 3500, + "to": 4000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821_after.md b/diffs/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821_after.md new file mode 100644 index 000000000..3c34e8984 --- /dev/null +++ b/diffs/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83](https://gnosisscan.io/address/0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 10 % [1000] | 15 % [1500] | + + +## Raw diff + +```json +{ + "reserves": { + "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83": { + "reserveFactor": { + "from": 1000, + "to": 1500 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821_after.md b/diffs/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821_after.md new file mode 100644 index 000000000..c4ddca616 --- /dev/null +++ b/diffs/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0x7F5c764cBc14f9669B88837ca1490cCa17c31607](https://optimistic.etherscan.io/address/0x7F5c764cBc14f9669B88837ca1490cCa17c31607)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 35 % [3500] | 40 % [4000] | + + +## Raw diff + +```json +{ + "reserves": { + "0x7F5c764cBc14f9669B88837ca1490cCa17c31607": { + "reserveFactor": { + "from": 3500, + "to": 4000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821_after.md b/diffs/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821_after.md new file mode 100644 index 000000000..15e2d7688 --- /dev/null +++ b/diffs/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821_before_AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821_after.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174](https://polygonscan.com/address/0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)) + +| description | value before | value after | +| --- | --- | --- | +| reserveFactor | 35 % [3500] | 40 % [4000] | + + +## Raw diff + +```json +{ + "reserves": { + "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": { + "reserveFactor": { + "from": 3500, + "to": 4000 + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.sol new file mode 100644 index 000000000..97d313f7e --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +import {AaveV2Avalanche, AaveV2AvalancheAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Avalanche.sol'; +/** + * @title Reserve Factor Updates Late August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821 is IProposalGenericExecutor { + ILendingPoolConfigurator public constant POOL_CONFIGURATOR = + ILendingPoolConfigurator(AaveV2Avalanche.POOL_CONFIGURATOR); + + uint256 public constant DAIe_RF = 70_00; + uint256 public constant USDCe_RF = 70_00; + uint256 public constant USDTe_RF = 70_00; + uint256 public constant WAVAX_RF = 70_00; + uint256 public constant WBTCe_RF = 75_00; + uint256 public constant WETHe_RF = 70_00; + + function execute() external { + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.DAIe_UNDERLYING, DAIe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.USDCe_UNDERLYING, USDCe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.USDTe_UNDERLYING, USDTe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WAVAX_UNDERLYING, WAVAX_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WBTCe_UNDERLYING, WBTCe_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2AvalancheAssets.WETHe_UNDERLYING, WETHe_RF); + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.t.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.t.sol new file mode 100644 index 000000000..2703a8ea1 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.t.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Avalanche, AaveV2AvalancheAssets} from 'aave-address-book/AaveV2Avalanche.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; +import {AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821} from './AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.sol'; + +/** + * @dev Test for AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821 + * command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.t.sol -vv + */ +contract AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821_Test is ProtocolV2TestBase { + AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821 internal proposal; + + struct Changes { + address asset; + uint256 reserveFactor; + } + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('avalanche'), 49543127); + proposal = new AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest( + 'AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821', + AaveV2Avalanche.POOL, + address(proposal) + ); + + address[] memory assetsChanged = new address[](6); + assetsChanged[0] = AaveV2AvalancheAssets.DAIe_UNDERLYING; + assetsChanged[1] = AaveV2AvalancheAssets.USDCe_UNDERLYING; + assetsChanged[2] = AaveV2AvalancheAssets.USDTe_UNDERLYING; + assetsChanged[3] = AaveV2AvalancheAssets.WAVAX_UNDERLYING; + assetsChanged[4] = AaveV2AvalancheAssets.WBTCe_UNDERLYING; + assetsChanged[5] = AaveV2AvalancheAssets.WETHe_UNDERLYING; + + Changes[] memory assetChanges = new Changes[](6); + assetChanges[0] = Changes({ + asset: AaveV2AvalancheAssets.DAIe_UNDERLYING, + reserveFactor: proposal.DAIe_RF() + }); + assetChanges[1] = Changes({ + asset: AaveV2AvalancheAssets.USDCe_UNDERLYING, + reserveFactor: proposal.USDCe_RF() + }); + assetChanges[2] = Changes({ + asset: AaveV2AvalancheAssets.USDTe_UNDERLYING, + reserveFactor: proposal.USDTe_RF() + }); + assetChanges[3] = Changes({ + asset: AaveV2AvalancheAssets.WAVAX_UNDERLYING, + reserveFactor: proposal.WAVAX_RF() + }); + assetChanges[4] = Changes({ + asset: AaveV2AvalancheAssets.WBTCe_UNDERLYING, + reserveFactor: proposal.WBTCe_RF() + }); + assetChanges[5] = Changes({ + asset: AaveV2AvalancheAssets.WETHe_UNDERLYING, + reserveFactor: proposal.WETHe_RF() + }); + + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + for (uint i = 0; i < assetChanges.length; i++) { + ReserveConfig memory cfg = _findReserveConfig(allConfigsAfter, assetChanges[i].asset); + assertEq(cfg.reserveFactor, assetChanges[i].reserveFactor); + } + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.sol new file mode 100644 index 000000000..1978bda17 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +import {AaveV2Ethereum, AaveV2EthereumAssets, ILendingPoolConfigurator} from 'aave-address-book/AaveV2Ethereum.sol'; + +/** + * @title Reserve Factor Updates Late August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821 is IProposalGenericExecutor { + ILendingPoolConfigurator public constant POOL_CONFIGURATOR = + ILendingPoolConfigurator(AaveV2Ethereum.POOL_CONFIGURATOR); + + uint256 public constant DAI_RF = 75_00; + uint256 public constant LINK_RF = 80_00; + uint256 public constant USDC_RF = 75_00; + uint256 public constant USDT_RF = 75_00; + uint256 public constant WBTC_RF = 80_00; + uint256 public constant WETH_RF = 75_00; + + function execute() external { + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.DAI_UNDERLYING, DAI_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.LINK_UNDERLYING, LINK_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDC_UNDERLYING, USDC_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.USDT_UNDERLYING, USDT_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.WBTC_UNDERLYING, WBTC_RF); + POOL_CONFIGURATOR.setReserveFactor(AaveV2EthereumAssets.WETH_UNDERLYING, WETH_RF); + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.t.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.t.sol new file mode 100644 index 000000000..472eb580a --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.t.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Ethereum, AaveV2EthereumAssets} from 'aave-address-book/AaveV2Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; +import {AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821} from './AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.sol'; + +/** + * @dev Test for AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.t.sol -vv + */ +contract AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821_Test is ProtocolV2TestBase { + AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821 internal proposal; + + struct Changes { + address asset; + uint256 reserveFactor; + } + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20592360); + proposal = new AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + (ReserveConfig[] memory allConfigsBefore, ReserveConfig[] memory allConfigsAfter) = defaultTest( + 'AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821', + AaveV2Ethereum.POOL, + address(proposal) + ); + + address[] memory assetsChanged = new address[](6); + assetsChanged[0] = AaveV2EthereumAssets.DAI_UNDERLYING; + assetsChanged[1] = AaveV2EthereumAssets.LINK_UNDERLYING; + assetsChanged[2] = AaveV2EthereumAssets.USDC_UNDERLYING; + assetsChanged[3] = AaveV2EthereumAssets.USDT_UNDERLYING; + assetsChanged[4] = AaveV2EthereumAssets.WBTC_UNDERLYING; + assetsChanged[5] = AaveV2EthereumAssets.WETH_UNDERLYING; + + Changes[] memory assetChanges = new Changes[](6); + assetChanges[0] = Changes({ + asset: AaveV2EthereumAssets.DAI_UNDERLYING, + reserveFactor: proposal.DAI_RF() + }); + assetChanges[1] = Changes({ + asset: AaveV2EthereumAssets.LINK_UNDERLYING, + reserveFactor: proposal.LINK_RF() + }); + assetChanges[2] = Changes({ + asset: AaveV2EthereumAssets.USDC_UNDERLYING, + reserveFactor: proposal.USDC_RF() + }); + assetChanges[3] = Changes({ + asset: AaveV2EthereumAssets.USDT_UNDERLYING, + reserveFactor: proposal.USDT_RF() + }); + assetChanges[4] = Changes({ + asset: AaveV2EthereumAssets.WBTC_UNDERLYING, + reserveFactor: proposal.WBTC_RF() + }); + assetChanges[5] = Changes({ + asset: AaveV2EthereumAssets.WETH_UNDERLYING, + reserveFactor: proposal.WETH_RF() + }); + + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + for (uint i = 0; i < assetChanges.length; i++) { + ReserveConfig memory cfg = _findReserveConfig(allConfigsAfter, assetChanges[i].asset); + assertEq(cfg.reserveFactor, assetChanges[i].reserveFactor); + } + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.sol new file mode 100644 index 000000000..8d4937f07 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.sol @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2PolygonAssets} from 'aave-address-book/AaveV2Polygon.sol'; +import {AaveV2PayloadPolygon} from 'aave-helpers/src/v2-config-engine/AaveV2PayloadPolygon.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV2ConfigEngine} from 'aave-helpers/src/v2-config-engine/IAaveV2ConfigEngine.sol'; +import {IV2RateStrategyFactory} from 'aave-helpers/src/v2-config-engine/IV2RateStrategyFactory.sol'; +/** + * @title Reserve Factor Updates Late August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821 is AaveV2PayloadPolygon { + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV2ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV2ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV2ConfigEngine.RateStrategyUpdate[](6); + rateStrategies[0] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.DAI_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(13_50), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[1] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.USDC_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(13_50), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[2] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.USDT_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(13_50), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[3] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.WBTC_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(8_50), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[4] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.WETH_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(8_50), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + rateStrategies[5] = IAaveV2ConfigEngine.RateStrategyUpdate({ + asset: AaveV2PolygonAssets.WMATIC_UNDERLYING, + params: IV2RateStrategyFactory.RateStrategyParams({ + optimalUtilizationRate: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: _bpsToRay(10_50), + variableRateSlope2: EngineFlags.KEEP_CURRENT, + stableRateSlope1: EngineFlags.KEEP_CURRENT, + stableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol new file mode 100644 index 000000000..97ff663b3 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV2Polygon} from 'aave-address-book/AaveV2Polygon.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV2TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV2TestBase.sol'; +import {AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821} from './AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.sol'; + +/** + * @dev Test for AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol -vv + */ +contract AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821_Test is ProtocolV2TestBase { + AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 60947312); + proposal = new AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821', + AaveV2Polygon.POOL, + address(proposal) + ); + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.sol new file mode 100644 index 000000000..0d5f6a3af --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {AaveV3PayloadArbitrum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadArbitrum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reserve Factor Updates Late August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821 is AaveV3PayloadArbitrum { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3ArbitrumAssets.USDC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 40_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.t.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.t.sol new file mode 100644 index 000000000..142359206 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Arbitrum} from 'aave-address-book/AaveV3Arbitrum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821} from './AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.sol'; + +/** + * @dev Test for AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821 + * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.t.sol -vv + */ +contract AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821_Test is ProtocolV3TestBase { + AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('arbitrum'), 245923199); + proposal = new AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821', + AaveV3Arbitrum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.sol new file mode 100644 index 000000000..045f76b16 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BaseAssets} from 'aave-address-book/AaveV3Base.sol'; +import {AaveV3PayloadBase} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBase.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reserve Factor Updates Late August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Base_ReserveFactorUpdatesLateAugust_20240821 is AaveV3PayloadBase { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3BaseAssets.USDbC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 40_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.t.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.t.sol new file mode 100644 index 000000000..cdfe2372d --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Base} from 'aave-address-book/AaveV3Base.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Base_ReserveFactorUpdatesLateAugust_20240821} from './AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.sol'; + +/** + * @dev Test for AaveV3Base_ReserveFactorUpdatesLateAugust_20240821 + * command: FOUNDRY_PROFILE=base forge test --match-path=src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.t.sol -vv + */ +contract AaveV3Base_ReserveFactorUpdatesLateAugust_20240821_Test is ProtocolV3TestBase { + AaveV3Base_ReserveFactorUpdatesLateAugust_20240821 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('base'), 18819884); + proposal = new AaveV3Base_ReserveFactorUpdatesLateAugust_20240821(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Base_ReserveFactorUpdatesLateAugust_20240821', + AaveV3Base.POOL, + address(proposal) + ); + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.sol new file mode 100644 index 000000000..9156eb2c4 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3GnosisAssets} from 'aave-address-book/AaveV3Gnosis.sol'; +import {AaveV3PayloadGnosis} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadGnosis.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reserve Factor Updates Late August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821 is AaveV3PayloadGnosis { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3GnosisAssets.USDC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 15_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.t.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.t.sol new file mode 100644 index 000000000..a953dbc62 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Gnosis} from 'aave-address-book/AaveV3Gnosis.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821} from './AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.sol'; + +/** + * @dev Test for AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821 + * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.t.sol -vv + */ +contract AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821_Test is ProtocolV3TestBase { + AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('gnosis'), 35846510); + proposal = new AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821', + AaveV3Gnosis.POOL, + address(proposal) + ); + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.sol new file mode 100644 index 000000000..3a953055e --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; +import {AaveV3PayloadOptimism} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadOptimism.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reserve Factor Updates Late August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821 is AaveV3PayloadOptimism { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3OptimismAssets.USDC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 40_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.t.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.t.sol new file mode 100644 index 000000000..9e83140f8 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821} from './AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.sol'; + +/** + * @dev Test for AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821 + * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.t.sol -vv + */ +contract AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821_Test is ProtocolV3TestBase { + AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('optimism'), 124415320); + proposal = new AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821', + AaveV3Optimism.POOL, + address(proposal) + ); + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.sol new file mode 100644 index 000000000..050d8fd85 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; +import {AaveV3PayloadPolygon} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadPolygon.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Reserve Factor Updates Late August + * @author karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06 + * - Discussion: https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787 + */ +contract AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821 is AaveV3PayloadPolygon { + function borrowsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.BorrowUpdate[] memory) + { + IAaveV3ConfigEngine.BorrowUpdate[] + memory borrowUpdates = new IAaveV3ConfigEngine.BorrowUpdate[](1); + + borrowUpdates[0] = IAaveV3ConfigEngine.BorrowUpdate({ + asset: AaveV3PolygonAssets.USDC_UNDERLYING, + enabledToBorrow: EngineFlags.KEEP_CURRENT, + flashloanable: EngineFlags.KEEP_CURRENT, + stableRateModeEnabled: EngineFlags.KEEP_CURRENT, + borrowableInIsolation: EngineFlags.KEEP_CURRENT, + withSiloedBorrowing: EngineFlags.KEEP_CURRENT, + reserveFactor: 40_00 + }); + + return borrowUpdates; + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol new file mode 100644 index 000000000..9fb337f81 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Polygon} from 'aave-address-book/AaveV3Polygon.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821} from './AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.sol'; + +/** + * @dev Test for AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol -vv + */ +contract AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821_Test is ProtocolV3TestBase { + AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 60947312); + proposal = new AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821', + AaveV3Polygon.POOL, + address(proposal) + ); + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust.md b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust.md new file mode 100644 index 000000000..cc7a0fe3e --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust.md @@ -0,0 +1,76 @@ +--- +title: "Reserve Factor Updates Late August" +author: "karpatkey_TokenLogic" +discussions: "https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06" +--- + +## Simple Summary + +This AIP shall implement the following parameter adjustments: + +- Increase Slope1 across Polygon v2 by 75bps; +- Increase Reserve Factor (RF) on Ethereum v2 and Avalanche v2 by 5.00%; and, +- Increase USDC.e and USDbC RF by 5.00% on Arbitrum, Optimism, Polygon, and Base. + +## Motivation + +This AIP will reduce deposit yield for assets on Ethereum v2 and Avalanche v2 instances of Aave Protocol by increasing the RF by 5.00%. By increasing the RF a greater portion of the interest paid by borrowers is directed to the Aave DAO's treasury. + +This results in a lower deposit rate for users and encourages migration from v2 instances of the Aave Protocol to v3. User's funds are not at risk of liquidation and the borrowing rate remains unchanged. + +The RF across all USDC.e and USDbC reserves will be increased by 5.00% to encourage migration from bridged USDC to native USDC on each respective network. + +By increasing the Slope1 parameter by 75bps on Polygon v2, the cost of capital to users increases and further encourages migration to Polygon v3. + +## Specification + +Slope1 Parameter 75bps Increases: + +| Asset | Market | Current Slope1 | Proposed Slope1 | +| :----: | :--------: | :------------: | :-------------: | +| DAI | Polygon v2 | 12.75% | 13.50% | +| USDT | Polygon v2 | 12.75% | 13.50% | +| wBTC | Polygon v2 | 7.75% | 8.50% | +| wETH | Polygon v2 | 7.75% | 8.50% | +| USDC | Polygon v2 | 12.75% | 13.50% | +| wMATIC | Polygon v2 | 9.75% | 10.50% | + +Reserve Factor 5.00% Increases: + +| Asset | Market | Current RF | Proposed RF | +| ------ | :----------: | :--------: | :---------: | +| DAI.e | Avalanche v2 | 65.00% | 70.00% | +| USDC.e | Avalanche v2 | 65.00% | 70.00% | +| USDT.e | Avalanche v2 | 65.00% | 70.00% | +| wAVAX | Avalanche v2 | 65.00% | 70.00% | +| WBTC.e | Avalanche v2 | 70.00% | 75.00% | +| WETH.e | Avalanche v2 | 65.00% | 70.00% | +| DAI | Ethereum v2 | 70.00% | 75.00% | +| LINK | Ethereum v2 | 75.00% | 80.00% | +| USDC | Ethereum v2 | 70.00% | 75.00% | +| USDT | Ethereum v2 | 70.00% | 75.00% | +| wBTC | Ethereum v2 | 75.00% | 80.00% | +| wETH | Ethereum v2 | 70.00% | 75.00% | +| USDC.e | Arbitrum | 35.00% | 40.00% | +| USDC.e | Optimism | 35.00% | 40.00% | +| USDC.e | Polygon | 35.00% | 40.00% | +| USDbC | Base | 35.00% | 40.00% | +| USDC.e | Gnosis | 10.00% | 15.00% | + +## References + +- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.sol) +- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.t.sol) +- [Discussion for USDCe updates](https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787/7) +- [Snapshot for USDCe updates](https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06) +- [Discussion for Ethereum V2 Reserve Factor Updates](https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/16) +- [Snapshot for Ethereum V2 Reserve Factor Updates](https://snapshot.org/#/aave.eth/proposal/0x26a03c08359c340f63b78b0c3e96d37aa0adeda65814643b0886d4719048ea7e) +- [Discussion for Avalanche V2 Reserve Factor Updates](https://governance.aave.com/t/arfc-avalanche-v2-reserve-factor-adjustment/17040/11) +- [Snapshot for Avalanche V2 Reserve Factor Updates](https://snapshot.org/#/aave.eth/proposal/0x770ff4e02634c77aaa09952345551168920f7878b32ab03fcef92763a5fb70ab) +- [Discussion for Polygon V2 Borrow Rate Updates](https://governance.aave.com/t/arfc-polygon-v2-borrow-rate-adjustments/17252/11) +- [Snapshot for Polygon V2 Borrow Rate Updates](https://snapshot.org/#/aave.eth/proposal/0x95643085ee16eb0eaa4110a9f0ea8223009f9521e596e1a958303705a5001363) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol new file mode 100644 index 000000000..a6e7e8de7 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol @@ -0,0 +1,248 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, PolygonScript, AvalancheScript, OptimismScript, ArbitrumScript, BaseScript, GnosisScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821} from './AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.sol'; +import {AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821} from './AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.sol'; +import {AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821} from './AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.sol'; +import {AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821} from './AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.sol'; +import {AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821} from './AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.sol'; +import {AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821} from './AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.sol'; +import {AaveV3Base_ReserveFactorUpdatesLateAugust_20240821} from './AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.sol'; +import {AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821} from './AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ReserveFactorUpdatesLateAugust_20240821.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Polygon + * deploy-command: make deploy-ledger contract=src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol:DeployPolygon chain=polygon + * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/ReserveFactorUpdatesLateAugust_20240821.s.sol/137/run-latest.json + */ +contract DeployPolygon is PolygonScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + address payload1 = GovV3Helpers.deployDeterministic( + type(AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](2); + actions[0] = GovV3Helpers.buildAction(payload0); + actions[1] = GovV3Helpers.buildAction(payload1); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Avalanche + * deploy-command: make deploy-ledger contract=src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol:DeployAvalanche chain=avalanche + * verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/ReserveFactorUpdatesLateAugust_20240821.s.sol/43114/run-latest.json + */ +contract DeployAvalanche is AvalancheScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Optimism + * deploy-command: make deploy-ledger contract=src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol:DeployOptimism chain=optimism + * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/ReserveFactorUpdatesLateAugust_20240821.s.sol/10/run-latest.json + */ +contract DeployOptimism is OptimismScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Arbitrum + * deploy-command: make deploy-ledger contract=src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol:DeployArbitrum chain=arbitrum + * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/ReserveFactorUpdatesLateAugust_20240821.s.sol/42161/run-latest.json + */ +contract DeployArbitrum is ArbitrumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Base + * deploy-command: make deploy-ledger contract=src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol:DeployBase chain=base + * verify-command: FOUNDRY_PROFILE=base npx catapulta-verify -b broadcast/ReserveFactorUpdatesLateAugust_20240821.s.sol/8453/run-latest.json + */ +contract DeployBase is BaseScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Base_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Gnosis + * deploy-command: make deploy-ledger contract=src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol:DeployGnosis chain=gnosis + * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/ReserveFactorUpdatesLateAugust_20240821.s.sol/100/run-latest.json + */ +contract DeployGnosis is GnosisScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust_20240821.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](7); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](2); + actionsPolygon[0] = GovV3Helpers.buildAction( + type(AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + actionsPolygon[1] = GovV3Helpers.buildAction( + type(AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + payloads[1] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); + actionsAvalanche[0] = GovV3Helpers.buildAction( + type(AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + payloads[2] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); + actionsOptimism[0] = GovV3Helpers.buildAction( + type(AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + payloads[3] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsArbitrum[0] = GovV3Helpers.buildAction( + type(AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + payloads[4] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBase = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBase[0] = GovV3Helpers.buildAction( + type(AaveV3Base_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + payloads[5] = GovV3Helpers.buildBasePayload(vm, actionsBase); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsGnosis[0] = GovV3Helpers.buildAction( + type(AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821).creationCode + ); + payloads[6] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust.md' + ) + ); + } +} diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/config.ts b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/config.ts new file mode 100644 index 000000000..69ee4abb5 --- /dev/null +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/config.ts @@ -0,0 +1,180 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: [ + 'AaveV2Ethereum', + 'AaveV2Polygon', + 'AaveV2Avalanche', + 'AaveV3Polygon', + 'AaveV3Optimism', + 'AaveV3Arbitrum', + 'AaveV3Base', + ], + title: 'Reserve Factor Updates Late August', + shortName: 'ReserveFactorUpdatesLateAugust', + date: '20240821', + author: 'karpatkey_TokenLogic', + discussion: + 'https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV2Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20592360}}, + AaveV2Polygon: { + configs: { + RATE_UPDATE_V2: [ + { + asset: 'DAI', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '13.5000000', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'USDC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '13.5', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'USDT', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '13.5', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'WBTC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '8.5', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'WETH', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '8.5', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + { + asset: 'WMATIC', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '10.5', + variableRateSlope2: '', + stableRateSlope1: '', + stableRateSlope2: '', + }, + }, + ], + }, + cache: {blockNumber: 60947312}, + }, + AaveV2Avalanche: {configs: {OTHERS: {}}, cache: {blockNumber: 49543127}}, + AaveV3Polygon: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '40', + asset: 'USDC', + }, + ], + }, + cache: {blockNumber: 60947312}, + }, + AaveV3Optimism: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '40', + asset: 'USDC', + }, + ], + }, + cache: {blockNumber: 124415320}, + }, + AaveV3Arbitrum: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '40', + asset: 'USDC', + }, + ], + }, + cache: {blockNumber: 245923199}, + }, + AaveV3Base: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '40', + asset: 'USDbC', + }, + ], + }, + cache: {blockNumber: 18819884}, + }, + AaveV3Gnosis: { + configs: { + BORROWS_UPDATE: [ + { + enabledToBorrow: 'KEEP_CURRENT', + flashloanable: 'KEEP_CURRENT', + stableRateModeEnabled: 'KEEP_CURRENT', + borrowableInIsolation: 'KEEP_CURRENT', + withSiloedBorrowing: 'KEEP_CURRENT', + reserveFactor: '15', + asset: 'USDC', + }, + ], + }, + cache: {blockNumber: 35846510}, + }, + }, +}; From b0d4c0b54d8da1020e6a72a065694d0c15adcdeb Mon Sep 17 00:00:00 2001 From: Cache bot Date: Fri, 6 Sep 2024 16:00:56 +0000 Subject: [PATCH 63/68] fix(cache): automated cache update [skip ci] --- .../ReserveFactorUpdatesLateAugust.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust.md b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust.md index cc7a0fe3e..53c0a3cdf 100644 --- a/src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust.md +++ b/src/20240821_Multi_ReserveFactorUpdatesLateAugust/ReserveFactorUpdatesLateAugust.md @@ -60,8 +60,8 @@ Reserve Factor 5.00% Increases: ## References -- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.sol) -- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.t.sol) +- Implementation: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.sol) +- Tests: [AaveV2Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Ethereum_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV2Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV2Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV2Avalanche_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Polygon_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Optimism_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Arbitrum_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Base](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Base_ReserveFactorUpdatesLateAugust_20240821.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/26c71f6445e00458db0ebcd5c31f9e7e6f945488/src/20240821_Multi_ReserveFactorUpdatesLateAugust/AaveV3Gnosis_ReserveFactorUpdatesLateAugust_20240821.t.sol) - [Discussion for USDCe updates](https://governance.aave.com/t/arfc-increase-bridged-usdc-reserve-factor-across-all-deployments/17787/7) - [Snapshot for USDCe updates](https://snapshot.org/#/aave.eth/proposal/0x9cc7906f04f45cebeaa48a05ed281f49da00d89c4dd988a968272fa179f14d06) - [Discussion for Ethereum V2 Reserve Factor Updates](https://governance.aave.com/t/arfc-ethereum-v2-reserve-factor-adjustment/16764/16) From 9dbd107913e29000daa587dcb3ee48048c9bbeb5 Mon Sep 17 00:00:00 2001 From: Marc Zeller <21088542+marczeller@users.noreply.github.com> Date: Mon, 9 Sep 2024 18:02:08 +0200 Subject: [PATCH 64/68] Chaos Labs - stable caps update - Review (#441) * feat: Decrease stablecoin caps * Update ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md * Update config.ts --------- Co-authored-by: Rozengarden --- ...plyAndBorrowCapsOnAaveV3_20240906_after.md | 30 +++++ ...plyAndBorrowCapsOnAaveV3_20240906_after.md | 43 ++++++ ...plyAndBorrowCapsOnAaveV3_20240906_after.md | 48 +++++++ ...seSupplyAndBorrowCapsOnAaveV3_20240906.sol | 27 ++++ ...SupplyAndBorrowCapsOnAaveV3_20240906.t.sol | 35 +++++ ...seSupplyAndBorrowCapsOnAaveV3_20240906.sol | 33 +++++ ...SupplyAndBorrowCapsOnAaveV3_20240906.t.sol | 35 +++++ ...seSupplyAndBorrowCapsOnAaveV3_20240906.sol | 32 +++++ ...SupplyAndBorrowCapsOnAaveV3_20240906.t.sol | 35 +++++ ...atesDecreaseSupplyAndBorrowCapsOnAaveV3.md | 58 ++++++++ ...SupplyAndBorrowCapsOnAaveV3_20240906.s.sol | 126 ++++++++++++++++++ .../config.ts | 39 ++++++ 12 files changed, 541 insertions(+) create mode 100644 diffs/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md create mode 100644 diffs/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md create mode 100644 diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md create mode 100644 src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol create mode 100644 src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol create mode 100644 src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol create mode 100644 src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol create mode 100644 src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol create mode 100644 src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol create mode 100644 src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md create mode 100644 src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol create mode 100644 src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/config.ts diff --git a/diffs/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md b/diffs/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md new file mode 100644 index 000000000..3cfceff87 --- /dev/null +++ b/diffs/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md @@ -0,0 +1,30 @@ +## Reserve changes + +### Reserves altered + +#### USDC ([0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d](https://bscscan.com/address/0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d)) + +| description | value before | value after | +| --- | --- | --- | +| supplyCap | 50,000,000 USDC | 15,000,000 USDC | +| borrowCap | 45,000,000 USDC | 10,000,000 USDC | + + +## Raw diff + +```json +{ + "reserves": { + "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d": { + "borrowCap": { + "from": 45000000, + "to": 10000000 + }, + "supplyCap": { + "from": 50000000, + "to": 15000000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md b/diffs/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md new file mode 100644 index 000000000..ed35d3655 --- /dev/null +++ b/diffs/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md @@ -0,0 +1,43 @@ +## Reserve changes + +### Reserve altered + +#### sUSDe ([0x9D39A5DE30e57443BfF2A8307A4256c8797A3497](https://etherscan.io/address/0x9D39A5DE30e57443BfF2A8307A4256c8797A3497)) + +| description | value before | value after | +| --- | --- | --- | +| supplyCap | 85,000,000 sUSDe | 4,000,000 sUSDe | + + +#### crvUSD ([0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E](https://etherscan.io/address/0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E)) + +| description | value before | value after | +| --- | --- | --- | +| supplyCap | 60,000,000 crvUSD | 5,000,000 crvUSD | +| borrowCap | 50,000,000 crvUSD | 2,500,000 crvUSD | + + +## Raw diff + +```json +{ + "reserves": { + "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497": { + "supplyCap": { + "from": 85000000, + "to": 4000000 + } + }, + "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E": { + "borrowCap": { + "from": 50000000, + "to": 2500000 + }, + "supplyCap": { + "from": 60000000, + "to": 5000000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md b/diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md new file mode 100644 index 000000000..3f802ece0 --- /dev/null +++ b/diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_after.md @@ -0,0 +1,48 @@ +## Reserve changes + +### Reserve altered + +#### DAI ([0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1](https://optimistic.etherscan.io/address/0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1)) + +| description | value before | value after | +| --- | --- | --- | +| supplyCap | 25,000,000 DAI | 10,000,000 DAI | +| borrowCap | 16,000,000 DAI | 7,000,000 DAI | + + +#### LUSD ([0xc40F949F8a4e094D1b49a23ea9241D289B7b2819](https://optimistic.etherscan.io/address/0xc40F949F8a4e094D1b49a23ea9241D289B7b2819)) + +| description | value before | value after | +| --- | --- | --- | +| supplyCap | 3,000,000 LUSD | 2,000,000 LUSD | +| borrowCap | 1,210,000 LUSD | 500,000 LUSD | + + +## Raw diff + +```json +{ + "reserves": { + "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1": { + "borrowCap": { + "from": 16000000, + "to": 7000000 + }, + "supplyCap": { + "from": 25000000, + "to": 10000000 + } + }, + "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819": { + "borrowCap": { + "from": 1210000, + "to": 500000 + }, + "supplyCap": { + "from": 3000000, + "to": 2000000 + } + } + } +} +``` \ No newline at end of file diff --git a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol new file mode 100644 index 000000000..1007896d8 --- /dev/null +++ b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BNBAssets} from 'aave-address-book/AaveV3BNB.sol'; +import {AaveV3PayloadBNB} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadBNB.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Chaos Labs Risk Parameter Updates - Decrease Supply and Borrow Caps on Aave V3 + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x1ea388307b70d30c040f63e8a09d49276c5c8c9ef2fd809809f253654e5f5f06 + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-decrease-supply-and-borrow-caps-on-aave-v3-08-28-2024/18793 + */ +contract AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906 is + AaveV3PayloadBNB +{ + function capsUpdates() public pure override returns (IAaveV3ConfigEngine.CapsUpdate[] memory) { + IAaveV3ConfigEngine.CapsUpdate[] memory capsUpdate = new IAaveV3ConfigEngine.CapsUpdate[](1); + + capsUpdate[0] = IAaveV3ConfigEngine.CapsUpdate({ + asset: AaveV3BNBAssets.USDC_UNDERLYING, + supplyCap: 15_000_000, + borrowCap: 10_000_000 + }); + + return capsUpdate; + } +} diff --git a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol new file mode 100644 index 000000000..93878c25b --- /dev/null +++ b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3BNB} from 'aave-address-book/AaveV3BNB.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906} from './AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol'; + +/** + * @dev Test for AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906 + * command: FOUNDRY_PROFILE=bnb forge test --match-path=src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol -vv + */ +contract AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_Test is + ProtocolV3TestBase +{ + AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906 + internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('bnb'), 42022431); + proposal = new AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906', + AaveV3BNB.POOL, + address(proposal) + ); + } +} diff --git a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol new file mode 100644 index 000000000..09502b33e --- /dev/null +++ b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {AaveV3PayloadEthereum} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereum.sol'; +import {EngineFlags} from 'aave-v3-periphery/contracts/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Chaos Labs Risk Parameter Updates - Decrease Supply and Borrow Caps on Aave V3 + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x1ea388307b70d30c040f63e8a09d49276c5c8c9ef2fd809809f253654e5f5f06 + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-decrease-supply-and-borrow-caps-on-aave-v3-08-28-2024/18793 + */ +contract AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906 is + AaveV3PayloadEthereum +{ + function capsUpdates() public pure override returns (IAaveV3ConfigEngine.CapsUpdate[] memory) { + IAaveV3ConfigEngine.CapsUpdate[] memory capsUpdate = new IAaveV3ConfigEngine.CapsUpdate[](2); + + capsUpdate[0] = IAaveV3ConfigEngine.CapsUpdate({ + asset: AaveV3EthereumAssets.crvUSD_UNDERLYING, + supplyCap: 5_000_000, + borrowCap: 2_500_000 + }); + capsUpdate[1] = IAaveV3ConfigEngine.CapsUpdate({ + asset: AaveV3EthereumAssets.sUSDe_UNDERLYING, + supplyCap: 4_000_000, + borrowCap: EngineFlags.KEEP_CURRENT + }); + + return capsUpdate; + } +} diff --git a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol new file mode 100644 index 000000000..0a647c843 --- /dev/null +++ b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum} from 'aave-address-book/AaveV3Ethereum.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906} from './AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol'; + +/** + * @dev Test for AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol -vv + */ +contract AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_Test is + ProtocolV3TestBase +{ + AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906 + internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20693024); + proposal = new AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906', + AaveV3Ethereum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol new file mode 100644 index 000000000..a54d0f37f --- /dev/null +++ b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3OptimismAssets} from 'aave-address-book/AaveV3Optimism.sol'; +import {AaveV3PayloadOptimism} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadOptimism.sol'; +import {IAaveV3ConfigEngine} from 'aave-v3-periphery/contracts/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Chaos Labs Risk Parameter Updates - Decrease Supply and Borrow Caps on Aave V3 + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x1ea388307b70d30c040f63e8a09d49276c5c8c9ef2fd809809f253654e5f5f06 + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-decrease-supply-and-borrow-caps-on-aave-v3-08-28-2024/18793 + */ +contract AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906 is + AaveV3PayloadOptimism +{ + function capsUpdates() public pure override returns (IAaveV3ConfigEngine.CapsUpdate[] memory) { + IAaveV3ConfigEngine.CapsUpdate[] memory capsUpdate = new IAaveV3ConfigEngine.CapsUpdate[](2); + + capsUpdate[0] = IAaveV3ConfigEngine.CapsUpdate({ + asset: AaveV3OptimismAssets.DAI_UNDERLYING, + supplyCap: 10_000_000, + borrowCap: 7_000_000 + }); + capsUpdate[1] = IAaveV3ConfigEngine.CapsUpdate({ + asset: AaveV3OptimismAssets.LUSD_UNDERLYING, + supplyCap: 2_000_000, + borrowCap: 500_000 + }); + + return capsUpdate; + } +} diff --git a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol new file mode 100644 index 000000000..482e9a750 --- /dev/null +++ b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Optimism} from 'aave-address-book/AaveV3Optimism.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906} from './AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol'; + +/** + * @dev Test for AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906 + * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol -vv + */ +contract AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906_Test is + ProtocolV3TestBase +{ + AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906 + internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('optimism'), 125022388); + proposal = new AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906', + AaveV3Optimism.POOL, + address(proposal) + ); + } +} diff --git a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md new file mode 100644 index 000000000..2899a2e25 --- /dev/null +++ b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md @@ -0,0 +1,58 @@ +--- +title: "Chaos Labs Risk Parameter Updates - Decrease Supply and Borrow Caps on Aave V3 " +author: "Chaos Labs" +discussions: "https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-decrease-supply-and-borrow-caps-on-aave-v3-08-28-2024/18793" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x1ea388307b70d30c040f63e8a09d49276c5c8c9ef2fd809809f253654e5f5f06" +--- + +## Simple Summary + +Decrease supply and borrow caps for underutilized stablecoins on Aave V3. + +## Motivation + +As part of our ongoing strategy to optimize risk management on Aave, this proposal aims to address the low utilization of certain stablecoins by significantly reducing their supply cap and borrow cap values. + +We recommend reducing the caps for various stablecoins that have consistently shown low supply and borrow demand over an extended period. All targeted stablecoins have demonstrated an average supply and borrow cap utilization below 15% for the last month. By keeping tighter caps relative to current demand, we aim to protect the protocol from potential risks associated with abnormal or unexpected events. These risks include significant stablecoin depegging and major hacks, which could result in an unexpected surge of risk in the protocol. + +Should demand for these stablecoins increase, we can adjust the caps accordingly based on our established supply and borrow cap methodology. + +This approach seeks to enhance the protocol’s resilience and stability in fluctuating market conditions, protecting the interests of Aave users and stakeholders. + +### Notable Low Utilization Stablecoins (crvUSD, LUSD) + +There is currently low demand and utilization for crvUSD and LUSD across multiple Aave markets, highlighting a need for reassessment of borrow caps to match the reduced activity: + +- crvUSD on Ethereum has a current supply utilization of only 0.85%, which saw spikes up to only 4% in the last six months. +- LUSD on Optimism also continues to experience low utilization rates, with just 7.83% supply utilization. + +### Ethena sUSDe + +The supply utilization of Ethena sUSDe spiked to 4% during the listing and later stabilized around 1%. Maintaining a supply cap so high exposes the protocol to unnecessary risk. + +### Highly Liquid Stablecoins (DAI, USDC) + +While DAI on AAVE V3 Optimism and USDC on AAVE V3 BNB Chain are highly liquid safe assets, the high supply cap causes the markets to be underutilized. + +## Specification + +The target recommendations are calculated as twice the highest demand observed over the past six months or as 75% of the on-chain supply, whichever is lower. We suggest lowering the supply and borrow caps for the following assets, as outlined below. + +| Market | Asset | Current Supply Cap | Current Supply Utilization | Recommended Supply Cap | Current Borrow Cap | Current Borrow Utilization | Recommended Borrow Cap | +| -------- | ------ | ------------------ | -------------------------- | ---------------------- | ------------------ | -------------------------- | ---------------------- | +| Ethereum | crvUSD | 60,000,000 | 0.85% | 5,000,000 | 50,000,000 | 0.80% | 2,500,000 | +| Optimism | LUSD | 3,000,000 | 7.83% | 2,000,000 | 1,210,000 | 11.33% | 500,000 | +| Ethereum | sUSDe | 85,000,000 | 1.14% | 4,000,000 | - | - | - | +| Optimism | DAI | 25,000,000 | 12.17% | 10,000,000 | 16,000,000 | 17.00% | 7,000,000 | +| BNB | USDC | 50,000,000 | 6.02% | 15,000,000 | 45,000,000 | 5.39% | 10,000,000 | + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x1ea388307b70d30c040f63e8a09d49276c5c8c9ef2fd809809f253654e5f5f06) +- [Discussion](https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-decrease-supply-and-borrow-caps-on-aave-v3-08-28-2024/18793) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol new file mode 100644 index 000000000..f58cab01b --- /dev/null +++ b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol @@ -0,0 +1,126 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript, OptimismScript, BNBScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906} from './AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol'; +import {AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906} from './AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol'; +import {AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906} from './AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906) + .creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy Optimism + * deploy-command: make deploy-ledger contract=src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol:DeployOptimism chain=optimism + * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol/10/run-latest.json + */ +contract DeployOptimism is OptimismScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906) + .creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Deploy BNB + * deploy-command: make deploy-ledger contract=src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol:DeployBNB chain=bnb + * verify-command: FOUNDRY_PROFILE=bnb npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol/56/run-latest.json + */ +contract DeployBNB is BNBScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906) + .creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](3); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906) + .creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); + actionsOptimism[0] = GovV3Helpers.buildAction( + type(AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906) + .creationCode + ); + payloads[1] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsBNB = new IPayloadsControllerCore.ExecutionAction[](1); + actionsBNB[0] = GovV3Helpers.buildAction( + type(AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906) + .creationCode + ); + payloads[2] = GovV3Helpers.buildBNBPayload(vm, actionsBNB); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md' + ) + ); + } +} diff --git a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/config.ts b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/config.ts new file mode 100644 index 000000000..157403b6d --- /dev/null +++ b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/config.ts @@ -0,0 +1,39 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + author: 'Chaos Labs', + pools: ['AaveV3Ethereum', 'AaveV3Optimism', 'AaveV3BNB'], + title: 'Chaos Labs Risk Parameter Updates - Decrease Supply and Borrow Caps on Aave V3 ', + shortName: 'ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3', + date: '20240906', + discussion: + 'https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-decrease-supply-and-borrow-caps-on-aave-v3-08-28-2024/18793', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x1ea388307b70d30c040f63e8a09d49276c5c8c9ef2fd809809f253654e5f5f06', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Ethereum: { + configs: { + CAPS_UPDATE: [ + {asset: 'crvUSD', supplyCap: '5000000', borrowCap: '2500000'}, + {asset: 'sUSDe', supplyCap: '4000000', borrowCap: ''}, + ], + }, + cache: {blockNumber: 20693024}, + }, + AaveV3Optimism: { + configs: { + CAPS_UPDATE: [ + {asset: 'DAI', supplyCap: '10000000', borrowCap: '7000000'}, + {asset: 'LUSD', supplyCap: '2000000', borrowCap: '500000'}, + ], + }, + cache: {blockNumber: 125022388}, + }, + AaveV3BNB: { + configs: {CAPS_UPDATE: [{asset: 'USDC', supplyCap: '15000000', borrowCap: '10000000'}]}, + cache: {blockNumber: 42022431}, + }, + }, +}; From 523be8c2acd08f400b7a1514f1ac2334505efd5e Mon Sep 17 00:00:00 2001 From: Cache bot Date: Mon, 9 Sep 2024 16:02:39 +0000 Subject: [PATCH 65/68] fix(cache): automated cache update [skip ci] --- ...RiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md index 2899a2e25..a03e367e8 100644 --- a/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md +++ b/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3.md @@ -48,8 +48,8 @@ The target recommendations are calculated as twice the highest demand observed o ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/9dbd107913e29000daa587dcb3ee48048c9bbeb5/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/9dbd107913e29000daa587dcb3ee48048c9bbeb5/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/9dbd107913e29000daa587dcb3ee48048c9bbeb5/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/9dbd107913e29000daa587dcb3ee48048c9bbeb5/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Ethereum_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/9dbd107913e29000daa587dcb3ee48048c9bbeb5/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol), [AaveV3BNB](https://github.com/bgd-labs/aave-proposals-v3/blob/9dbd107913e29000daa587dcb3ee48048c9bbeb5/src/20240906_Multi_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3/AaveV3BNB_ChaosLabsRiskParameterUpdatesDecreaseSupplyAndBorrowCapsOnAaveV3_20240906.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x1ea388307b70d30c040f63e8a09d49276c5c8c9ef2fd809809f253654e5f5f06) - [Discussion](https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-decrease-supply-and-borrow-caps-on-aave-v3-08-28-2024/18793) From 48f24958b16e795410024213a024c203836ad3fe Mon Sep 17 00:00:00 2001 From: sendra Date: Tue, 10 Sep 2024 11:42:58 +0200 Subject: [PATCH 66/68] fix: updated lib aave-helpers with collector utils (#445) --- lib/aave-helpers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/aave-helpers b/lib/aave-helpers index c15333e1f..afd8bc415 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit c15333e1f96113a9457fbc57e766713aa7456e06 +Subproject commit afd8bc4153f5f9e1480f53e14ef7a764649c3a35 From fb4a864dbc7d3048fa2c22437ab082e77bf4552a Mon Sep 17 00:00:00 2001 From: Alice <121383428+Rozengarden@users.noreply.github.com> Date: Tue, 10 Sep 2024 17:21:24 +0200 Subject: [PATCH 67/68] [Aavechan] Orbit Renewal 2024Q3 (#444) * feat: Orbit program Q3 2024 * feat: additional compensation * Update src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md * Update src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md * Update src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md Co-authored-by: sendra * Update src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol Co-authored-by: Ian Flexa <85500650+ianflexa@users.noreply.github.com> * revert * Revert "Update src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol" This reverts commit 161ee2dc8712f54b523628fd8efc331afe264387. * update lib --------- Co-authored-by: Marc Zeller <21088542+marczeller@users.noreply.github.com> Co-authored-by: sendra Co-authored-by: Ian Flexa <85500650+ianflexa@users.noreply.github.com> Co-authored-by: marczeller --- ...eum_OrbitProgramRenewalQ32024_20240905.sol | 63 ++++++++++++++ ...m_OrbitProgramRenewalQ32024_20240905.t.sol | 84 +++++++++++++++++++ .../OrbitProgramData.sol | 46 ++++++++++ .../OrbitProgramRenewalQ32024.md | 51 +++++++++++ .../OrbitProgramRenewalQ32024_20240905.s.sol | 60 +++++++++++++ .../config.ts | 15 ++++ 6 files changed, 319 insertions(+) create mode 100644 src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol create mode 100644 src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.t.sol create mode 100644 src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramData.sol create mode 100644 src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md create mode 100644 src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024_20240905.s.sol create mode 100644 src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/config.ts diff --git a/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol new file mode 100644 index 000000000..8875ce0f0 --- /dev/null +++ b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +import {CollectorUtils} from 'aave-helpers/src/CollectorUtils.sol'; +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; + +import {OrbitProgramData} from './OrbitProgramData.sol'; + +// Helper interface to withdraw ETH +interface IWETH { + function withdraw(uint256) external; +} + +/** + * @title Orbit Program Renewal - Q3 2024 + * @author Aave Chan Initiative + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0xea325542397fce607755f6c14be407f60a71a81f3a23c6b3a67e298b9dd8c091 + * - Discussion: https://governance.aave.com/t/arfc-orbit-program-renewal-q3-2024/18834 + */ +contract AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905 is IProposalGenericExecutor { + error EthTransferFailed(address account); + + function execute() external { + AaveV3Ethereum.COLLECTOR.transfer( + AaveV3EthereumAssets.WETH_UNDERLYING, + address(this), + OrbitProgramData.TOTAL_WETH_REBATE + ); + + IWETH(AaveV3EthereumAssets.WETH_UNDERLYING).withdraw(OrbitProgramData.TOTAL_WETH_REBATE); + + OrbitProgramData.GasUsage[] memory usage = OrbitProgramData.getGasUsageData(); + uint256 usageLength = usage.length; + for (uint256 i = 0; i < usageLength; i++) { + (bool ok, ) = usage[i].account.call{value: usage[i].usage}(''); + if (!ok) revert EthTransferFailed(usage[i].account); + } + + address[] memory orbitAddresses = OrbitProgramData.getOrbitAddresses(); + uint256 orbitAddressesLength = orbitAddresses.length; + for (uint256 i = 0; i < orbitAddressesLength; i++) { + AaveV3Ethereum.COLLECTOR.transfer( + AaveV3EthereumAssets.GHO_UNDERLYING, + orbitAddresses[i], + OrbitProgramData.OVERDUE_AMOUNT + ); + CollectorUtils.stream( + AaveV3Ethereum.COLLECTOR, + CollectorUtils.CreateStreamInput({ + underlying: AaveV3EthereumAssets.GHO_UNDERLYING, + receiver: orbitAddresses[i], + amount: OrbitProgramData.STREAM_AMOUNT, + start: block.timestamp, + duration: OrbitProgramData.STREAM_DURATION + }) + ); + } + } + + receive() external payable {} +} diff --git a/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.t.sol b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.t.sol new file mode 100644 index 000000000..b58b09ba2 --- /dev/null +++ b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.t.sol @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; + +import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905} from './AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol'; + +import {OrbitProgramData} from './OrbitProgramData.sol'; +/** + * @dev Test for AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.t.sol -vv + */ +contract AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905_Test is ProtocolV3TestBase { + AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20685166); + proposal = new AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + uint256 collectorWethBalanceBefore = IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).balanceOf( + address(AaveV3Ethereum.COLLECTOR) + ); + + uint256[] memory ethBalancesBeforeUsers = new uint256[](3); + OrbitProgramData.GasUsage[] memory usage = OrbitProgramData.getGasUsageData(); + for (uint256 i = 0; i < usage.length; i++) { + ethBalancesBeforeUsers[i] = usage[i].account.balance; + } + + uint256[] memory ghoBalancesBeforeUsers = new uint256[](4); + address[] memory ghoPaymentAddresses = OrbitProgramData.getOrbitAddresses(); + for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { + ghoBalancesBeforeUsers[i] = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf( + ghoPaymentAddresses[i] + ); + } + + uint256 nextStreamId = AaveV3Ethereum.COLLECTOR.getNextStreamId(); + vm.expectRevert(); + AaveV3Ethereum.COLLECTOR.getStream(nextStreamId); + + executePayload(vm, address(proposal)); + + assertEq( + IERC20(AaveV3EthereumAssets.WETH_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)), + collectorWethBalanceBefore - OrbitProgramData.TOTAL_WETH_REBATE, + 'WETH balance of Collector is not equal to previous minus to withdraw' + ); + + for (uint256 i = 0; i < usage.length; i++) { + assertGt( + usage[i].account.balance, + ethBalancesBeforeUsers[i], + 'REBATE recipient balance is not greater than before' + ); + } + + vm.warp(block.timestamp + 7 days); + + /// Their GHO balance has increased and call also withdraw from stream as it now exists + for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { + assertEq( + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(ghoPaymentAddresses[i]), + ghoBalancesBeforeUsers[i] + OrbitProgramData.OVERDUE_AMOUNT, + 'GHO balance of Orbit recipient is not greater than before' + ); + + vm.prank(ghoPaymentAddresses[i]); + AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextStreamId + i, 1); + assertEq( + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(ghoPaymentAddresses[i]), + ghoBalancesBeforeUsers[i] + OrbitProgramData.OVERDUE_AMOUNT + 1 + ); + } + } +} diff --git a/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramData.sol b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramData.sol new file mode 100644 index 000000000..9fcc2fbfc --- /dev/null +++ b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramData.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +library OrbitProgramData { + struct GasUsage { + address account; + uint256 usage; + } + + // stream information + uint256 public constant STREAM_DURATION = 90 days; + uint256 public constant STREAM_AMOUNT = 15_000 ether; + uint256 public constant OVERDUE_AMOUNT = 2_200 ether; + // stream receivers + address public constant EZREAL = 0x8659D0BB123Da6D16D9394C7838BA286c2207d0E; + address public constant STABLE_LABS = 0xECC2a9240268BC7a26386ecB49E1Befca2706AC9; + address public constant SAUCY_BLOCK = 0x08651EeE3b78254653062BA89035b8F8AdF924CE; + address public constant ARETA = 0x8b37a5Af68D315cf5A64097D96621F64b5502a22; + + // fee rebate information + uint256 public constant TOTAL_WETH_REBATE = 4.3 ether; + // fee rebate receivers + address public constant ACI = 0x57ab7ee15cE5ECacB1aB84EE42D5A9d0d8112922; + address public constant TOKEN_LOGIC = 0x2cc1ADE245020FC5AAE66Ad443e1F66e01c54Df1; + address public constant CATAPULTA = 0x020E4359255f907DF480EbFfc8a7b7beac0c0216; + + function getGasUsageData() internal pure returns (GasUsage[] memory) { + GasUsage[] memory usage = new GasUsage[](3); + usage[0] = GasUsage(ACI, 2.91 ether); + usage[1] = GasUsage(TOKEN_LOGIC, 0.72 ether); + usage[2] = GasUsage(CATAPULTA, 0.67 ether); + + return usage; + } + + function getOrbitAddresses() internal pure returns (address[] memory) { + address[] memory streamAddresses = new address[](4); + streamAddresses[0] = EZREAL; + streamAddresses[1] = STABLE_LABS; + streamAddresses[2] = SAUCY_BLOCK; + streamAddresses[3] = ARETA; + + return streamAddresses; + } +} diff --git a/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md new file mode 100644 index 000000000..fb3a3b130 --- /dev/null +++ b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md @@ -0,0 +1,51 @@ +--- +title: "Orbit Program Renewal - Q3 2024" +author: "Aave Chan Initiative" +discussions: "https://governance.aave.com/t/arfc-orbit-program-renewal-q3-2024/18834" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0xea325542397fce607755f6c14be407f60a71a81f3a23c6b3a67e298b9dd8c091" +--- + +## Simple Summary + +Proposing the renewal of the Orbit program for recognized delegates, compensating them with GHO and ETH reimbursement of Gas costs , associated with their governance activity during part of Q3 2024 ( From 2024-05-13 to 2024-08-30). + +To compensate the missed compensation between the previous round of Orbit and the current one, a one-off compensation of 2200 GHO (worth 13 days of stream) is implemented. + +## Motivation + +Orbit recognizes the added value of the Delegates in the decentralization & diversity of the Aave DAO. This compensation allows them to focus on aave and keep their contribution efforts to our governance. The ACI proposes the extension of Orbit for a new quarter, Q3 2024, from 2024-05-13 to 2024-08-30. +An additional compensation is provided to account for the gap in distribution. + +**Gas Rebate:** + +Initially meant to reimburse gas cost associated with governance voting, the gas rebate has been entirely focused on service provider gas reimbursement since the launch of Aave governance V3, we propose to segregate these payments after this proposal to keep focus and consistency in the Orbit program. + +Gas reimbursements from service providers activity are proposed to be managed by Aave Finance service providers in their monthly treasury management update. + +## Specification + +- **Period Coverage:** Blocks 19860032 (May 13th 2024) to Block 20639896 (August 30th 2024) +- **Eligible Platforms:** + - EzR3al + - StableNode + - Saucy Block + - Areta +- **Gas Rebate:** Last service provider gas rebate using orbit: + - ACI : 2.91 ETH + - Catapulta: 0.67 ETH + - TokenLogic: 0.72 ETH +- **Budget:** 68800 GHO and 4.3 ETH +- **Relevant Links:** + - [Script output ](https://www.notion.so/Gov-V3-August-2024-script-Output-55c7ee78d48a4126a295f74a0dbf883c?pvs=21) + - [ACI’s Orbit tracker ](https://dapps.aavechan.com/orbit-tracker) + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xea325542397fce607755f6c14be407f60a71a81f3a23c6b3a67e298b9dd8c091) +- [Discussion](https://governance.aave.com/t/arfc-orbit-program-renewal-q3-2024/18834) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024_20240905.s.sol b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024_20240905.s.sol new file mode 100644 index 000000000..968f9900d --- /dev/null +++ b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024_20240905.s.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; +import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; +import {EthereumScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; +import {AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905} from './AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024_20240905.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/OrbitProgramRenewalQ32024_20240905.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905).creationCode + ); + + // compose action + IPayloadsControllerCore.ExecutionAction[] + memory actions = new IPayloadsControllerCore.ExecutionAction[](1); + actions[0] = GovV3Helpers.buildAction(payload0); + + // register action at payloadsController + GovV3Helpers.createPayload(actions); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024_20240905.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsEthereum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsEthereum[0] = GovV3Helpers.buildAction( + type(AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md' + ) + ); + } +} diff --git a/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/config.ts b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/config.ts new file mode 100644 index 000000000..52c3109be --- /dev/null +++ b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/config.ts @@ -0,0 +1,15 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + author: 'Aave Chan Initiative', + pools: ['AaveV3Ethereum'], + title: 'Orbit Program Renewal - Q3 2024', + shortName: 'OrbitProgramRenewalQ32024', + date: '20240905', + discussion: 'https://governance.aave.com/t/arfc-orbit-program-renewal-q3-2024/18834', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0xea325542397fce607755f6c14be407f60a71a81f3a23c6b3a67e298b9dd8c091', + votingNetwork: 'POLYGON', + }, + poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20685166}}}, +}; From 4b1ea7df9398d145d5624fb816a379e8e3d7fbe5 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Tue, 10 Sep 2024 15:21:58 +0000 Subject: [PATCH 68/68] fix(cache): automated cache update [skip ci] --- .../OrbitProgramRenewalQ32024.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md index fb3a3b130..bda54edda 100644 --- a/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md +++ b/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/OrbitProgramRenewalQ32024.md @@ -41,8 +41,8 @@ Gas reimbursements from service providers activity are proposed to be managed by ## References -- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol) -- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.t.sol) +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fb4a864dbc7d3048fa2c22437ab082e77bf4552a/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/fb4a864dbc7d3048fa2c22437ab082e77bf4552a/src/20240905_AaveV3Ethereum_OrbitProgramRenewalQ32024/AaveV3Ethereum_OrbitProgramRenewalQ32024_20240905.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0xea325542397fce607755f6c14be407f60a71a81f3a23c6b3a67e298b9dd8c091) - [Discussion](https://governance.aave.com/t/arfc-orbit-program-renewal-q3-2024/18834)