Assets#

Learn how to query and monitor asset information across Aave v4.


Assets represent ERC20 tokens that can be supplied, borrowed, or traded within the Aave protocol.

Asset Data Structure#

Asset data provides comprehensive information about a specific token in the protocol, including:

  • Token identification: id, address, symbol, name, decimals

  • Aggregate metrics: total supplied, total borrowed, caps, and available amounts

  • Reserve coverage: total number of reserves and how many are active

  • Current price: exchange valuation for a specific currency

The following TypeScript interfaces illustrate the core Asset types:

interface Asset {  __typename: "Asset";  id: AssetId;  token: Erc20Token;  summary: AssetSummary;  price: ExchangeAmountWithChange;}

Fetching Asset Information#

Query detailed information about a specific asset.

Use the useAsset hook to fetch asset information.

import { type AssetRequest, useAsset } from "@aave/react";
function AssetDetails({ request }: { request: AssetRequest }) {  const { data, loading, error } = useAsset(request);
  if (loading) return <div>Loading…</div>;
  if (error) return <div>Error: {error.message}</div>;
  if (!data) return <div>Asset not found</div>;
  return (    <div>      <h3>{data.token.name}</h3>      <p>Chain: {data.token.chain.name}</p>    </div>  );}

See below for examples of AssetRequest objects.

import { chainId, evmAddress } from "@aave/react";
const request: AssetRequest = {  query: {    token: {      address: evmAddress("0x123…"),      chainId: chainId(1),    },  },};

Finally, you can specify a different time window or currency for the data.

import { TimeWindow } from "@aave/react";
// …
const { data, loading, error } = useAsset({  query: {    // your query criteria  },  timeWindow: TimeWindow.LastWeek,});

Multichain Asset#

A multichain asset aggregates a single token across every chain where it is listed as a hub asset. Tokens are grouped by their canonical symbol—the case-insensitive, alias-resolved symbol that identifies the same asset across chains—so you can show protocol-wide totals and APY ranges without querying each chain separately.

Data Structure#

A multichain asset exposes the per-chain Asset list alongside an aggregated summary.

The following TypeScript interfaces illustrate the core multichain asset types:

interface MultichainAsset {  __typename: "MultichainAsset";  assets: Asset[];  summary: MultichainAssetSummary;}

Fetching a Multichain Asset#

Select the token with exactly one of symbol or tokenInfo. Omit chainIds to aggregate across all chains, or pass a list to restrict the result.

Use the useMultichainAsset hook to fetch an asset aggregated across chains.

import { useMultichainAsset } from "@aave/react";
function MultichainAssetSummary() {  const { data, loading, error } = useMultichainAsset({    query: { symbol: "USDC" },  });
  if (loading) return <div>Loading…</div>;
  if (error) return <div>Error: {error.message}</div>;
  return (    <div>      <p>Deployed on {data.summary.chainCount} chains</p>      <p>        Total supplied: {data.summary.totalSupplied.value.toDisplayString(2)}{" "}        {data.summary.totalSupplied.symbol}      </p>    </div>  );}

See below for examples of MultichainAssetRequest objects.

const request: MultichainAssetRequest = {  query: {    symbol: "USDC",  },};

By default, Merkl rewards are included in the APY range. Pass includeRewards: false for protocol base rates only.

Protocol APYs Only
const request: MultichainAssetRequest = {  query: { symbol: "USDC" },  includeRewards: false,};

Asset Price History#

Asset price history data provides time-series price information for an asset.

Use the useAssetPriceHistory hook to fetch historical price data.

import {  type AssetPriceHistoryRequest,  useAssetPriceHistory,} from "@aave/react";
function AssetPrice({ request }: { request: AssetPriceHistoryRequest }) {  const { data, loading, error } = useAssetPriceHistory(request);
  if (loading) return <div>Loading…</div>;
  if (error) return <div>Error: {error.message}</div>;
  return (    <div>      {data.map((sample) => (        <div key={sample.date.toString()}>          <p>            <small>{sample.date.toLocaleDateString()}</small>$            {sample.price.toFixed(2)}          </p>        </div>      ))}    </div>  );}

See below for examples of AssetPriceHistoryRequest objects.

const request: AssetPriceHistoryRequest = {  query: {    assetId: asset.id,  },};

Finally, you can specify a different currency or time window for the data.

import { Currency } from "@aave/react";
const { data, error, loading } = useAssetPriceHistory({  query: {    // your query criteria  },  currency: Currency.Eur,});

Asset Supply History#

Asset supply history data provides time-series total supply information for an asset.

Use the useAssetSupplyHistory hook to fetch historical supply data.

import {  type AssetSupplyHistoryRequest,  useAssetSupplyHistory,} from "@aave/react";
function AssetSupply({ request }: { request: AssetSupplyHistoryRequest }) {  const { data, loading, error } = useAssetSupplyHistory(request);
  if (loading) return <div>Loading…</div>;
  if (error) return <div>Error: {error.message}</div>;
  return (    <div>      {data.map((sample) => (        <div key={sample.date.toString()}>          <p>            <small>{sample.date.toLocaleDateString()}</small>            {sample.amount.value.toDisplayString(2)} {sample.amount.symbol}          </p>        </div>      ))}    </div>  );}

See below for examples of AssetSupplyHistoryRequest objects.

const request: AssetSupplyHistoryRequest = {  query: {    assetId: asset.id,  },};

Finally, you can specify a different time window for the data.

Custom Time Window
import { TimeWindow } from "@aave/react";
const { data, error, loading } = useAssetSupplyHistory({  query: {    // your query criteria  },  window: TimeWindow.LastMonth,});

Asset Borrow History#

Asset borrow history data provides time-series total borrow information for an asset.

Use the useAssetBorrowHistory hook to fetch historical borrow data.

import {  type AssetBorrowHistoryRequest,  useAssetBorrowHistory,} from "@aave/react";
function AssetBorrow({ request }: { request: AssetBorrowHistoryRequest }) {  const { data, loading, error } = useAssetBorrowHistory(request);
  if (loading) return <div>Loading…</div>;
  if (error) return <div>Error: {error.message}</div>;
  return (    <div>      {data.map((sample) => (        <div key={sample.date.toString()}>          <p>            <small>{sample.date.toLocaleDateString()}</small>            {sample.amount.value.toDisplayString(2)} {sample.amount.symbol}          </p>        </div>      ))}    </div>  );}

See below for examples of AssetBorrowHistoryRequest objects.

const request: AssetBorrowHistoryRequest = {  query: {    assetId: asset.id,  },};

Finally, you can specify a different time window for the data.

Custom Time Window
import { TimeWindow } from "@aave/react";
const { data, error, loading } = useAssetBorrowHistory({  query: {    // your query criteria  },  window: TimeWindow.LastMonth,});

Protocol History#

Fetch protocol-wide historical data (deposits, borrows). Pass chainIds to scope the history to specific chains, or omit it to aggregate across all of them.

Use the useProtocolHistory hook to fetch protocol-wide historical data.

import { type ProtocolHistoryRequest, useProtocolHistory } from "@aave/react";
function ProtocolHistory({ request }: { request: ProtocolHistoryRequest }) {  const { data, loading, error } = useProtocolHistory(request);
  if (loading) return <div>Loading…</div>;
  if (error) return <div>Error: {error.message}</div>;
  return (    <div>      {data.map((sample) => (        <p key={sample.date.toString()}>          <small>{sample.date.toLocaleDateString()}</small>          <span>            <strong>Deposits</strong>            {sample.deposits.symbol}            {sample.deposits.value.toDisplayString(2)}          </span>          <span>            <strong>Borrows</strong>            {sample.borrows.symbol}            {sample.borrows.value.toDisplayString(2)}          </span>        </p>      ))}    </div>  );}