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

> Daily RWA holder balances with entity attribution — CEX, lending protocol, custodian, and treasury labels.

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_enriched` extends [`balances`](/data-catalog/curated/rwa/holders-supply/balances) with entity attribution, so you can tell how much of an asset sits with centralized exchanges, lending protocols, and custodians versus unattributed wallets. Grain: one row per holder per token per chain per day, same as `balances`.

<PremiumDatasetAccessCard />

## What it answers

Raw balances tell you an address holds 40% of an asset. They do not tell you whether that address is a custodian holding on behalf of thousands of end investors, an exchange omnibus wallet, or a single whale — three very different market-structure readings of the same number. The label columns resolve that:

* How much of supply sits with CEXs, protocols, or custodians versus unknown wallets
* Who the labeled top holders are
* What an asset's DeFi exposure is, via labeled lending-protocol holdings

## Table schema

| Column                 | Type        | Description                                                                                         |                 |                                                    |
| ---------------------- | ----------- | --------------------------------------------------------------------------------------------------- | --------------- | -------------------------------------------------- |
| `blockchain`           | `VARCHAR`   | Chain for the native balance source                                                                 |                 |                                                    |
| `day`                  | `DATE`      | Balance snapshot date                                                                               |                 |                                                    |
| `address`              | `VARCHAR`   | Normalized holder address                                                                           |                 |                                                    |
| `token_symbol`         | `VARCHAR`   | RWA token symbol                                                                                    |                 |                                                    |
| `token_address`        | `VARCHAR`   | Normalized native token identifier                                                                  |                 |                                                    |
| `token_id`             | `VARCHAR`   | Normalized cross-chain token identifier                                                             |                 |                                                    |
| `token_standard`       | `VARCHAR`   | Native token standard or asset namespace, including `tip20` for Tempo                               |                 |                                                    |
| `token_product_id`     | `VARCHAR`   | \`blockchain                                                                                        | token\_standard | token\_id`. Join key to `tokens\_reference\_data\` |
| `currency`             | `VARCHAR`   | Token metadata currency where available                                                             |                 |                                                    |
| `balance_raw`          | `DOUBLE`    | Raw token balance in native precision                                                               |                 |                                                    |
| `balance`              | `DOUBLE`    | Decimals-adjusted balance                                                                           |                 |                                                    |
| `balance_usd`          | `DOUBLE`    | USD value using curated RWA prices                                                                  |                 |                                                    |
| `address_label`        | `VARCHAR`   | Label value. `NULL` for unlabeled addresses                                                         |                 |                                                    |
| `address_category`     | `VARCHAR`   | Top-level holder classification. Unlabeled rows use `unidentified` or `unidentified_smart_contract` |                 |                                                    |
| `address_subcategory`  | `VARCHAR`   | Finer classification, or the top-level / unidentified fallback                                      |                 |                                                    |
| `address_label_source` | `VARCHAR`   | Exact RWA label source. `NULL` for unidentified holders                                             |                 |                                                    |
| `address_label_method` | `VARCHAR`   | RWA label extraction method. `NULL` for unidentified holders                                        |                 |                                                    |
| `is_smart_contract`    | `BOOLEAN`   | Whether the holder is a deployed EVM smart contract. `NULL` on Robinhood and non-EVM chains         |                 |                                                    |
| `last_updated`         | `TIMESTAMP` | UTC timestamp when the balance last changed                                                         |                 |                                                    |

## Holder attribution

Known entities carry their resolved label and category. Other rows are preserved with `address_category = 'unidentified'`; supported EVM contracts use `unidentified_smart_contract`. `address_category` and `address_subcategory` are non-null, so no `COALESCE(..., 'unlabeled')` is needed.

`token_product_id` is the exact join key to [`tokens_reference_data`](/data-catalog/curated/rwa/registry/tokens-reference-data). Do not join the two tables on `product_id`: one product may have many chain deployments.

Tempo smart-contract classification uses `tempo.creation_traces`. More specific entity and protocol labels retain precedence over the generic `unidentified_smart_contract` classification.

## Table schema notes

Because one row per holder per day is preserved, zero balances persist after a holder exits. Filter `balance > 0` when counting holders.

## Example query

```sql theme={null}
-- Supply attribution by holder type
SELECT
  address_category AS holder_type,
  COUNT(DISTINCT address) AS holders,
  SUM(balance_usd) AS balance_usd
FROM rwa_multichain.balances_enriched
WHERE day = CURRENT_DATE - INTERVAL '1' DAY
  AND balance > 0
GROUP BY 1
ORDER BY 3 DESC NULLS LAST
```

**Labeled top holders for one asset:**

```sql theme={null}
SELECT
  address,
  address_label,
  address_category,
  is_smart_contract,
  balance,
  balance_usd
FROM rwa_multichain.balances_enriched
WHERE day = CURRENT_DATE - INTERVAL '1' DAY
  AND token_symbol = 'BUIDL'
  AND balance > 0
ORDER BY balance DESC
LIMIT 25
```

**CEX-held share of an asset over time:**

```sql theme={null}
SELECT
  day,
  SUM(CASE WHEN address_category = 'cex' THEN balance ELSE 0 END) / SUM(balance) AS cex_share
FROM rwa_multichain.balances_enriched
WHERE day >= CURRENT_DATE - INTERVAL '90' DAY
  AND token_symbol = 'BUIDL'
  AND balance > 0
GROUP BY 1
ORDER BY 1 DESC
```
