> ## Documentation Index
> Fetch the complete documentation index at: https://dune-automated-update-duneapi-openapi-files.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# rwa_multichain.balances

> Daily holder balance snapshots for tokenized real-world assets across all tracked chains, with curated USD values.

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.balances` is the cross-chain holder snapshot table. Grain: one row per holder per token per chain per day, keyed on `(blockchain, day, address, token_id)`. Use it to measure holder counts, concentration, and AUM.

<PremiumDatasetAccessCard />

## Table schema

| Column           | Type        | Description                                                                       |
| ---------------- | ----------- | --------------------------------------------------------------------------------- |
| `blockchain`     | `VARCHAR`   | Chain for the native balance source                                               |
| `day`            | `DATE`      | Balance snapshot date                                                             |
| `address`        | `VARCHAR`   | Normalized holder address. 0x-hex on EVM, base58 on Solana, native form elsewhere |
| `token_symbol`   | `VARCHAR`   | RWA token symbol where available                                                  |
| `token_address`  | `VARCHAR`   | Normalized native token identifier as `VARCHAR`                                   |
| `token_id`       | `VARCHAR`   | Normalized cross-chain token identifier for joining to `rwa_multichain.tokens`    |
| `token_standard` | `VARCHAR`   | Native token standard or asset namespace, including `tip20` for Tempo             |
| `currency`       | `VARCHAR`   | Token metadata currency where available                                           |
| `balance_raw`    | `DOUBLE`    | Raw token balance in the source token's native precision                          |
| `balance`        | `DOUBLE`    | Token balance adjusted for decimals                                               |
| `balance_usd`    | `DOUBLE`    | USD value of the balance using curated RWA prices                                 |
| `last_updated`   | `TIMESTAMP` | UTC timestamp when the balance last changed                                       |

## USD valuation

`balance_usd` applies Dune's curated RWA price for the snapshot date. If you need the price type and source mechanism explicitly, join [`prices`](/data-catalog/curated/rwa/valuation/prices) on the normalized cross-chain key:

```sql theme={null}
SELECT
  b.day,
  b.token_symbol,
  p.value_kind,
  SUM(b.balance * p.price_usd) AS aum_usd
FROM rwa_multichain.balances AS b
INNER JOIN rwa_multichain.prices AS p
  ON p.blockchain = b.blockchain
  AND p.token_id = b.token_id
  AND CAST(b.day AS TIMESTAMP) >= p.valid_from
  AND (p.valid_to IS NULL OR CAST(b.day AS TIMESTAMP) < p.valid_to)
WHERE b.day >= current_date - INTERVAL '30' day
GROUP BY 1, 2, 3
```

## Balance reconstruction boundaries

Most EVM-chain balances come from balance-update streams. On several non-EVM chains they are reconstructed by accumulating transfers, which means a chain that started tracking mid-history can carry a different starting point than a full-history rebuild would produce. Treat cross-chain holder totals for those chains as directional rather than exact.

Tempo is EVM-compatible but uses TIP-20, represented as `token_standard = 'tip20'`. Its transfer and balance reconstruction is supported from 2026-05-05. Coverage uses complete transfer replay from that boundary because no independent Tempo daily holder-state source exists. The date is a support boundary, not Tempo's start date.

## Zero balances are retained

Rows persist after a holder empties a position, so `balance = 0` rows appear in the snapshot. Filter `balance > 0` when counting holders, or you will count every address that ever held the asset.

## Example query

```sql theme={null}
-- Holder concentration for a single asset
WITH latest AS (
  SELECT address, balance
  FROM rwa_multichain.balances
  WHERE day = current_date - INTERVAL '1' day
    AND token_symbol = 'BUIDL'
    AND balance > 0
)
SELECT
  COUNT(*) AS holders,
  SUM(balance) AS total_balance,
  MAX(balance) / SUM(balance) AS top_holder_share
FROM latest
```

**Top holders across all chains:**

```sql theme={null}
SELECT
  address,
  COUNT(DISTINCT token_id) AS assets_held,
  SUM(balance_usd) AS portfolio_usd
FROM rwa_multichain.balances
WHERE day = current_date - INTERVAL '1' day
  AND balance > 0
  AND balance_usd IS NOT NULL
GROUP BY 1
ORDER BY 3 DESC
LIMIT 50
```
