Skip to main content
rwa_multichain.nav_intervals turns the discrete value events in nav into validity windows. Grain: one row per value per asset with a valid_from / valid_to range, keyed on unique_key. Use it for source-level NAV analysis. For cross-chain token-unit valuation, prefer rwa_multichain.prices.

Why it exists

NAV is published irregularly — daily for some issuers, weekly or on demand for others. Valuing a transfer that happened between two publications means finding the most recent NAV at or before that timestamp. Doing that inline is a correlated subquery or a window function over the full NAV history, repeated for every join. This table forward-fills instead: each NAV value carries the window over which it was the prevailing value, so a point-in-time join becomes a plain range predicate. The most recent value per asset has valid_to IS NULL, meaning it is still in force.

Table schema

The EVM point-in-time join pattern

Two things to get right: the half-open range predicate, and the EVM VARBINARY-to-hex address conversion.
valid_to IS NULL must be handled explicitly. Without it, every row priced by the open-ended NAV interval drops out of the result, which silently biases any total toward historical activity. The 0x + to_hex(asset_address) expression is EVM-only. Solana, Stellar, and XRPL textual ids use from_utf8(asset_address); Sui stores package bytes. For daily cross-chain data, use prices, or compare on dates with a chain-correct identifier:
balances.balance_usd already uses curated RWA prices. Join this table when you need source-level NAV semantics or a different valuation timestamp.