Hé, ik ben Mike Kuykendall — 20+ jaar als software-engineer, voormalig USAF Staff Sergeant, vader van twee kinderen, en nu de man achter Delta Zero Labs (@_MikeKuykendall op X).
Jarenlang leefde ik het RPC-leven. Wil je elke ERC20-transfer voor een whale-wallet sinds 2020? Start een script dat eth_getLogs loopt met 10.000-block bereiken, handel snelheidslimieten af, probeer opnieuw bij 429's, pagineer, ontdubbel, decodeer de ABI zelf, sla het ergens op… herhaal dit voor DEX-swaps, oracle-ticks, liquidaties.
Eén weekendproject veranderde in een Alchemy-rekening van $400/maand en een 14 TB archiefnode die mijn SSD opat. Ik zwoer dat er een betere manier moest zijn.
Die is er.
Ik heb productiekwaliteit, volledig gedecodeerde, genesis-to-tip Parquet-datasets gebouwd (en verkoop ze nu) voor Ethereum mainnet, BSC en Sepolia. Eén download. Eén bestand (of een schone gepartitioneerde set). Nul RPC's voor altijd. Bevraag 7,77 miljard BSC-events of 334 miljoen Sepolia-events in seconden op je laptop met DuckDB of Polars.
Dit is geen nieuwe indexer of subgraph. Dit is de data die je zelf zou hebben geëxtraheerd — maar al klaar, gedecodeerd, geclassificeerd op signal_type, gecomprimeerd en klaar om voor altijd te bezitten.
In dit bericht geef ik je de exacte stap-voor-stap handleiding die ik twee jaar geleden wilde hebben. Aan het einde weet je precies hoe:
Laten we samen de RPC-belasting doden.
Snelle realiteitscheck (je weet dit al, maar laten we de pijn kwantificeren):
Ik werd het zat. Dus schreef ik een zero-RPC extractie-engine (patent-aangevraagd Fused Semantic Execution — FSE). Het leest ruwe chain-data eenmaal, decodeert elk event naar schone kolommen, taggt het met signal_type en dumpt het rechtstreeks naar Parquet.
Resultaat? Datasets zoals:
Alles geleverd als Parquet. Kolomgericht, waanzinnig gecomprimeerd (5–10× kleiner dan CSV), predicate pushdown klaar, werkt met elk modern data tool.
Elke rij is één gedecodeerd event. Hier zijn de kernkolommen die je elke dag zult gebruiken (volledige 19-kolommen specificatie is in de download docs):
Eén rij = één kristalhelder, analyse-klaar record. Nooit meer ABI-decodering in je code.
Ga naar de officiële sample:
https://huggingface.co/datasets/MikeKuykendall/ethereum-signals-sample
Of Kaggle-mirror: https://www.kaggle.com/datasets/mikekuykendall/ethereum-onchain-signals
Download het Parquet-bestand (~5–10 MB, 10.000 gestratificeerde rijen die elk signal_type dekken).
Ik raad DuckDB aan — het is magisch hiervoor.
pip install duckdb pandas pyarrow
# of gewoon brew install duckdb op Mac
Open een Jupyter-notebook of gewoon de DuckDB-CLI.
Python + Pandas (voor kleine verkenning)
import pandas as pd
df = pd.read_parquet("ethereum_signals_sample.parquet")
print(df.shape) # (10000, 19)
print(df['signal_type'].value_counts())
print(df.head())
DuckDB SQL (hier gebeurt de magie — nul geheugen voor enorme bestanden)
-- Start DuckDB
duckdb
-- Koppel de sample
SELECT * FROM read_parquet('ethereum_signals_sample.parquet') LIMIT 10;
"Hoeveel ERC20-transfers heeft dit adres gedaan?"
SQL
SELECT COUNT(*) as transfers,
SUM(amount) as total_volume
FROM read_parquet('your_full_dataset.parquet')
WHERE from_address = '0x1234...'
OR to_address = '0x1234...'
AND signal_type = 'ERC20_Transfer';
"Top 10 tokens op basis van transferaantal in 2024"
SQL
SELECT contract_address,
COUNT(*) as tx_count
FROM read_parquet('your_full_dataset.parquet')
WHERE signal_type = 'ERC20_Transfer'
AND timestamp >= 1704067200 -- 1 jan 2024
AND timestamp < 1735689600 -- 1 jan 2025
GROUP BY contract_address
ORDER BY tx_count DESC
LIMIT 10;
"Alle Uniswap V3-swaps voor een specifieke pool, met prijsimpact"
SQL
SELECT timestamp,
amount0,
amount1,
sqrtPriceX96,
(amount1::double / NULLIF(amount0,0)) as price_impact
FROM read_parquet('full_dataset.parquet')
WHERE signal_type = 'UniswapV3_Swap'
AND contract_address = '0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640' -- USDC/ETH 0.05%
ORDER BY block_number DESC
LIMIT 1000;
"Chainlink-prijsticks voor ETH/USD in de loop van de tijd" (perfect voor backtesting)
SQL
SELECT
date_trunc('day', to_timestamp(timestamp)) as day,
AVG(price) as avg_eth_price
FROM read_parquet('full_dataset.parquet')
WHERE signal_type = 'Chainlink_PriceUpdate'
AND contract_address = '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419' -- ETH/USD
GROUP BY day
ORDER BY day;
Pro tip: DuckDB kan ook gepartitioneerde mappen lezen:
SQL
SELECT COUNT(*) FROM read_parquet('mainnet_parquets/*.parquet');
Het gebruikt automatisch predicate pushdown — filteren op block_number of signal_type slaat 99% van de data op schijf over. Je bevraagt miljarden rijen sneller dan de meeste mensen Twitter kunnen scrollen.
Opslagopmerking: de BSC volledige set is groot maar comprimeerbaar en draait prima op een 64 GB RAM-machine. Voor grotere workflows draai je gewoon een goedkope Hetzner-box met 128 GB RAM en DuckDB verslaat nog steeds cloud-warehouses op kosten.
Eén koper vertelde me: "Ik heb mijn $1.200/maand RPC-abonnement geannuleerd op dezelfde dag dat de dataset aankwam."
BenaderingKostenSnelheid voor 3 jaar geschiedenisOnderhoudeigendomRuwe RPC-loops$200–2000/maandUren–dagenConstantJe herbouwtSubgraphs/The GraphGratis–betaaldSnel maar onvolledigProvider-risicoNeeCryo zelf-extractieJouw tijd + nodeDagen om te extracterenLopendJaDelta Zero ParquetEenmalig $999+SecondenNulVoor altijd
De eerste 1.000 kopers op mainnet/BSC krijgen 25% korting met code EARLY25 bij het afrekenen.
Vragen? DM me op X @_MikeKuykendall of word lid van het Telegram-kanaal dat op de site is gelinkt. Ik beantwoord elke vraag — dit is een door veteranen geleide solo-operatie en ik geef echt om jouw succes met de data.
Stop met huur betalen voor data die van jou zou moeten zijn.
Download de sample. Voer de queries uit. Roep dan nooit meer een eth_getLogs aan.
Tot ziens on-chain (offline).
— Mike Kuykendall Delta Zero Labs P.S. De volgende chain-drop komt binnenkort. Wil je vroege toegang + aangepaste signaaltypes? DM me.
I Ditched RPC Hell for Good: Your Complete Genesis-to-Tip Parquet Handbook for Lightning-Fast… was oorspronkelijk gepubliceerd in Coinmonks op Medium, waar mensen het gesprek voortzetten door dit verhaal te markeren en erop te reageren.


