Skip to Content
docs

Aave Simple Earn Vault Data

Fetch a single vault, list vaults, and read a user’s vault positions, history, and activity.

Vault Data Structure

Aave Simple Earn Vault data describes ERC-4626 compliant yield-bearing vaults:

  • Vault identification (address, owner, share token details)
  • Reserve information (underlying asset, yield strategy)
  • Fee structure (performance fees, accumulated revenue, fee recipients)
  • Vault metrics (total balance, user shares)

Include a user address to also get the user’s vault shares (userShares.shares) and their underlying balance (userShares.balance).

The following TypeScript interfaces illustrate the core Vault type and its related types:

interface Vault {
  address: EvmAddress;
  owner: EvmAddress;
  shareName: string;
  shareSymbol: string;
  usedReserve: Reserve;
  fee: PercentValue;
  totalFeeRevenue: TokenAmount;
  balance: TokenAmount;
  feesBalance: TokenAmount;
  chainId: ChainId;
  userShares?: UserVaultShares;
  recipients?: VaultFeesRecipientsConfiguration;
}

Fetching a Single Vault

Retrieve detailed information about a specific vault including underlying reserve and user shares.

Use the useVault hook in React, the vault action in TypeScript, or the vault query in GraphQL to fetch detailed information about a specific vault.

const { data, loading, error } = useVault({
  by: VaultRequestBy,
  chainId: ChainId,
  user: EvmAddress | undefined,
});

In React, fetch a specific vault by address.

An Ethereum Vault
import { useVault, evmAddress, chainId } from "@aave/react";

// …

const { data, loading, error } = useVault({
  by: {
    address: evmAddress("0x1234567890abcdef1234567890abcdef12345678"),
  },
  chainId: chainId(1),
});

if (loading) {
  return <p>Loading vault…</p>;
}

if (error) {
  return <p>Error: {error.message}</p>;
}

if (!data) {
  return <p>Vault not found</p>;
}

// data: Vault

Include a user address to get user-specific vault data like shares owned.

With User State
import { useVault, evmAddress, chainId } from "@aave/react";

// …

const { data, loading, error } = useVault({
  by: {
    address: evmAddress("0x1234567890abcdef1234567890abcdef12345678"),
  },
  chainId: chainId(1),
  user: evmAddress("0x742d35cc6e5c4ce3b69a2a8c7c8e5f7e9a0b1234"),
});

Listing Available Vaults

Fetch multiple vaults with filtering and pagination support.

Use the useVaults hook in React, the vaults action in TypeScript, or the vaults query in GraphQL to fetch paginated vaults based on filter criteria.

const { data, error, loading } = useVaults({
  criteria: VaultsRequestFilterCriteria,
  pageSize: PageSize | undefined,
  user: EvmAddress | undefined,
  cursor: Cursor | undefined,
});

In React, fetch vaults owned by a specific address.

Owned Vaults
import { useVaults, evmAddress, PageSize } from "@aave/react";

// …

const { data, error, loading } = useVaults({
  criteria: {
    ownedBy: [evmAddress("0x742d35cc6e5c4ce3b69a2a8c7c8e5f7e9a0b1234")],
  },
  pageSize: PageSize.Ten,
});

if (loading) {
  return <p>Loading…</p>;
}

if (error) {
  return <p>{error.message}</p>;
}

// data.items: Vault[]
// data.pageInfo.next: Cursor | null
// data.pageInfo.prev: Cursor | null

Include a user address to get user-specific vault data like shares owned.

With User State
import { useVaults, evmAddress, PageSize } from "@aave/react";

// …

const { data, loading, error } = useVaults({
  criteria: {
    ownedBy: [evmAddress("0x742d35cc6e5c4ce3b69a2a8c7c8e5f7e9a0b1234")],
  },
  pageSize: PageSize.Ten,
  user: evmAddress("0x742d35cc6e5c4ce3b69a2a8c7c8e5f7e9a0b1234"),
});

User Vault Positions

Track user vault positions and shares across Aave Simple Earn Vaults.

Use the useUserVaults hook in React, the userVaults action in TypeScript, or the userVaults query in GraphQL to fetch paginated vaults that a user has shares in.

const { data, loading, error } = useUserVaults({
  user: EvmAddress,
  filters: UserVaultsFilter | undefined,
  orderBy: UserVaultsOrderBy | undefined,
  pageSize: PageSize | undefined,
  cursor: Cursor | undefined,
});

In React, fetch user vaults ordered by shares amount.

User Vaults
import {
  useUserVaults,
  evmAddress,
  PageSize,
  OrderDirection,
} from "@aave/react";

// …

const { data, error, loading } = useUserVaults({
  user: evmAddress("0x742d35cc6e5c4ce3b69a2a8c7c8e5f7e9a0b1234"),
  orderBy: { shares: OrderDirection.Desc },
  pageSize: PageSize.Fifty,
});

if (error) {
  return <p>Error: {error.message}</p>;
}

if (loading) {
  return <p>Loading positions…</p>;
}

// data.items: Vault[]
// data.pageInfo.next: Cursor | null
// data.pageInfo.prev: Cursor | null

User Vault Transaction History

Track user vault transaction history.

Use the useVaultUserTransactionHistory hook in React, the vaultUserTransactionHistory action in TypeScript, or the vaultUserTransactionHistory query in GraphQL to fetch a paginated user’s vault transaction history.

const { data, loading, error } = useVaultUserTransactionHistory({
  user: EvmAddress,
  vault: EvmAddress,
  chainId: ChainId,
  filters: VaultUserHistoryAction | undefined,
  orderBy: VaultUserTransactionHistoryOrderBy | undefined,
  pageSize: PageSize | undefined,
  cursor: Cursor | undefined,
});

In React, fetch user vault transaction history ordered by date.

User Vault Transactions
import {
  useVaultUserTransactionHistory,
  evmAddress,
  chainId,
  PageSize,
  OrderDirection,
} from "@aave/react";

// …

const { data, error, loading } = useVaultUserTransactionHistory({
  user: evmAddress("0x742d35cc6e5c4ce3b69a2a8c7c8e5f7e9a0b1234"),
  vault: evmAddress("0x1234567890abcdef1234567890abcdef12345678"),
  chainId: chainId(1),
  orderBy: { date: OrderDirection.Desc },
  pageSize: PageSize.Fifty,
});

if (error) {
  return <p>Error: {error.message}</p>;
}

if (loading) {
  return <p>Loading transactions…</p>;
}

// data.items: VaultUserTransactionHistoryItem[]
// data.pageInfo.next: Cursor | null
// data.pageInfo.prev: Cursor | null

Vault User Activity

Return a user’s activity for a vault, including earnings breakdowns over time.

Use the useVaultUserActivity hook in React, the vaultUserActivity action in TypeScript, or the vaultUserActivity query in GraphQL to fetch the user’s activity for a vault.

const { data, loading, error } = useVaultUserActivity({
  user: EvmAddress,
  vault: EvmAddress,
  chainId: ChainId,
  window: VaultUserActivityTimeWindow,
});

In React, fetch the user’s vault activity.

User Vault Activity
import {
  useVaultUserActivity,
  evmAddress,
  chainId,
  VaultUserActivityTimeWindow,
} from "@aave/react";

// …

const { data, error, loading } = useVaultUserActivity({
  user: evmAddress("0x742d35cc6e5c4ce3b69a2a8c7c8e5f7e9a0b1234"),
  vault: evmAddress("0x1234567890abcdef1234567890abcdef12345678"),
  chainId: chainId(1),
  window: VaultUserActivityTimeWindow.LastWeek,
});

if (error) {
  return <p>Error: {error.message}</p>;
}

if (loading) {
  return <p>Loading transactions…</p>;
}

// data: VaultUserActivityResult