rwa_multichain.trades covers where tokenized RWAs actually change hands. Grain: one row per trade, keyed on (blockchain, block_month, block_date, unique_key). It unions DEX swaps with RWA-native venues and normalizes both into a two-token swap schema.
Two platform types
platform_type splits the table into the two kinds of venue:
DEX volume dominates by row count, but
rwa_platform is where issuer-operated primary and secondary flow shows up. Split on platform_type rather than treating the table as homogeneous.
rwa_side tells you which leg is the RWA
Every row is a two-token swap, and either leg can be the real-world asset.rwa_side resolves it:
Ignoring
rwa_side and always reading token_bought_address gives you the stablecoin or quote asset roughly half the time. For directional flow analysis, filter rwa_side IN ('buy', 'sell') to exclude the RWA-to-RWA rows that would double-count.
trades does not have a token_id column. To attach RWA reference data, select the RWA leg with rwa_side, then join its address to the relevant chain identity:
rwa_multichain.tokens_reference_data.token_id.
Table schema
Addresses are
VARCHAR across all token and account columns — 0x-hex on EVM, base58 on Solana — so one query covers both without casting. For point-in-time valuation, resolve the RWA leg and join prices on (blockchain, token_id) and its validity range.This table does not contain perpetuals
Perpetual futures on RWA underlyings are a different instrument with a different schema, and they live inperp_trades. A perp fill is not a two-token swap, so it is deliberately not unioned in here. Comparing spot to synthetic activity means querying both tables and joining on asset class.