Chào, tôi là Mike Kuykendall — hơn 20 năm làm kỹ sư phần mềm, cựu Trung sĩ USAF, bố của hai đứa con, và hiện là người đứng sau Delta Zero Labs (@_MikeKuykendall trên X).
Trong nhiều năm tôi đã sống cuộc đời RPC. Muốn mọi giao dịch ERC20 chuyển cho ví cá voi từ 2020? Khởi động script lặp eth_getLogs với phạm vi 10,000 block, xử lý giới hạn tỷ lệ, thử lại khi gặp 429, phân trang, loại bỏ trùng lặp, tự giải mã ABI, lưu trữ ở đâu đó… lặp lại cho swap DEX, tích oracle, thanh lý.
Một dự án cuối tuần biến thành hóa đơn Alchemy 400 USD/tháng và một archive node 14 TB ăn hết SSD của tôi. Tôi thề phải có cách tốt hơn.
Và đã có.
Tôi đã xây dựng (và hiện đang bán) bộ dữ liệu Parquet cấp production, được giải mã hoàn toàn, từ genesis đến tip cho Ethereum mainnet, BSC và Sepolia. Một lần tải xuống. Một file (hoặc bộ được phân vùng sạch sẽ). Zero RPC mãi mãi. Truy vấn 7,77 tỷ sự kiện BSC hoặc 334 triệu sự kiện Sepolia trong vài giây trên laptop của bạn với DuckDB hoặc Polars.
Đây không phải là một indexer hay subgraph khác. Đây là dữ liệu bạn đã có thể tự trích xuất — nhưng đã hoàn thành, được giải mã, phân loại theo signal_type, nén và sẵn sàng sở hữu mãi mãi.
Trong bài viết này, tôi sẽ cung cấp cho bạn hướng dẫn chi tiết từng bước mà tôi ước mình đã có hai năm trước. Cuối cùng bạn sẽ biết chính xác cách:
Hãy cùng loại bỏ thuế RPC.
Kiểm tra thực tế nhanh (bạn đã biết điều này, nhưng hãy lượng hóa nỗi đau):
Tôi đã chán. Vì vậy tôi đã viết một công cụ trích xuất zero-RPC (Fused Semantic Execution đang chờ cấp bằng sáng chế — FSE). Nó đọc dữ liệu chuỗi thô một lần, giải mã mọi sự kiện thành các cột sạch, gắn thẻ bằng signal_type và dump trực tiếp vào Parquet.
Kết quả? Các bộ dữ liệu như:
Tất cả được cung cấp dưới dạng Parquet. Theo cột, nén cực mạnh (nhỏ hơn 5–10× so với CSV), sẵn sàng predicate pushdown, hoạt động với mọi công cụ dữ liệu hiện đại.
Mỗi hàng là một sự kiện đã giải mã. Đây là các cột cốt lõi bạn sẽ sử dụng mỗi ngày (thông số đầy đủ 19 cột trong tài liệu tải xuống):
Một hàng = một bản ghi rõ ràng, sẵn sàng phân tích. Không cần giải mã ABI trong code của bạn nữa.
Truy cập mẫu chính thức:
https://huggingface.co/datasets/MikeKuykendall/ethereum-signals-sample
Hoặc mirror Kaggle: https://www.kaggle.com/datasets/mikekuykendall/ethereum-onchain-signals
Tải xuống file Parquet (~5–10 MB, 10,000 hàng phân tầng bao gồm mọi signal_type).
Tôi khuyên dùng DuckDB — nó kỳ diệu cho việc này.
pip install duckdb pandas pyarrow
# hoặc chỉ brew install duckdb trên Mac
Mở Jupyter notebook hoặc chỉ DuckDB CLI.
Python + Pandas (cho khám phá nhỏ)
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 (đây là nơi phép màu xảy ra — zero memory cho file lớn)
-- Launch DuckDB
duckdb
-- Attach the sample
SELECT * FROM read_parquet('ethereum_signals_sample.parquet') LIMIT 10;
"Địa chỉ này đã thực hiện bao nhiêu giao dịch chuyển 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';
"Top 10 token theo số lượng chuyển trong 2024"
SQL
SELECT contract_address,
COUNT(*) as tx_count
FROM read_parquet('your_full_dataset.parquet')
WHERE signal_type = 'ERC20_Transfer'
AND timestamp >= 1704067200 -- Jan 1 2024
AND timestamp < 1735689600 -- Jan 1 2025
GROUP BY contract_address
ORDER BY tx_count DESC
LIMIT 10;
"Tất cả swap Uniswap V3 cho một pool cụ thể, với tác động giá"
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;
"Các tick giá Chainlink cho ETH/USD theo thời gian" (hoàn hảo cho 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;
Mẹo Pro: DuckDB có thể đọc các thư mục được phân vùng nữa:
SQL
SELECT COUNT(*) FROM read_parquet('mainnet_parquets/*.parquet');
Nó tự động sử dụng predicate pushdown — lọc trên block_number hoặc signal_type bỏ qua 99% dữ liệu trên đĩa. Bạn sẽ truy vấn hàng tỷ hàng nhanh hơn hầu hết mọi người có thể cuộn Twitter.
Lưu ý lưu trữ: Bộ BSC đầy đủ lớn nhưng có thể nén và chạy tốt trên máy RAM 64 GB. Đối với quy trình làm việc lớn hơn, chỉ cần khởi động một box Hetzner rẻ với RAM 128 GB và DuckDB vẫn vượt trội hơn cloud warehouse về chi phí.
Một người mua nói với tôi: "Tôi đã hủy gói RPC 1,200 USD/tháng cùng ngày bộ dữ liệu đến."
Phương PhápChi PhíTốc Độ Cho Lịch Sử 3 NămBảo TrìSở HữuVòng lặp RPC thô200–2000 USD/thángHàng giờ–hàng ngàyLiên tụcBạn xây dựng lạiSubgraphs/The GraphMiễn phí–trả phíNhanh nhưng không đầy đủRủi ro nhà cung cấpKhôngTự trích xuất CryoThời gian của bạn + nodeHàng ngày để trích xuấtLiên tụcCóDelta Zero ParquetMột lần 999 USD+Vài giâyZeroMãi mãi
1,000 người mua đầu tiên trên mainnet/BSC được giảm 25% với mã EARLY25 khi thanh toán.
Có câu hỏi? DM tôi trên X @_MikeKuykendall hoặc tham gia kênh Telegram được liên kết trên trang web. Tôi trả lời từng câu hỏi — đây là hoạt động solo thuộc sở hữu cựu chiến binh và tôi thực sự quan tâm đến việc bạn thắng với dữ liệu.
Ngừng trả tiền thuê cho dữ liệu mà lẽ ra là của bạn.
Tải xuống mẫu. Chạy truy vấn. Sau đó không bao giờ gọi eth_getLogs khác nữa.
Hẹn gặp bạn on-chain (offline).
— Mike Kuykendall Delta Zero Labs P.S. Lần drop chuỗi tiếp theo sắp ra mắt. Muốn truy cập sớm + loại tín hiệu tùy chỉnh? DM tôi.
I Ditched RPC Hell for Good: Your Complete Genesis-to-Tip Parquet Handbook for Lightning-Fast… đã được xuất bản ban đầu trên Coinmonks trên Medium, nơi mọi người đang tiếp tục cuộc trò chuyện bằng cách làm nổi bật và phản hồi câu chuyện này.


