Skip to main content
rwa_multichain.balances_enriched extends balances with entity attribution, so you can tell how much of an asset sits with centralized exchanges, lending protocols, and custodians versus unattributed wallets. Grain: one row per holder per token per chain per day, same as balances.

What it answers

Raw balances tell you an address holds 40% of an asset. They do not tell you whether that address is a custodian holding on behalf of thousands of end investors, an exchange omnibus wallet, or a single whale — three very different market-structure readings of the same number. The label columns resolve that:
  • How much of supply sits with CEXs, protocols, or custodians versus unknown wallets
  • Who the labeled top holders are
  • What an asset’s DeFi exposure is, via labeled lending-protocol holdings
  • How much of outstanding supply is circulating versus issuer, bridge, or distributor inventory

Table schema

Holder attribution

Known entities carry their resolved label and category. Other rows are preserved with address_category = 'unidentified'; supported EVM contracts use unidentified_smart_contract. address_category and address_subcategory are non-null, so no COALESCE(..., 'unlabeled') is needed. token_product_id is the exact join key to tokens_reference_data. Do not join the two tables on product_id: one product may have many chain deployments. Tempo smart-contract classification uses tempo.creation_traces. More specific entity and protocol labels retain precedence over the generic unidentified_smart_contract classification.

Table schema notes

Because one row per holder per day is preserved, zero balances persist after a holder exits. Filter balance > 0 when counting holders.

Example query

Labeled top holders for one asset:
CEX-held share of an asset over time: