Organization
The catalog is one set of tables, presented four ways.| Band | What it is |
|---|---|
| Core entities | The model of the system and the actors in it. A project runs apps on chains and issues assets; an asset is deployed as tokens; tokens move between accounts. Every table in the catalog is keyed to one or more of those actors. Each entity section holds their registry, the events they take part in, and their daily numbers. |
| Core datasets | A dataset that belongs to no single market and no single chain: Financial statements, Prices, Agentic payments, Yields, Token transfers, Account labels and P&L. Each one answers a question on its own terms, so its shape follows the question rather than the house pattern. The entity keys still join: every row carries a project_id, asset_id, token_id or account address. |
| Market verticals | A 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 verticals | One 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 kinds of dataset, and the dataset name says what kind of table it is. Each kind has its own icon in the sidebar.- Dimensions
- Facts
- Metrics
- Reports
- Functions
- Raw chain
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 isdataset.table. The dataset says what kind of table it is, and for facts and metrics it also says which things the table is about. Things are plural in a table name and singular in the identifier column that joins them: facts_lending_markets.deposits carries lending_market_id, which joins dimensions.lending_markets.
- Dimensions
- Facts
- Metrics
- Reports
- Functions
- Raw chain
dimensions.<things>: the things, plural. One row per thing.| Table | Reads as |
|---|---|
dimensions.assets | The registry of assets. |
dimensions.asset_tokens | The registry of asset tokens: one asset on one chain. |
dimensions.dex_pools | The registry of DEX pools. |
dimensions.lending_markets | The registry of lending markets. |
dimensions.metrics | The registry of measures: the unit and combination rule of every one. |
Page kinds
Every page is one of the kinds below. Each kind has a fixed flow of parts, top to bottom.- Overview
- Registry
- Facts
- Metrics
- Functions
- Worked view
- Chain overview
- Chain layer
- Archived roster
The first page of a section.
| Part | What it holds |
|---|---|
| Intro | What the entity or the market is, in a few sentences. |
| Pages | One 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 every level.
EVM ecosystem ▸ Overview
Standardized blocks, transactions, logs and traces for every EVM chain.
Marks
| Mark | Meaning |
|---|---|
| In progress | A Soon 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 the table lands behind it. |
| Since | A date in a chain page’s Layers table: the earliest day that layer holds for the chain. |
| Warning box | The 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 ID | The 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.| Identifier | Shape | Example |
|---|---|---|
chain_id | Chain name | ethereum |
asset_id | Asset name | usdc |
project_id | Project name | uniswap |
app_id | Project name and version | uniswap-v3 |
token_id | {token_address}-{chain_id} | 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48-ethereum |
asset_token_id | {asset_id}-{token_address}-{chain_id} | usdc-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48-ethereum |
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.metricsnames the unit of every measure:usd,count,ratioorpct. Ratios are fractions: anapyof0.05is five percent, and anoff_pegof-0.02is 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.
-
A long table holds one row per measure. Most tables give each measure its own column, one row per thing per day. Financial statements instead carries a
metric_idcolumn and avaluecolumn, so one statement is a set of rows rather than one row. Filter to the line items you want, or pivot them onto one row withmax(if(metric_id = ...)).
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.