generated from bgd-labs/bgd-forge-template
-
Notifications
You must be signed in to change notification settings - Fork 31
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
ACI Phase II #9
Merged
Merged
ACI Phase II #9
Changes from 7 commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
be8b6a5
generator output + filling in .md
Rozengarden de5911f
code paylaod
Rozengarden 5039e47
lil changes to the .md
Rozengarden 2faf811
add test
Rozengarden 0643fe2
Change typo on authors
JosepBove e2a3874
Merge branch 'bgd-labs:main' into aci_phase_II
ec54dd1
init
b452681
payload deployed
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
--- | ||
title: "ACI Phase II" | ||
author: "@marczeller + Alice Rozengarden (@Rozengarden - Aave-chan initiative)" | ||
discussions: "https://governance.aave.com/t/arfc-aci-phase-ii/15138" | ||
--- | ||
|
||
## Simple Summary | ||
|
||
This ARFC proposes the continuation of the collaboration with the Aave-chan Initiative (ACI) for an additional period of 180 days, with a proposed budget of 375k GHO. | ||
|
||
## Motivation | ||
|
||
The ACI has demonstrated significant value to the Aave ecosystem across multiple fronts. This proposal seeks to extend our collaboration, focusing on three primary axes: Skyward, Growth, and Representation. | ||
|
||
### Skyward: | ||
|
||
Skyward has emerged as a cornerstone of Aave's governance, producing 90 AIPs in 180 days. This averages out to **[one AIP every other day](https://dune.com/alice_rozengarden/aip-creation-in-2023)**, a testament to the relentless dedication and efficiency of the ACI. Beyond numbers, the ACI has fostered a spirit of collaboration within the Aave ecosystem. | ||
|
||
We've co-authored proposals with the vast majority of active DAO service providers, recognized delegates and some active community members. Moreover, our doors have always been open to third-party protocols. By actively welcoming and collaborating with them, we've streamlined the governance process, ensuring that Aave remains inclusive and cohesive in its approach. | ||
|
||
**What to expect for phase II?** | ||
|
||
Continuation & extension of the Skyward services. | ||
|
||
### Growth: | ||
|
||
The ACI operates under a guiding principle of \"**Continuous incremental improvement.**\" | ||
|
||
While we acknowledge that we might not be the driving force behind tech breakthroughs like a potential Aave V4 or, recently, the Governance V3 AIP, our daily commitment is unwavering. We aim to make the protocol 1% better every single day, one AIP at a time. It's through these consistent, small steps that we believe Aave can maintain its leadership in the DeFi space. | ||
|
||
Our efforts have already borne fruit. The implementation of offboarding plans for assets like BUSD & TUSD stands out. These initiatives not only enhanced protocol safety but also turned a profit, generating close to 1M$ for the DAO. This revenue, in itself, has multiple times repaid the investment made in the ACI. Furthermore, our vigilant oversight of the DAO's finances has ensured efficiency. We've curbed overspending, optimized budgets, and deterred proposals that didn't align with Aave's best interests, saving the DAO a 7-figure amount & ensuring every GHO & DAO $ is well spent. | ||
|
||
**What to expect for phase II?** | ||
|
||
The ACI will continue to focus on our continuous incremental improvement doctrine, being a driving force in Aave protocol growth and BD. | ||
|
||
For Phase II the main focal points will be on Liquid Staking Tokens diversity with the support of onboarding new assets, GHO growth and adoption with support of synergies and the integration of GHO in both onchain protocols, ramps & L2s. | ||
|
||
### Representation: | ||
|
||
The ACI has actively engaged in both internal and external representation for the Aave DAO. | ||
|
||
**Internal Representation**: | ||
|
||
Prior to the ACI's involvement, the DAO too often encountered challenges, such as proposals not reaching the required quorum. Governance activity was subdued, and the operations were notably insular. The ACI introduced several key initiatives: | ||
|
||
- **Orbit Program**: The ACI allocated ~20% of its budget to the Orbit program, focusing on diversity. This program compensates recognized delegates for their contributions, leading to increased participation rates and improved diversity metrics. The frequency of proposals failing due to a lack of quorum has decreased. With the now DAO-funded Orbit program, **the DAO has enshrined these benefits** | ||
- **Governance Guidelines**: The ACI contributed to the establishment of the Aave DAO governance guidelines. This effort aimed to bring clarity, predictability, and efficiency to DAO governance. The \"**Minimal Viable Bureaucracy**\" ACI Doctrine, ensures a balance between structured governance and accessibility. | ||
- **Support for New Delegates**: The ACI has extended support to emerging delegate platforms, co-authoring proposals and providing guidance. This collaborative approach has enriched the DAO's ecosystem. | ||
|
||
**What to Expect from Phase II?** | ||
|
||
We will continue contributing to the Aave DAO frameworks and supporting DAO active participants seeking a balance between organization & accessibility. | ||
|
||
We will also delegate engineering resources for service providers via mini-dapps such as the recent [acistreamcollector.com](http://acistreamcollector.com), which allows no code claims of DAO streams. | ||
|
||
**External Representation**: | ||
|
||
Externally, the ACI has been a voice for the Aave DAO in various capacities. | ||
|
||
- **Event Participation**: The ACI has participated in and sponsored several global events to share insights and collaborate with industry peers. In 2023, our engagements included: | ||
- Web3DNA (Paris) | ||
- EthDubai 2023 | ||
- Prague DeFi Summit/EthPrague | ||
- Stable Summit (Paris) | ||
- EthCC[6] (Paris) | ||
- Dappcon Berlin 2023 | ||
- LëtzStake (Luxembourg) | ||
- EthLisbon | ||
- Devconnect Istanbul | ||
|
||
A detailed list of our engagements can be found [here](https://www.notion.so/f676c1ce96f44c648ef2a40f7f1bb442?pvs=21). | ||
|
||
- **Regulatory Engagement**: The ACI's founder holds the position of president of the DeFi committee of the French Lobby ADAN. This role involves dialogues with regulators, institutions, and governments in France and Europe regarding the DeFi sector. The ACI has been involved in discussions related to the \"Mica 2\" regulation, which addresses DeFi services. | ||
|
||
The ACI, as one of the voices for the Aave DAO, has consistently worked towards enhancing the DAO's presence and reputation in the broader ecosystem. | ||
|
||
**What to Expect from Phase II?** | ||
|
||
The ACI will continue to be one of the voices of Aave across the globe, supporting devs in hackathons, being one of the DAO voices during events and supporting our brand quality. | ||
|
||
## Specification | ||
|
||
- **Recipient**: [0x57ab7ee15cE5ECacB1aB84EE42D5A9d0d8112922](https://etherscan.io/address/0x57ab7ee15cE5ECacB1aB84EE42D5A9d0d8112922) | ||
- **Duration**: 180 days | ||
- **Budget**: 375k GHO | ||
- **Scope**: Continuation of the ACI's work across Skyward, Growth, and Representation. | ||
|
||
|
||
## References | ||
|
||
- Implementation: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231029_AaveV3Ethereum_ACIPhaseII/AaveV3Ethereum_ACIPhaseII_20231029.sol) | ||
- Tests: [AaveV3Ethereum](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20231029_AaveV3Ethereum_ACIPhaseII/AaveV3Ethereum_ACIPhaseII_20231029.t.sol) | ||
- [Snapshot](https://signal.aave.com/#/proposal/0x04e7059fc5b2c33d4e4554d68d27ef67c1f6d9d310b07493116bdfbf15c25bbc) | ||
- [Discussion](https://governance.aave.com/t/arfc-aci-phase-ii/15138) | ||
|
||
## Copyright | ||
|
||
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). |
48 changes: 48 additions & 0 deletions
48
src/20231029_AaveV3Ethereum_ACIPhaseII/ACIPhaseII_20231029.s.sol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
|
||
import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/GovV3Helpers.sol'; | ||
import {EthereumScript} from 'aave-helpers/ScriptUtils.sol'; | ||
import {AaveV3Ethereum_ACIPhaseII_20231029} from './AaveV3Ethereum_ACIPhaseII_20231029.sol'; | ||
|
||
/** | ||
* @dev Deploy Ethereum | ||
* command: make deploy-ledger contract=src/20231029_AaveV3Ethereum_ACIPhaseII/ACIPhaseII_20231029.s.sol:DeployEthereum chain=mainnet | ||
*/ | ||
contract DeployEthereum is EthereumScript { | ||
function run() external broadcast { | ||
// deploy payloads | ||
AaveV3Ethereum_ACIPhaseII_20231029 payload0 = new AaveV3Ethereum_ACIPhaseII_20231029(); | ||
|
||
// compose action | ||
IPayloadsControllerCore.ExecutionAction[] | ||
memory actions = new IPayloadsControllerCore.ExecutionAction[](1); | ||
actions[0] = GovV3Helpers.buildAction(address(payload0)); | ||
|
||
// register action at payloadsController | ||
GovV3Helpers.createPayload(actions); | ||
} | ||
} | ||
|
||
/** | ||
* @dev Create Proposal | ||
* command: make deploy-ledger contract=src/20231029_AaveV3Ethereum_ACIPhaseII/ACIPhaseII_20231029.s.sol:CreateProposal chain=mainnet | ||
*/ | ||
contract CreateProposal is EthereumScript { | ||
function run() external broadcast { | ||
// 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(address(0)); | ||
payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum); | ||
|
||
// create proposal | ||
GovV3Helpers.createProposal2_5( | ||
payloads, | ||
GovV3Helpers.ipfsHashFile(vm, 'src/20231029_AaveV3Ethereum_ACIPhaseII/ACIPhaseII.md') | ||
); | ||
} | ||
} |
29 changes: 29 additions & 0 deletions
29
src/20231029_AaveV3Ethereum_ACIPhaseII/AaveV3Ethereum_ACIPhaseII_20231029.sol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
|
||
import {IProposalGenericExecutor} from 'aave-helpers/interfaces/IProposalGenericExecutor.sol'; | ||
import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; | ||
|
||
/** | ||
* @title ACI Phase II | ||
* @author Alice Rozengarden (@Rozengarden - Aave-chan initiative) | ||
* - Snapshot: https://signal.aave.com/#/proposal/0x04e7059fc5b2c33d4e4554d68d27ef67c1f6d9d310b07493116bdfbf15c25bbc | ||
* - Discussion: https://governance.aave.com/t/arfc-aci-phase-ii/15138 | ||
*/ | ||
contract AaveV3Ethereum_ACIPhaseII_20231029 is IProposalGenericExecutor { | ||
address public constant ACI_TREASURY = 0x57ab7ee15cE5ECacB1aB84EE42D5A9d0d8112922 ; | ||
uint256 public constant GHO_STREAM_AMOUNT = 375_000 ether; | ||
uint256 public constant STREAM_DURATION = 180 days; | ||
uint256 public constant ACTUAL_AMOUNT_GHO = | ||
(GHO_STREAM_AMOUNT / STREAM_DURATION) * STREAM_DURATION; | ||
|
||
function execute() external { | ||
AaveV3Ethereum.COLLECTOR.createStream( | ||
ACI_TREASURY, | ||
ACTUAL_AMOUNT_GHO, | ||
AaveV3EthereumAssets.GHO_UNDERLYING, | ||
block.timestamp, | ||
block.timestamp + STREAM_DURATION | ||
); | ||
} | ||
} |
87 changes: 87 additions & 0 deletions
87
src/20231029_AaveV3Ethereum_ACIPhaseII/AaveV3Ethereum_ACIPhaseII_20231029.t.sol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
|
||
import {AaveV3Ethereum, AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; | ||
|
||
import 'forge-std/Test.sol'; | ||
import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/ProtocolV3TestBase.sol'; | ||
import {AaveV3Ethereum_ACIPhaseII_20231029} from './AaveV3Ethereum_ACIPhaseII_20231029.sol'; | ||
|
||
import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; | ||
/** | ||
* @dev Test for AaveV3Ethereum_ACIPhaseII_20231029 | ||
* command: make test-contract filter=AaveV3Ethereum_ACIPhaseII_20231029 | ||
*/ | ||
contract AaveV3Ethereum_ACIPhaseII_20231029_Test is ProtocolV3TestBase { | ||
AaveV3Ethereum_ACIPhaseII_20231029 internal proposal; | ||
|
||
address public constant ACI_TREASURY = 0x57ab7ee15cE5ECacB1aB84EE42D5A9d0d8112922; | ||
uint256 public constant STREAM_AMOUNT = 375_000 ether; | ||
uint256 public constant STREAM_DURATION = 180 days; | ||
uint256 public constant ACTUAL_STREAM_AMOUNT_GHO = | ||
(STREAM_AMOUNT / STREAM_DURATION) * STREAM_DURATION; | ||
|
||
function setUp() public { | ||
vm.createSelectFork(vm.rpcUrl('mainnet'), 18457644); | ||
proposal = new AaveV3Ethereum_ACIPhaseII_20231029(); | ||
} | ||
|
||
/** | ||
* @dev executes the generic test suite including e2e and config snapshots | ||
*/ | ||
/** | ||
function test_defaultProposalExecution() public { | ||
defaultTest('AaveV3Ethereum_ACIPhaseII_20231029', AaveV3Ethereum.POOL, address(proposal)); | ||
} | ||
*/ | ||
function testProposalExecution() public { | ||
uint256 nextCollectorStreamID = AaveV3Ethereum.COLLECTOR.getNextStreamId(); | ||
uint256 ACIGHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(ACI_TREASURY); | ||
|
||
uint256 CollectorV3GHOBalanceBefore = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(address(AaveV3Ethereum.COLLECTOR)); | ||
|
||
executePayload(vm, address(proposal)); | ||
|
||
// Checking if the streams have been created properly | ||
// scoping to avoid the "stack too deep" error | ||
{ | ||
( | ||
address senderGHO, | ||
address recipientGHO, | ||
uint256 depositGHO, | ||
address tokenAddressGHO, | ||
uint256 startTimeGHO, | ||
uint256 stopTimeGHO, | ||
uint256 remainingBalanceGHO, | ||
|
||
) = AaveV3Ethereum.COLLECTOR.getStream(nextCollectorStreamID); | ||
|
||
assertEq(senderGHO, address(AaveV3Ethereum.COLLECTOR)); | ||
assertEq(recipientGHO, ACI_TREASURY); | ||
assertEq(depositGHO, ACTUAL_STREAM_AMOUNT_GHO); | ||
assertEq(tokenAddressGHO, AaveV3EthereumAssets.GHO_UNDERLYING); | ||
assertEq(stopTimeGHO - startTimeGHO, STREAM_DURATION); | ||
assertEq(remainingBalanceGHO, ACTUAL_STREAM_AMOUNT_GHO); | ||
} | ||
|
||
// checking if the ACI can withdraw from the stream | ||
|
||
vm.startPrank(ACI_TREASURY); | ||
vm.warp(block.timestamp + STREAM_DURATION + 1 days); | ||
|
||
AaveV3Ethereum.COLLECTOR.withdrawFromStream(nextCollectorStreamID, ACTUAL_STREAM_AMOUNT_GHO); | ||
uint256 nextACIGHOBalance = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf(ACI_TREASURY); | ||
|
||
assertEq(ACIGHOBalanceBefore, nextACIGHOBalance - ACTUAL_STREAM_AMOUNT_GHO); | ||
|
||
// Check Collector balance after stream withdrawal | ||
|
||
uint256 CollectorV3GHOBalanceAfter = IERC20(AaveV3EthereumAssets.GHO_UNDERLYING).balanceOf( | ||
address(AaveV3Ethereum.COLLECTOR) | ||
); | ||
|
||
assertEq(CollectorV3GHOBalanceAfter, CollectorV3GHOBalanceBefore - ACTUAL_STREAM_AMOUNT_GHO); | ||
|
||
vm.stopPrank(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
{ | ||
"rootOptions": { | ||
"pools": [ | ||
"AaveV3Ethereum" | ||
], | ||
"author": "Alice Rozengarden (@Rozengarden - Aave-chan initiative)", | ||
"title": "ACI Phase II", | ||
"shortName": "ACIPhaseII", | ||
"date": "20231029", | ||
"discussion": "https://governance.aave.com/t/arfc-aci-phase-ii/15138", | ||
"snapshot": "https://signal.aave.com/#/proposal/0x04e7059fc5b2c33d4e4554d68d27ef67c1f6d9d310b07493116bdfbf15c25bbc" | ||
}, | ||
"poolOptions": { | ||
"AaveV3Ethereum": { | ||
"configs": {}, | ||
"features": [] | ||
} | ||
} | ||
} |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the future, I'd recommend testing withdrawing prior to the end of the stream for completeness. No need to affect this now, as the streams are out of scope here, and the test does ensure it's created.
Just something to keep in mind for future stream proposals.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
noted for future proposals.