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

What

This table contains comprehensive transaction-level data for all supported EVM blockchains. Each row represents a single transaction with its execution details, gas consumption, and value transfers. This is a high-level table for analyzing on-chain activity, user behavior, and protocol interactions across multiple networks. See evm.dim_chains for a list of all supported EVM chains. Note: This is a unified view that combines transaction data from multiple EVM blockchains. Each row includes a blockchain identifier and native_token symbol to distinguish between different networks. The native_token is the gas token used for transaction fees on that specific blockchain.

Key Use Cases

  • Tracking wallet activity and transaction patterns across multiple blockchains
  • Analyzing gas fee trends and optimization opportunities by network
  • Monitoring smart contract interactions and usage on different EVM chains
  • Calculating transaction volumes and network revenue per blockchain
  • Detecting MEV, arbitrage, and trading patterns across networks
  • Cross-chain transaction behavior analysis

Important Relationships

  • Join with evm.fact_blocks: Use block_number and blockchain for block-level context
  • Join with evm.fact_traces: Use tx_hash and blockchain for internal transactions
  • Join with evm.fact_event_logs: Use tx_hash and blockchain for emitted events
  • Join with evm.ez_decoded_event_logs: Use tx_hash and blockchain for human-readable events
  • Join with evm.dim_contracts: Use to_address and blockchain for contract metadata

Commonly-used Fields

  • blockchain: The EVM blockchain network (e.g., ‘ethereum’, ‘polygon’, ‘arbitrum’)
  • native_token: The native token symbol for the blockchain (e.g., ‘ETH’, ‘MATIC’, ‘AVAX’) - this is the gas token
  • tx_hash: Unique transaction identifier
  • from_address: Transaction sender
  • to_address: Transaction recipient
  • value: Native token amount transferred (in the blockchain’s native token)
  • tx_fee: Total transaction fee in native tokens (gas token)
  • block_timestamp: When transaction was included
  • blockchain: The blockchain the transaction occurred on

Sample queries

Daily Transaction Statistics by Blockchain and Type
SELECT 
    DATE_TRUNC('day', block_timestamp) AS day,
    blockchain,
    native_token,
    tx_type,
    COUNT(*) AS tx_count,
    COUNT(DISTINCT from_address) AS unique_senders,
    SUM(tx_fee) AS total_fees_native,
    AVG(tx_fee) AS avg_fee_native,
    SUM(value) AS total_value_transferred
FROM crosschain.evm.fact_transactions
WHERE block_timestamp >= CURRENT_DATE - 30
    AND blockchain = 'ethereum'
GROUP BY 1, 2, 3, 4
ORDER BY 1 DESC, 2, 6 DESC;
High-Value Native Token Transfers Across All Blockchains
SELECT 
    blockchain,
    native_token,
    tx_hash,
    block_timestamp,
    from_address,
    to_address,
    value,
    tx_fee,
    tx_succeeded
FROM crosschain.evm.fact_transactions
WHERE value > 0
    AND tx_succeeded
    AND block_timestamp >= CURRENT_DATE - 7
    AND blockchain = 'ethereum'
ORDER BY value DESC
LIMIT 100;
Smart Contract Interaction Patterns by Network
SELECT 
    blockchain,
    native_token,
    to_address,
    origin_function_signature,
    COUNT(*) AS interaction_count,
    COUNT(DISTINCT from_address) AS unique_users,
    SUM(tx_fee) AS total_fees_paid_native,
    AVG(tx_fee) AS avg_fee_native
FROM crosschain.evm.fact_transactions
WHERE to_address IN (SELECT address FROM crosschain.evm.dim_contracts)
    AND block_timestamp >= CURRENT_DATE - 1
    AND blockchain = 'ethereum'
GROUP BY 1, 2, 3, 4
ORDER BY 5 DESC
LIMIT 50;
Gas Fee Analysis by Blockchain
SELECT 
    blockchain,
    native_token,
    DATE_TRUNC('hour', block_timestamp) AS hour,
    COUNT(*) AS transaction_count,
    AVG(tx_fee) AS avg_fee_native,
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY tx_fee) AS median_fee_native,
    PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY tx_fee) AS p95_fee_native,
    SUM(tx_fee) AS total_fees_native
