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

> Verified onchain value update events for tokenized real-world assets, retaining NAV, price meaning, and unit basis.

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.nav` records verified onchain value updates for tokenized RWAs. Grain: one row per update event, keyed on `unique_key`. Use it to inspect publication history and source semantics. For cross-chain AUM and point-in-time valuation, start with [`rwa_multichain.prices`](/data-catalog/curated/rwa/valuation/prices).

<PremiumDatasetAccessCard />

## Why NAV rather than market price

A tokenized money-market fund does not have a meaningful market price — it has a net asset value published by its issuer or an oracle. Most tokenized RWAs either barely trade onchain or trade at a price pinned to NAV. This table reads NAV directly from the verified onchain source contract for each asset, so USD valuations do not depend on there being a liquid market.

For assets that also trade as ordinary crypto tokens, `prices.day` and `prices.hour` remain the right source for market price.

## Table schema

| Column | Type | Description |
| - | - | - |
| `blockchain` | `VARCHAR` | Chain where the NAV update was published |
| `chain_id` | `BIGINT` | Numeric chain identifier |
| `asset_address` | `VARBINARY` | Legacy binary asset identifier. EVM is native bytes; Solana, Stellar, and XRPL encode `token_id` as UTF-8; Sui stores package bytes |
| `oracle_address` | `VARBINARY` | Native oracle/source identifier bytes |
| `usd_nav_price` | `DOUBLE` | Backward-compatible USD value column |
| `usd_price` | `DOUBLE` | Generic USD value without implying accounting NAV |
| `value_kind` | `VARCHAR` | Financial meaning: `accounting_nav`, `redemption_rate`, `tracker_price`, `commodity_reference`, or `par_value` |
| `price_basis` | `VARCHAR` | Quantity unit priced: `token_unit`, `display_unit`, `share_unit`, or `reference_unit` |
| `nav_raw` | `UINT256` | Raw NAV value as emitted onchain |
| `nav_decimals` | `INTEGER` | Decimal precision of `nav_raw` |
| `quote_currency` | `VARCHAR` | Currency the source published in. Mostly `USD`; also `EUR`, `GBP`, `CHF`, `CNY`, `HKD` |
| `issuer` | `VARCHAR` | Issuer of the asset |
| `symbol` | `VARCHAR` | Asset ticker |
| `block_time` | `TIMESTAMP WITH TIME ZONE` | When the update was published onchain |
| `block_date` | `DATE` | Date of the update |
| `block_month` | `DATE` | Partition column |
| `block_number` | `BIGINT` | Block height |
| `tx_hash` | `VARBINARY` | Transaction that published the update |
| `evt_index` | `BIGINT` | Event position within the transaction |
| `trace_address` | `ARRAY(BIGINT)` | Trace position, for NAV read from a call rather than an event |
| `effective_at` | `TIMESTAMP WITH TIME ZONE` | When the NAV takes effect. May differ from `block_time` when a source publishes a value dated to an earlier valuation point |
| `unique_key` | `VARCHAR` | Row identifier |
| `_updated_at` | `TIMESTAMP WITH TIME ZONE` | When this row was last refreshed |

<Note>
  Use `usd_price` with `value_kind` and `price_basis`. `usd_nav_price` remains for backward compatibility, but not every source is an accounting NAV. `quote_currency` records the source quote; `usd_price` is normalized to USD.
</Note>

## Use nav\_intervals for point-in-time joins

Because this table holds discrete events, valuing a balance or transfer from it means finding the most recent update at or before a given timestamp — a correlated subquery or a window function. [`nav_intervals`](/data-catalog/curated/rwa/valuation/nav-intervals) precomputes exactly that as `valid_from` / `valid_to` ranges for source-level NAV analysis. Prefer [`prices`](/data-catalog/curated/rwa/valuation/prices) for cross-chain activity joins; use `nav` when you want the update events themselves, for example to measure publication frequency or detect a stale feed.

## Address representation differs by chain

The common EVM join converts native bytes to lowercase 0x hex:

```sql theme={null}
'0x' || lower(to_hex(n.asset_address)) = b.token_address
```

That expression is **EVM-only**. Solana, Stellar, and XRPL store textual `token_id` as UTF-8 bytes, so use `from_utf8(asset_address)`. Sui stores native package bytes. Use [`prices`](/data-catalog/curated/rwa/valuation/prices) whenever you need one cross-chain join on `(blockchain, token_id)`.

## Example query

```sql theme={null}
-- Latest NAV per asset, with publication recency
SELECT
  blockchain,
  symbol,
  issuer,
  quote_currency,
  usd_price,
  value_kind,
  price_basis,
  block_time AS last_update
FROM (
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY blockchain, asset_address ORDER BY effective_at DESC) AS rn
  FROM rwa_multichain.nav
  WHERE block_date >= current_date - INTERVAL '30' day
)
WHERE rn = 1
ORDER BY last_update DESC
```

**Find feeds that have gone stale:**

```sql theme={null}
SELECT
  blockchain,
  symbol,
  issuer,
  MAX(effective_at) AS last_nav,
  date_diff('day', MAX(effective_at), now()) AS days_stale
FROM rwa_multichain.nav
GROUP BY 1, 2, 3
HAVING date_diff('day', MAX(effective_at), now()) > 7
ORDER BY 5 DESC
```


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