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

# Real-World Assets (RWAs)

> Curated real-world asset datasets on Dune — tokenized treasuries, equities, and commodities, plus synthetic RWA perpetuals

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

Real-world assets bring offchain value onchain: tokenized treasuries and money-market funds, tokenized equities, commodities, private credit, and real estate. Dune provides curated RWA data covering both halves of the market — **tokenized RWAs**, where the asset exists as a real token you can hold and transfer, and **synthetic RWA perpetuals** on Hyperliquid HIP-3 markets, where traders get exposure to a real-world asset without any token existing.

<Info>
  **Maintained by:** Dune · **Refresh:** hourly (activity) to daily (balances, NAV) · **Chains:** 21: Ethereum, Arbitrum, Avalanche, Base, BNB, Ink, Mantle, Monad, Optimism, Plasma, Plume, Polygon, Robinhood Chain, Sei, Tempo, zkSync, plus Solana, Aptos, Sui, XRPL, and Stellar
</Info>

<PremiumDatasetAccessCard />

<CardGroup cols={2}>
  <Card title="Explore on Dune" icon="arrow-up-right-from-square" href="https://dune.com/dune/rwa-overview">
    The RWA overview dashboard: AUM by asset class, issuer league tables, and chain distribution.
  </Card>

  <Card title="Get This Data" icon="database" href="https://dune.com/enterprise?dataset=rwa">
    Access RWA data via API, Datashare, or the Dune App.
  </Card>
</CardGroup>

## Available Data

<CardGroup cols={2}>
  <Card title="Registry & Classification" icon="book" href="/data-catalog/curated/rwa/registry/tokens">
    Which assets exist, on which chains, and the product behind each one — asset class, issuer, legal wrapper, and eligibility
  </Card>

  <Card title="Holders & Supply" icon="users" href="/data-catalog/curated/rwa/holders-supply/balances">
    Daily holder balances, entity attribution, outstanding supply, and issuance flows
  </Card>

  <Card title="Valuation" icon="dollar-sign" href="/data-catalog/curated/rwa/valuation/prices">
    Token-unit USD prices for AUM, plus onchain NAV events and point-in-time windows
  </Card>

  <Card title="Activity & Trading" icon="chart-line" href="/data-catalog/curated/rwa/activity/transfers">
    Token transfers, secondary-market trades, and RWA perpetual futures activity
  </Card>

  <Card title="All Tables" icon="table" href="/data-catalog/curated/rwa/all-tables-overview">
    Complete inventory of all RWA tables
  </Card>
</CardGroup>

## When to Use These Tables

Use RWA tables when you need to:

* Track AUM, supply, and holder growth for tokenized treasuries, funds, and equities
* Measure issuer and platform market share across asset classes
* Analyze holder concentration and entity composition, including CEX and protocol holdings
* Value onchain positions using curated USD prices (NAV-backed where an oracle exists)
* Monitor issuance and redemption flows against issuer-reported figures
* Track secondary-market liquidity for RWAs on DEXs and RWA-native venues
* Compare tokenized exposure against synthetic perpetual exposure for the same underlying
* Segment products by legal wrapper, custodian, regulator, or investor eligibility

## Query Performance

Activity tables (`transfers`, `trades`, `perp_trades`) are partitioned by `block_month`. Always filter on it, and add `blockchain` when you only need one chain — Robinhood Chain and Solana dominate row counts, so unfiltered scans are expensive. `balances` is a daily snapshot, so filter `day` to a single date unless you need a trend.

```sql theme={null}
-- Good: partition-pruned and chain-scoped
SELECT * FROM rwa_multichain.transfers
WHERE block_month >= DATE_TRUNC('month', CURRENT_DATE)
  AND blockchain = 'ethereum'
```

## Methodology

**Tokenized RWAs** are built around `rwa_multichain.tokens`, the canonical identity registry of every tracked asset. `token_id` already stores each chain's native identifier as `VARCHAR`, including EVM-compatible contract addresses, Solana mint addresses, Aptos asset types, Sui coin types, and XRPL and Stellar asset ids. A single query therefore spans all 21 chains. Join `transfers`, `balances`, and `supply` on `(blockchain, token_id)`. Classification and legal attributes live one layer up: [`tokens_reference_data`](/data-catalog/curated/rwa/registry/tokens-reference-data) is one row per token per chain (join activity on `(blockchain, token_id)`, join [`balances_enriched`](/data-catalog/curated/rwa/holders-supply/balances-enriched) on `token_product_id`), and [`product_reference_data`](/data-catalog/curated/rwa/registry/product-reference-data) is one row per `product_id`.

Tempo is EVM-compatible, but its covered RWA tokens use the native TIP-20 standard and appear as `token_standard = 'tip20'`, not `erc20`. See the [token registry](/data-catalog/curated/rwa/registry/tokens) for the canonical deployments and [transfers](/data-catalog/curated/rwa/activity/transfers) for the supported reconstruction window.

