From 01b5c682c53933de29d4fa9f41efc53497c69850 Mon Sep 17 00:00:00 2001 From: Daniel Yamin <47980641+dyamin@users.noreply.github.com> Date: Wed, 5 Jun 2024 19:10:17 +0300 Subject: [PATCH 1/2] [Chaos Labs] Risk Parameter Updates - Aave V3 (#347) * Chaos Labs Risk Parameter Updates - Aave V3 * polygon added --- ...skParameterUpdatesAaveV3_20240530_after.md | 30 ++++ ...skParameterUpdatesAaveV3_20240530_after.md | 30 ++++ ...skParameterUpdatesAaveV3_20240530_after.md | 30 ++++ ...skParameterUpdatesAaveV3_20240530_after.md | 48 ++++++ lib/aave-helpers | 2 +- ...absRiskParameterUpdatesAaveV3_20240530.sol | 35 ++++ ...sRiskParameterUpdatesAaveV3_20240530.t.sol | 32 ++++ ...absRiskParameterUpdatesAaveV3_20240530.sol | 35 ++++ ...sRiskParameterUpdatesAaveV3_20240530.t.sol | 32 ++++ ...absRiskParameterUpdatesAaveV3_20240530.sol | 35 ++++ ...sRiskParameterUpdatesAaveV3_20240530.t.sol | 32 ++++ ...absRiskParameterUpdatesAaveV3_20240530.sol | 43 +++++ ...sRiskParameterUpdatesAaveV3_20240530.t.sol | 32 ++++ .../ChaosLabsRiskParameterUpdatesAaveV3.md | 52 ++++++ ...sRiskParameterUpdatesAaveV3_20240530.s.sol | 150 ++++++++++++++++++ .../config.ts | 85 ++++++++++ 16 files changed, 702 insertions(+), 1 deletion(-) create mode 100644 diffs/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md create mode 100644 diffs/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md create mode 100644 diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md create mode 100644 diffs/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol create mode 100644 src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/config.ts diff --git a/diffs/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md b/diffs/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md new file mode 100644 index 000000000..1199d81e8 --- /dev/null +++ b/diffs/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md @@ -0,0 +1,30 @@ +## Reserve changes + +### Reserves altered + +#### ARB ([0x912CE59144191C1204E64559FE8253a0e49E6548](https://arbiscan.io/address/0x912CE59144191C1204E64559FE8253a0e49E6548)) + +| description | value before | value after | +| --- | --- | --- | +| ltv | 50 % | 58 % | +| liquidationThreshold | 60 % | 63 % | + + +## Raw diff + +```json +{ + "reserves": { + "0x912CE59144191C1204E64559FE8253a0e49E6548": { + "liquidationThreshold": { + "from": 6000, + "to": 6300 + }, + "ltv": { + "from": 5000, + "to": 5800 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md b/diffs/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md new file mode 100644 index 000000000..2ce0945f2 --- /dev/null +++ b/diffs/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md @@ -0,0 +1,30 @@ +## Reserve changes + +### Reserves altered + +#### GNO ([0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb](https://gnosisscan.io/address/0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb)) + +| description | value before | value after | +| --- | --- | --- | +| ltv | 45 % | 48 % | +| liquidationThreshold | 50 % | 53 % | + + +## Raw diff + +```json +{ + "reserves": { + "0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb": { + "liquidationThreshold": { + "from": 5000, + "to": 5300 + }, + "ltv": { + "from": 4500, + "to": 4800 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md b/diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md new file mode 100644 index 000000000..6fffc5678 --- /dev/null +++ b/diffs/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md @@ -0,0 +1,30 @@ +## Reserve changes + +### Reserves altered + +#### OP ([0x4200000000000000000000000000000000000042](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042)) + +| description | value before | value after | +| --- | --- | --- | +| ltv | 50 % | 58 % | +| liquidationThreshold | 60 % | 63 % | + + +## Raw diff + +```json +{ + "reserves": { + "0x4200000000000000000000000000000000000042": { + "liquidationThreshold": { + "from": 6000, + "to": 6300 + }, + "ltv": { + "from": 5000, + "to": 5800 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md b/diffs/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md new file mode 100644 index 000000000..3653e509e --- /dev/null +++ b/diffs/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_before_AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_after.md @@ -0,0 +1,48 @@ +## Reserve changes + +### Reserve altered + +#### stMATIC ([0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4](https://polygonscan.com/address/0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4)) + +| description | value before | value after | +| --- | --- | --- | +| ltv | 45 % | 48 % | +| liquidationThreshold | 56 % | 58 % | + + +#### MaticX ([0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6](https://polygonscan.com/address/0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6)) + +| description | value before | value after | +| --- | --- | --- | +| ltv | 45 % | 50 % | +| liquidationThreshold | 58 % | 60 % | + + +## Raw diff + +```json +{ + "reserves": { + "0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4": { + "liquidationThreshold": { + "from": 5600, + "to": 5800 + }, + "ltv": { + "from": 4500, + "to": 4800 + } + }, + "0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6": { + "liquidationThreshold": { + "from": 5800, + "to": 6000 + }, + "ltv": { + "from": 4500, + "to": 5000 + } + } + } +} +``` \ No newline at end of file diff --git a/lib/aave-helpers b/lib/aave-helpers index 2f7c3c9c2..8e1340b89 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit 2f7c3c9c2609c5d3f2b9df1de2c9f11ac445eb1a +Subproject commit 8e1340b890cef83117a4b319bea395b26991c0aa diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol new file mode 100644 index 000000000..9a2cf3d95 --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol @@ -0,0 +1,35 @@ +// 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-helpers/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Chaos Labs Risk Parameter Updates AaveV3 + * @author Chaos Labs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9 + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788 + */ +contract AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530 is AaveV3PayloadArbitrum { + function collateralsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.CollateralUpdate[] memory) + { + IAaveV3ConfigEngine.CollateralUpdate[] + memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1); + + collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({ + asset: AaveV3ArbitrumAssets.ARB_UNDERLYING, + ltv: 58_00, + liqThreshold: 63_00, + liqBonus: EngineFlags.KEEP_CURRENT, + debtCeiling: EngineFlags.KEEP_CURRENT, + liqProtocolFee: EngineFlags.KEEP_CURRENT + }); + + return collateralUpdate; + } +} diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol new file mode 100644 index 000000000..7222ce16a --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.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_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol'; + +/** + * @dev Test for AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530 + * command: FOUNDRY_PROFILE=arbitrum forge test --match-path=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol -vv + */ +contract AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530_Test is ProtocolV3TestBase { + AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('arbitrum'), 216612699); + proposal = new AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530', + AaveV3Arbitrum.POOL, + address(proposal) + ); + } +} diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol new file mode 100644 index 000000000..0aa1323f6 --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.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/v3-config-engine/AaveV3PayloadGnosis.sol'; +import {EngineFlags} from 'aave-helpers/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Chaos Labs Risk Parameter Updates AaveV3 + * @author Chaos Labs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9 + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788 + */ +contract AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530 is AaveV3PayloadGnosis { + function collateralsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.CollateralUpdate[] memory) + { + IAaveV3ConfigEngine.CollateralUpdate[] + memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1); + + collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({ + asset: AaveV3GnosisAssets.GNO_UNDERLYING, + ltv: 48_00, + liqThreshold: 53_00, + liqBonus: EngineFlags.KEEP_CURRENT, + debtCeiling: EngineFlags.KEEP_CURRENT, + liqProtocolFee: EngineFlags.KEEP_CURRENT + }); + + return collateralUpdate; + } +} diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol new file mode 100644 index 000000000..4aad6ce40 --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.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_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol'; + +/** + * @dev Test for AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530 + * command: FOUNDRY_PROFILE=gnosis forge test --match-path=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol -vv + */ +contract AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530_Test is ProtocolV3TestBase { + AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('gnosis'), 34209835); + proposal = new AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530', + AaveV3Gnosis.POOL, + address(proposal) + ); + } +} diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol new file mode 100644 index 000000000..b2ee22ce6 --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol @@ -0,0 +1,35 @@ +// 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-helpers/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Chaos Labs Risk Parameter Updates AaveV3 + * @author Chaos Labs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9 + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788 + */ +contract AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530 is AaveV3PayloadOptimism { + function collateralsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.CollateralUpdate[] memory) + { + IAaveV3ConfigEngine.CollateralUpdate[] + memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](1); + + collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({ + asset: AaveV3OptimismAssets.OP_UNDERLYING, + ltv: 58_00, + liqThreshold: 63_00, + liqBonus: EngineFlags.KEEP_CURRENT, + debtCeiling: EngineFlags.KEEP_CURRENT, + liqProtocolFee: EngineFlags.KEEP_CURRENT + }); + + return collateralUpdate; + } +} diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol new file mode 100644 index 000000000..ba2d00110 --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.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_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol'; + +/** + * @dev Test for AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530 + * command: FOUNDRY_PROFILE=optimism forge test --match-path=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol -vv + */ +contract AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530_Test is ProtocolV3TestBase { + AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('optimism'), 120739105); + proposal = new AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530', + AaveV3Optimism.POOL, + address(proposal) + ); + } +} diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol new file mode 100644 index 000000000..52d1c62b1 --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol @@ -0,0 +1,43 @@ +// 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-helpers/v3-config-engine/EngineFlags.sol'; +import {IAaveV3ConfigEngine} from 'aave-helpers/v3-config-engine/IAaveV3ConfigEngine.sol'; +/** + * @title Chaos Labs Risk Parameter Updates AaveV3 + * @author Chaos Labs + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9 + * - Discussion: https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788 + */ +contract AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530 is AaveV3PayloadPolygon { + function collateralsUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.CollateralUpdate[] memory) + { + IAaveV3ConfigEngine.CollateralUpdate[] + memory collateralUpdate = new IAaveV3ConfigEngine.CollateralUpdate[](2); + + collateralUpdate[0] = IAaveV3ConfigEngine.CollateralUpdate({ + asset: AaveV3PolygonAssets.stMATIC_UNDERLYING, + ltv: 48_00, + liqThreshold: 58_00, + liqBonus: EngineFlags.KEEP_CURRENT, + debtCeiling: EngineFlags.KEEP_CURRENT, + liqProtocolFee: EngineFlags.KEEP_CURRENT + }); + collateralUpdate[1] = IAaveV3ConfigEngine.CollateralUpdate({ + asset: AaveV3PolygonAssets.MaticX_UNDERLYING, + ltv: 50_00, + liqThreshold: 60_00, + liqBonus: EngineFlags.KEEP_CURRENT, + debtCeiling: EngineFlags.KEEP_CURRENT, + liqProtocolFee: EngineFlags.KEEP_CURRENT + }); + + return collateralUpdate; + } +} diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol new file mode 100644 index 000000000..b2252d6d7 --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.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_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol'; + +/** + * @dev Test for AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530 + * command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol -vv + */ +contract AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530_Test is ProtocolV3TestBase { + AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 57568503); + proposal = new AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530', + AaveV3Polygon.POOL, + address(proposal) + ); + } +} diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md new file mode 100644 index 000000000..837b0ba4d --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md @@ -0,0 +1,52 @@ +--- +title: "Chaos Labs Risk Parameter Updates AaveV3" +author: "Chaos Labs" +discussions: "https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788" +snapshot: "https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9" +--- + +## Simple Summary + +A proposal to adjust ten (10) total risk parameters, including Loan-to-Value and Liquidation Threshold, across five (5) Aave V3 assets. + +## 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 analyses below were 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. + +## Specification + +### Gnosis + +| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | +| ----- | ----------- | --------------- | ---------- | -------------- | +| GNO | 45% | 48% | 50% | 53% | + +### Optimism + +| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | +| ----- | ----------- | --------------- | ---------- | -------------- | +| OP | 50% | 58% | 60% | 63% | + +### Arbitrum + +| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | +| ----- | ----------- | --------------- | ---------- | -------------- | +| ARB | 50% | 58% | 60% | 63% | + +### Polygon + +| Asset | Current LTV | Recommended LTV | Current LT | Recommended LT | +| ------- | ----------- | --------------- | ---------- | -------------- | +| stMATIC | 45% | 48% | 56% | 58% | +| MaticX | 45% | 50% | 58% | 60% | + +## References + +- Implementation: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol) +- Tests: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9) +- [Discussion](https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol new file mode 100644 index 000000000..66d41467e --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol @@ -0,0 +1,150 @@ +// 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, GnosisScript} from 'aave-helpers/ScriptUtils.sol'; +import {AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol'; +import {AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol'; +import {AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol'; +import {AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530} from './AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol'; + +/** + * @dev Deploy Polygon + * deploy-command: make deploy-ledger contract=src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol:DeployPolygon chain=polygon + * verify-command: FOUNDRY_PROFILE=polygon npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol/137/run-latest.json + */ +contract DeployPolygon is PolygonScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530).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/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol:DeployOptimism chain=optimism + * verify-command: FOUNDRY_PROFILE=optimism npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol/10/run-latest.json + */ +contract DeployOptimism is OptimismScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530).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/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol:DeployArbitrum chain=arbitrum + * verify-command: FOUNDRY_PROFILE=arbitrum npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol/42161/run-latest.json + */ +contract DeployArbitrum is ArbitrumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530).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/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol:DeployGnosis chain=gnosis + * verify-command: FOUNDRY_PROFILE=gnosis npx catapulta-verify -b broadcast/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol/100/run-latest.json + */ +contract DeployGnosis is GnosisScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530).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/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3_20240530.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external { + // create payloads + PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](4); + + // compose actions for validation + IPayloadsControllerCore.ExecutionAction[] + memory actionsPolygon = new IPayloadsControllerCore.ExecutionAction[](1); + actionsPolygon[0] = GovV3Helpers.buildAction( + type(AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode + ); + payloads[0] = GovV3Helpers.buildPolygonPayload(vm, actionsPolygon); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsOptimism = new IPayloadsControllerCore.ExecutionAction[](1); + actionsOptimism[0] = GovV3Helpers.buildAction( + type(AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode + ); + payloads[1] = GovV3Helpers.buildOptimismPayload(vm, actionsOptimism); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsArbitrum = new IPayloadsControllerCore.ExecutionAction[](1); + actionsArbitrum[0] = GovV3Helpers.buildAction( + type(AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode + ); + payloads[2] = GovV3Helpers.buildArbitrumPayload(vm, actionsArbitrum); + + IPayloadsControllerCore.ExecutionAction[] + memory actionsGnosis = new IPayloadsControllerCore.ExecutionAction[](1); + actionsGnosis[0] = GovV3Helpers.buildAction( + type(AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530).creationCode + ); + payloads[3] = GovV3Helpers.buildGnosisPayload(vm, actionsGnosis); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md' + ) + ); + } +} diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/config.ts b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/config.ts new file mode 100644 index 000000000..dcde9835d --- /dev/null +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/config.ts @@ -0,0 +1,85 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Polygon', 'AaveV3Optimism', 'AaveV3Arbitrum', 'AaveV3Gnosis'], + title: 'Chaos Labs Risk Parameter Updates AaveV3', + shortName: 'ChaosLabsRiskParameterUpdatesAaveV3', + date: '20240530', + author: 'Chaos Labs', + discussion: + 'https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788', + snapshot: + 'https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3Polygon: { + configs: { + COLLATERALS_UPDATE: [ + { + asset: 'stMATIC', + ltv: '48', + liqThreshold: '58', + liqBonus: '', + debtCeiling: '', + liqProtocolFee: '', + }, + { + asset: 'MaticX', + ltv: '50', + liqThreshold: '60', + liqBonus: '', + debtCeiling: '', + liqProtocolFee: '', + }, + ], + }, + cache: {blockNumber: 57568503}, + }, + AaveV3Optimism: { + configs: { + COLLATERALS_UPDATE: [ + { + asset: 'OP', + ltv: '58', + liqThreshold: '63', + liqBonus: '', + debtCeiling: '', + liqProtocolFee: '', + }, + ], + }, + cache: {blockNumber: 120739105}, + }, + AaveV3Arbitrum: { + configs: { + COLLATERALS_UPDATE: [ + { + asset: 'ARB', + ltv: '58', + liqThreshold: '63', + liqBonus: '', + debtCeiling: '', + liqProtocolFee: '', + }, + ], + }, + cache: {blockNumber: 216612699}, + }, + AaveV3Gnosis: { + configs: { + COLLATERALS_UPDATE: [ + { + asset: 'GNO', + ltv: '48', + liqThreshold: '53', + liqBonus: '', + debtCeiling: '', + liqProtocolFee: '', + }, + ], + }, + cache: {blockNumber: 34209835}, + }, + }, +}; From f1d0dc93382a2faef76ac59158f1b19a54c90a95 Mon Sep 17 00:00:00 2001 From: Cache bot Date: Wed, 5 Jun 2024 16:10:47 +0000 Subject: [PATCH 2/2] fix(cache): automated cache update [skip ci] --- .../ChaosLabsRiskParameterUpdatesAaveV3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md index 837b0ba4d..c6252b5df 100644 --- a/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md +++ b/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/ChaosLabsRiskParameterUpdatesAaveV3.md @@ -42,8 +42,8 @@ Increasing the liquidation threshold and LTV for assets allows Aave to enhance u ## References -- Implementation: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol) -- Tests: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol) +- Implementation: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.sol) +- Tests: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Polygon_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Optimism](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Optimism_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Arbitrum](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Arbitrum_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol), [AaveV3Gnosis](https://github.com/bgd-labs/aave-proposals-v3/blob/01b5c682c53933de29d4fa9f41efc53497c69850/src/20240530_Multi_ChaosLabsRiskParameterUpdatesAaveV3/AaveV3Gnosis_ChaosLabsRiskParameterUpdatesAaveV3_20240530.t.sol) - [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x9674191acdb3cae244e010069df7637d6b7b3e30849f91570f0349323c5330d9) - [Discussion](https://governance.aave.com/t/arfc-chaos-labs-risk-parameter-updates-aave-v3-05-24-2024/17788)