> ## 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.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. For asset-level AUM, use [`supply.supply_usd`](/data-catalog/curated/rwa/holders-supply/supply). You do not need to join [`prices`](/data-catalog/curated/rwa/valuation/prices) to read `balance_usd`. Join `prices` when you need `value_kind` and the validity window.

```sql theme={null}
SELECT
  b.day,
  b.token_symbol,
  SUM(b.balance_usd) AS holder_usd
FROM rwa_multichain.balances AS b
WHERE b.day >= current_date - INTERVAL '30' day
  AND b.balance > 0
GROUP BY 1, 2
```

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

Indexed tokens without a Backed/xStocks or Ethereum STBT adapter are absent from this table.

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
```


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