Aave Vaults

Aave Vaults are ERC-4626 compliant yield-bearing vaults that allow users to deposit and withdraw ERC-20 tokens supported by Aave V3. These vaults automatically manage the supply and withdrawal of assets in the Aave Protocol while enabling vault managers to take a fee on the yield earned.

Aave ERC-4626 Vaults

Overview

Aave Vaults follow the ERC-4626 Tokenized Vault Standard, which standardizes the interface for yield-bearing vaults. This standard simplifies integration with various applications and aggregators while improving interoperability across the DeFi ecosystem.

Each vault allows depositors to:

  • Deposit supported tokens (assets) and receive vault shares in return

  • Redeem vault shares for the underlying assets plus accrued yield

  • Automatically earn yield from Aave V3 markets without direct interaction with the protocol

Architecture

Aave Vaults consist of three key components:

  1. ERC-4626 Interface: Standardized methods for deposit, withdrawal, and accounting of assets.

  2. Yield Strategy: Manages deposits into Aave V3 markets and handles yield accrual.

  3. Fee Management: Enables vault managers to collect a percentage of the yield generated.

When a user deposits an asset into a vault:

  • The vault mints proportional vault shares (ERC-20 tokens) to the user

  • The vault deposits the underlying assets into the corresponding Aave V3 market

  • The vault receives aTokens from Aave, which automatically accrue yield

  • Yield is reflected in the increasing value of vault shares over time

Fee Structure

Vault managers can set a fee percentage on the yield generated by the vault. This fee structure includes:

  • Performance Fee: A percentage of the yield earned that goes to the vault manager

  • Max Fee: A maximum limit on the performance fee that can be charged

  • Fee Recipient: The address that receives the collected fees

Fees are collected when yield is realized through:

  • User withdrawals or redemptions

  • Explicit fee collection by the vault manager

The fee is only applied to the yield portion of the assets and not to the principal amount deposited by users.

Interacting with Vaults

Vaults implement the standard ERC-4626 interface with methods such as:

  • deposit(uint256 assets, address receiver): Deposit assets and receive vault shares

  • withdraw(uint256 assets, address receiver, address owner): Withdraw assets by burning vault shares

  • mint(uint256 shares, address receiver): Mint exact amount of shares by depositing assets

  • redeem(uint256 shares, address receiver, address owner): Redeem shares for underlying assets

Additionally, vaults provide view functions to check:

  • totalAssets(): Total assets managed by the vault

  • convertToShares(uint256 assets): Convert asset amount to vault shares

  • convertToAssets(uint256 shares): Convert vault shares to asset amount

  • previewDeposit(uint256 assets): Preview shares received for a deposit

  • previewWithdraw(uint256 assets): Preview shares needed for a withdrawal

Benefits for Users

  • Simplified Yield: Earn yield from Aave V3 without managing multiple transactions

  • Gas Efficiency: Lower gas costs compared to direct protocol interactions

  • Standard Interface: Easier integration with other DeFi protocols and applications

  • Composability: Vault shares can be used in other DeFi applications

Benefits for Vault Managers

  • Yield Capture: Earn fees on yield generated by user deposits

  • Customization: Configure fee parameters to suit different strategies

  • Standardization: Leverage the ERC-4626 standard for broader integration

API Reference

The Aave Vaults API provides endpoints to query vault information and generate transaction data for interacting with vaults.

VaultInfo

Returns information about one or more vaults, including APY, fee structure, and maximum available supply.

Request Parameters:

  • pool (optional): The address of the Aave pool

  • underlyingAsset (optional): The address of the underlying asset

  • chainId (optional): The chain ID where the vault is deployed

All parameters are optional. If no parameters are provided, information for all configured vaults across all networks will be returned.

Example Query:

query VaultInfo {  vaultInfo(    request: {      pool: "0x794a61358d6845594f94dc1db02a252b5b4814ad"      underlyingAsset: "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1"      chainId: 42161    }  ) {    vault    underlyingAsset    apy    chainId    fee    maxAvailableSupply  }}

Example Response:

{  "data": {    "vaultInfo": [      {        "vault": "0x45562257139d0e6372ca9F2366Ac9D8D8f6764aa",        "underlyingAsset": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1",        "apy": 2.159007050509208,        "chainId": 42161,        "fee": 0,        "maxAvailableSupply": "0"      }    ]  }}

Deposit

Generates transaction data for depositing assets into a vault.

Request Parameters:

  • amount: The amount of assets to deposit

  • chainId: The chain ID where the vault is deployed

  • vault: The address of the vault

  • receiver: The address that will receive the vault shares

Example Query:

query Deposit {  deposit(    request: {      amount: "100"      chainId: 1      vault: "0x45562257139d0e6372ca9f2366ac9d8d8f6764aa"      receiver: "0xaDdfe0b2342800ebD67C30d1c2Bd479E4D498BD5"    }  ) {    to    data  }}

Example Response:

{  "data": {    "deposit": {      "to": "0x45562257139d0e6372ca9F2366Ac9D8D8f6764aa",      "data": "0x6e553f650000000000000000000000000000000000000000000000000000000000000064000000000000000000000000addfe0b2342800ebd67c30d1c2bd479e4d498bd5"    }  }}

Example Query with Permit:

query DepositWithPermit {  deposit(    request: {      amount: "100"      chainId: 1      vault: "0x45562257139d0e6372ca9f2366ac9d8d8f6764aa"      receiver: "0xaDdfe0b2342800ebD67C30d1c2Bd479E4D498BD5"      signature: { deadline: "1700000000", v: 28, r: "0x...", s: "0x..." }    }  ) {    to    data  }}

Redeem

Generates transaction data for redeeming vault shares.

Request Parameters:

  • shares: The amount of shares to redeem

  • chainId: The chain ID where the vault is deployed

  • vault: The address of the vault

  • receiver: The address that will receive the underlying assets

  • owner: (optional) The address that owns the shares (if different from the caller)

Permit Support: Both deposit and redeem endpoints support permit functionality. If a signature is provided in the request, the API will return transaction data for the permit methods.

Example Query:

query Redeem {  redeem(    request: {      shares: "100"      chainId: 1      vault: "0x45562257139d0e6372ca9f2366ac9d8d8f6764aa"      receiver: "0xaDdfe0b2342800ebD67C30d1c2Bd479E4D498BD5"    }  ) {    to    data  }}

Example Response:

{  "data": {    "redeem": {      "to": "0x45562257139d0e6372ca9F2366Ac9D8D8f6764aa",      "data": "0xba087652000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000addfe0b2342800ebd67c30d1c2bd479e4d498bd5"    }  }}

Example Query with Permit:

query RedeemWithPermit {  redeem(    request: {      shares: "100"      chainId: 1      vault: "0x45562257139d0e6372ca9f2366ac9d8d8f6764aa"      receiver: "0xaDdfe0b2342800ebD67C30d1c2Bd479E4D498BD5"      signature: { deadline: "1700000000", v: 28, r: "0x...", s: "0x..." }    }  ) {    to    data  }}

Aave.com provides information and resources about the fundamentals of the decentralised non-custodial liquidity protocol called the Aave Protocol, comprised of open-source self-executing smart contracts that are deployed on various permissionless public blockchains, such as Ethereum (the "Aave Protocol" or the "Protocol"). Aave Labs does not control or operate any version of the Aave Protocol on any blockchain network.