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

Examples

Ready-to-use queries for common blockchain analysis tasks.

Top ERC-20 Transfers by Volume

SELECT
  contract_address,
  COUNT(*) AS transfer_count,
  COUNT(DISTINCT args->>'from') AS unique_senders
FROM ethereum.events
WHERE event_name = 'Transfer'
  AND block_timestamp >= NOW() - INTERVAL '1 day'
GROUP BY contract_address
ORDER BY transfer_count DESC
LIMIT 10;

Uniswap V3 Swaps

SELECT
  block_timestamp,
  tx_hash,
  args->>'sender' AS sender,
  args->>'recipient' AS recipient,
  args->>'amount0' AS amount0,
  args->>'amount1' AS amount1
FROM ethereum.events
WHERE event_name = 'Swap'
  AND contract_address = '0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640'
  AND block_timestamp >= NOW() - INTERVAL '1 hour'
ORDER BY block_timestamp DESC;

Daily Active Contracts

SELECT
  DATE_TRUNC('day', block_timestamp) AS day,
  COUNT(DISTINCT contract_address) AS active_contracts
FROM ethereum.events
WHERE block_timestamp >= NOW() - INTERVAL '30 days'
GROUP BY day
ORDER BY day;

Failed Transactions for a Contract

SELECT
  tx_hash,
  from_address,
  gas_used,
  block_timestamp
FROM ethereum.transactions
WHERE to_address = '0xdAC17F958D2ee523a2206206994597C13D831ec7'
  AND status = 0
  AND block_timestamp >= NOW() - INTERVAL '7 days'
ORDER BY block_timestamp DESC
LIMIT 50;

API Example (Python)

import requests

API_KEY = "your_api_key"
URL = "http://localhost:3000/api/v1/query"

query = """
SELECT event_name, COUNT(*) as total
FROM ethereum.events
WHERE block_number BETWEEN 19800000 AND 19800100
GROUP BY event_name
ORDER BY total DESC
"""

resp = requests.post(URL, json={"query": query}, headers={
    "Authorization": f"Bearer {API_KEY}"
})

for row in resp.json()["data"]:
    print(f"{row['event_name']}: {row['total']}")

API Example (JavaScript)

const API_KEY = "your_api_key";

const res = await fetch("http://localhost:3000/api/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    query: `SELECT * FROM ethereum.events
            WHERE event_name = 'Transfer'
            LIMIT 5`,
  }),
});

const { data } = await res.json();
console.table(data);