हे, मैं माइक कुयकेंडल हूं — 20+ वर्षों का सॉफ्टवेयर इंजीनियर, पूर्व USAF स्टाफ सार्जेंट, दो बच्चों का पिता, और अब Delta Zero Labs (@_MikeKuykendall on X) के पीछे का व्यक्ति।
वर्षों तक मैं RPC जीवन जीता रहा। 2020 से व्हेल वॉलेट के लिए हर ERC20 ट्रांसफर चाहिए? 10,000-ब्लॉक रेंज के साथ eth_getLogs को लूप करने वाली स्क्रिप्ट चालू करें, दर सीमाओं को संभालें, 429s पर पुनः प्रयास करें, पेजिनेट करें, डीडुप करें, ABI को स्वयं डिकोड करें, इसे कहीं स्टोर करें... DEX स्वैप, ओरेकल टिक्स, लिक्विडेशन के लिए दोहराएं।
एक सप्ताहांत प्रोजेक्ट $400/माह Alchemy बिल और 14 TB आर्काइव नोड में बदल गया जो मेरी SSD खा रहा था। मैंने कसम खाई कि बेहतर तरीका होना चाहिए।
है।
मैंने प्रोडक्शन-ग्रेड, पूरी तरह से डिकोड किए गए, genesis-to-tip Parquet डेटासेट बनाए (और अब बेचता हूं) Ethereum मेननेट, BSC, और Sepolia के लिए। एक डाउनलोड। एक फ़ाइल (या स्वच्छ विभाजित सेट)। हमेशा के लिए शून्य RPCs। अपने लैपटॉप पर DuckDB या Polars के साथ सेकंड में 7.77 बिलियन BSC इवेंट्स या 334 मिलियन Sepolia इवेंट्स क्वेरी करें।
यह कोई अन्य इंडेक्सर या सबग्राफ नहीं है। यह वह डेटा है जो आपने स्वयं निकाला होता — लेकिन पहले से ही किया गया, डिकोड किया गया, signal_type द्वारा वर्गीकृत, संपीड़ित, और हमेशा के लिए अपना लेने के लिए तैयार।
इस पोस्ट में मैं आपको वह सटीक हैंड-होल्डिंग वॉकथ्रू दे रहा हूं जो मुझे दो साल पहले चाहिए थी। अंत तक आपको ठीक-ठीक पता होगा कि कैसे:
आइए एक साथ RPC टैक्स को मारें।
त्वरित वास्तविकता जांच (आप पहले से ही यह जानते हैं, लेकिन आइए दर्द को मात्रात्मक बनाएं):
मैं इससे थक गया। इसलिए मैंने एक शून्य-RPC निष्कर्षण इंजन लिखा (पेटेंट-लंबित Fused Semantic Execution — 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
# 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';
"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 -- 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;
"समय के साथ 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 मशीन पर ठीक चलता है। बड़े वर्कफ़्लो के लिए बस 128 GB RAM के साथ एक सस्ता Hetzner बॉक्स स्पिन करें और DuckDB अभी भी लागत पर क्लाउड वेयरहाउस को धुआं देता है।
एक खरीदार ने मुझे बताया: "मैंने डेटासेट लैंड करने के उसी दिन अपना $1,200/माह RPC प्लान रद्द कर दिया।"
दृष्टिकोणलागत3वर्ष इतिहास के लिए गतिरखरखाव स्वामित्वकच्चे RPC लूप्स$200–2000/मोघंटे–दिनस्थिरआप पुनर्निर्माणSubgraphs/The Graphमुफ्त–भुगतानतेज़ लेकिन अधूराप्रदाता जोखिमनहींCryo सेल्फ-एक्सट्रैक्टआपका समय + नोडनिकालने के लिए दिनजारीहाँDelta Zero Parquetएक बार $999+सेकंडशून्यहमेशा के लिए
mainnet/BSC पर पहले 1,000 खरीदारों को चेकआउट पर कोड EARLY25 के साथ 25% छूट मिलती है।
प्रश्न? X पर मुझे DM करें @_MikeKuykendall या साइट पर लिंक किए गए Telegram चैनल में शामिल हों। मैं हर एक का उत्तर देता हूं — यह एक वेटरन-स्वामित्व वाला एकल ऑपरेशन है और मुझे वास्तव में परवाह है कि आप डेटा के साथ जीतें।
डेटा के लिए किराया देना बंद करें जो आपका होना चाहिए।
सैम्पल डाउनलोड करें। क्वेरी चलाएं। फिर कभी दूसरा eth_getLogs कॉल न करें।
ऑन-चेन (ऑफ़लाइन) पर मिलते हैं।
— Mike Kuykendall Delta Zero Labs P.S. अगला चेन ड्रॉप जल्द ही आ रहा है। प्रारंभिक पहुंच + कस्टम सिग्नल प्रकार चाहिए? मुझे DM करें।
I Ditched RPC Hell for Good: Your Complete Genesis-to-Tip Parquet Handbook for Lightning-Fast… मूल रूप से Medium पर Coinmonks में प्रकाशित हुआ था, जहाँ लोग इस कहानी को हाइलाइट और प्रतिक्रिया देकर बातचीत जारी रख रहे हैं।
