Привет, я Майк Куйкендалл — более 20 лет работаю инженером-программистом, бывший старший сержант ВВС США, отец двоих детей, а теперь человек, стоящий за Delta Zero Labs (@_MikeKuykendall в X).
Годами я жил RPC-жизнью. Хотите получить все ERC20-переводы для кошелька кита с 2020 года? Запустите скрипт, который циклически вызывает eth_getLogs с диапазонами в 10 000 блоков, обрабатывайте лимиты запросов, повторяйте попытки при ошибках 429, разбивайте на страницы, удаляйте дубликаты, самостоятельно декодируйте ABI, где-то храните... и повторяйте всё снова для DEX-свопов, тиков оракулов, ликвидаций.
Один проект выходного дня превратился в счёт от Alchemy на $400 в месяц и архивную ноду на 14 ТБ, съедающую мой SSD. Я поклялся, что должен быть лучший способ.
И он есть.
Я создал (и теперь продаю) промышленные, полностью декодированные наборы данных Parquet от генезиса до текущего блока для основной сети Ethereum, BSC и Sepolia. Одна загрузка. Один файл (или чистый разделённый набор). Ноль RPC навсегда. Запрашивайте 7,77 миллиарда событий BSC или 334 миллиона событий Sepolia за секунды на своём ноутбуке с DuckDB или Polars.
Это не очередной индексатор или подграф. Это данные на цепочке, которые вы бы извлекли сами — но уже готовые, декодированные, классифицированные по signal_type, сжатые и готовые к вечному владению.
В этом посте я даю вам именно то пошаговое руководство, которое мне самому хотелось бы иметь два года назад. К концу вы будете точно знать, как:
Давайте вместе покончим с RPC-налогом.
Быстрая проверка реальности (вы уже это знаете, но давайте количественно оценим боль):
Мне это надоело. Поэтому я написал движок извлечения с нулевыми RPC (находящееся на патентовании объединённое семантическое выполнение — FSE). Он считывает необработанные данные на цепочке один раз, декодирует каждое событие в чистые столбцы, помечает его signal_type и выгружает прямо в Parquet.
Результат? Наборы данных такие как:
Всё предоставляется в формате Parquet. Столбчатый формат, невероятно сжатый (в 5–10 раз меньше, чем CSV), готовый к предикатному проталкиванию, работает с любым современным инструментом обработки данных.
Каждая строка — это одно декодированное событие. Вот основные столбцы, которые вы будете использовать каждый день (полная спецификация из 19 столбцов в документации к загрузке):
Одна строка = одна кристально чистая запись, готовая к анализу. Больше никакого декодирования ABI в вашем коде.
Перейдите к официальному образцу:
https://huggingface.co/datasets/MikeKuykendall/ethereum-signals-sample
Или зеркало Kaggle: https://www.kaggle.com/datasets/mikekuykendall/ethereum-onchain-signals
Загрузите файл Parquet (~5–10 МБ, 10 000 стратифицированных строк, охватывающих каждый signal_type).
Я рекомендую DuckDB — он творит чудеса для этого.
pip install duckdb pandas pyarrow
# или просто brew install duckdb на Mac
Откройте блокнот Jupyter или просто CLI DuckDB.
Python + Pandas (для небольшого исследования)
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 (здесь происходит волшебство — нулевая память для огромных файлов)
-- Запустите DuckDB
duckdb
-- Присоедините образец
SELECT * FROM read_parquet('ethereum_signals_sample.parquet') LIMIT 10;
"Сколько ERC20-переводов сделал этот адрес?"
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';
"Топ-10 токенов по количеству переводов в 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 января 2024
AND timestamp < 1735689600 -- 1 января 2025
GROUP BY contract_address
ORDER BY tx_count DESC
LIMIT 10;
"Все свопы Uniswap V3 для конкретного пула с ценовым воздействием"
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 для ETH/USD с течением времени" (идеально для бэктестинга)
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;
Профессиональный совет: DuckDB также может читать разделённые папки:
SQL
SELECT COUNT(*) FROM read_parquet('mainnet_parquets/*.parquet');
Он автоматически использует предикатное проталкивание — фильтрация по block_number или signal_type пропускает 99% данных на цепочке на диске. Вы будете запрашивать миллиарды строк быстрее, чем большинство людей могут прокрутить Twitter.
Примечание о хранении: Полный набор BSC большой, но сжимаемый и отлично работает на машине с 64 ГБ оперативной памяти. Для более крупных рабочих процессов просто разверните дешёвый сервер Hetzner со 128 ГБ оперативной памяти, и DuckDB всё равно превзойдёт облачные хранилища по стоимости.
Один покупатель сказал мне: "Я отменил свой RPC-план на $1 200 в месяц в тот же день, когда получил набор данных".
ПодходСтоимостьСкорость для 3-летней историиОбслуживаниеВладениеСырые RPC-циклы$200–2 000/месЧасы–дниПостоянноеВы пересобираетеПодграфы/The GraphБесплатно–платноБыстро, но неполноРиск провайдераНетСамостоятельное извлечение CryoВаше время + нодаДни на извлечениеПостоянноеДаDelta Zero ParquetРазово $999+СекундыНольНавсегда
Первые 1 000 покупателей на mainnet/BSC получают скидку 25% с кодом EARLY25 при оформлении заказа.
Вопросы? Напишите мне в X @_MikeKuykendall или присоединяйтесь к каналу Telegram, ссылка на который есть на сайте. Я отвечаю на каждый вопрос — это компания, принадлежащая ветерану и управляемая одним человеком, и мне действительно важно, чтобы вы выиграли с этими данными.
Прекратите платить за данные, которые должны быть вашими.
Загрузите образец. Запустите запросы. Затем больше никогда не вызывайте eth_getLogs.
Увидимся он-чейн (офлайн).
— Майк Куйкендалл Delta Zero Labs P.S. Скоро выйдет следующая цепочка. Хотите ранний доступ + пользовательские типы сигналов? Напишите мне.
I Ditched RPC Hell for Good: Your Complete Genesis-to-Tip Parquet Handbook for Lightning-Fast… был первоначально опубликован в Coinmonks на Medium, где люди продолжают разговор, выделяя эту историю и отвечая на неё.


