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