سلام، من مایک کایکندال هستم — بیش از ۲۰ سال به عنوان مهندس نرمافزار، گروهبان ارشد سابق نیروی هوایی ایالات متحده، پدر دو فرزند، و اکنون فردی پشت Delta Zero Labs (@_MikeKuykendall در X).
سالها زندگی RPC را تجربه کردم. میخواهید هر انتقال ERC20 برای یک کیف پول نهنگ از سال ۲۰۲۰ را داشته باشید؟ یک اسکریپت راهاندازی کنید که eth_getLogs را با محدودههای ۱۰,۰۰۰ بلوکی حلقه میزند، محدودیتهای نرخ را مدیریت کنید، در 429s دوباره تلاش کنید، صفحهبندی کنید، تکراریها را حذف کنید، ABI را خودتان رمزگشایی کنید، آن را جایی ذخیره کنید... شستشو و تکرار برای معاوضههای DEX، تیکهای اوراکل، لیکوییدیشنها.
یک پروژه آخر هفته به صورتحساب ۴۰۰ دلار در ماه Alchemy و یک نود آرشیو ۱۴ ترابایتی که SSD من را میخورد تبدیل شد. قسم خوردم که باید راه بهتری وجود داشته باشد.
وجود دارد.
من مجموعه دادههای Parquet درجه تولید، کاملاً رمزگشایی شده، از genesis تا tip را برای شبکه اصلی اتریوم، BSC و Sepolia ساختم (و اکنون میفروشم). یک دانلود. یک فایل (یا مجموعه پارتیشنبندی شده تمیز). صفر RPC برای همیشه. ۷.۷۷ میلیارد رویداد BSC یا ۳۳۴ میلیون رویداد Sepolia را در چند ثانیه روی لپتاپ خود با DuckDB یا Polars جستجو کنید.
این یک ایندکسر یا سابگراف دیگر نیست. این دادهای است که خودتان استخراج میکردید — اما از قبل انجام شده، رمزگشایی شده، بر اساس signal_type طبقهبندی شده، فشرده شده، و آماده برای مالکیت برای همیشه.
در این پست، من دقیقاً راهنمای گام به گامی را که آرزو میکردم دو سال پیش داشته باشم به شما میدهم. تا پایان دقیقاً میدانید چگونه:
بیایید با هم مالیات RPC را از بین ببریم.
بررسی سریع واقعیت (شما از قبل این را میدانید، اما بیایید درد را کمی کنیم):
من از آن خسته شدم. بنابراین یک موتور استخراج صفر-RPC نوشتم (Fused Semantic Execution در انتظار ثبت اختراع — FSE). یک بار داده های درون زنجیرهای خام را میخواند، هر رویداد را به ستونهای تمیز رمزگشایی میکند، آن را با signal_type برچسبگذاری میکند، و مستقیماً به Parquet منتقل میکند.
نتیجه؟ مجموعه دادههایی مانند:
همه به صورت Parquet تحویل داده میشوند. ستونی، به طرز دیوانهواری فشرده شده (۵–۱۰× کوچکتر از CSV)، آماده فشار محمول، با هر ابزار داده مدرن کار میکند.
هر ردیف یک رویداد رمزگشایی شده است. در اینجا ستونهای اصلی وجود دارد که هر روز از آنها استفاده خواهید کرد (مشخصات کامل ۱۹ ستونی در اسناد دانلود است):
یک ردیف = یک رکورد کاملاً واضح، آماده تحلیل. دیگر هرگز رمزگشایی ABI در کد شما نیست.
به نمونه رسمی بروید:
https://huggingface.co/datasets/MikeKuykendall/ethereum-signals-sample
یا آینه Kaggle: https://www.kaggle.com/datasets/mikekuykendall/ethereum-onchain-signals
فایل Parquet را دانلود کنید (~۵–۱۰ مگابایت، ۱۰,۰۰۰ ردیف طبقهبندی شده که هر signal_type را پوشش میدهد).
من DuckDB را توصیه میکنم — برای این کار جادویی است.
pip install duckdb pandas pyarrow
# or just brew install duckdb on Mac
یک نوتبوک Jupyter یا فقط 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 (اینجا جایی است که جادو اتفاق میافتد — حافظه صفر برای فایلهای عظیم)
-- Launch DuckDB
duckdb
-- Attach the sample
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';
"۱۰ توکن برتر بر اساس تعداد انتقال در سال ۲۰۲۴"
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;
"همه معاوضههای 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 ۹۹٪ از دادهها را روی دیسک رد میکند. شما میلیاردها ردیف را سریعتر از اینکه بیشتر مردم بتوانند توییتر را اسکرول کنند، جستجو خواهید کرد.
نکته ذخیرهسازی: مجموعه کامل BSC بزرگ است اما قابل فشردهسازی است و روی یک ماشین ۶۴ گیگابایت RAM به خوبی اجرا میشود. برای گردش کارهای بزرگتر فقط یک جعبه ارزان Hetzner با ۱۲۸ گیگابایت RAM راهاندازی کنید و DuckDB هنوز انبارهای ابری را از نظر هزینه شکست میدهد.
یک خریدار به من گفت: "من طرح RPC ۱,۲۰۰ دلار در ماه خود را همان روزی که مجموعه داده فرود آمد لغو کردم."
رویکردهزینهسرعت برای تاریخچه ۳ سالهنگهداریمالکیتحلقههای RPC خام۲۰۰–۲۰۰۰ دلار در ماهساعتها–روزهاثابتشما بازسازی میکنیدسابگرافها/The Graphرایگان–پولیسریع اما ناقصریسک ارائهدهندهخیرCryo self-extractزمان شما + نودروزها برای استخراججاریبلهDelta Zero Parquetیکبار ۹۹۹ دلار+ثانیهصفربرای همیشه
۱,۰۰۰ خریدار اول در mainnet/BSC با کد EARLY25 در پرداخت ۲۵٪ تخفیف دریافت میکنند.
سوالات؟ در X @_MikeKuykendall به من پیام مستقیم بدهید یا به کانال تلگرام متصل شده در سایت بپیوندید. من به هر یک پاسخ میدهم — این یک عملیات تکنفره متعلق به یک جانباز است و من واقعاً اهمیت میدهم که شما با دادهها برنده شوید.
اجاره پرداخت کردن برای دادههایی که باید مال شما باشد را متوقف کنید.
نمونه را دانلود کنید. جستجوها را اجرا کنید. سپس دیگر هرگز eth_getLogs دیگری فراخوانی نکنید.
شما را درون زنجیرهای (آفلاین) میبینم.
— مایک کایکندال Delta Zero Labs پینوشت: افت زنجیره بعدی به زودی میآید. دسترسی زودهنگام + انواع سیگنال سفارشی میخواهید؟ به من پیام مستقیم بدهید.
من برای همیشه از جهنم RPC خلاص شدم: راهنمای کامل Parquet از Genesis تا Tip شما برای… در ابتدا در Coinmonks در Medium منتشر شد، جایی که مردم با برجسته کردن و پاسخ دادن به این داستان به مکالمه ادامه میدهند.


