> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dune.com/llms.txt
> Use this file to discover all available pages before exploring further.

# rwa_multichain.supply

> Daily outstanding supply per RWA token per chain, with curated USD-valued AUM.

export const PremiumDatasetAccessCard = ({href = "https://dune.com/enterprise#contact-form", note = null}) => <Card title="Gated dataset" icon="lock" href={href}>
    Querying this dataset requires an entitlement on your workspace. See <a href="/data-catalog/overview#access-tiers-public-vs-gated-datasets">access tiers</a>, or contact the Dune team to enable access.
    {note && <><br /><br />{note}</>}
  </Card>;

`rwa_multichain.supply` tracks total outstanding supply per token per chain as a daily series. Grain: one row per token per chain per day. Use it for AUM and supply trends instead of aggregating every holder balance.

<PremiumDatasetAccessCard />

## Why use it over aggregating balances

Summing `balance` from [`balances`](/data-catalog/curated/rwa/holders-supply/balances) gives the same answer, but it scans every holder row for every day in the window — expensive for a metric you often want across all assets and a long history. This table is pre-aggregated, so supply trends and AUM charts read one row per token per day.

It also carries `supply_usd`, so per-product AUM does not require a manual point-in-time join. A token can have `supply_usd` even when it has no covering row in [`prices`](/data-catalog/curated/rwa/valuation/prices).

## Table schema

| Column | Type | Description |
| - | - | - |
| `blockchain` | `VARCHAR` | Chain for the token deployment |
| `day` | `DATE` | Supply snapshot date |
| `token_symbol` | `VARCHAR` | RWA token symbol |
| `token_address` | `VARCHAR` | Normalized native token identifier |
| `token_id` | `VARCHAR` | Normalized cross-chain token identifier, joins to `rwa_multichain.tokens` |
| `token_standard` | `VARCHAR` | Native token standard or asset namespace, including `tip20` for Tempo |
| `supply_raw` | `UINT256` | Total outstanding supply in native precision |
| `supply` | `DOUBLE` | Decimals-adjusted outstanding supply |
| `supply_usd` | `DOUBLE` | Outstanding supply in USD |
| `circulating_supply` | `DOUBLE` | Outstanding supply excluding issuer inventory, bridge lockboxes, xStocks system wallets, and custodian distributor omnibus. Null when holder reconstruction cannot be reconciled with outstanding supply |
| `circulating_supply_usd` | `DOUBLE` | `circulating_supply` in USD. Null when `circulating_supply` or `supply_usd` is null |
| `circulating_supply_status` | `VARCHAR` | `ok`, `total_supply_unavailable`, or `exceeds_total_supply`. Null when circulating supply is unavailable |
| `price_source` | `VARCHAR` | Source of `supply_usd`: `oracle`, `iex`, `coinpaprika`, or `prices_dex`. Null when `supply_usd` is null |
| `last_updated` | `TIMESTAMP` | Block time of the latest supply change reflected in this snapshot |

## Supply is per chain, not per asset

An asset deployed on several chains has one row per chain per day. Cross-chain total supply for a single asset means summing across `blockchain`:

```sql theme={null}
SELECT day, token_symbol, SUM(supply) AS total_supply
FROM rwa_multichain.supply
WHERE token_symbol = 'BUIDL'
GROUP BY 1, 2
```

Reading a single chain's row as the asset's total supply is the most common mistake on this table.

Tempo is EVM-compatible but its supply rows use `token_standard = 'tip20'`, not `erc20`. They inherit the [balance reconstruction](/data-catalog/curated/rwa/holders-supply/balances) support boundary of 2026-05-05, which should not be interpreted as Tempo's start date.

## Example query

```sql theme={null}
-- Supply trend for the largest assets
SELECT
  day,
  token_symbol,
  SUM(supply) AS supply,
  SUM(supply_usd) AS supply_usd
FROM rwa_multichain.supply
WHERE day >= CURRENT_DATE - INTERVAL '90' DAY
GROUP BY 1, 2
ORDER BY 1 DESC, 4 DESC NULLS LAST
```

**Net supply change over the last 30 days, by asset class:**

```sql theme={null}
WITH windowed AS (
  SELECT
    r.asset_class,
    s.token_id,
    MIN_BY(s.supply_usd, s.day) AS supply_start,
    MAX_BY(s.supply_usd, s.day) AS supply_end
  FROM rwa_multichain.supply AS s
  INNER JOIN rwa_multichain.tokens_reference_data AS r
    ON r.blockchain = s.blockchain
    AND r.token_id = s.token_id
  WHERE s.day >= CURRENT_DATE - INTERVAL '30' DAY
  GROUP BY 1, 2
)
SELECT
  asset_class,
  SUM(supply_start) AS supply_usd_30d_ago,
  SUM(supply_end) AS supply_usd_now,
  SUM(supply_end) - SUM(supply_start) AS net_change_usd
FROM windowed
GROUP BY 1
ORDER BY 4 DESC NULLS LAST
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.