> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dune.com/llms.txt
> Use this file to discover all available pages before exploring further.

# rwa_multichain.tokens

> Canonical registry of tokenized real-world assets across 23 chains, with a normalized token_id for cross-chain joins.

export const PremiumDatasetAccessCard = ({href = "https://dune.com/enterprise#contact-form", note = null}) => <Card title="Gated dataset" icon="lock" href={href}>
    Querying this dataset requires an entitlement on your workspace. See <a href="/data-catalog/overview#access-tiers-public-vs-gated-datasets">access tiers</a>, or contact the Dune team to enable access.
    {note && <><br /><br />{note}</>}
  </Card>;

`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.

<PremiumDatasetAccessCard />

## Why token\_id exists

Each chain identifies a token differently: EVM-compatible chains use 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 23 chains. That key resolves every row in `balances`, `transfers`, and `supply`.

## Table schema

| Column | Type | Description |
| - | - | - |
| `blockchain` | `VARCHAR` | Chain for the native token identifier |
| `token_standard` | `VARCHAR` | Native token standard or asset namespace. One of `erc20`, `tip20`, `spl`, `aptos_asset`, `sui_coin`, `xrpl_asset`, `stellar_asset` |
| `token_id` | `VARCHAR` | Normalized token identifier for cross-chain joins. Use this as the join key |
| `currency` | `VARCHAR` | Native currency code from the canonical token-list model |
| `balance_semantics` | `VARCHAR` | Balance behavior for the token: `standard` or `indexed` |

<Note>
  `token_standard` here uses coarse namespaces. The `transfers` table uses finer-grained values (`bep20`, `tip20`, `spl_token`, `spl_token_2022`, `classic`, `soroban`, `issued`), so do not join the two tables on `token_standard`. Use `(blockchain, token_id)`.
</Note>

`balance_semantics = 'indexed'` means the holder balance can change without a normal transfer. Those tokens stay in [`tokens`](/data-catalog/curated/rwa/registry/tokens) and [`transfers`](/data-catalog/curated/rwa/activity/transfers). [`balances`](/data-catalog/curated/rwa/holders-supply/balances) includes them only for Backed/xStocks share multipliers and the Ethereum STBT share index (`0x530824da86689c9c17cdc2871ff29b058345b44a`). Other indexed tokens have no holder rows.

## Tempo coverage

Tempo is EVM-compatible, but its tokens use TIP-20. Tempo rows therefore use `token_standard = 'tip20'` and must not be interpreted as ERC-20 deployments.

The canonical Tempo RWA deployments in this registry are:

* BUIDL: `0xb5ff12bd8010baef823d1bfa2ce6bdc0109cbb24`
* BRSRV: `0xe36e2e79beb1b7f618201eead6106a7d737695e3`
* syrupUSDC: `0x20c0000000000000000000008191667423f70e67`

BRSRV is canonical and remains in the registry even when no supply is outstanding.

Two other Tempo deployments are intentionally excluded from RWA coverage. sUSDe (`0x20c000000000000000000000bd95bfb69fbe6ce3`) is excluded because it is classified as a stablecoin and yield-bearing asset; this does not imply that sUSDe is absent from RWA coverage on other chains. The non-canonical syrupUSDC deployment (`0x20c000000000000000000000c4ba4256aa07ce38`) is also excluded. It recorded five historical transfers from 2026-04-28 through 2026-05-01.

## Asset class and issuer

This table is an identity registry, not a classification table. It does not carry product classification or issuer details. Join [`tokens_reference_data`](/data-catalog/curated/rwa/registry/tokens-reference-data) on `(blockchain, token_id)` for the issuer and attached product fields, including `asset_class` and `asset_type`. Use [`product_reference_data`](/data-catalog/curated/rwa/registry/product-reference-data) when you need one row per product instead of one row per token.

## Example query

```sql theme={null}
-- Token coverage by chain and standard
SELECT
  blockchain,
  token_standard,
  COUNT(DISTINCT token_id) AS tokens
FROM rwa_multichain.tokens
GROUP BY 1, 2
ORDER BY 3 DESC
```

**Resolve holder balances to the registry:**

```sql theme={null}
SELECT
  t.blockchain,
  t.token_standard,
  b.token_symbol,
  COUNT(DISTINCT b.address) AS holders
FROM rwa_multichain.balances AS b
INNER JOIN rwa_multichain.tokens AS t
  ON t.blockchain = b.blockchain
  AND t.token_id = b.token_id
WHERE b.day = CURRENT_DATE - INTERVAL '1' DAY
  AND b.balance > 0
GROUP BY 1, 2, 3
ORDER BY 4 DESC
LIMIT 50
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.