This repository contains various proposals targeting the Aave governance. In addition to the actual proposals this repository also contains tooling to standardize certain protocol tasks. The tooling documentation is co-located with the relevant smart contracts.
The cross-chain-forwarders are opinionated contracts for proposals targeting polygon
, optimism
and arbitrum
. For detailed documentation checkout the docs.
The AaveV3ConfigEngine (Docs) is a helper smart contract to abstract good practices when doing "admin" interactions with the Aave v3 protocol, but built on top, without touching the core contracts.
This project uses Foundry. See the book for detailed instructions on how to install and use Foundry.
The template ships with sensible default so you can use default foundry
commands without resorting to MakeFile
.
cp .env.example .env
forge install
yarn
forge test
While a proposal should be tested throughout, it usually is a good idea to simulate execution on a fork. Therefore this repository comes with the aave-tenderly-cli node package which can be used to streamline fork creation.
Setup your .env
accordingly or follow the setup instructions for global configuration. Now you can
yarn simulate:<mainnet|polygon|...> -- <artifactPath>
# example:
# yarn simulate:polygon -- ./out/AaveV3EthAddCRVPoolPayload.sol/AaveV3EthAddCRVPoolPayload.json
to generate a tenderly fork you can share with your team.
To create a proposal you have to do three things:
- deploy the payload
- create an aip
- create the mainnet proposal
While the first two steps can be performed in parallel, the final proposal creation relies on (1) and (2). Every step can in theory be performed by a different entity.
The address creating the mainnet proposal(3) requires 80k AAVE of proposition power.
The payload is always deployed on the chain it affects. Therefore you need to adjust the relevant script accordingly:
- DeployMainnetPayload for payloads targeting mainnet pools
- DeployPolygonPayload for payloads targeting polygon pools
- DeployArbitrumPayload for payloads targeting arbitrum pools
- DeployOptimismPayload for payloads targeting optimism pools
Once adjusted, you need to deploy it to receive the payload address
.
Checkout Makefile for reference.
Refer to the aip repo for instructions on aip creation. Once your pr is successfully merged an encodedHash will be generated, which you will need for the final step.
The proposal requires at least one payload address
and the encodedHash
.
Make sure the referenced encodedHash
is properly encoded (check if the ipfs file is in json format and renders nicely on https://app.aave.com/governance/ipfs-preview/?ipfsHash=).
To create the proposal you need to adjust:
- CreateMainnetProposals according to your needs.
Once adjusted, you need to create the proposal. Checkout Makefile for reference.
๐