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

ACI Phase II #9

Merged
merged 8 commits into from
Oct 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions src/20231029_AaveV3Ethereum_ACIPhaseII/ACIPhaseII.md
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 src/20231029_AaveV3Ethereum_ACIPhaseII/ACIPhaseII_20231029.s.sol
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(0xD8e565b43b5425Dc36037ABfF9dEa94DF4870F38);
payloads[0] = GovV3Helpers.buildMainnetPayload(vm, actionsEthereum);

// create proposal
GovV3Helpers.createProposal2_5(
payloads,
GovV3Helpers.ipfsHashFile(vm, 'src/20231029_AaveV3Ethereum_ACIPhaseII/ACIPhaseII.md')
);
}
}
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
);
}
}
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);
Copy link
Contributor

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.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

noted for future proposals.


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();
}
}
19 changes: 19 additions & 0 deletions src/20231029_AaveV3Ethereum_ACIPhaseII/config.json
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": []
}
}
}