There is no `rwa_multichain.token_metadata` table. `trades` has no `token_id`; resolve the RWA leg with `rwa_side` plus `token_bought_address` / `token_sold_address`.

**Valuation** uses [`rwa_multichain.prices`](/data-catalog/curated/rwa/valuation/prices) for AUM. That table is USD per on-chain token unit with `[valid_from, valid_to)` windows, and `supply.supply_usd` is already `supply * prices.price_usd`. [`nav`](/data-catalog/curated/rwa/valuation/nav) still records each onchain NAV update; [`nav_intervals`](/data-catalog/curated/rwa/valuation/nav-intervals) forward-fills those events. The `0x` + `to_hex(asset_address)` join against `token_address` is **EVM-only**. For Solana, Stellar, and XRPL, `asset_address` is UTF-8-encoded `token_id`, not an EVM address. Prefer `prices` for cross-chain point-in-time valuation.

**Synthetic RWA perpetuals** use a native perp schema — side, price, size, notional, funding, open interest — not a two-token swap schema. `rwa_hyperliquid.markets` is the registry of curated HIP-3 markets, `rwa_hyperliquid.perp_trades` holds taker-leg fills with per-fill trader leverage and margin mode, and `perp_metrics_hourly` / `perp_metrics_daily` pre-aggregate volume, open interest, and funding. Perp fills keep the taker leg only, so volume matches Hyperliquid's own reported figures instead of double-counting both sides, and open interest is reported both-sides (longs plus shorts) to match the Hyperliquid UI. Metrics unique keys use `(block_month, block_hour|block_date, perp_dex, market_symbol)`, not `coin`. `perp_metrics_daily` is daily grain, hourly refresh. These four tables are the RWA-classified subset; the [Perpetuals Trading](/data-catalog/curated/perpetuals/overview) collection covers every Hyperliquid perp market, crypto included, plus per-account positions and account activity.

Tokenized products and Hyperliquid markets share the same legal asset-class vocabulary: `credit`, `fixed_income`, `cash_equivalent`, `equities`, `multi_asset`, `commodities`, `real_estate`, `fx`, `other`. On token rows that vocabulary is `product_asset_class` (and `product_reference_data.asset_class`); `tokens_reference_data.asset_class` is a separate title-case token-list vocab. The two halves never share token identifiers: a perpetual has no token behind it, so it never joins to `rwa_multichain.tokens`.

## Example Queries

**Largest tokenized assets by AUM and holder count:**

```sql theme={null}
SELECT
  token_symbol,
  blockchain,
  COUNT(DISTINCT address) AS holders,
  SUM(balance_usd) AS aum_usd
FROM rwa_multichain.balances
WHERE day = CURRENT_DATE - INTERVAL '1' DAY
  AND balance > 0
GROUP BY 1, 2
ORDER BY 4 DESC NULLS LAST
LIMIT 25
```

**Point-in-time USD value using the price in force on each day:**

```sql theme={null}
SELECT
  b.day,
  b.token_symbol,
  r.issuer_name,
  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)
LEFT JOIN rwa_multichain.tokens_reference_data AS r
  ON r.blockchain = b.blockchain
  AND r.token_id = b.token_id
WHERE b.day >= CURRENT_DATE - INTERVAL '30' DAY
GROUP BY 1, 2, 3
ORDER BY 1 DESC, 4 DESC
```

**Synthetic perp volume by asset class (do not sum open interest across days):**

```sql theme={null}
SELECT
  asset_class,
  SUM(volume_usd) AS volume_usd,
  SUM(open_interest_usd) AS open_interest_usd
FROM rwa_hyperliquid.perp_metrics_daily
WHERE block_date = CURRENT_DATE - INTERVAL '1' DAY
GROUP BY 1
ORDER BY 2 DESC
```

Summing `open_interest_usd` across markets on a single day is valid. Summing it across days is not: open interest is a stock, not a flow.

## Related Tables

* `rwa_multichain.prices` — curated USD per token unit; the AUM join used by `supply.supply_usd`
* `prices.day` / `prices.hour` — market prices for RWAs that also trade as ordinary crypto assets
* `tokens.transfers` — all token transfers, unfiltered by RWA scope
* `dex.trades` — full DEX trade coverage; `rwa_multichain.trades` is the RWA-scoped subset plus RWA-native venues

<CardGroup cols={2}>
  <Card title="Enterprise Data Solutions" icon="building" href="https://dune.com/enterprise">
    Need custom RWA datasets, additional chains, or dedicated support? Talk to our enterprise team.
  </Card>

  <Card title="Build Custom Models" icon="code" href="/api-reference/connectors/overview">
    Build private RWA analytics pipelines with the dbt Connector.
  </Card>
</CardGroup>
