Skip to main content
Schema: crosschain.evm Table: ez_token_transfers Type: View

What

This convenience table provides a comprehensive view of all ERC-20 token transfers with enriched metadata including decimal adjustments, USD values, and token information. It simplifies token flow analysis by joining transfer events with contract details and price data. It contains a column for the blockchain the transfer occurred on, which is an important filter and join key. See evm.dim_chains for a list of all supported EVM chains.

Key Use Cases

  • Tracking token movements and holder activity
  • Analyzing stablecoin flows and volumes
  • Monitoring DEX token inflows and outflows
  • Detecting new token launches and adoption
  • Calculating wallet token balances from transfer history

Important Relationships

  • Join with evm__fact_event_logs: Use tx_hash, event_index, and blockchain for raw event details
  • Join with evm__fact_transactions: Use tx_hash and blockchain for transaction context
  • Join with evm__dim_contracts: Use contract_address and blockchain for token metadata
  • Complement to evm__ez_native_transfers: Complete picture of value flows

Commonly-used Fields

  • contract_address: The token contract address (NOT the recipient)
  • from_address: Token sender address
  • to_address: Token recipient address
  • amount: Decimal-adjusted transfer amount
  • amount_usd: USD value at time of transfer
  • symbol: Token symbol (e.g., USDC, DAI)
  • raw_amount: Original amount without decimal adjustment
  • blockchain: The blockchain the transfer occurred on

Sample queries

Top Token Transfers by USD Value
SELECT 
    block_timestamp,
    tx_hash,
    symbol,
    from_address,
    to_address,
    amount,
    amount_usd,
    token_price,
    contract_address
FROM crosschain.evm.ez_token_transfers
WHERE block_timestamp >= CURRENT_DATE - 7
    AND amount_usd > 100000  -- Over $100k
    AND blockchain = 'ethereum'
ORDER BY amount_usd DESC
LIMIT 100;
Daily Stablecoin Volume Analysis
SELECT 
    DATE_TRUNC('day', block_timestamp) AS day,
    symbol,
    COUNT(*) AS transfer_count,
    COUNT(DISTINCT from_address) AS unique_senders,
    SUM(amount) AS total_amount,
    SUM(amount_usd) AS total_usd,
    AVG(amount_usd) AS avg_transfer_usd
FROM crosschain.evm.ez_token_transfers
WHERE symbol IN ('USDC', 'USDT', 'DAI', 'BUSD')
    AND block_timestamp >= CURRENT_DATE - 30
    AND blockchain = 'ethereum'
GROUP BY 1, 2
ORDER BY 1 DESC, 6 DESC;
DEX Token Flow Analysis
WITH dex_addresses AS (
    SELECT address 
    FROM crosschain.core.dim_labels 
    WHERE label_type = 'dex' 
    AND label_subtype IN ('pool', 'router')
)
SELECT 
    DATE_TRUNC('hour', block_timestamp) AS hour,
    symbol,
    CASE 
        WHEN from_address IN (SELECT address FROM dex_addresses) THEN 'DEX Outflow'
        WHEN to_address IN (SELECT address FROM dex_addresses) THEN 'DEX Inflow'
    END AS flow_type,
    COUNT(*) AS transfers,
    SUM(amount) AS total_amount,
    SUM(amount_usd) AS total_usd
FROM crosschain.evm.ez_token_transfers
WHERE block_timestamp >= CURRENT_DATE - 1
    AND blockchain = 'ethereum'
    AND (from_address IN (SELECT address FROM dex_addresses)
         OR to_address IN (SELECT address FROM dex_addresses))
    AND symbol IS NOT NULL
GROUP BY 1, 2, 3
ORDER BY 1 DESC, 6 DESC;
Token Holder Activity
-- Most active token senders
SELECT 
    from_address,
    COUNT(DISTINCT contract_address) AS tokens_sent,
    COUNT(DISTINCT DATE(block_timestamp)) AS active_days,
    COUNT(*) AS total_transfers,
    SUM(amount_usd) AS total_usd_sent
FROM crosschain.evm.ez_token_transfers
WHERE block_timestamp >= CURRENT_DATE - 30
    AND blockchain = 'ethereum'
    AND amount_usd > 10  -- Filter dust
GROUP BY 1
HAVING COUNT(*) > 10
ORDER BY total_usd_sent DESC
LIMIT 100;
New Token Detection
WITH first_transfers AS (
    SELECT 
        contract_address,
        symbol,
        MIN(block_timestamp) AS first_transfer,
        COUNT(*) AS transfer_count,
        COUNT(DISTINCT from_address) AS unique_senders,
        COUNT(DISTINCT to_address) AS unique_receivers
    FROM crosschain.evm.ez_token_transfers
WHERE block_timestamp >= CURRENT_DATE - 7
    AND blockchain = 'ethereum'
GROUP BY 1, 2
HAVING MIN(block_timestamp) >= CURRENT_DATE - 1
)
SELECT 
    ft.*,
    dc.name AS token_name,
    dc.decimals
FROM first_transfers ft
LEFT JOIN crosschain.evm.dim_contracts dc ON ft.contract_address = dc.address
ORDER BY transfer_count DESC;

