Welcome to Bilinear Labs! Query blockchain events with SQL. Get Started.
SQL Reference

SQL Reference

Bilinear Labs supports a subset of standard SQL optimized for blockchain data queries.

SELECT

SELECT block_number, tx_hash, event_name
FROM ethereum.events
WHERE event_name = 'Transfer'
ORDER BY block_number DESC
LIMIT 100;

Filtering

WHERE

SELECT *
FROM ethereum.events
WHERE contract_address = '0xdAC17F958D2ee523a2206206994597C13D831ec7'
  AND block_number > 19000000;

JSON fields

Access decoded event arguments with -> and ->>:

SELECT
  tx_hash,
  args->>'from' AS sender,
  args->>'to' AS receiver,
  CAST(args->>'value' AS NUMERIC) AS amount
FROM ethereum.events
WHERE event_name = 'Transfer'
  AND contract_address = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
LIMIT 50;

Aggregations

SELECT
  event_name,
  COUNT(*) AS total
FROM ethereum.events
WHERE block_number BETWEEN 19800000 AND 19900000
GROUP BY event_name
ORDER BY total DESC
LIMIT 20;

Time-Based Queries

SELECT
  DATE_TRUNC('day', block_timestamp) AS day,
  COUNT(*) AS transfers
FROM ethereum.events
WHERE event_name = 'Transfer'
  AND block_timestamp >= NOW() - INTERVAL '7 days'
GROUP BY day
ORDER BY day;

Joins

SELECT
  e.tx_hash,
  e.event_name,
  t.from_address,
  t.gas_used
FROM ethereum.events e
JOIN ethereum.transactions t ON e.tx_hash = t.tx_hash
WHERE e.event_name = 'Swap'
LIMIT 25;

Supported Functions

Function Description
COUNT, SUM, AVG, MIN, MAX Standard aggregates
DATE_TRUNC(unit, timestamp) Truncate timestamp
NOW() Current timestamp
CAST(expr AS type) Type conversion
COALESCE(a, b) Null handling
LOWER(), UPPER() String functions

Limits

  • Maximum LIMIT: 10,000 rows
  • Query timeout: 30 seconds
  • No INSERT, UPDATE, DELETE — read-only access