Skip to main content

Overview

How we recognize ERC-20

We treat a contract as ERC-20 when it implements the EIP-20 Token Standard. Detection requires that the contract exposes and returns valid results for the three mandatory EIP-20 functions: totalSupply(), balanceOf(address), and allowance(address, address). We call these at the block where the contract is first seen and only add the address to this catalog if all three calls succeed and return decodable data. The optional EIP-20 metadata — name(), symbol(), and decimals() — are read when present and stored in the table; they may be null for tokens that do not implement them.

Columns

ColumnTypeDescription
chain_idBIGINTEVM chain identifier; see Chain.
contract_addressBYTEAAddress of the ERC-20 token contract (20 bytes).
block_numberBIGINTBlock of the log we attribute as the genesis/recognition point.
block_timeTIMESTAMPTZUTC timestamp of the block.
tx_indexINTEGERTransaction index within the block.
nameTEXTToken name from name() (optional in EIP-20).
symbolTEXTToken symbol from symbol() (optional in EIP-20).
decimalsSMALLINTDecimals from decimals() (optional in EIP-20; e.g. 8 = divide by 10^8).
_tracing_idBYTEATracing ID of this ERC-20 token record.
_parent_tracing_idsBYTEA[]Tracing IDs of the parent records leading to this ERC-20 token record.
_created_atTIMESTAMPTZRecord creation timestamp.
_updated_atTIMESTAMPTZRecord last update timestamp.

Use Cases

  • Token registry to normalize joins for swaps, transfers, pools, and prices
  • Amount scaling via decimals for analytics, PnL, and model features
  • App backends: display names/symbols and validate token addresses

Token Transfers

ERC-20 transfer events for these tokens.

Liquidity Pools

Pools where these tokens are paired.

ERC-721 Tokens

NFT token registry for cross-standard analysis.
Last modified on March 21, 2026