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

What

This table contains raw event logs emitted by smart contracts during transaction execution. Each row represents a single event with its topics and data. Events are the primary mechanism for smart contracts to communicate state changes and must be explicitly emitted in contract code. It contains a column for the blockchain the event 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 raw blockchain events before decoding
  • Filtering events by signature (topic_0) for specific event types
  • Analyzing contract activity patterns and event frequencies
  • Building custom event decoders for unsupported contracts
  • Monitoring specific addresses via indexed parameters

Important Relationships

  • Join with evm.ez_decoded_event_logs: Use tx_hash, event_index, and blockchain for simplified decoded data
  • Join with evm.fact_transactions: Use tx_hash and blockchain for transaction context
  • Join with evm.dim_contracts: Use contract_address and blockchain for contract metadata

Commonly-used Fields

  • topic_0: Event signature hash for filtering event types
  • contract_address: Smart contract that emitted the event
  • topics: Array of indexed parameters (max 4)
  • data: Hex-encoded non-indexed parameters
  • event_index: Sequential position within transaction
  • tx_hash: Transaction containing this event

Sample queries

-- Find all ERC-20 Transfer events in last 24 hours
SELECT 
    block_timestamp,
    tx_hash,
    contract_address,
    topics[1] AS from_address_padded,
    topics[2] AS to_address_padded,
    data AS amount_hex,
    event_index
FROM crosschain.evm.fact_event_logs
WHERE topic_0 = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
    AND ARRAY_SIZE(topics) = 3  -- ERC-20 has 3 topics
    AND block_timestamp >= CURRENT_DATE - 1
LIMIT 100;

-- Most active contracts by event count
SELECT 
    contract_address,
    COUNT(*) AS event_count,
    COUNT(DISTINCT tx_hash) AS unique_txs,
    COUNT(DISTINCT topic_0) AS unique_event_types,
    MIN(block_timestamp) AS first_seen,
    MAX(block_timestamp) AS last_seen
FROM crosschain.evm.fact_event_logs
WHERE block_timestamp >= CURRENT_DATE - 7
GROUP BY 1
ORDER BY 2 DESC
LIMIT 50;

-- Event patterns within transactions
SELECT 
    tx_hash,
    COUNT(*) AS events_in_tx,
    COUNT(DISTINCT contract_address) AS contracts_touched,
    ARRAY_AGG(DISTINCT topic_0) AS event_signatures
FROM crosschain.evm.fact_event_logs
WHERE block_timestamp >= CURRENT_DATE - 1
GROUP BY 1
HAVING COUNT(*) > 10
ORDER BY 2 DESC
LIMIT 20;

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:
CONTRACT_ADDRESSTEXTSmart contract address that emitted this event or received the transaction. Key Points: Always the immediate event emitter for logs May differ from transaction to_address Lowercase normalized format Never NULL for valid events
TOPICSVARIANTArray containing all indexed parameters of the event. Example: [‘0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef’, ‘0x0000000000000000000000001234567890123456789012345678901234567890’]
TOPIC_0TEXTEvent signature hash - keccak256 of the event declaration. Example: ‘0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef’
TOPIC_1TEXTFirst indexed parameter of the event (if exists). Example: ‘0x0000000000000000000000001234567890123456789012345678901234567890’
TOPIC_2TEXTSecond indexed parameter of the event (if exists). Example: ‘0x000000000000000000000000abcdefabcdefabcdefabcdefabcdefabcdefabcd’
DATATEXTHex-encoded non-indexed event parameters. Example: ‘0x0000000000000000000000000000000000000000000000000de0b6b3a7640000’
EVENT_REMOVEDBOOLEANBoolean flag indicating if the event was removed due to chain reorganization. Example: false
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.
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
TX_SUCCEEDEDBOOLEANBoolean indicator of transaction success. Values: TRUE: Transaction executed successfully FALSE: Transaction failed/reverted
FACT_EVENT_LOGS_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: