Oguz Karabulut

On-chain data engineering. I build the whole path rather than querying someone else's index — raw logs off RPC nodes, decoded into BigQuery, priced hourly, published as static dashboards. Currently Uniswap v3 and v4 on Robinhood Chain.

ingestion · warehouse · price feed · dashboards
358M
logs ingested
313M
swaps decoded
1,181
tokens priced hourly
$0.06
warehouse cost / day

Dashboards

live · static JSON

Uniswap volume by pool ROBINHOOD · V3
Settled USD volume per pool from decoded swap logs and an hourly price feed. $28.5B across 78M swaps in 1,261 pools. One leg valued per swap, never both.
Liquidity and LP returns IN PROGRESS
Depth, active liquidity, and fee APR against impermanent loss — at $100, $1k and $1m of position size.

Notes

things the data said

A v4 swap event is not evidence that value moved DRAFT
v4 settles the net per currency per transaction. A mint-swap-burn cycle logs the full notional and settles nothing — one token showed $34.3B in a single day from four addresses.
22.7% of this chain's Uniswap-shaped logs aren't Uniswap DRAFT
Four v3 forks emit byte-identical events. Filtering by event signature alone mixes them into every figure.
A price feed that reports its own confidence DRAFT
Hourly medians for 1,181 tokens, each row carrying the swap count behind it. $78,118 on 92 swaps/hr is a price; $357,137 on 3 is not.

Stack

python · bigquery · sql

Ingestion in Python across several RPC providers at once, block-range sharded, with per-day correctness checks against a second provider before anything is loaded.

BigQuery, partitioned by day and clustered on the columns queries actually filter, with a partition filter required on every raw table so a careless query is rejected at $0 rather than scanning a terabyte.

Transforms are incremental and keyed, so a re-run replaces rather than duplicates, and every window is fenced so it cannot touch history it wasn't asked to look at. Every query is dry-run and priced before it spends.

Aggregates export to static JSON on object storage, so the warehouse is never in the request path.