diff --git a/diffs/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930_before_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930_after.md b/diffs/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930_before_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930_after.md new file mode 100644 index 000000000..c15d3e2bc --- /dev/null +++ b/diffs/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930_before_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930_after.md @@ -0,0 +1,5 @@ +## Raw diff + +```json +{} +``` \ No newline at end of file diff --git a/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveLiquidityCommitteeFundingPhaseIV.md b/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveLiquidityCommitteeFundingPhaseIV.md new file mode 100644 index 000000000..e5a80944b --- /dev/null +++ b/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveLiquidityCommitteeFundingPhaseIV.md @@ -0,0 +1,51 @@ +--- +title: "Aave Liquidity Committee Funding Phase IV" +author: "@karpatkey_TokenLogic" +discussions: "https://governance.aave.com/t/arfc-aave-liquidity-committee-funding-phase-iv/19188" +--- + +## Simple Summary + +Upon implementation, this AIP will make available 950,000 GHO to the Aave Liquidity Committee (ALC). + +## Motivation + +Phase IV of the ALC focuses on sustaining and improving GHO liquidity across the Ethereum and Arbitrum networks, while also encouraging broader adoption of GHO through various integrations with other protocols. + +In the near future, we expect GHO to be listed on InstadApp, with several curated vaults providing additional utility and yield opportunities for GHO. + +GHO is also expected to feature in the upcoming Royco launch, aimed at driving flows into several yield strategies across Ethereum and Arbitrum. + +We anticipate achieving the first perpetual market integration for GHO with a strataGHO listing on Synthetix on Arbitrum. + +Each integration is expected to provide a use case that strengthens GHO's on-chain liquidity. + +The table below presents the performance metrics for the ALC. + +| Description | Ethereum Value | Arbitrum Value | +| ------------------------------------------ | :--------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------: | +| TVL DEX Liquidity Pools | 50M | 30M | +| TVL Utility Liquidity Pools (Excl. stkGHO) | 15M | 10M | +| DEX Liquidity Composition | < 50% GHO (< 33% for 3pools) | < 50% GHO (< 33% for 3pools) | +| Swap Price Impact $5M Swap (GHO to USDC) | < 0.10% | < 0.25% | +| Annualised Peg Volatility | < 5.00% | < 5.00% | +| Price level for >90% time | $0.995 using [Redstone Medium Price](https://app.redstone.finance/#/app/token/GHO) | $0.995 using [Redstone Medium Price](https://app.redstone.finance/#/app/token/GHO) | + +Achieving 50M of DEX liquidity on Ethereum across various integrations remains a key focus. Whilst we are yet to acheive this target, we are currently very well positioned for current market conditions. + +## Specification + +Create an Allowance for GHO on Ethereum for a total of 950,000 GHO. + +ALC Ethereum SAFE: [`0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b`](https://etherscan.io/address/0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b) + +## References + +- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.sol) +- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.t.sol) +- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x7b59c555f5a51a3377b1aee0f5f21fc205958f1388926efb94172644bacfa1d6) +- [Discussion](https://governance.aave.com/t/arfc-aave-liquidity-committee-funding-phase-iv/19188) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveLiquidityCommitteeFundingPhaseIV_20240930.s.sol b/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveLiquidityCommitteeFundingPhaseIV_20240930.s.sol new file mode 100644 index 000000000..7f9fc326d --- /dev/null +++ b/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveLiquidityCommitteeFundingPhaseIV_20240930.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_AaveLiquidityCommitteeFundingPhaseIV_20240930} from './AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveLiquidityCommitteeFundingPhaseIV_20240930.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=mainnet npx catapulta-verify -b broadcast/AaveLiquidityCommitteeFundingPhaseIV_20240930.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930).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/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveLiquidityCommitteeFundingPhaseIV_20240930.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_AaveLiquidityCommitteeFundingPhaseIV_20240930).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, + GovV3Helpers.ipfsHashFile( + vm, + 'src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveLiquidityCommitteeFundingPhaseIV.md' + ) + ); + } +} diff --git a/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.sol b/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.sol new file mode 100644 index 000000000..2e141d364 --- /dev/null +++ b/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +/** + * @title Aave Liquidity Committee Funding Phase IV + * @author @karpatkey_TokenLogic + * - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x7b59c555f5a51a3377b1aee0f5f21fc205958f1388926efb94172644bacfa1d6 + * - Discussion: https://governance.aave.com/t/arfc-aave-liquidity-committee-funding-phase-iv/19188 + */ +contract AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930 is IProposalGenericExecutor { + // https://etherscan.io/address/0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b + address public constant ALC_SAFE = 0xA1c93D2687f7014Aaf588c764E3Ce80aF016229b; + uint256 public constant AMOUNT = 950_000e18; + + function execute() external { + AaveV3Ethereum.COLLECTOR.approve(AaveV3EthereumAssets.GHO_UNDERLYING, ALC_SAFE, AMOUNT); + } +} diff --git a/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.t.sol b/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.t.sol new file mode 100644 index 000000000..a80d94203 --- /dev/null +++ b/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.t.sol @@ -0,0 +1,60 @@ +// 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 {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930} from './AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.sol'; + +/** + * @dev Test for AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930 + * command: FOUNDRY_PROFILE=mainnet forge test --match-path=src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930.t.sol -vv + */ +contract AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930_Test is ProtocolV3TestBase { + AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 20863717); + proposal = new AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV_20240930', + AaveV3Ethereum.POOL, + address(proposal) + ); + } + + function test_allowance() public { + assertEq( + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).allowance( + address(AaveV3Ethereum.COLLECTOR), + proposal.ALC_SAFE() + ), + 0 + ); + + executePayload(vm, address(proposal)); + + assertEq( + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).allowance( + address(AaveV3Ethereum.COLLECTOR), + proposal.ALC_SAFE() + ), + proposal.AMOUNT() + ); + + vm.startPrank(proposal.ALC_SAFE()); + IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).transferFrom( + address(AaveV3Ethereum.COLLECTOR), + proposal.ALC_SAFE(), + proposal.AMOUNT() + ); + vm.stopPrank(); + } +} diff --git a/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/config.ts b/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/config.ts new file mode 100644 index 000000000..cc2a0e063 --- /dev/null +++ b/src/20240930_AaveV3Ethereum_AaveLiquidityCommitteeFundingPhaseIV/config.ts @@ -0,0 +1,15 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3Ethereum'], + title: 'Aave Liquidity Committee Funding Phase IV', + shortName: 'AaveLiquidityCommitteeFundingPhaseIV', + date: '20240930', + author: '@karpatkey_TokenLogic', + discussion: + 'https://governance.aave.com/t/arfc-aave-liquidity-committee-funding-phase-iv/19188', + snapshot: '', + votingNetwork: 'POLYGON', + }, + poolOptions: {AaveV3Ethereum: {configs: {OTHERS: {}}, cache: {blockNumber: 20863717}}}, +};