Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adjust Risk parameters for Aave Polygon V3 - Review #636

Merged
merged 9 commits into from
Mar 3, 2025
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
## Reserve changes

### Reserve altered

#### USDC ([0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359](https://polygonscan.com/address/0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359))

| description | value before | value after |
| --- | --- | --- |
| ltv | 0 % [0] | 70 % [7000] |


#### USDT ([0xc2132D05D31c914a87C6611C10748AEb04B58e8F](https://polygonscan.com/address/0xc2132D05D31c914a87C6611C10748AEb04B58e8F))

| description | value before | value after |
| --- | --- | --- |
| ltv | 0 % [0] | 70 % [7000] |


## Emodes changed

### EMode: Stablecoins(id: 1)

| description | value before | value after |
| --- | --- | --- |
| eMode.label (unchanged) | Stablecoins | Stablecoins |
| eMode.ltv | 93 % | 91.25 % |
| eMode.liquidationThreshold | 95 % | 94.25 % |
| eMode.liquidationBonus (unchanged) | 1 % | 1 % |
| eMode.borrowableBitmap | DAI, USDC, USDT, EURS, jEUR, EURA, miMATIC, USDC | |
| eMode.collateralBitmap (unchanged) | DAI, USDC, USDT, EURS, jEUR, EURA, miMATIC, USDC | DAI, USDC, USDT, EURS, jEUR, EURA, miMATIC, USDC |


### EMode: MATIC correlated(id: 2)



### EMode: ETH correlated(id: 3)



## Raw diff