Columns

Column NameData TypeDescription
BLOCKCHAINTEXTThe blockchain the record occurred on. See evm.dim_chains for a list of all EVM chains. Format: VARCHAR Example: ‘ethereum’ Usage: Filtering by blockchain Joining across tables Analyzing chain-specific patterns
BLOCK_NUMBERNUMBERSequential counter representing the position of a block in the blockchain since genesis (block 0). Key Facts: Immutable once finalized Primary ordering mechanism for blockchain data Increments by 1 for each new block Used as a proxy for time in many analyses Usage in Queries: Important: Block numbers are chain-specific. Block 15000000 on Ethereum ≠ block 15000000 on Polygon.
BLOCK_TIMESTAMPTIMESTAMP_NTZUTC timestamp when the block was produced by validators/miners. Format: TIMESTAMP_NTZ (no timezone) Precision: Second-level accuracy Reliability: Set by block producer Can have minor variations (±15 seconds) Always increasing (newer blocks = later timestamps) Best Practices: Note: Use for time-series analysis, but be aware that block production rates vary by chain.
TX_HASHTEXTUnique 66-character identifier for the transaction. Format: 0x + 64 hexadecimal characters Usage: Primary key for transaction lookups Join key for traces, logs, and token transfers Immutable once confirmed Example: 0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060
TX_POSITIONNUMBERZero-indexed position of transaction within its block. Insights: Position 0: First transaction in block MEV bots often target early positions Bundle transactions appear consecutively Useful for analyzing transaction ordering
EVENT_INDEXNUMBERZero-based sequential position of the event within a transaction’s execution. Key Facts: Starts at 0 for first event Increments across all contracts in transaction Preserves execution order Essential for deterministic event ordering Usage Example:
FROM_ADDRESSTEXTThe from address for the token transfer. This may or may not be the same as the originfromaddress. Example: ‘0x1234567890123456789012345678901234567890’
TO_ADDRESSTEXTThe to address for the token transfer. This may or may not be the same as the origintoaddress. Example: ‘0xabcdefabcdefabcdefabcdefabcdefabcdefabcd’
CONTRACT_ADDRESSTEXTThe contract address for the token transfer. Example: ‘0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48’
TOKEN_STANDARDTEXTThe token standard for the transfer, in this case always erc20. Example: ‘erc20’
TOKEN_IS_VERIFIEDBOOLEANBoolean flag indicating if the token is verified by the Flipside team. Example: true
NAMETEXTHuman-readable contract name from the name() function. Example: ‘USD Coin’
SYMBOLTEXTToken/contract symbol from the symbol() function. Example: ‘USDC’
DECIMALSNUMBERNumber of decimal places for token amounts, read directly from the contract code. Example: 6
RAW_AMOUNTFLOATOriginal token amount without decimal adjustment. Example: 1000500000
AMOUNTFLOATDecimal-adjusted token amount for human-readable values. Example: 1000.50
AMOUNT_USDFLOATUSD value of the token transfer at transaction time. Example: 1000.50
ORIGIN_FUNCTION_SIGNATURETEXTFunction signature (first 4 bytes) of the called method. Format: 0x + 8 hex characters Common Signatures: 0xa9059cbb: transfer(address,uint256) 0x095ea7b3: approve(address,uint256) 0x23b872dd: transferFrom(address,address,uint256) Note: NULL for simple transfers or invalid calls
ORIGIN_FROM_ADDRESSTEXTThe externally-owned account (EOA) or contract address that initiated the transaction. Key Points: Always 42 characters (0x + 40 hex chars) Lowercase normalized in all tables Cannot be NULL for valid transactions For contract creation: sender of creation transaction Common Patterns: EOA → EOA: Simple transfer EOA → Contract: User interaction Contract → Contract: Internal calls (see evm_facttraces) Known addresses: Exchange hot wallets, protocol deployers Query Examples:
ORIGIN_TO_ADDRESSTEXTThe destination address for the transaction - either an EOA or contract address. Special Cases: NULL: Contract creation transaction Contract address: Interacting with smart contract EOA address: Simple transfer or receiving funds Important Patterns: Note: For token transfers, this is the token contract, not the recipient. See evm_eztoken_transfers tables for recipient.
EZ_TOKEN_TRANSFERS_IDTEXTPrimary key - unique identifier for each row ensuring data integrity. Format: Usually VARCHAR containing composite key generated using MD5 hash of the relevant columns. Example: MD5(blocknumber, txhash, trace_index) Usage: Deduplication in incremental loads Join operations for data quality checks Troubleshooting specific records Important: Implementation varies by table - check table-specific documentation.
INSERTED_TIMESTAMPTIMESTAMP_NTZUTC timestamp when the record was first added to the Flipside database. Format: TIMESTAMP_NTZ Use Cases: Data freshness monitoring Incremental processing markers Debugging data pipeline issues SLA tracking Query Example:
MODIFIED_TIMESTAMPTIMESTAMP_NTZUTC timestamp of the most recent update to this record. Format: TIMESTAMP_NTZ Triggers for Updates: Data corrections Enrichment additions Reprocessing for accuracy Schema migrations Monitoring Usage: