Olá, sou Mike Kuykendall — mais de 20 anos como engenheiro de software, ex-Sargento da USAF, pai de dois filhos e agora o responsável pela Delta Zero Labs (@_MikeKuykendall no X).
Durante anos vivi a vida de RPC. Quer todas as transferências ERC20 de uma carteira whale desde 2020? Ative um script que faz loops de eth_getLogs com intervalos de 10.000 blocos, lide com limites de taxa, tente novamente em 429s, pagine, elimine duplicatas, descodifique o ABI você mesmo, armazene em algum lugar… repita o processo para trocas DEX, ticks de oráculos, liquidações.
Um projeto de fim de semana transformou-se numa conta de $400/mês da Alchemy e num nó de arquivo de 14 TB a consumir o meu SSD. Jurei que tinha de haver uma forma melhor.
Existe.
Construí (e agora vendo) conjuntos de dados Parquet de nível de produção, totalmente descodificados, genesis-to-tip para Ethereum mainnet, BSC e Sepolia. Um download. Um ficheiro (ou conjunto particionado limpo). Zero RPCs para sempre. Consulte 7,77 mil milhões de eventos BSC ou 334 milhões de eventos Sepolia em segundos no seu laptop com DuckDB ou Polars.
Isto não é mais um indexador ou subgrafo. Estes são os dados on-chain que você próprio teria extraído — mas já feitos, descodificados, classificados por signal_type, comprimidos e prontos para possuir para sempre.
Nesta publicação estou a dar-lhe o passo a passo exato que gostaria de ter tido há dois anos. No final saberá exatamente como:
Vamos acabar com o imposto de RPC juntos.
Verificação rápida da realidade (já sabe isto, mas vamos quantificar a dor):
Cansei-me disso. Então escrevi um motor de extração zero-RPC (Fused Semantic Execution pendente de patente — FSE). Lê dados on-chain brutos uma vez, descodifica cada evento em colunas limpas, marca-o com signal_type e despeja diretamente no Parquet.
Resultado? Conjuntos de dados como:
Tudo entregue como Parquet. Colunar, incrivelmente comprimido (5-10× menor que CSV), pronto para predicate pushdown, funciona com todas as ferramentas de dados modernas.
Cada linha é um evento descodificado. Aqui estão as colunas principais que usará todos os dias (especificação completa de 19 colunas está nos documentos de download):
Uma linha = um registo cristalino, pronto para análise. Nunca mais terá de descodificar ABI no seu código.
Aceda à amostra oficial:
https://huggingface.co/datasets/MikeKuykendall/ethereum-signals-sample
Ou espelho Kaggle: https://www.kaggle.com/datasets/mikekuykendall/ethereum-onchain-signals
Descarregue o ficheiro Parquet (~5–10 MB, 10.000 linhas estratificadas cobrindo todos os signal_type).
Recomendo DuckDB — é mágico para isto.
pip install duckdb pandas pyarrow
# ou apenas brew install duckdb no Mac
Abra um notebook Jupyter ou apenas o DuckDB CLI.
Python + Pandas (para pequena exploração)
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 (aqui é onde a magia acontece — zero memória para ficheiros enormes)
-- Iniciar DuckDB
duckdb
-- Anexar a amostra
SELECT * FROM read_parquet('ethereum_signals_sample.parquet') LIMIT 10;
"Quantas transferências ERC20 este endereço fez?"
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 contagem de transferências em 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 jan. de 2024
AND timestamp < 1735689600 -- 1 de jan. de 2025
GROUP BY contract_address
ORDER BY tx_count DESC
LIMIT 10;
"Todas as trocas Uniswap V3 para um pool específico, com impacto de preço"
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 preço Chainlink para ETH/USD ao longo do tempo" (perfeito 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;
Dica profissional: DuckDB também pode ler pastas particionadas:
SQL
SELECT COUNT(*) FROM read_parquet('mainnet_parquets/*.parquet');
Usa automaticamente predicate pushdown — filtrar por block_number ou signal_type ignora 99% dos dados no disco. Consultará milhares de milhões de linhas mais rapidamente do que a maioria das pessoas consegue fazer scroll no Twitter.
Nota de armazenamento: O conjunto completo de BSC é grande mas comprimível e funciona bem numa máquina com 64 GB de RAM. Para fluxos de trabalho maiores, basta criar uma caixa Hetzner barata com 128 GB de RAM e o DuckDB ainda supera os armazéns na nuvem em custo.
Um comprador disse-me: "Cancelei o meu plano de RPC de $1.200/mês no mesmo dia em que o conjunto de dados chegou."
AbordagemCustoVelocidade para Histórico de 3 anosManutenção PropriedadeLoops RPC brutos$200–2000/mêsHoras–diasConstanteVocê reconstrói Subgrafos/The GraphGrátis–pagoRápido mas incompletoRisco do fornecedorNãoCryo auto-extraçãoSeu tempo + nóDias para extrairContínuaSimDelta Zero ParquetÚnico $999+SegundosZeroPara sempre
Os primeiros 1.000 compradores na mainnet/BSC obtêm 25% de desconto com o código EARLY25 no checkout.
Perguntas? Envie-me DM no X @_MikeKuykendall ou junte-se ao canal Telegram ligado no site. Respondo a todas — esta é uma operação solo detida por veterano e realmente importo-me que vença com os dados.
Deixe de pagar renda por dados que deveriam ser seus.
Descarregue a amostra. Execute as consultas. Depois nunca mais chame outro eth_getLogs.
Vemo-nos on-chain (offline).
— Mike Kuykendall Delta Zero Labs P.S. O próximo lançamento de chain está para breve. Quer acesso antecipado + tipos de sinal personalizados? Envie-me DM.
I Ditched RPC Hell for Good: Your Complete Genesis-to-Tip Parquet Handbook for Lightning-Fast… foi originalmente publicado em Coinmonks no Medium, onde as pessoas continuam a conversa destacando e respondendo a esta história.

