diff --git a/diffs/AaveV3EthereumLido_OrbitRenewal_20251103_before_AaveV3EthereumLido_OrbitRenewal_20251103_after.md b/diffs/AaveV3EthereumLido_OrbitRenewal_20251103_before_AaveV3EthereumLido_OrbitRenewal_20251103_after.md new file mode 100644 index 000000000..fbd1aa664 --- /dev/null +++ b/diffs/AaveV3EthereumLido_OrbitRenewal_20251103_before_AaveV3EthereumLido_OrbitRenewal_20251103_after.md @@ -0,0 +1,143 @@ +## Raw diff + +```json +{ + "raw": { + "0x464c71f6c2f760dda6093dcb91c24c39e5d6e18c": { + "label": "AaveV2Ethereum.COLLECTOR, AaveV2EthereumAMM.COLLECTOR, AaveV2EthereumArc.COLLECTOR, AaveV3Ethereum.COLLECTOR, AaveV3EthereumEtherFi.COLLECTOR, AaveV3EthereumLido.COLLECTOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x65c2a5ac58a94546425d539849ce2518449a5d63b75d82b014d99a7a64cb65ca": { + "previousValue": "0x006908c7a6000000000002000000000000000000000000000000000000000000", + "newValue": "0x006908c7a6000000000003000000000000000000000000000000000000000000" + }, + "0x65c2a5ac58a94546425d539849ce2518449a5d63b75d82b014d99a7a64cb65cb": { + "previousValue": "0x000000000000000000093a800000000000006936ec2700000000000000000000", + "newValue": "0x000000000000000000093a800000000000006936ec270000000000006908c7a7" + } + } + }, + "0x83b7ce402a0e756e901c4a9d1cafa27ca9572afc": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000186e5", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000186e8" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f15": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d3016af2960" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f16": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000001522f4161c8584" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f17": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d3016af2960" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f18": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006908c7a7" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f19": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006955b8ff" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f1a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000008659d0bb123da6d16d9394c7838ba286c2207d0e" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f1b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f1c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000140d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affcf": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d3016af2960" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000001522f4161c8584" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d3016af2960" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006908c7a7" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd3": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006955b8ff" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ecc2a9240268bc7a26386ecb49e1befca2706ac9" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000140d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f1d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d3016af2960" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f1e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000001522f4161c8584" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f1f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d3016af2960" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f20": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006908c7a7" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f21": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000000006955b8ff" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f22": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000003ddc7d25c7a1dc381443e491bbf1caa8928a05b0" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f23": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f24": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000140d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/diffs/AaveV3Ethereum_OrbitRenewal_20251103_before_AaveV3Ethereum_OrbitRenewal_20251103_after.md b/diffs/AaveV3Ethereum_OrbitRenewal_20251103_before_AaveV3Ethereum_OrbitRenewal_20251103_after.md new file mode 100644 index 000000000..bb3f0cbc3 --- /dev/null +++ b/diffs/AaveV3Ethereum_OrbitRenewal_20251103_before_AaveV3Ethereum_OrbitRenewal_20251103_after.md @@ -0,0 +1,143 @@ +## Raw diff + +```json +{ + "raw": { + "0x464c71f6c2f760dda6093dcb91c24c39e5d6e18c": { + "label": "AaveV2Ethereum.COLLECTOR, AaveV2EthereumAMM.COLLECTOR, AaveV2EthereumArc.COLLECTOR, AaveV3Ethereum.COLLECTOR, AaveV3EthereumEtherFi.COLLECTOR, AaveV3EthereumLido.COLLECTOR", + "balanceDiff": null, + "stateDiff": {} + }, + "0x5300a1a15135ea4dc7ad5a167152c01efc9b192a": { + "label": "AaveV2Ethereum.POOL_ADMIN, AaveV2EthereumAMM.POOL_ADMIN, AaveV3Ethereum.ACL_ADMIN, AaveV3EthereumEtherFi.ACL_ADMIN, AaveV3EthereumLido.ACL_ADMIN, GovernanceV3Ethereum.EXECUTOR_LVL_1", + "balanceDiff": null, + "stateDiff": {} + }, + "0x7222182cb9c5320587b5148bf03eee107ad64578": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0xb4aadbdb533f3a44ae24d05e8d2812ece6b85bdf4bcff2e2a966e6f8fe456339": { + "previousValue": "0x00690899fe000000000002000000000000000000000000000000000000000000", + "newValue": "0x00690899fe000000000003000000000000000000000000000000000000000000" + }, + "0xb4aadbdb533f3a44ae24d05e8d2812ece6b85bdf4bcff2e2a966e6f8fe45633a": { + "previousValue": "0x000000000000000000093a800000000000006936be7f00000000000000000000", + "newValue": "0x000000000000000000093a800000000000006936be7f000000000000690899ff" + } + } + }, + "0x83b7ce402a0e756e901c4a9d1cafa27ca9572afc": { + "label": null, + "balanceDiff": null, + "stateDiff": { + "0x0000000000000000000000000000000000000000000000000000000000000035": { + "previousValue": "0x00000000000000000000000000000000000000000000000000000000000186e5", + "newValue": "0x00000000000000000000000000000000000000000000000000000000000186e8" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f15": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d30166df800" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f16": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000db4da5f435948" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f17": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d30166df800" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f18": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000690899ff" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f19": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000697f40ff" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f1a": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000008659d0bb123da6d16d9394c7838ba286c2207d0e" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f1b": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x0c79cfef8ae3bca6d65cc7293012e4ef69e59b9d3928a6a96796a855c5361f1c": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000140d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affcf": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d30166df800" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd0": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000db4da5f435948" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd1": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d30166df800" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd2": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000690899ff" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd3": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000697f40ff" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd4": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000ecc2a9240268bc7a26386ecb49e1befca2706ac9" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd5": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x73def59e97c6744ae61e1c4f5fb2fe4c033f4cf1e0ee966aadaf5be2a78affd6": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000140d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f1d": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d30166df800" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f1e": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000000000000000000000000000000db4da5f435948" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f1f": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000065a4da25d30166df800" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f20": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000690899ff" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f21": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000000000000000000000000000000000000697f40ff" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f22": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x0000000000000000000000003ddc7d25c7a1dc381443e491bbf1caa8928a05b0" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f23": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x000000000000000000000000464c71f6c2f760dda6093dcb91c24c39e5d6e18c" + }, + "0x784a19e35b28d730b8ba79e459553ac6eebaf0c9298c2b44fbef2eccf1256f24": { + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newValue": "0x00000000000000000000000140d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f" + } + } + }, + "0xdabad81af85554e9ae636395611c58f7ec1aaec5": { + "label": "GovernanceV3Ethereum.PAYLOADS_CONTROLLER", + "balanceDiff": null, + "stateDiff": {} + } + } +} +``` \ No newline at end of file diff --git a/lib/aave-helpers b/lib/aave-helpers index 0be4c07fb..7eec1e60b 160000 --- a/lib/aave-helpers +++ b/lib/aave-helpers @@ -1 +1 @@ -Subproject commit 0be4c07fb3475db44f6fa3c6fb8d32eaa130b9cc +Subproject commit 7eec1e60b71e0904d7f1afa5743965b9524bf30a diff --git a/src/20251103_AaveV3EthereumLido_OrbitRenewal/AaveV3EthereumLido_OrbitRenewal_20251103.sol b/src/20251103_AaveV3EthereumLido_OrbitRenewal/AaveV3EthereumLido_OrbitRenewal_20251103.sol new file mode 100644 index 000000000..ab4bb533a --- /dev/null +++ b/src/20251103_AaveV3EthereumLido_OrbitRenewal/AaveV3EthereumLido_OrbitRenewal_20251103.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; +import {CollectorUtils} from 'aave-helpers/src/CollectorUtils.sol'; +import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; +import {OrbitProgramData} from './OrbitProgramData.sol'; + +import {IProposalGenericExecutor} from 'aave-helpers/src/interfaces/IProposalGenericExecutor.sol'; + +/** + * @title Orbit Renewal + * @author ACI + * - Snapshot: https://snapshot.org/#/s:aavedao.eth/proposal/0x4f2381126a2ddf4073916bbdd6d25b031c2dabd022d23887cee6f315693fd7c4 + * - Discussion: https://governance.aave.com/t/arfc-orbit-program-renewal-q3-and-q4-2025/23289 + */ +contract AaveV3EthereumLido_OrbitRenewal_20251103 is IProposalGenericExecutor { + function execute() external { + address[] memory orbitAddresses = OrbitProgramData.getOrbitAddresses(); + uint256 orbitAddressesLength = orbitAddresses.length; + for (uint256 i = 0; i < orbitAddressesLength; i++) { + CollectorUtils.stream( + AaveV3EthereumLido.COLLECTOR, + CollectorUtils.CreateStreamInput({ + underlying: AaveV3EthereumLidoAssets.GHO_UNDERLYING, + receiver: orbitAddresses[i], + amount: OrbitProgramData.STREAM_AMOUNT, + start: block.timestamp, + duration: 1767225599 - block.timestamp // until 31st Dec 2025 23:59:59 UTC + }) + ); + } + } +} diff --git a/src/20251103_AaveV3EthereumLido_OrbitRenewal/AaveV3EthereumLido_OrbitRenewal_20251103.t.sol b/src/20251103_AaveV3EthereumLido_OrbitRenewal/AaveV3EthereumLido_OrbitRenewal_20251103.t.sol new file mode 100644 index 000000000..766623196 --- /dev/null +++ b/src/20251103_AaveV3EthereumLido_OrbitRenewal/AaveV3EthereumLido_OrbitRenewal_20251103.t.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {AaveV3EthereumLido, AaveV3EthereumLidoAssets} from 'aave-address-book/AaveV3EthereumLido.sol'; + +import 'forge-std/Test.sol'; +import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; +import {AaveV3EthereumLido_OrbitRenewal_20251103} from './AaveV3EthereumLido_OrbitRenewal_20251103.sol'; +import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/IERC20.sol'; + +import {OrbitProgramData} from './OrbitProgramData.sol'; + +/** + * @dev Test for AaveV3EthereumLido_OrbitRenewal_20251103 + * command: FOUNDRY_PROFILE=test forge test --match-path=src/20251103_AaveV3EthereumLido_OrbitRenewal/AaveV3EthereumLido_OrbitRenewal_20251103.t.sol -vv + */ +contract AaveV3EthereumLido_OrbitRenewal_20251103_Test is ProtocolV3TestBase { + AaveV3EthereumLido_OrbitRenewal_20251103 internal proposal; + + function setUp() public { + vm.createSelectFork(vm.rpcUrl('mainnet'), 23719647); + proposal = new AaveV3EthereumLido_OrbitRenewal_20251103(); + } + + /** + * @dev executes the generic test suite including e2e and config snapshots + */ + function test_defaultProposalExecution() public { + defaultTest( + 'AaveV3EthereumLido_OrbitRenewal_20251103', + AaveV3EthereumLido.POOL, + address(proposal) + ); + } + + function test_streamCreation() public { + uint256[] memory ghoBalancesBeforeUsers = new uint256[](4); + address[] memory ghoPaymentAddresses = OrbitProgramData.getOrbitAddresses(); + for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { + ghoBalancesBeforeUsers[i] = IERC20(AaveV3EthereumLidoAssets.GHO_UNDERLYING).balanceOf( + ghoPaymentAddresses[i] + ); + } + + uint256 nextStreamId = AaveV3EthereumLido.COLLECTOR.getNextStreamId(); + vm.expectRevert(); + AaveV3EthereumLido.COLLECTOR.getStream(nextStreamId); + + executePayload(vm, address(proposal)); + + vm.warp(block.timestamp + 7 days); + + /// Their GHO balance has increased and call also withdraw from stream as it now exists + for (uint256 i = 0; i < ghoPaymentAddresses.length; i++) { + assertEq( + IERC20(AaveV3EthereumLidoAssets.GHO_UNDERLYING).balanceOf(ghoPaymentAddresses[i]), + ghoBalancesBeforeUsers[i], + 'GHO balance of Orbit recipient is not greater than before' + ); + + vm.prank(ghoPaymentAddresses[i]); + AaveV3EthereumLido.COLLECTOR.withdrawFromStream(nextStreamId + i, 1); + assertEq( + IERC20(AaveV3EthereumLidoAssets.GHO_UNDERLYING).balanceOf(ghoPaymentAddresses[i]), + ghoBalancesBeforeUsers[i] + 1 + ); + } + } +} diff --git a/src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitProgramData.sol b/src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitProgramData.sol new file mode 100644 index 000000000..a95878ea6 --- /dev/null +++ b/src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitProgramData.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +library OrbitProgramData { + // stream information + // budgets (total budget: 90,000 GHO) + uint256 public constant STREAM_AMOUNT = 30000 ether; + // stream receivers + address public constant EZREAL = 0x8659D0BB123Da6D16D9394C7838BA286c2207d0E; + address public constant STABLE_LABS = 0xECC2a9240268BC7a26386ecB49E1Befca2706AC9; + address public constant IGNAS_DEFI = 0x3DDC7d25c7a1dc381443e491Bbf1Caa8928A05B0; + + function getOrbitAddresses() internal pure returns (address[] memory) { + address[] memory streamAddresses = new address[](3); + streamAddresses[0] = EZREAL; + streamAddresses[1] = STABLE_LABS; + streamAddresses[2] = IGNAS_DEFI; + + return streamAddresses; + } +} diff --git a/src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitRenewal.md b/src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitRenewal.md new file mode 100644 index 000000000..54a269c7b --- /dev/null +++ b/src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitRenewal.md @@ -0,0 +1,52 @@ +--- +title: "Orbit Program Renewal - Q3 and Q4 2025" +author: "ACI" +discussions: https://governance.aave.com/t/arfc-orbit-program-renewal-q3-and-q4-2025/23289 +snapshot: https://snapshot.org/#/s:aavedao.eth/proposal/0x4f2381126a2ddf4073916bbdd6d25b031c2dabd022d23887cee6f315693fd7c4 +--- + +## Simple Summary + +Proposing the renewal of the Orbit program for recognized delegates, compensating them with GHO, associated with their governance activity during Q3 and Q4 2025 ( From 2025-07-01, last date, until 2025-12-31). The reason is because extending period coverage will bring more reliance and predictability for delegates platform. + +## Motivation + +Orbit recognizes the added value of the Delegates in the decentralization & diversity of the Aave DAO. This compensation allows them to focus on Aave and keep their contribution efforts to our governance. The ACI proposes the extension of Orbit for a both Q3 and Q4 2025, from 2025-07-01 to 2025-12-31. + +As a reminder from previous Orbit round, a new cutoff had been set, starting at [AIP 224](https://vote.onaave.com/proposal/?proposalId=224&ipfsHash=0xa4da1c686491e35541aa7e2659d55d0b93e395a89d1b268981aec3b8b2227bc1), to apply again previous rules of a minimum of 20k voting power and 85% vote ratio on all Snapshots and AIP to be considered eligible to Orbit. + +From now on, Orbit period coverage will be semi-annually or 2 times per year (Q1 and Q2 together, and Q3 and Q4 together), with the aim of reducing governance bloat. + +## Specification + +- **Period Coverage:** Q3 and Q4 2025 from 2025-07-01 2025 to 2025-12-31 +- **Eligible Platforms:** + - EzR3al: [0x8659d0bb123da6d16d9394c7838ba286c2207d0e](https://etherscan.io/address/0x8659d0bb123da6d16d9394c7838ba286c2207d0e) + - stablelabs: [0xecc2a9240268bc7a26386ecb49e1befca2706ac9](https://etherscan.io/address/0xecc2a9240268bc7a26386ecb49e1befca2706ac9) + - IgnasDefi: [0x3DDC7d25c7a1dc381443e491Bbf1Caa8928A05B0](https://etherscan.io/address/0x3DDC7d25c7a1dc381443e491Bbf1Caa8928A05B0) +- **Budget:** 90,000 GHO +- **Relevant Links:** + - [ACI’s Orbit tracker](https://dapps.aavechan.com/orbit-tracker) + +**Additional considerations:** + +As a reminder, Service Providers will not be considered eligible to Orbit Program. + +Funds are distributed based on 180 days, as seen on budget and as specified on motivation section. + +## Disclosure + +The ACI is independent and has not received any form of compensation from related parties for the drafting of this proposal. + +## Copyright + +Copyright and related rights waived under [Creative Commons Zero (CC0)](https://creativecommons.org/publicdomain/zero/1.0/) + +- Implementation: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20251103_AaveV3EthereumLido_OrbitRenewal/AaveV3EthereumLido_OrbitRenewal_20251103.sol) +- Tests: [AaveV3EthereumLido](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20251103_AaveV3EthereumLido_OrbitRenewal/AaveV3EthereumLido_OrbitRenewal_20251103.t.sol) +- [Snapshot](https://governance.aave.com/t/arfc-orbit-program-renewal-q3-and-q4-2025/23289) +- [Discussion](https://snapshot.org/#/s:aavedao.eth/proposal/0x4f2381126a2ddf4073916bbdd6d25b031c2dabd022d23887cee6f315693fd7c4) + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitRenewal_20251103.s.sol b/src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitRenewal_20251103.s.sol new file mode 100644 index 000000000..56cea4cbd --- /dev/null +++ b/src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitRenewal_20251103.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 {AaveV3EthereumLido_OrbitRenewal_20251103} from './AaveV3EthereumLido_OrbitRenewal_20251103.sol'; + +/** + * @dev Deploy Ethereum + * deploy-command: make deploy-ledger contract=src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitRenewal_20251103.s.sol:DeployEthereum chain=mainnet + * verify-command: FOUNDRY_PROFILE=deploy npx catapulta-verify -b broadcast/OrbitRenewal_20251103.s.sol/1/run-latest.json + */ +contract DeployEthereum is EthereumScript { + function run() external broadcast { + // deploy payloads + address payload0 = GovV3Helpers.deployDeterministic( + type(AaveV3EthereumLido_OrbitRenewal_20251103).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/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitRenewal_20251103.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_OrbitRenewal_20251103).creationCode + ); + payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); + } + + // create proposal + vm.startBroadcast(); + GovV3Helpers.createProposal( + vm, + payloads, + GovernanceV3Ethereum.VOTING_PORTAL_ETH_AVAX, + GovV3Helpers.ipfsHashFile(vm, 'src/20251103_AaveV3EthereumLido_OrbitRenewal/OrbitRenewal.md') + ); + } +} diff --git a/src/20251103_AaveV3EthereumLido_OrbitRenewal/config.ts b/src/20251103_AaveV3EthereumLido_OrbitRenewal/config.ts new file mode 100644 index 000000000..b5ea7a460 --- /dev/null +++ b/src/20251103_AaveV3EthereumLido_OrbitRenewal/config.ts @@ -0,0 +1,15 @@ +import {ConfigFile} from '../../generator/types'; +export const config: ConfigFile = { + rootOptions: { + pools: ['AaveV3EthereumLido'], + title: 'Orbit Renewal', + shortName: 'OrbitRenewal', + date: '20251103', + author: 'ACI', + discussion: 'https://governance.aave.com/t/arfc-orbit-program-renewal-q3-and-q4-2025/23289', + snapshot: + 'https://snapshot.org/#/s:aavedao.eth/proposal/0x4f2381126a2ddf4073916bbdd6d25b031c2dabd022d23887cee6f315693fd7c4', + votingNetwork: 'AVALANCHE', + }, + poolOptions: {AaveV3EthereumLido: {configs: {OTHERS: {}}, cache: {blockNumber: 23719647}}}, +};