FROM crosschain.evm.fact_transactions
WHERE block_timestamp >= CURRENT_DATE - 7
    AND tx_succeeded
    AND blockchain = 'ethereum'
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3 DESC;
Cross-Chain Transaction Volume Comparison
SELECT 
    blockchain,
    native_token,
    DATE_TRUNC('day', block_timestamp) AS day,
    COUNT(*) AS daily_transactions,
    COUNT(DISTINCT from_address) AS unique_senders,
    COUNT(DISTINCT to_address) AS unique_recipients,
    SUM(value) AS total_value_transferred_native,
    SUM(tx_fee) AS total_fees_collected_native,
    AVG(value) AS avg_transaction_value_native
FROM crosschain.evm.fact_transactions
WHERE block_timestamp >= CURRENT_DATE - 30
    AND tx_succeeded
    AND blockchain = 'ethereum'
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3 DESC;
Failed Transaction Analysis by Network
SELECT 
    blockchain,
    native_token,
    DATE_TRUNC('day', block_timestamp) AS day,
    COUNT(*) AS failed_transactions,
    COUNT(DISTINCT from_address) AS unique_failed_senders,
    SUM(tx_fee) AS total_fees_lost_native,
    AVG(tx_fee) AS avg_fee_lost_native
FROM crosschain.evm.fact_transactions
WHERE NOT tx_succeeded
    AND block_timestamp >= CURRENT_DATE - 7
    AND blockchain = 'ethereum'
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3 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
NATIVE_TOKENTEXTThe native token symbol for the blockchain. See evm.dim_chains for a list of all EVM chains. Format: VARCHAR Example: ‘ETH’
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
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:
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.
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
VALUEFLOATAmount of native tokens transferred, in token units (not Wei). Key Points: 0 for most contract interactions >0 for native token transfers or payable functions Already converted from Wei (divided by 1e18) Use value_precise for exact amounts Example Query:
VALUE_PRECISE_RAWTEXTString representation of numeric values preserving exact precision without any adjustments. Format: VARCHAR containing numeric string Purpose: Prevents floating-point precision loss due to snowflake limitations Contains: Raw blockchain values (usually in smallest unit) Example Values: “1000000000000000000” = 1 ETH in Wei “50000000” = 50 USDC (6 decimals) Usage:
VALUE_PRECISETEXTString representation of numeric values adjusted for human readability while maintaining precision. Format: VARCHAR containing decimal string Adjustments: Converted from smallest unit to standard unit Purpose: Human-readable values without precision loss Example Values: “1.0” = 1 ETH (converted from Wei) “50.0” = 50 USDC (converted from 6 decimal places) Best Practices:
TX_FEEFLOATTotal fee paid for transaction execution in native token units (the blockchain’s gas token). Example: 0.002
TX_FEE_PRECISETEXTExact transaction fee as string to prevent floating-point precision loss. Example: ‘0.002345678901234567’
GAS_PRICEFLOATPrice per gas unit in Gwei (1 Gwei = 1e-9 native token). Example: 25
GAS_USEDNUMBERActual gas units consumed by transaction execution. Example: 89234
GAS_LIMITNUMBERMaximum gas units the sender is willing to consume for this transaction. Example: 150000
TX_SUCCEEDEDBOOLEANBoolean indicator of transaction success. Values: TRUE: Transaction executed successfully FALSE: Transaction failed/reverted
TX_TYPENUMBERTransaction envelope type (EIP-2718). Example: 2
NONCENUMBERSequential counter of transactions sent by the from_address. Example: 42
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
INPUT_DATATEXTEncoded data sent with the transaction, containing function calls and parameters. Example: ‘0xa9059cbb0000000000000000000000001234567890123456789012345678901234567890’
FACT_TRANSACTIONS_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: