> ## 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 NAV-valued AUM.

export const PremiumDatasetAccessCard = ({href = "https://dune.com/enterprise#contact-form"}) => <Card title="Premium dataset access" icon="info" href={href}>
    This dataset is part of a premium offering and requires additional access. Contact the Dune enterprise team to request access.
  </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` already valued at NAV, so per-product AUM does not require the `VARBINARY`-to-`VARCHAR` cast that a manual NAV join needs.

## 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                                  |
| `supply_raw`     | `DOUBLE`    | Total outstanding supply in native precision                              |
| `supply`         | `DOUBLE`    | Decimals-adjusted outstanding supply                                      |
| `supply_usd`     | `DOUBLE`    | Supply valued at NAV, where coverage exists                               |
| `_updated_at`    | `TIMESTAMP` | When this row was last written by the pipeline                            |

## 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.

## NAV coverage

`supply_usd` is populated only where the asset has an onchain NAV feed. NAV covers 366 assets across 18 chains from 48 issuers, so `supply_usd IS NULL` means missing price coverage rather than zero value. Check coverage before reporting a portfolio-wide AUM total.

## 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
    m.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 s
  JOIN rwa_multichain.token_metadata m
    ON m.blockchain = s.blockchain
    AND m.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
```
