diff --git a/diffs/preAaveV3_Arbitrum_CapsUpgrade_20230904_20230904_postAaveV3_Arbitrum_CapsUpgrade_20230904_20230904.md b/diffs/preAaveV3_Arbitrum_CapsUpgrade_20230904_20230904_postAaveV3_Arbitrum_CapsUpgrade_20230904_20230904.md new file mode 100644 index 00000000..8cc0d747 --- /dev/null +++ b/diffs/preAaveV3_Arbitrum_CapsUpgrade_20230904_20230904_postAaveV3_Arbitrum_CapsUpgrade_20230904_20230904.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### AAVE ([0xba5DdD1f9d7F570dc94a51479a000E3BCE967196](https://arbiscan.io/address/0xba5DdD1f9d7F570dc94a51479a000E3BCE967196)) + +| description | value before | value after | +| --- | --- | --- | +| supplyCap | 1,850 AAVE | 2,710 AAVE | + + +## Raw diff + +```json +{ + "reserves": { + "0xba5DdD1f9d7F570dc94a51479a000E3BCE967196": { + "supplyCap": { + "from": 1850, + "to": 2710 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/preAaveV3_Metis_CapsUpgrade_20230904_20230904_postAaveV3_Metis_CapsUpgrade_20230904_20230904.md b/diffs/preAaveV3_Metis_CapsUpgrade_20230904_20230904_postAaveV3_Metis_CapsUpgrade_20230904_20230904.md new file mode 100644 index 00000000..8bdbd7d9 --- /dev/null +++ b/diffs/preAaveV3_Metis_CapsUpgrade_20230904_20230904_postAaveV3_Metis_CapsUpgrade_20230904_20230904.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### Metis ([0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000](https://andromeda-explorer.metis.io/address/0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000)) + +| description | value before | value after | +| --- | --- | --- | +| supplyCap | 60,000 Metis | 120,000 Metis | + + +## Raw diff + +```json +{ + "reserves": { + "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000": { + "supplyCap": { + "from": 60000, + "to": 120000 + } + } + } +} +``` \ No newline at end of file diff --git a/diffs/preAaveV3_Polygon_CapsUpgrade_20230904_20230904_postAaveV3_Polygon_CapsUpgrade_20230904_20230904.md b/diffs/preAaveV3_Polygon_CapsUpgrade_20230904_20230904_postAaveV3_Polygon_CapsUpgrade_20230904_20230904.md new file mode 100644 index 00000000..8a5db6e2 --- /dev/null +++ b/diffs/preAaveV3_Polygon_CapsUpgrade_20230904_20230904_postAaveV3_Polygon_CapsUpgrade_20230904_20230904.md @@ -0,0 +1,25 @@ +## Reserve changes + +### Reserves altered + +#### DPI ([0x85955046DF4668e1DD369D2DE9f3AEB98DD2A369](https://polygonscan.com/address/0x85955046DF4668e1DD369D2DE9f3AEB98DD2A369)) + +| description | value before | value after | +| --- | --- | --- | +| supplyCap | 1,417 DPI | 2,460 DPI | + + +## Raw diff + +```json +{ + "reserves": { + "0x85955046DF4668e1DD369D2DE9f3AEB98DD2A369": { + "supplyCap": { + "from": 1417, + "to": 2460 + } + } + } +} +``` \ No newline at end of file diff --git a/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Arbitrum_CapsUpgrade_20230904_20230904.sol b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Arbitrum_CapsUpgrade_20230904_20230904.sol new file mode 100644 index 00000000..d693a097 --- /dev/null +++ b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Arbitrum_CapsUpgrade_20230904_20230904.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3PayloadArbitrum, IEngine, EngineFlags} from 'aave-helpers/v3-config-engine/AaveV3PayloadArbitrum.sol'; +import {AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; + +/** + * @title CapsUpgrade_20230904 + * @author Alice Rozengarden (@Rozengarden - Aave-chan initiative) + * - Snapshot: no snapshot for Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-aave-v3-caps-increase-2023-08-31/14698 + */ +contract AaveV3_Arbitrum_CapsUpgrade_20230904_20230904 is AaveV3PayloadArbitrum { + function _preExecute() internal override {} + + function capsUpdates() public pure override returns (IEngine.CapsUpdate[] memory) { + IEngine.CapsUpdate[] memory capsUpdate = new IEngine.CapsUpdate[](1); + + capsUpdate[0] = IEngine.CapsUpdate({ + asset: AaveV3ArbitrumAssets.AAVE_UNDERLYING, + supplyCap: 2_710, + borrowCap: EngineFlags.KEEP_CURRENT + }); + + return capsUpdate; + } +} diff --git a/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Arbitrum_CapsUpgrade_20230904_20230904.t.sol b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Arbitrum_CapsUpgrade_20230904_20230904.t.sol new file mode 100644 index 00000000..a72e0b8f --- /dev/null +++ b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Arbitrum_CapsUpgrade_20230904_20230904.t.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import 'forge-std/Test.sol'; +import {GovHelpers} from 'aave-helpers/GovHelpers.sol'; +import {AaveGovernanceV2} from 'aave-address-book/AaveGovernanceV2.sol'; +import {AaveV3Arbitrum, AaveV3ArbitrumAssets} from 'aave-address-book/AaveV3Arbitrum.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3_Arbitrum_CapsUpgrade_20230904_20230904} from './AaveV3_Arbitrum_CapsUpgrade_20230904_20230904.sol'; + +/** + * @dev Test for AaveV3_Arbitrum_CapsUpgrade_20230904_20230904 + * command: make test-contract filter=AaveV3_Arbitrum_CapsUpgrade_20230904_20230904 + */ +contract AaveV3_Arbitrum_CapsUpgrade_20230904_20230904_Test is ProtocolV3TestBase { + AaveV3_Arbitrum_CapsUpgrade_20230904_20230904 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('arbitrum'), 127957002); + proposal = new AaveV3_Arbitrum_CapsUpgrade_20230904_20230904(); + } + + function testProposalExecution() public { + ReserveConfig[] memory allConfigsBefore = createConfigurationSnapshot( + 'preAaveV3_Arbitrum_CapsUpgrade_20230904_20230904', + AaveV3Arbitrum.POOL + ); + + GovHelpers.executePayload(vm, address(proposal), AaveGovernanceV2.ARBITRUM_BRIDGE_EXECUTOR); + + ReserveConfig[] memory allConfigsAfter = createConfigurationSnapshot( + 'postAaveV3_Arbitrum_CapsUpgrade_20230904_20230904', + AaveV3Arbitrum.POOL + ); + + address[] memory assetsChanged = new address[](1); + assetsChanged[0] = AaveV3ArbitrumAssets.AAVE_UNDERLYING; + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + ReserveConfig memory AAVE = _findReserveConfig( + allConfigsBefore, + AaveV3ArbitrumAssets.AAVE_UNDERLYING + ); + AAVE.supplyCap = 2_710; + _validateReserveConfig(AAVE, allConfigsAfter); + + e2eTestAsset( + AaveV3Arbitrum.POOL, + _findReserveConfig(allConfigsAfter, AaveV3ArbitrumAssets.WETH_UNDERLYING), + _findReserveConfig(allConfigsAfter, AaveV3ArbitrumAssets.AAVE_UNDERLYING) + ); + + diffReports( + 'preAaveV3_Arbitrum_CapsUpgrade_20230904_20230904', + 'postAaveV3_Arbitrum_CapsUpgrade_20230904_20230904' + ); + } +} diff --git a/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_CapsUpgrade_20230904_20230904.s.sol b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_CapsUpgrade_20230904_20230904.s.sol new file mode 100644 index 00000000..2d538f29 --- /dev/null +++ b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_CapsUpgrade_20230904_20230904.s.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {GovHelpers} from 'aave-helpers/GovHelpers.sol'; +import {EthereumScript, ArbitrumScript, MetisScript, PolygonScript} from 'aave-helpers/ScriptUtils.sol'; +import {AaveV3_Arbitrum_CapsUpgrade_20230904_20230904} from './AaveV3_Arbitrum_CapsUpgrade_20230904_20230904.sol'; +import {AaveV3_Metis_CapsUpgrade_20230904_20230904} from './AaveV3_Metis_CapsUpgrade_20230904_20230904.sol'; +import {AaveV3_Polygon_CapsUpgrade_20230904_20230904} from './AaveV3_Polygon_CapsUpgrade_20230904_20230904.sol'; + +/** + * @dev Deploy AaveV3_Arbitrum_CapsUpgrade_20230904_20230904 + * command: make deploy-ledger contract=src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_CapsUpgrade_20230904_20230904.s.sol:DeployArbitrum chain=arbitrum + */ +contract DeployArbitrum is ArbitrumScript { + function run() external broadcast { + new AaveV3_Arbitrum_CapsUpgrade_20230904_20230904(); + } +} + +/** + * @dev Deploy AaveV3_Metis_CapsUpgrade_20230904_20230904 + * command: make deploy-ledger contract=src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_CapsUpgrade_20230904_20230904.s.sol:DeployMetis chain=metis + */ +contract DeployMetis is MetisScript { + function run() external broadcast { + new AaveV3_Metis_CapsUpgrade_20230904_20230904(); + } +} + +/** + * @dev Deploy AaveV3_Polygon_CapsUpgrade_20230904_20230904 + * command: make deploy-ledger contract=src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_CapsUpgrade_20230904_20230904.s.sol:DeployPolygon chain=polygon + */ +contract DeployPolygon is PolygonScript { + function run() external broadcast { + new AaveV3_Polygon_CapsUpgrade_20230904_20230904(); + } +} + +/** + * @dev Create Proposal + * command: make deploy-ledger contract=src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_CapsUpgrade_20230904_20230904.s.sol:CreateProposal chain=mainnet + */ +contract CreateProposal is EthereumScript { + function run() external broadcast { + GovHelpers.Payload[] memory payloads = new GovHelpers.Payload[](3); + payloads[0] = GovHelpers.buildArbitrum(address(0)); + payloads[1] = GovHelpers.buildMetis(address(0)); + payloads[2] = GovHelpers.buildPolygon(address(0)); + GovHelpers.createProposal( + payloads, + GovHelpers.ipfsHashFile( + vm, + 'src/20230904_AaveV3_Multi_CapsUpgrade_20230904/CapsUpgrade_20230904.md' + ) + ); + } +} diff --git a/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Metis_CapsUpgrade_20230904_20230904.sol b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Metis_CapsUpgrade_20230904_20230904.sol new file mode 100644 index 00000000..20b8ab93 --- /dev/null +++ b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Metis_CapsUpgrade_20230904_20230904.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3PayloadMetis, IEngine, EngineFlags} from 'aave-helpers/v3-config-engine/AaveV3PayloadMetis.sol'; +import {AaveV3MetisAssets} from 'aave-address-book/AaveV3Metis.sol'; + +/** + * @title CapsUpgrade_20230904 + * @author Alice Rozengarden (@Rozengarden - Aave-chan initiative) + * - Snapshot: no snapshot for Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-aave-v3-caps-increase-2023-08-31/14698 + */ +contract AaveV3_Metis_CapsUpgrade_20230904_20230904 is AaveV3PayloadMetis { + function _preExecute() internal override {} + + function capsUpdates() public pure override returns (IEngine.CapsUpdate[] memory) { + IEngine.CapsUpdate[] memory capsUpdate = new IEngine.CapsUpdate[](1); + + capsUpdate[0] = IEngine.CapsUpdate({ + asset: AaveV3MetisAssets.Metis_UNDERLYING, + supplyCap: 120_000, + borrowCap: EngineFlags.KEEP_CURRENT + }); + + return capsUpdate; + } +} diff --git a/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Metis_CapsUpgrade_20230904_20230904.t.sol b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Metis_CapsUpgrade_20230904_20230904.t.sol new file mode 100644 index 00000000..31e39ce3 --- /dev/null +++ b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Metis_CapsUpgrade_20230904_20230904.t.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import 'forge-std/Test.sol'; +import {GovHelpers} from 'aave-helpers/GovHelpers.sol'; +import {AaveGovernanceV2} from 'aave-address-book/AaveGovernanceV2.sol'; +import {AaveV3Metis, AaveV3MetisAssets} from 'aave-address-book/AaveV3Metis.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3_Metis_CapsUpgrade_20230904_20230904} from './AaveV3_Metis_CapsUpgrade_20230904_20230904.sol'; + +/** + * @dev Test for AaveV3_Metis_CapsUpgrade_20230904_20230904 + * command: make test-contract filter=AaveV3_Metis_CapsUpgrade_20230904_20230904 + */ +contract AaveV3_Metis_CapsUpgrade_20230904_20230904_Test is ProtocolV3TestBase { + AaveV3_Metis_CapsUpgrade_20230904_20230904 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('metis'), 8405352); + proposal = new AaveV3_Metis_CapsUpgrade_20230904_20230904(); + } + + function testProposalExecution() public { + ReserveConfig[] memory allConfigsBefore = createConfigurationSnapshot( + 'preAaveV3_Metis_CapsUpgrade_20230904_20230904', + AaveV3Metis.POOL + ); + + GovHelpers.executePayload(vm, address(proposal), AaveGovernanceV2.METIS_BRIDGE_EXECUTOR); + + ReserveConfig[] memory allConfigsAfter = createConfigurationSnapshot( + 'postAaveV3_Metis_CapsUpgrade_20230904_20230904', + AaveV3Metis.POOL + ); + + address[] memory assetsChanged = new address[](1); + assetsChanged[0] = AaveV3MetisAssets.Metis_UNDERLYING; + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + ReserveConfig memory Metis = _findReserveConfig( + allConfigsBefore, + AaveV3MetisAssets.Metis_UNDERLYING + ); + Metis.supplyCap = 120_000; + _validateReserveConfig(Metis, allConfigsAfter); + + e2eTestAsset( + AaveV3Metis.POOL, + _findReserveConfig(allConfigsAfter, AaveV3MetisAssets.WETH_UNDERLYING), + _findReserveConfig(allConfigsAfter, AaveV3MetisAssets.Metis_UNDERLYING) + ); + + diffReports( + 'preAaveV3_Metis_CapsUpgrade_20230904_20230904', + 'postAaveV3_Metis_CapsUpgrade_20230904_20230904' + ); + } +} diff --git a/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Polygon_CapsUpgrade_20230904_20230904.sol b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Polygon_CapsUpgrade_20230904_20230904.sol new file mode 100644 index 00000000..5ed5d6ce --- /dev/null +++ b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Polygon_CapsUpgrade_20230904_20230904.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3PayloadPolygon, IEngine, EngineFlags} from 'aave-helpers/v3-config-engine/AaveV3PayloadPolygon.sol'; +import {AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; + +/** + * @title CapsUpgrade_20230904 + * @author Alice Rozengarden (@Rozengarden - Aave-chan initiative) + * - Snapshot: no snapshot for Direct-to-AIP + * - Discussion: https://governance.aave.com/t/arfc-aave-v3-caps-increase-2023-08-31/14698 + */ +contract AaveV3_Polygon_CapsUpgrade_20230904_20230904 is AaveV3PayloadPolygon { + function _preExecute() internal override {} + + function capsUpdates() public pure override returns (IEngine.CapsUpdate[] memory) { + IEngine.CapsUpdate[] memory capsUpdate = new IEngine.CapsUpdate[](1); + + capsUpdate[0] = IEngine.CapsUpdate({ + asset: AaveV3PolygonAssets.DPI_UNDERLYING, + supplyCap: 2_460, + borrowCap: EngineFlags.KEEP_CURRENT + }); + + return capsUpdate; + } +} diff --git a/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Polygon_CapsUpgrade_20230904_20230904.t.sol b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Polygon_CapsUpgrade_20230904_20230904.t.sol new file mode 100644 index 00000000..78c613b5 --- /dev/null +++ b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Polygon_CapsUpgrade_20230904_20230904.t.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import 'forge-std/Test.sol'; +import {GovHelpers} from 'aave-helpers/GovHelpers.sol'; +import {AaveGovernanceV2} from 'aave-address-book/AaveGovernanceV2.sol'; +import {AaveV3Polygon, AaveV3PolygonAssets} from 'aave-address-book/AaveV3Polygon.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; +import {AaveV3_Polygon_CapsUpgrade_20230904_20230904} from './AaveV3_Polygon_CapsUpgrade_20230904_20230904.sol'; + +/** + * @dev Test for AaveV3_Polygon_CapsUpgrade_20230904_20230904 + * command: make test-contract filter=AaveV3_Polygon_CapsUpgrade_20230904_20230904 + */ +contract AaveV3_Polygon_CapsUpgrade_20230904_20230904_Test is ProtocolV3TestBase { + AaveV3_Polygon_CapsUpgrade_20230904_20230904 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('polygon'), 47135218); + proposal = new AaveV3_Polygon_CapsUpgrade_20230904_20230904(); + } + + function testProposalExecution() public { + ReserveConfig[] memory allConfigsBefore = createConfigurationSnapshot( + 'preAaveV3_Polygon_CapsUpgrade_20230904_20230904', + AaveV3Polygon.POOL + ); + + GovHelpers.executePayload(vm, address(proposal), AaveGovernanceV2.POLYGON_BRIDGE_EXECUTOR); + + ReserveConfig[] memory allConfigsAfter = createConfigurationSnapshot( + 'postAaveV3_Polygon_CapsUpgrade_20230904_20230904', + AaveV3Polygon.POOL + ); + + address[] memory assetsChanged = new address[](1); + assetsChanged[0] = AaveV3PolygonAssets.DPI_UNDERLYING; + _noReservesConfigsChangesApartFrom(allConfigsBefore, allConfigsAfter, assetsChanged); + + ReserveConfig memory DPI = _findReserveConfig( + allConfigsBefore, + AaveV3PolygonAssets.DPI_UNDERLYING + ); + DPI.supplyCap = 2_460; + _validateReserveConfig(DPI, allConfigsAfter); + + e2eTestAsset( + AaveV3Polygon.POOL, + _findReserveConfig(allConfigsAfter, AaveV3PolygonAssets.WMATIC_UNDERLYING), + _findReserveConfig(allConfigsAfter, AaveV3PolygonAssets.DPI_UNDERLYING) + ); + + diffReports( + 'preAaveV3_Polygon_CapsUpgrade_20230904_20230904', + 'postAaveV3_Polygon_CapsUpgrade_20230904_20230904' + ); + } +} diff --git a/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/CapsUpgrade_20230904.md b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/CapsUpgrade_20230904.md new file mode 100644 index 00000000..09fb3520 --- /dev/null +++ b/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/CapsUpgrade_20230904.md @@ -0,0 +1,38 @@ +--- +title: "CapsUpgrade_20230904" +author: "Alice Rozengarden (@Rozengarden - Aave-chan initiative)" +discussions: "https://governance.aave.com/t/arfc-aave-v3-caps-increase-2023-08-31/14698" +--- + +## Simple Summary + +This proposal is asking for feedback from the risk providers on various assets across multiple networks that are nearing the full use of either their supply or borrow caps. + +This Proposal is compatible with the Direct-to-AIP Framework + +## Motivation + +Several caps on assets across the various V3 markets are reaching critical levels but haven’t been included in [the recent proposal by ChaosLabs](https://governance.aave.com/t/arfc-chaos-labs-risk-stewards-increase-borrow-caps-on-v3-ethereum-08-29-2023/14688). Thus, the goal of this proposal is to ask about their status and the risk associated with the potential increase of their caps. Letting those caps reach 100% while it could have been avoided would result in a sub-optimal experience for the user of AAVE and of the product built around the protocol as well as a loss of potential revenue. + +## Specification + +The following assets are concerned by the proposal + +### Supply Caps: + +| Chain | Token | Supply cap | Utilization rate | Proposed Supply cap | Increase (%) | Total supply | % of the total supply | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Arbitrum | AAVE | 1.85k | 100% | 2710 | 46% | 5.4k | ~50% | +| Metis | Metis | 60k | 76% | 120k | 100% | 2.96M | 4% | +| Polygon | DPI | 1.417 | 87% | 2460 | ~73% | 4928 | ~50% | + +## References + +- Implementation: [Arbitrum](https://github.com/bgd-labs/aave-proposals/blob/main/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Arbitrum_CapsUpgrade_20230904_20230904.sol), [Metis](https://github.com/bgd-labs/aave-proposals/blob/main/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Metis_CapsUpgrade_20230904_20230904.sol), [Polygon](https://github.com/bgd-labs/aave-proposals/blob/main/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Polygon_CapsUpgrade_20230904_20230904.sol) +- Tests: [Arbitrum](https://github.com/bgd-labs/aave-proposals/blob/main/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Arbitrum_CapsUpgrade_20230904_20230904.t.sol), [Metis](https://github.com/bgd-labs/aave-proposals/blob/main/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Metis_CapsUpgrade_20230904_20230904.t.sol), [Polygon](https://github.com/bgd-labs/aave-proposals/blob/main/src/20230904_AaveV3_Multi_CapsUpgrade_20230904/AaveV3_Polygon_CapsUpgrade_20230904_20230904.t.sol) +- Snapshot: no snapshot for Direct-to-AIP +- [Discussion](https://governance.aave.com/t/arfc-aave-v3-caps-increase-2023-08-31/14698) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).