Skip to main content
Schema: somnia.defi Table: ez_lending_flashloans Type: View

What

This table captures flash loan transactions across lending protocols. Flash loans enable borrowing without collateral within a single transaction, provided the loan plus fees are repaid before transaction completion. This advanced DeFi primitive is primarily used for arbitrage, collateral swapping, and liquidations.

Key Use Cases

  • Analyzing arbitrage and MEV activity patterns
  • Tracking flash loan volume and fee revenue
  • Identifying power users and bot activity
  • Monitoring large-scale DeFi operations
  • Understanding cross-protocol composability

Important Relationships

  • Often precedes transactions in DEX tables for arbitrage analysis
  • Links to ez_lending_liquidations for liquidation strategies
  • May connect to multiple protocols within single transaction
  • References price.ez_prices_hourly for USD valuations

Commonly-used Fields

  • initiator: Address that triggered the flash loan
  • platform: Lending protocol providing the loan
  • flashloan_token/flashloan_token_symbol: Borrowed asset
  • flashloan_amount/flashloan_amount_usd: Loan size
  • premium_amount/premium_amount_usd: Fee paid

Sample queries

-- Daily flash loan volume and fees
SELECT 
    DATE_TRUNC('day', block_timestamp) AS date,
    platform,
    COUNT(*) AS flashloan_count,
    SUM(flashloan_amount_usd) AS total_volume_usd,
    SUM(premium_amount_usd) AS total_fees_usd,
    AVG(premium_amount_usd / NULLIF(flashloan_amount_usd, 0) * 100) AS avg_fee_rate_pct
FROM <blockchain_name>.defi.ez_lending_flashloans
WHERE block_timestamp >= CURRENT_DATE - 30
    AND flashloan_amount_usd IS NOT NULL
GROUP BY 1, 2
ORDER BY 1 DESC, 4 DESC;

-- Most flash loaned assets
SELECT 
    flashloan_token_symbol,
    flashloan_token,
    COUNT(*) AS loan_count,
    SUM(flashloan_amount) AS total_amount,
    SUM(flashloan_amount_usd) AS total_volume_usd,
    AVG(flashloan_amount_usd) AS avg_loan_size_usd,
    SUM(premium_amount_usd) AS total_fees_collected
FROM <blockchain_name>.defi.ez_lending_flashloans
WHERE block_timestamp >= CURRENT_DATE - 7
    AND flashloan_token_symbol IS NOT NULL
GROUP BY 1, 2
ORDER BY 5 DESC
LIMIT 20;

-- Flash loan user analysis
WITH flashloan_users AS (
    SELECT 
        initiator,
        COUNT(*) AS flashloan_count,
        COUNT(DISTINCT DATE_TRUNC('day', block_timestamp)) AS active_days,
        COUNT(DISTINCT platform) AS protocols_used,
        SUM(flashloan_amount_usd) AS total_borrowed_usd,
        SUM(premium_amount_usd) AS total_fees_paid_usd
    FROM <blockchain_name>.defi.ez_lending_flashloans
    WHERE block_timestamp >= CURRENT_DATE - 30
        AND flashloan_amount_usd IS NOT NULL
    GROUP BY 1
)
SELECT 
    CASE 
        WHEN flashloan_count = 1 THEN 'One-time User'
        WHEN flashloan_count <= 10 THEN 'Occasional User'
        WHEN flashloan_count <= 100 THEN 'Regular User'
        ELSE 'Power User'
    END AS user_category,
    COUNT(*) AS user_count,
    SUM(total_borrowed_usd) AS category_volume_usd,
    AVG(total_fees_paid_usd) AS avg_fees_per_user
FROM flashloan_users
GROUP BY 1
ORDER BY 3 DESC;

-- Large flash loans (potential arbitrage/liquidations)
SELECT 
    block_timestamp,
    tx_hash,
    platform,
    initiator,
    target,
    flashloan_token_symbol,
    flashloan_amount_usd,
    premium_amount_usd,
    premium_amount_usd / NULLIF(flashloan_amount_usd, 0) * 100 AS fee_rate_pct
FROM <blockchain_name>.defi.ez_lending_flashloans
WHERE flashloan_amount_usd > 1000000
    AND block_timestamp >= CURRENT_DATE - 1
ORDER BY flashloan_amount_usd DESC;

-- Wallet-specific flash loan analysis
SELECT 
    initiator,
    platform,
    flashloan_token_symbol,
    COUNT(*) AS flashloan_count,
    SUM(flashloan_amount_usd) AS total_borrowed_usd,
    SUM(premium_amount_usd) AS total_fees_paid_usd,
    AVG(premium_amount_usd / NULLIF(flashloan_amount_usd, 0) * 100) AS avg_fee_rate_pct,
    MIN(block_timestamp) AS first_flashloan,
    MAX(block_timestamp) AS last_flashloan,
    COUNT(DISTINCT DATE_TRUNC('day', block_timestamp)) AS active_days
FROM <blockchain_name>.defi.ez_lending_flashloans
WHERE initiator = LOWER('<wallet_address>')
    AND block_timestamp >= CURRENT_DATE - 30
    AND flashloan_amount_usd IS NOT NULL
GROUP BY 1, 2, 3
ORDER BY total_borrowed_usd DESC;

Columns

Column NameData TypeDescription
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
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
EVENT_NAMETEXTThe event name as defined in the contract’s ABI. Format: PascalCase event identifier Examples: Transfer - Token transfers Swap - DEX trades OwnershipTransferred - Admin changes Approval - Token approvals Usage Pattern:
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:
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 fact_traces) 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 eztokentransfers tables for recipient.
PLATFORMTEXTThe lending protocol where the transaction occurred. Example: ‘aave’
INITIATORTEXTThe address that triggered the flash loan execution. Example: ‘0x7a250d5630b4cf539739df2c5dacb4c659f2488d’
TARGETTEXTThe contract address that receives and executes the flash loan logic. Example: ‘0x1111111254fb6c44bac0bed2854e76f90643097d’
PROTOCOL_MARKETTEXTThe lending protocol’s receipt token issued to depositors. Example: ‘0xfedcbafedcbafedcbafedcbafedcbafedcbafed’
TOKEN_ADDRESSTEXTTOKEN_ADDRESS column
TOKEN_SYMBOLTEXTTOKEN_SYMBOL column
FLASHLOAN_TOKENTEXTThe contract address of the token borrowed in the flash loan. Example: ‘0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2’ This column will be deprecated October 13th, please update to token_address.
FLASHLOAN_TOKEN_SYMBOLTEXTThe symbol of the token borrowed in the flash loan. Example: ‘WETH’ This column will be deprecated October 13th, please update to token_symbol.
FLASHLOAN_AMOUNT_UNADJNUMBERThe raw amount of tokens borrowed without decimal adjustment. Example: 1000000000000000000
FLASHLOAN_AMOUNTFLOATThe decimal-adjusted amount of tokens borrowed in the flash loan. Example: 1.0
FLASHLOAN_AMOUNT_USDFLOATThe USD value of assets borrowed in a flash loan. Example: 1000000.50
PREMIUM_AMOUNT_UNADJNUMBERThe raw fee amount charged for the flash loan. Example: 900000000000000
PREMIUM_AMOUNTFLOATThe decimal-adjusted fee paid for the flash loan. Example: 0.0009
PREMIUM_AMOUNT_USDFLOATThe USD value of the flash loan fee. Example: 0.90
EZ_LENDING_FLASHLOANS_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: