嘿,我是 Mike Kuykendall — 拥有 20 多年软件工程师经验,前美国空军参谋军士,两个孩子的父亲,现在是 Delta Zero Labs 背后的那个人(@_MikeKuykendall 在 X 上)。
多年来我一直过着 RPC 生活。想要自 2020 年以来某个巨鲸钱包的所有 ERC20 转账?启动一个循环 eth_getLogs 的脚本,使用 10,000 区块范围,处理速率限制,在 429 错误时重试,分页,去重,自己解码 ABI,存储在某处……然后为 DEX 交换、预言机价格、清算重复这个过程。
一个周末项目变成了每月 $400 的 Alchemy 账单和一个吞噬我 SSD 的 14 TB 归档节点。我发誓一定有更好的方法。
确实有。
我构建(现在出售)生产级、完全解码、从创世区块到最新区块的 Parquet 数据集,涵盖以太坊主网、BSC 和 Sepolia。一次下载。一个文件(或清晰分区的集合)。永远零 RPC。使用 DuckDB 或 Polars 在你的笔记本电脑上几秒钟内查询 77.7 亿条 BSC 事件或 3.34 亿条 Sepolia 事件。
这不是另一个索引器或子图。这是你本该自己提取的数据 — 但已经完成、解码、按 signal_type 分类、压缩,并准备好永久拥有。
在这篇文章中,我将提供我两年前希望得到的详细指导。到最后,你将确切地知道如何:
让我们一起消除 RPC 税。
快速现实检查(你已经知道这些,但让我们量化一下痛苦):
我厌倦了。所以我编写了一个零 RPC 提取引擎(专利待批的融合语义执行 — FSE)。它一次性读取原始链数据,将每个事件解码为清晰的列,用 signal_type 标记它,并直接转储到 Parquet。
结果?数据集如下:
全部以 Parquet 格式交付。列式存储,极度压缩(比 CSV 小 5–10 倍),支持谓词下推,适用于所有现代数据工具。
每一行都是一个解码的事件。以下是你每天都会使用的核心列(完整的 19 列规范在下载文档中):
一行 = 一个清晰明了、可供分析的记录。你的代码中再也不需要 ABI 解码。
前往官方样本:
https://huggingface.co/datasets/MikeKuykendall/ethereum-signals-sample
或 Kaggle 镜像:https://www.kaggle.com/datasets/mikekuykendall/ethereum-onchain-signals
下载 Parquet 文件(约 5–10 MB,10,000 个分层行,涵盖每个 signal_type)。
我推荐 DuckDB — 它对此非常神奇。
pip install duckdb pandas pyarrow
# 或在 Mac 上直接 brew install duckdb
打开 Jupyter notebook 或直接使用 DuckDB CLI。
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';
"2024 年按转账次数排名前 10 的代币"
SQL
SELECT contract_address,
COUNT(*) as tx_count
FROM read_parquet('your_full_dataset.parquet')
WHERE signal_type = 'ERC20_Transfer'
AND timestamp >= 1704067200 -- 2024 年 1 月 1 日
AND timestamp < 1735689600 -- 2025 年 1 月 1 日
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;
"随时间推移的 ETH/USD Chainlink 价格变动"(非常适合回测)
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 GB RAM 机器上运行良好。对于更大的工作流程,只需启动一个便宜的 Hetzner 服务器,配备 128 GB RAM,DuckDB 在成本上仍然完胜云数据仓库。
一位买家告诉我:"数据集到达的当天我就取消了每月 $1,200 的 RPC 计划。"
方法成本3年历史数据速度维护所有权原始 RPC 循环$200–2000/月数小时–数天持续的你重建子图/The Graph免费–付费快速但不完整提供商风险否Cryo 自提取你的时间 + 节点提取需数天持续的是Delta Zero Parquet一次性 $999+秒零永久
前 1,000 名购买主网/BSC 的买家在结账时使用代码 EARLY25 可享受 25% 折扣。
有问题?在 X 上私信我 @_MikeKuykendall 或加入网站上链接的 Telegram 频道。我会回答每一个问题 — 这是一个退伍军人拥有的独立运营,我真的关心你能用数据取得成功。
停止为本该属于你的数据支付租金。
下载样本。运行查询。然后再也不要调用另一个 eth_getLogs。
链上见(离线)。
— Mike Kuykendall Delta Zero Labs P.S. 下一个链的发布即将到来。想要早期访问 + 自定义信号类型?私信我。
I Ditched RPC Hell for Good: Your Complete Genesis-to-Tip Parquet Handbook for Lightning-Fast… 最初发布在 Medium 的 Coinmonks 上,人们在那里通过突出显示和回应这个故事来继续讨论。


