Skip to main content
The catalog is a set of BigQuery tables. These docs describe every one of them, and every page follows the same shape. This page explains the organization, the table names, the parts of a page and the marks on it.

Organization

The catalog is one set of tables, presented three ways.
BandWhat it is
Core entitiesThe model of the system and the actors in it: Projects, Chains, Assets, Tokens and Accounts. Every table in the catalog is keyed to one or more of these. A project runs apps on chains and issues assets; an asset is deployed as tokens; tokens move between accounts. Each entity section holds the registry of those actors, the events they take part in, and their daily numbers.
Market verticalsA cross-chain slice into one market: Stablecoins, Tokenized assets, DEX, Perpetuals, Lending, Bridges and the rest. A market is the entity tables with one filter applied, so its pages point back at the tables the entities own.
Chain verticalsOne chain’s slice across every market: its raw blocks and transactions, then every entity and market layer with data on that chain. Each chain page lists the layers the chain carries and the date each one starts.

Dataset types

Every catalog table lives in one of five datasets, and the dataset says what kind of table it is. Each kind has its own icon in the sidebar.
Dimensions are the registry. A dimension is the metadata of every thing of one kind, one row per thing: its name, its identifiers and its classifications. dimensions.assets is every asset, dimensions.chains every chain, dimensions.dex_pools every trading pool. Nothing on a dimension row changes from day to day. Every other table joins a dimension on its id. The Registry page of each section documents them.

Assets ▸ Registry

Asset names, where each is issued, and what each one tracks.

Projects ▸ Registry

Project and app names, market sectors, and who runs what.

DEX ▸ Registry

Pool identity, the fee it charges, its tokens, and who runs it.

Table names

A table name is dataset.table. The dataset says what kind of table it is. The table part is built from the same words in every dataset: the things it holds, plural, and for facts and metrics what about them. Things are plural in a table name and singular in the identifier column that joins them: facts.lending_market_deposits carries lending_market_id, which joins dimensions.lending_markets.
dimensions.<things>: the things, plural. One row per thing.
TableReads as
dimensions.assetsThe registry of assets.
dimensions.asset_tokensThe registry of asset tokens: one asset on one chain.
dimensions.dex_poolsThe registry of DEX pools.
dimensions.lending_marketsThe registry of lending markets.
dimensions.metricsThe registry of measures: the unit and combination rule of every one.

Page kinds

Every page is one of eight kinds. Each kind has a fixed flow of parts, top to bottom.
The first page of a section.
PartWhat it holds
IntroWhat the entity or the market is, in a few sentences.
PagesOne card per page in the section.

Stablecoins ▸ Overview

Every stablecoin: supply, holders, transfers and off-peg, across every chain.

Projects ▸ Overview

Protocols, the apps they run, and financial metrics at four levels.

Chain verticals ▸ Overview

Everything the catalog holds for one chain, family by family.

Marks

MarkMeaning
In progressA tag beside a page title, a banner at the top of a page, or bold text on a card. The table is documented ahead of serving: the page is its spec, and there is no table to query until it lands.
SinceA date in a chain page’s Layers table: the earliest day that layer holds for the chain.
Warning boxThe table is large and split by day. The box names the column to bound. A query with no bound reads the whole table, and the whole table is billed to you.
Your BQ Project IDThe field at the right end of the top bar. Write your project id there and the browser keeps it. Every sample query on every page rewrites itself to run in your project.

Identifiers

Simple identifiers are lowercase names. Combined identifiers join their parts with dashes.
IdentifierShapeExample
chain_idChain nameethereum
asset_idAsset nameusdc
project_idProject nameuniswap
app_idProject name and versionuniswap-v3
token_id{token_address}-{chain_id}0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48-ethereum
asset_token_id{asset_id}-{token_address}-{chain_id}usdc-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48-ethereum
An asset is one identity across chains and a token is one contract on one chain: USDC is one row in dimensions.assets and one row per chain in dimensions.asset_tokens. EVM addresses are stored lowercase: wrap an address copied from a block explorer in lower() before matching it. Solana addresses are base58 and case-sensitive: stored and matched verbatim. Accounts covers the address rules.

Numbers

  • An empty cell is not zero. It means no figure exists for that measure, for that thing, on that day.
  • Units live in the metric definition. dimensions.metrics names the unit of every measure: usd, count, ratio or pct. Ratios are fractions: an apy of 0.05 is five percent, and an off_peg of -0.02 is two percent below peg.
  • Every measure is additive, semi-additive or non-additive.
    • Additive: flows, such as Fees or Trading volume. They add up across days and across things: a week is seven days added together, a project is its apps added together.
    • Semi-additive: balances, such as TVL or Supply. They add up across things but not across days: a week’s figure is the last day’s.
    • Non-additive: rates and counts of distinct addresses, such as APY or Active users. They add up neither way.
    Metric definitions holds the class and the rule for every measure.

Running a query

1

Get the share

The catalog arrives in your own Google Cloud project as a BigQuery share, and compute is billed to you. Contact us to arrange it.
2

Write your project id

Type your BigQuery project id into the field at the right end of the top bar. Every sample query on every page carries it.
3

Copy a sample query

Open the page for the table, pick the tab whose bold sentence matches your question, and copy the query.
4

Run it in BigQuery

Paste the query into the BigQuery console and run it. Keep the date bound the query came with, and widen it once the result looks right.