Hola, soy Mike Kuykendall — más de 20 años como ingeniero de software, ex Sargento de Estado Mayor de la USAF, padre de dos hijos, y ahora el tipo detrás de Delta Zero Labs (@_MikeKuykendall en X).
Durante años viví la vida de RPC. ¿Quieres cada transferencia ERC20 de una billetera ballena desde 2020? Inicia un script que recorra eth_getLogs con rangos de 10,000 bloques, maneja límites de tasa, reintenta en 429s, pagina, deduplica, decodifica el ABI tú mismo, guárdalo en algún lugar... enjuaga y repite para intercambios DEX, ticks de oráculo, liquidaciones.
Un proyecto de fin de semana se convirtió en una factura de $400/mes de Alchemy y un nodo de archivo de 14 TB devorando mi SSD. Juré que tenía que haber una mejor manera.
La hay.
Construí (y ahora vendo) conjuntos de datos Parquet de calidad de producción, completamente decodificados, de génesis a punta para la mainnet de Ethereum, BSC y Sepolia. Una descarga. Un archivo (o conjunto particionado limpio). Cero RPCs para siempre. Consulta 7.77 mil millones de eventos de BSC o 334 millones de eventos de Sepolia en segundos en tu laptop con DuckDB o Polars.
Esto no es otro indexador o subgraph. Estos son los datos que habrías extraído tú mismo — pero ya están hechos, decodificados, clasificados por signal_type, comprimidos y listos para poseer para siempre.
En esta publicación te daré el tutorial detallado exacto que desearía haber tenido hace dos años. Al final sabrás precisamente cómo:
Matemos juntos el impuesto de RPC.
Verificación rápida de realidad (ya sabes esto, pero cuantifiquemos el dolor):
Me cansé de eso. Así que escribí un motor de extracción de cero RPC (Fused Semantic Execution pendiente de patente — FSE). Lee los datos en cadena sin procesar una vez, decodifica cada evento en columnas limpias, lo etiqueta con signal_type y lo vuelca directamente a Parquet.
¿Resultado? Conjuntos de datos como:
Todo entregado como Parquet. Columnar, increíblemente comprimido (5-10× más pequeño que CSV), listo para predicate pushdown, funciona con todas las herramientas de datos modernas.
Cada fila es un evento decodificado. Aquí están las columnas principales que usarás todos los días (la especificación completa de 19 columnas está en los documentos de descarga):
Una fila = un registro cristalino, listo para análisis. No más decodificación de ABI en tu código nunca más.
Ve a la muestra oficial:
https://huggingface.co/datasets/MikeKuykendall/ethereum-signals-sample
O espejo de Kaggle: https://www.kaggle.com/datasets/mikekuykendall/ethereum-onchain-signals
Descarga el archivo Parquet (~5-10 MB, 10,000 filas estratificadas cubriendo cada signal_type).
Recomiendo DuckDB — es mágico para esto.
pip install duckdb pandas pyarrow
# o simplemente brew install duckdb en Mac
Abre un notebook de Jupyter o simplemente el CLI de DuckDB.
Python + Pandas (para exploración pequeña)
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 (aquí es donde ocurre la magia — cero memoria para archivos enormes)
-- Launch DuckDB
duckdb
-- Attach the sample
SELECT * FROM read_parquet('ethereum_signals_sample.parquet') LIMIT 10;
"¿Cuántas transferencias ERC20 ha hecho esta dirección?"
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 por cantidad de transferencias en 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 de enero de 2024
AND timestamp < 1735689600 -- 1 de enero de 2025
GROUP BY contract_address
ORDER BY tx_count DESC
LIMIT 10;
"Todos los swaps de Uniswap V3 para un pool específico, con impacto de precio"
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;
"Ticks de precio de Chainlink para ETH/USD a lo largo del tiempo" (perfecto para 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;
Consejo profesional: DuckDB también puede leer carpetas particionadas:
SQL
SELECT COUNT(*) FROM read_parquet('mainnet_parquets/*.parquet');
Automáticamente usa predicate pushdown — filtrar por block_number o signal_type omite el 99% de los datos en el disco. Consultarás miles de millones de filas más rápido de lo que la mayoría de la gente puede desplazarse por Twitter.
Nota de almacenamiento: El conjunto completo de BSC es grande pero comprimible y funciona bien en una máquina con 64 GB de RAM. Para flujos de trabajo más grandes simplemente enciende una caja Hetzner económica con 128 GB de RAM y DuckDB aún supera a los almacenes en la nube en costo.
Un comprador me dijo: "Cancelé mi plan RPC de $1,200/mes el mismo día que llegó el conjunto de datos."
EnfoqueCostoVelocidad para Historial de 3 añosMantenimientoPropiedadBucles RPC sin procesar$200–2000/mesHoras–díasConstanteTú reconstruyesSubgraphs/The GraphGratis–de pagoRápido pero incompletoRiesgo del proveedorNoCryo auto-extractorTu tiempo + nodoDías para extraerContinuoSíDelta Zero ParquetÚnico pago $999+SegundosCeroPara siempre
Los primeros 1,000 compradores en mainnet/BSC obtienen 25% de descuento con el código EARLY25 al pagar.
¿Preguntas? Envíame un DM en X @_MikeKuykendall o únete al canal de Telegram vinculado en el sitio. Respondo a cada una — esta es una operación en solitario propiedad de un veterano y realmente me importa que ganes con los datos.
Deja de pagar renta por datos que deberían ser tuyos.
Descarga la muestra. Ejecuta las consultas. Luego nunca vuelvas a llamar a otro eth_getLogs.
Nos vemos en cadena (fuera de línea).
— Mike Kuykendall Delta Zero Labs P.D. El próximo lanzamiento de chain viene pronto. ¿Quieres acceso anticipado + tipos de señal personalizados? Envíame un DM.
I Ditched RPC Hell for Good: Your Complete Genesis-to-Tip Parquet Handbook for Lightning-Fast… fue publicado originalmente en Coinmonks en Medium, donde las personas continúan la conversación destacando y respondiendo a esta historia.

