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: