Aera Protocol in One Page
Aera is a noncustodial trustless treasury management protocol. It helps capital allocators achieve various stated objectives by using special actors called guardians which have access to off chain intelligence. Aera allows these designated guardians to interact with a whitelisted set of DeFi protocols as chosen by the owner of each vault. Guardians operate in a principled way and are restricted with several constraints enforced onchain.
While Aera supports reasonable defaults for deployments, it's a flexible system that can be customized to integrate with any DeFi protocol, used to take treasury management actions such as paying contributors and so on.
Aera Vaults
Every Aera vault has an owner
and one or more guardians
among other roles.
The owner
or specific roles it has assigned can:
Call
setGuardianRoot
to change a givenguardian
and its Merkle tree rootCall
removeGuardian
to remove aguardian
from the vaultCall
setSubmitHooks
to configure triggers before and afterguardian
transactionsCall
pause
to pause all guardiansCall
unpause
to resume vault operations
The guardian can:
Call
submit
to take vault actionsCall
pause
to interrupt all guardian operations (in the event of a possible security incident or another need to visibly terminate guardianship)
When using the FeeVault
contract, in addition the vault owner can designate a fee recipient and a fee calculator contract. The fee recipient (which could be one of the guardians) can:
Call
claimFees
to call accrued fees
Single Depositor Vaults
The simplest way to use Aera is by deploying a dedicated noncustodial vault to manage a set of assets (e.g., a treasury). These vaults give the owner additional permissions.
The owner
or specific roles it has assigned can:
Call
execute
to take arbitrary actions on the vaultCall
deposit
to add assets to the vaultCall
withdraw
to withdraw liquid assets from the vault
Multi Depositor Vaults
Aera also supports tokenized multiple depositor vaults that allow multiple depositors to select the same strategy. Multi depositor vaults can be used to share strategies across multiple single depositor Aera vaults or to create externally-facing tokenized strategies. An Aera Multi Depositor Vault allows multiple users to supply capital into a single vault and receive tokenized ERC20 vault units as a digital ledger representation of their supplied assets.
Users interact with a separate Provisioner
contract and can:
Call
deposit
ormint
to directly deposit into the vaultCall
requestDeposit
orrequestRedeem
to put in an order to deposit or redeem their units (fulfilled by a solver)When a users requests a Deposit or Redeem, they will asynchronously receive their tokens directly to their wallet from the Provisioner address after their request gets solved.
How Aera Integrates DeFi Safely
The assets in each Aera vault are guarded by two constraints that are imposed on guardian actions:
Guardians cannot leave outgoing nonzero approvals for ERC20 tokens
Each guardian action has to comply with the Merkle tree
The Merkle tree is used to check:
If the operation and target contract is whitelisted
If the calldata provided for the call is valid (this is checked by calling a specific operation hook which may extract additional variables from the calldata that are compared against the Merkle tree leaf for that operation). These are called operation pre-hooks
If any required cleanup step is successful. These are called operation post-hooks
Contract Overview
Here are the most important contracts and their functions in Aera:
BaseVault
All Vaults
The base vault that encapsulates the functionality of having guardians. All vaults inherit from this contract.
FeeVault
All Vaults that inherit from FeeVault
The fee vault adds the ability for a fee recipient to claim reported fees. Intended to be used as a incentive for guardians and/or other vault operators.
SingleDepositorVault
Single Depositor
This contract allows a treasury to use Aera. Each single depositor vault empowers the owner with the ability to deposit, withdraw and execute.
DelayedFeeCalculator
Single Depositor
The default fee calculator contract used in single depositor vaults. Allows an accountant to submit vault value over time and calculates fees. Fee accrual is delayed, allowing a vault owner behind a timelock to retire an accountant that is submitting fees incorrectly.
MultiDepositorVault
Multi Depositor
This contract allows multiple depositors to deposit into an Aera vault and receive receipt tokens that represent their units held.
PriceAndFeeCalculator
Multi Depositor
The default fee calculator contract used in multi depositor vaults. Allows an accountant to submit the value of a single unit over time and calculates fees. Accountant snapshots are carefully managed to prevent sudden gains/losses in reported value from impacting depositors.
Provisioner
Multi Depositor
The default contract that depositors in a multi-depositor vault interact with to receive or burn their vault units.
OracleRegistry
All Vaults
A ERC7726 compatible registry of oracles that Aera uses for each base/quote token pair.
Note: oracles in this registry are not enforced by default but are used:
In common hooks that support trading. For example, trustless swapping on Uniswap requires slippage bounds to be enforced onchain so the Uniswap slippage hook consults the oracle registry for asset prices.
To determine exchange rates for deposit assets in multi-depositor vaults. When multi-depositor vaults allow users to deposit in different assets, only one asset is used to price units and the rest are converted via oracle registry oracles.
Modifying Aera
There are several ways to modify Aera to suit different use cases. We will discuss them starting with the simplest options.
Modifying hooks
The default hooks for each protocol are added to cater for the vast majority of use cases. However, it's possible that your use case requires modifications to these hooks or even new hooks to support new types of protocol integrations. Modifying or adding new hooks is one of the easiest way of supporting more complex strategies in your Aera vault.
Using a custom oracle registry
Many of the common rebalancing pre-hooks (such as the Uniswap hooks) rely on the oracle registry to consult asset prices. Some vault owners may want direct control over what oracles they use for pricing, in that case they would need to deploy a custom oracle registry for the vault and use that in all the relevant hooks.
Extending the single depositor vault
Another option that teams have to update Aera contract functionality is to inherit directly from the single depositor vault. This could, for example, be used to make Aera compatible with future standards (e.g., account abstraction standards), to add new treasury-specific functionality (e.g., allow some access to treasury funds by a new role type), etc. The same is true for multi depositor vaults.
Extending the base vault
The single depositor vault inherits from BaseVault
which provides most of the core Aera functionality. However, in itself it is not opinionated about questions such as how assets move in and out of the vault. More complex use cases like bridge funds or rollup contracts could extend from the Aera base vault and just leverage Aera to facilitate various strategies while maintaining fine-grained control over how assets move in and out of the Aera vault.
Last updated