```json
{
"eModes": {
"1": {
"borrowableBitmap": {
"from": "1171493",
"to": "0"
},
"liquidationThreshold": {
"from": 9500,
"to": 9425
},
"ltv": {
"from": 9300,
"to": 9125
}
}
},
"reserves": {
"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359": {
"ltv": {
"from": 0,
"to": 7000
}
},
"0xc2132D05D31c914a87C6611C10748AEb04B58e8F": {
"ltv": {
"from": 0,
"to": 7000
}
}
},
"raw": {
"0x401b5d0294e23637c18fcc38b1bca814cda2637c": {
"label": "GovernanceV3Polygon.PAYLOADS_CONTROLLER",
"balanceDiff": null,
"stateDiff": {}
},
"0x794a61358d6845594f94dc1db02a252b5b4814ad": {
"label": "AaveV3Polygon.POOL",
"balanceDiff": null,
"stateDiff": {}
},
"0x8145edddf43f50276641b55bd3ad95944510021e": {
"label": "AaveV3Polygon.POOL_CONFIGURATOR",
"balanceDiff": null,
"stateDiff": {}
},
"0xa72636cbcaa8f5ff95b2cc47f3cdee83f3294a0b": {
"label": "AaveV3Polygon.ACL_MANAGER",
"balanceDiff": null,
"stateDiff": {}
},
"0xa97684ead0e402dc232d5a977953df7ecbab3cdb": {
"label": "AaveV3Polygon.POOL_ADDRESSES_PROVIDER",
"balanceDiff": null,
"stateDiff": {}
},
"0xb7467b66d86ce80cc258f28d266a18a51db7fac8": {
"label": "AaveV3Polygon.POOL_IMPL",
"balanceDiff": null,
"stateDiff": {
"0x436c14203ee76e79d5652d508249351bf2aad2332f57381e04c70b85c9582d7c": {
"previousValue": "0x100000000000000000000103e8005f5e1000055d4a8007d0850629041e780000",
"newValue": "0x100000000000000000000103e8005f5e1000055d4a8007d0850629041e781b58"
},
"0x7bdd64832954533ce1bb06477375d759a0b8390bd9a186c07915b18bf5315b0c": {
"previousValue": "0x100000000000000000000103e80055d4a8000510ff4009c4a50629041e780000",
"newValue": "0x100000000000000000000103e80055d4a8000510ff4009c4a50629041e781b58"
},
"0x8e0cc0f1f0504b4cb44a23b328568106915b169e79003737a7b094503cdbeeb0": {
"previousValue": "0x000000000000000000000000000000000000000000000011e0252774251c2454",
"newValue": "0x000000000000000000000000000000000000000000000011e025277424d123a5"
},
"0x8e0cc0f1f0504b4cb44a23b328568106915b169e79003737a7b094503cdbeeb1": {
"previousValue": "0x537461626c65636f696e73000000000000000000000000000000000000000016",
"newValue": "0x537461626c65636f696e73000000000000000000000000000000000000000016"
},
"0x8e0cc0f1f0504b4cb44a23b328568106915b169e79003737a7b094503cdbeeb2": {
"previousValue": "0x000000000000000000000000000000000000000000000000000000000011e025",
"newValue": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
}
},
"0xb962dcd6d9f0bfb4cb2936c6c5e5c7c3f0d3c778": {
"label": null,
"balanceDiff": null,
"stateDiff": {
"0xeaaacae94bbfc90c56bc9f09c078e38d09be79409287043ed56adc78213c2109": {
"previousValue": "0x0067c229a8000000000002000000000000000000000000000000000000000000",
"newValue": "0x0067c229a8000000000003000000000000000000000000000000000000000000"
},
"0xeaaacae94bbfc90c56bc9f09c078e38d09be79409287043ed56adc78213c210a": {
"previousValue": "0x000000000000000000093a8000000000000067f04e2900000000000000000000",
"newValue": "0x000000000000000000093a8000000000000067f04e2900000000000067c229a9"
}
}
},
"0xdf7d0e6454db638881302729f5ba99936eaab233": {
"label": "AaveV2Polygon.POOL_ADMIN, AaveV3Polygon.ACL_ADMIN, GovernanceV3Polygon.EXECUTOR_LVL_1",
"balanceDiff": null,
"stateDiff": {}
},
"0xe5e48ad1f9d1a894188b483dcf91f4fad6aba43b": {
"label": "AaveV3Polygon.POOL_CONFIGURATOR_IMPL",
"balanceDiff": null,
"stateDiff": {}
}
}
}
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {AaveV3PolygonAssets, AaveV3PolygonEModes} from 'aave-address-book/AaveV3Polygon.sol';
import {AaveV3PayloadPolygon} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadPolygon.sol';
import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol';
import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
/**
* @title Adjust Aave Polygon V3 Risk Parameters
* @author ACI
* - Snapshot: Direct-to-AIP
* - Discussion: https://governance.aave.com/t/arfc-adjust-risk-parameters-for-aave-v2-and-v3-on-polygon/20211/60
*/
contract AaveV3Polygon_AdjustAavePolygonV3RiskParameters_20250228 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.USDT_UNDERLYING,
ltv: 70_00,
liqThreshold: EngineFlags.KEEP_CURRENT,
liqBonus: EngineFlags.KEEP_CURRENT,
debtCeiling: EngineFlags.KEEP_CURRENT,
liqProtocolFee: EngineFlags.KEEP_CURRENT
});
collateralUpdate[1] = IAaveV3ConfigEngine.CollateralUpdate({
asset: AaveV3PolygonAssets.USDCn_UNDERLYING,
ltv: 70_00,
liqThreshold: EngineFlags.KEEP_CURRENT,
liqBonus: EngineFlags.KEEP_CURRENT,
debtCeiling: EngineFlags.KEEP_CURRENT,
liqProtocolFee: EngineFlags.KEEP_CURRENT
});

return collateralUpdate;
}
function eModeCategoriesUpdates()
public
pure
override
returns (IAaveV3ConfigEngine.EModeCategoryUpdate[] memory)
{
IAaveV3ConfigEngine.EModeCategoryUpdate[]
memory eModeUpdates = new IAaveV3ConfigEngine.EModeCategoryUpdate[](1);

eModeUpdates[0] = IAaveV3ConfigEngine.EModeCategoryUpdate({
eModeCategory: AaveV3PolygonEModes.STABLECOINS,
ltv: 91_25,
liqThreshold: 94_25,
liqBonus: EngineFlags.KEEP_CURRENT,
label: EngineFlags.KEEP_CURRENT_STRING
});

return eModeUpdates;
}
function assetsEModeUpdates()
public
pure
override
returns (IAaveV3ConfigEngine.AssetEModeUpdate[] memory)
{
IAaveV3ConfigEngine.AssetEModeUpdate[]
memory assetEModeUpdates = new IAaveV3ConfigEngine.AssetEModeUpdate[](8);

assetEModeUpdates[0] = IAaveV3ConfigEngine.AssetEModeUpdate({
asset: AaveV3PolygonAssets.DAI_UNDERLYING,
eModeCategory: AaveV3PolygonEModes.STABLECOINS,
borrowable: EngineFlags.DISABLED,
collateral: EngineFlags.KEEP_CURRENT
});
assetEModeUpdates[1] = IAaveV3ConfigEngine.AssetEModeUpdate({
asset: AaveV3PolygonAssets.USDC_UNDERLYING,
eModeCategory: AaveV3PolygonEModes.STABLECOINS,
borrowable: EngineFlags.DISABLED,
collateral: EngineFlags.KEEP_CURRENT
});
assetEModeUpdates[2] = IAaveV3ConfigEngine.AssetEModeUpdate({
asset: AaveV3PolygonAssets.USDT_UNDERLYING,
eModeCategory: AaveV3PolygonEModes.STABLECOINS,
borrowable: EngineFlags.DISABLED,
collateral: EngineFlags.KEEP_CURRENT
});
assetEModeUpdates[3] = IAaveV3ConfigEngine.AssetEModeUpdate({
asset: AaveV3PolygonAssets.EURS_UNDERLYING,
eModeCategory: AaveV3PolygonEModes.STABLECOINS,
borrowable: EngineFlags.DISABLED,
collateral: EngineFlags.KEEP_CURRENT
});
assetEModeUpdates[4] = IAaveV3ConfigEngine.AssetEModeUpdate({
asset: AaveV3PolygonAssets.jEUR_UNDERLYING,
eModeCategory: AaveV3PolygonEModes.STABLECOINS,
borrowable: EngineFlags.DISABLED,
collateral: EngineFlags.KEEP_CURRENT
});
assetEModeUpdates[5] = IAaveV3ConfigEngine.AssetEModeUpdate({
asset: AaveV3PolygonAssets.EURA_UNDERLYING,
eModeCategory: AaveV3PolygonEModes.STABLECOINS,
borrowable: EngineFlags.DISABLED,
collateral: EngineFlags.KEEP_CURRENT
});
assetEModeUpdates[6] = IAaveV3ConfigEngine.AssetEModeUpdate({
asset: AaveV3PolygonAssets.miMATIC_UNDERLYING,
eModeCategory: AaveV3PolygonEModes.STABLECOINS,
borrowable: EngineFlags.DISABLED,
collateral: EngineFlags.KEEP_CURRENT
});
assetEModeUpdates[7] = IAaveV3ConfigEngine.AssetEModeUpdate({
asset: AaveV3PolygonAssets.USDCn_UNDERLYING,
eModeCategory: AaveV3PolygonEModes.STABLECOINS,
borrowable: EngineFlags.DISABLED,
collateral: EngineFlags.KEEP_CURRENT
});

return assetEModeUpdates;
}
}
Original file line number Diff line number Diff line change
@@ -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_AdjustAavePolygonV3RiskParameters_20250228} from './AaveV3Polygon_AdjustAavePolygonV3RiskParameters_20250228.sol';

/**
* @dev Test for AaveV3Polygon_AdjustAavePolygonV3RiskParameters_20250228
* command: FOUNDRY_PROFILE=polygon forge test --match-path=src/20250228_AaveV3Polygon_AdjustAavePolygonV3RiskParameters/AaveV3Polygon_AdjustAavePolygonV3RiskParameters_20250228.t.sol -vv
*/
contract AaveV3Polygon_AdjustAavePolygonV3RiskParameters_20250228_Test is ProtocolV3TestBase {
AaveV3Polygon_AdjustAavePolygonV3RiskParameters_20250228 internal proposal;

function setUp() public {
vm.createSelectFork(vm.rpcUrl('polygon'), 68490896);
proposal = new AaveV3Polygon_AdjustAavePolygonV3RiskParameters_20250228();
}

/**
* @dev executes the generic test suite including e2e and config snapshots
*/
function test_defaultProposalExecution() public {
defaultTest(
'AaveV3Polygon_AdjustAavePolygonV3RiskParameters_20250228',
AaveV3Polygon.POOL,
address(proposal)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
title: "Adjust Aave Polygon V3 Risk Parameters"
author: "ACI"
discussions: "https://governance.aave.com/t/arfc-adjust-risk-parameters-for-aave-v2-and-v3-on-polygon/20211/60"
---

## Simple Summary

This proposal addendum seeks governance approval for adjustment of the AIP 254 to reintroduce LTV for non-bridged stablecoins in Aave Polygon V3.

## Motivation

Based on service provider and community feedback, this proposal aims to adjust AIP-254 to reintroduce LTV for non-bridged stablecoins in Aave Polygon V3, as they carry no rehypothecation risk. It also reduces stablecoin Emode LT in Aave Polygon V3 due to insufficient stablecoin/stablecoin trading volume to justify the current risk level.

The Aave V3 infrastructure forces users with LTV0 assets as collateral to withdraw them before performing certain protocol actions, creating a poor user experience. Implementing a very low LTV (such as 1%) for bridged stablecoins would virtually eliminate risk while maintaining a better user experience.

USDT is scheduled to migrate to the USDT0 standard soon, as recently implemented on networks like Arbitrum. To promote stablecoin diversity and taking an optimistic view on the reduction of bridge risk for this asset, this proposal aims to restore an LTV for USDT.

## Specification

Aave Polygon V3 stablecoins suggested risk parameters

| Deployment | Asset | Current LTV | Proposed LTV |
| ---------- | ----- | ----------- | ------------ |
| Polygon V3 | USDT | 0% | 70% |
| Polygon V3 | USDC | 0% | 70% |

---

Aave Polygon Stablecoin emode

- Make all stablecoins non-borrowable in the stablecoin emode category

| Current LTV | Proposed LTV | Current LT | Proposed LT |
| ----------- | ------------ | ---------- | ----------- |
| 93% | 91.25% | 95% | 94.25% |

## References

- Implementation: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20250228_AaveV3Polygon_AdjustAavePolygonV3RiskParameters/AaveV3Polygon_AdjustAavePolygonV3RiskParameters_20250228.sol)
- Tests: [AaveV3Polygon](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20250228_AaveV3Polygon_AdjustAavePolygonV3RiskParameters/AaveV3Polygon_AdjustAavePolygonV3RiskParameters_20250228.t.sol)
- Snapshot: Direct-to-AIP
- [Discussion](https://governance.aave.com/t/arfc-adjust-risk-parameters-for-aave-v2-and-v3-on-polygon/20211/60)

## Copyright

Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
Loading