Organization
The catalog is one set of tables, presented three ways.| Band | What it is |
|---|---|
| Core entities | The 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 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 datasets, and the dataset says what kind of table it is. Each kind has its own icon in the sidebar.- Dimensions
- Facts
- Metrics
- Screeners
- 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. 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
- Facts
- Metrics
- Screeners
- 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 eight kinds. Each kind has a fixed flow of parts, top to bottom.- Overview
- Registry
- Facts
- Metrics
- Functions
- Worked view
- Chain overview
- Chain layer
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 four levels.
Chain verticals ▸ Overview
Everything the catalog holds for one chain, family by family.
Marks
| Mark | Meaning |
|---|---|
| In progress | A 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. |
| 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.
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.