rwa_multichain.tokens is the identity table for every tokenized RWA Dune tracks. Grain: one row per token per chain, keyed on (blockchain, token_standard, token_id). Native identifiers are already stored in token_id; there are no separate contract_address / token_mint_address columns on this view.
Why token_id exists
Each chain identifies a token differently: EVM uses a contract address, Solana a mint address, Aptos an asset type, Sui a coin type, and XRPL and Stellar their own asset identifiers. This table normalizes all of those into a single VARCHAR token_id. Join on (blockchain, token_id) and one query works across all 20 chains — that key resolves every row in balances, transfers, and supply.
Table schema
token_standard here uses coarse namespaces. The transfers table uses finer-grained values (bep20, spl_token, spl_token_2022, classic, soroban, issued), so do not join the two tables on token_standard — use (blockchain, token_id).
balance_semantics = 'indexed' identifies rebasing or indexed-share tokens. The curated balances table applies the correct semantics for each token.
Asset class and issuer
This table is an identity registry, not a classification table. It does not carry asset_class or issuer. Those live in tokens_reference_data (token grain) and product_reference_data (product grain). Join tokens_reference_data on (blockchain, token_id) whenever you need to slice by asset class or attribute activity to an issuer.
Example query
Resolve holder balances to the registry: