From ad47735f95ca24d2b65d7ffaca0b0a05f7397121 Mon Sep 17 00:00:00 2001 From: Fermin 'Piscu' Carranza Date: Tue, 28 Jan 2025 13:20:42 -0500 Subject: [PATCH] Update prime rates and caps (#578) * feat: update prime rates and caps * Update src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate.md Co-authored-by: Ian Flexa <85500650+ianflexa@users.noreply.github.com> --------- Co-authored-by: Ian Flexa <85500650+ianflexa@users.noreply.github.com> --- ...RateRsETHSupplyCapUpdate_20250122_after.md | 45 +++++++++++++ ...orrowRateRsETHSupplyCapUpdate_20250122.sol | 49 +++++++++++++++ ...rowRateRsETHSupplyCapUpdate_20250122.t.sol | 32 ++++++++++ ...nceWstETHBorrowRateRsETHSupplyCapUpdate.md | 63 +++++++++++++++++++ ...rowRateRsETHSupplyCapUpdate_20250122.s.sol | 62 ++++++++++++++++++ .../config.ts | 34 ++++++++++ 6 files changed, 285 insertions(+) create mode 100644 diffs/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122_before_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122_after.md create mode 100644 src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.sol create mode 100644 src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.t.sol create mode 100644 src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate.md create mode 100644 src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.s.sol create mode 100644 src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/config.ts diff --git a/diffs/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122_before_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122_after.md b/diffs/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122_before_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122_after.md new file mode 100644 index 000000000..8d777c141 --- /dev/null +++ b/diffs/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122_before_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122_after.md @@ -0,0 +1,45 @@ +## Reserve changes + +### Reserve altered + +#### wstETH ([0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0](https://etherscan.io/address/0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0)) + +| description | value before | value after | +| --- | --- | --- | +| maxVariableBorrowRate | 86.75 % | 85.75 % | +| variableRateSlope1 | 1.75 % | 0.75 % | +| interestRate | ![before](https://dash.onaave.com/api/static?variableRateSlope1=17500000000000000000000000&variableRateSlope2=850000000000000000000000000&optimalUsageRatio=900000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=867500000000000000000000000) | ![after](https://dash.onaave.com/api/static?variableRateSlope1=7500000000000000000000000&variableRateSlope2=850000000000000000000000000&optimalUsageRatio=900000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=857500000000000000000000000) | + +#### rsETH ([0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7](https://etherscan.io/address/0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7)) + +| description | value before | value after | +| --- | --- | --- | +| supplyCap | 10,000 rsETH | 65,000 rsETH | + + +## Raw diff + +```json +{ + "reserves": { + "0xA1290d69c65A6Fe4DF752f95823fae25cB99e5A7": { + "supplyCap": { + "from": 10000, + "to": 65000 + } + } + }, + "strategies": { + "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0": { + "maxVariableBorrowRate": { + "from": "867500000000000000000000000", + "to": "857500000000000000000000000" + }, + "variableRateSlope1": { + "from": "17500000000000000000000000", + "to": "7500000000000000000000000" + } + } + } +} +``` \ No newline at end of file diff --git a/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.sol b/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.sol new file mode 100644 index 000000000..3296ba512 --- /dev/null +++ b/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; +import {AaveV3PayloadEthereumLido} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadEthereumLido.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 Prime Instance - wstETH Borrow Rate + rsETH Supply Cap Update + * @author @TokenLogic + * - Snapshot: https://snapshot.org/#/s:aave.eth/proposal/0xfc21203137ea8753ab8903fe4edd568bcaa7ea084586a7acb2c3b361d3dae9c8 + * - Discussion: https://governance.aave.com/t/arfc-prime-instance-wsteth-borrow-rate-rseth-supply-cap-update/20644 + */ +contract AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122 is + AaveV3PayloadEthereumLido +{ + function rateStrategiesUpdates() + public + pure + override + returns (IAaveV3ConfigEngine.RateStrategyUpdate[] memory) + { + IAaveV3ConfigEngine.RateStrategyUpdate[] + memory rateStrategies = new IAaveV3ConfigEngine.RateStrategyUpdate[](1); + rateStrategies[0] = IAaveV3ConfigEngine.RateStrategyUpdate({ + asset: AaveV3EthereumLidoAssets.wstETH_UNDERLYING, + params: IAaveV3ConfigEngine.InterestRateInputData({ + optimalUsageRatio: EngineFlags.KEEP_CURRENT, + baseVariableBorrowRate: EngineFlags.KEEP_CURRENT, + variableRateSlope1: 75, + variableRateSlope2: EngineFlags.KEEP_CURRENT + }) + }); + + return rateStrategies; + } + function capsUpdates() public pure override returns (IAaveV3ConfigEngine.CapsUpdate[] memory) { + IAaveV3ConfigEngine.CapsUpdate[] memory capsUpdate = new IAaveV3ConfigEngine.CapsUpdate[](1); + + capsUpdate[0] = IAaveV3ConfigEngine.CapsUpdate({ + asset: AaveV3EthereumLidoAssets.rsETH_UNDERLYING, + supplyCap: 65_000, + borrowCap: EngineFlags.KEEP_CURRENT + }); + + return capsUpdate; + } +} diff --git a/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.t.sol b/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.t.sol new file mode 100644 index 000000000..77793be50 --- /dev/null +++ b/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumLido} from 'aave-address-book/AaveV3EthereumLido.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122} from './AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.sol'; + +/** + * @dev Test for AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.t.sol -vv + */ +contract AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122_Test is + ProtocolV3TestBase +{ + AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 21681966); + proposal = new AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122', + AaveV3EthereumLido.POOL, + address(proposal) + ); + } +} diff --git a/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate.md b/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate.md new file mode 100644 index 000000000..bcbd8b645 --- /dev/null +++ b/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate.md @@ -0,0 +1,63 @@ +--- +title: "Prime Instance - wstETH Borrow Rate + rsETH Supply Cap Update" +author: "@TokenLogic" +discussions: "https://governance.aave.com/t/arfc-prime-instance-wsteth-borrow-rate-rseth-supply-cap-update/20644" +snapshot: "https://snapshot.org/#/s:aave.eth/proposal/0xfc21203137ea8753ab8903fe4edd568bcaa7ea084586a7acb2c3b361d3dae9c8" +--- + +## Simple Summary + +This publication proposes reducing the wstETH Slope1 and increasing the rsETH Supply Cap. + +## Motivation + +The Prime instance of Aave v3 on Ethereum has experienced significant growth since its launch in Q3 2024, attracting over $2 billion in user deposits. + +To support continued growth, this proposal suggests lowering the wstETH Slope1 parameter to align the borrow rate with market conditions. Based on feedback from the Renzo and Kelp teams, this adjustment is expected to drive an additional $300 million in user deposits to the Prime instance. + +Expected Benefits of Reducing the Slope1 Parameter: + +- ~72% increase in LRT deposits. +- ~50% increase in the wstETH Deposit Rate to 60 bps. +- ~50% increase in wstETH Borrow Rate fee generation. +- ~35% increase in the native wETH Deposit Rate. + +Lowering the Slope1 parameter will encourage new LRT deposits, boosting the LRT/LST yield-generating strategy, which is projected to outperform the LST/wETH strategy. With LRT deposit incentives, this strategy further enhances Prime’s appeal. + +As utilisation of wETH reserves across Core, Spark, and Prime approaches Uoptimal, the Prime instance of Aave v3 offers the highest native yield for LST/wETH yield strategies. The improved wstETH deposit rate solidifies Prime’s competitive position in the market. + +### rsETH Supply Cap + +rsETH has shown strong growth on the Core instance of Aave v3, while the Prime market has yet to attract rsETH deposits due to the lower wstETH Borrow Rate on Core and a small supply cap. + +Lowering the wstETH Borrow Rate on Prime would make borrowing wstETH more attractive. Feedback from the Kelp team suggests strong demand for rsETH beyond the current supply cap’s capacity. + +To support leveraged LRT/LST yield strategies, this proposal recommends a significant increase to the rsETH supply cap, enabling larger deposits to scale effectively, optimize returns, and reduce reliance on incentives. + +## Specification + +#### wstETH Reserve + +| Parameter | Current Value | Proposed Value | +| --------- | ------------- | -------------- | +| Uoptimal | 90.00% | 90.00% | +| Base | 0.00% | 0.00% | +| Slope1 | 1.75% | 0.75% | +| Slope2 | 85.00% | 85.00% | + +#### rsETH Supply Cap + +| Parameter | Current Value | Proposed Value | +| ---------- | ------------- | -------------- | +| Supply Cap | 10,000 | 65,000 | + +## References + +- Implementation: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.sol) +- Tests: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.t.sol) +- [Snapshot](https://snapshot.org/#/s:aave.eth/proposal/0xfc21203137ea8753ab8903fe4edd568bcaa7ea084586a7acb2c3b361d3dae9c8) +- [Discussion](https://governance.aave.com/t/arfc-prime-instance-wsteth-borrow-rate-rseth-supply-cap-update/20644) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.s.sol b/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.s.sol new file mode 100644 index 000000000..10ecad9c6 --- /dev/null +++ b/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.s.sol @@ -0,0 +1,62 @@ +// 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 {AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122} from './AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122) + .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/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122.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_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate_20250122) + .creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate.md' + ) + ); + } +} diff --git a/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/config.ts b/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/config.ts new file mode 100644 index 000000000..496d4046c --- /dev/null +++ b/src/20250122_AaveV3EthereumLido_PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate/config.ts @@ -0,0 +1,34 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3EthereumLido'], + title: 'Prime Instance - wstETH Borrow Rate + rsETH Supply Cap Update', + shortName: 'PrimeInstanceWstETHBorrowRateRsETHSupplyCapUpdate', + date: '20250122', + author: '@TokenLogic', + discussion: + 'https://governance.aave.com/t/arfc-prime-instance-wsteth-borrow-rate-rseth-supply-cap-update/20644', + snapshot: + 'https://snapshot.org/#/s:aave.eth/proposal/0xfc21203137ea8753ab8903fe4edd568bcaa7ea084586a7acb2c3b361d3dae9c8', + votingNetwork: 'POLYGON', + }, + poolOptions: { + AaveV3EthereumLido: { + configs: { + RATE_UPDATE_V3: [ + { + asset: 'wstETH', + params: { + optimalUtilizationRate: '', + baseVariableBorrowRate: '', + variableRateSlope1: '0.75', + variableRateSlope2: '', + }, + }, + ], + CAPS_UPDATE: [{asset: 'wstETH', supplyCap: '65000', borrowCap: ''}], + }, + cache: {blockNumber: 21681966}, + }, + }, +};