Skip to main content
rwa_multichain.nav is the pricing backbone for tokenized RWAs. Grain: one row per onchain NAV update event, keyed on unique_key. Coverage is 366 assets across 18 chains from 48 issuers.

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

usd_nav_price is normalized to USD even when quote_currency is not USD, so you can aggregate across assets without converting. Keep quote_currency in mind when reconciling against an issuer’s own published figures, which will be in the native currency.

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 precomputes exactly that as valid_from / valid_to ranges. Prefer nav_intervals for any join to activity data; use nav when you want the update events themselves, for example to measure publication frequency or detect a stale feed.

Address type mismatch

asset_address is VARBINARY. The corresponding column on the activity tables (balances.token_address, transfers.token_address) is VARCHAR — 0x-hex on EVM, base58 on Solana. Cast when joining:

Example query

Find feeds that have gone stale: