rwa_multichain.tokens_reference_data is the reference table for every token in rwa_multichain.tokens. Grain: one row per token per chain, keyed on (blockchain, token_standard, token_id).
Why it is separate from tokens
tokens answers “does this token exist and what is its identifier”. tokens_reference_data adds the issuer label, balance behavior, and every public field from product_reference_data. Tokens without an associated product remain available with product_id and the attached product fields null.
A product and a token are not the same thing. One product — say Franklin Templeton’s BENJI fund — has a row per chain it is deployed on, and the product-level columns repeat identically across those rows. Deduplicate on product_id when you are counting products rather than deployments. For the product catalog itself, use product_reference_data.
Join keys
Do not join
balances_enriched on product_id. One product has many chain tokens, so that join fans out.
Product classification
asset_class and asset_type are the canonical product classification fields. They are sourced from product_reference_data and mirrored here for token-grain queries. Tokens with a null product_id have null product fields.
issuer is the token-list label. issuer_name is the legal issuer from product metadata. They are not interchangeable.
Table schema
Token identity
Product attach (null when
product_id is null)
Do not join on symbol
Token symbols are not a safe product key. The same product carries different tickers across access channels, unrelated products share tickers, and scam tokens squat real tickers on other chains. Join on(blockchain, token_id) or token_product_id, never on symbol or underlying_ticker.
Example queries
AUM, holders, and product count by legal asset class:token_product_id: