SQL के साथ इथेरियम के बुनियादी विषय सीखें
कई इथेरियम ट्यूटोरियल डेवलपर्स को लक्षित करते हैं, लेकिन डेटा विश्लेषकों या उन लोगों के लिए शैक्षिक संसाधनों की कमी है जो क्लाइंट या नोड चलाए बिना ऑनचेन डेटा देखना चाहते हैं।
यह ट्यूटोरियल पाठकों को Dune Analytics (opens in a new tab) द्वारा प्रदान किए गए इंटरफ़ेस के माध्यम से स्ट्रक्चर्ड क्वेरी लैंग्वेज (SQL) के साथ ऑनचेन डेटा को क्वेरी करके लेन-देन, ब्लॉक और गैस सहित इथेरियम की बुनियादी अवधारणाओं को समझने में मदद करता है।
ऑनचेन डेटा हमें इथेरियम, नेटवर्क और कंप्यूटिंग शक्ति के लिए एक अर्थव्यवस्था के रूप में समझने में मदद कर सकता है और आज इथेरियम के सामने आने वाली चुनौतियों (यानी, बढ़ती गैस की कीमतों) और, इससे भी महत्वपूर्ण बात, स्केलिंग समाधानों के आसपास की चर्चाओं को समझने के लिए एक आधार के रूप में काम करना चाहिए।
लेन-देन
इथेरियम पर एक उपयोगकर्ता की यात्रा उपयोगकर्ता-नियंत्रित खाता या ETH बैलेंस वाली इकाई को आरंभ करने के साथ शुरू होती है। दो प्रकार के खाते होते हैं - उपयोगकर्ता-नियंत्रित या एक स्मार्ट अनुबंध (देखें ethereum.org)।
किसी भी खाते को Etherscan (opens in a new tab) या Blockscout (opens in a new tab) जैसे ब्लॉक एक्सप्लोरर पर देखा जा सकता है। ब्लॉक एक्सप्लोरर इथेरियम के डेटा का एक पोर्टल हैं। वे वास्तविक समय में ब्लॉक, लेन-देन, खनिकों, खातों और अन्य ऑनचेन गतिविधि पर डेटा प्रदर्शित करते हैं (यहां देखें)।
हालांकि, एक उपयोगकर्ता बाहरी ब्लॉक एक्सप्लोरर द्वारा प्रदान की गई जानकारी का मिलान करने के लिए सीधे डेटा को क्वेरी करना चाह सकता है। Dune Analytics (opens in a new tab) SQL के कुछ ज्ञान वाले किसी भी व्यक्ति को यह क्षमता प्रदान करता है।
संदर्भ के लिए, एथेरियम फाउंडेशन (EF) के लिए स्मार्ट अनुबंध खाता Blockscout (opens in a new tab) पर देखा जा सकता है।
ध्यान देने वाली एक बात यह है कि EF सहित सभी खातों का एक सार्वजनिक पता होता है जिसका उपयोग लेन-देन भेजने और प्राप्त करने के लिए किया जा सकता है।
Etherscan पर खाते के बैलेंस में नियमित लेन-देन और आंतरिक लेन-देन शामिल होते हैं। आंतरिक लेन-देन, नाम के बावजूद, वास्तविक लेन-देन नहीं हैं जो चेन की स्थिति को बदलते हैं। वे एक अनुबंध को निष्पादित करके शुरू किए गए मूल्य हस्तांतरण हैं (स्रोत (opens in a new tab))। चूंकि आंतरिक लेन-देन में कोई हस्ताक्षर नहीं होता है, इसलिए उन्हें ब्लॉकचेन पर शामिल नहीं किया जाता है और Dune Analytics के साथ क्वेरी नहीं किया जा सकता है।
इसलिए, यह ट्यूटोरियल नियमित लेन-देन पर ध्यान केंद्रित करेगा। इसे इस प्रकार क्वेरी किया जा सकता है:
WITH temp_table AS (
SELECT
hash,
block_number,
block_time,
"from",
"to",
value / 1e18 AS ether,
gas_used,
gas_price / 1e9 AS gas_price_gwei
FROM ethereum."transactions"
WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
ORDER BY block_time DESC
)
SELECT
hash,
block_number,
block_time,
"from",
"to",
ether,
(gas_used * gas_price_gwei) / 1e9 AS txn_fee
FROM temp_table
यह Etherscan के लेन-देन पृष्ठ पर प्रदान की गई जानकारी के समान ही जानकारी देगा। तुलना के लिए, यहां दो स्रोत दिए गए हैं:
Etherscan
Blockscout पर EF का अनुबंध पृष्ठ। (opens in a new tab)
Dune Analytics
आप डैशबोर्ड यहां (opens in a new tab) पा सकते हैं। क्वेरी देखने के लिए तालिका पर क्लिक करें (ऊपर भी देखें)।
लेन-देन का विश्लेषण
सबमिट किए गए लेन-देन में कई प्रकार की जानकारी शामिल होती है, जिनमें शामिल हैं (स्रोत):
- प्राप्तकर्ता (Recipient): प्राप्त करने वाला पता ("to" के रूप में क्वेरी किया गया)
- हस्ताक्षर (Signature): जबकि प्रेषक की निजी कुंजी लेन-देन पर हस्ताक्षर करती है, हम SQL के साथ प्रेषक के सार्वजनिक पते ("from") को क्वेरी कर सकते हैं।
- मूल्य (Value): यह स्थानांतरित किए गए ETH की मात्रा है (
etherकॉलम देखें)। - डेटा (Data): यह मनमाना डेटा है जिसे हैश किया गया है (
dataकॉलम देखें) - गैस सीमा (gasLimit) – गैस इकाइयों की अधिकतम मात्रा जिसका उपभोग लेन-देन द्वारा किया जा सकता है। गैस की इकाइयां कम्प्यूटेशनल चरणों का प्रतिनिधित्व करती हैं
- maxPriorityFeePerGas - खनिक को टिप के रूप में शामिल की जाने वाली गैस की अधिकतम मात्रा
- maxFeePerGas - लेन-देन के लिए भुगतान की जाने वाली गैस की अधिकतम मात्रा (baseFeePerGas और maxPriorityFeePerGas सहित)
हम एथेरियम फाउंडेशन के सार्वजनिक पते पर लेन-देन के लिए इन विशिष्ट जानकारियों को क्वेरी कर सकते हैं:
SELECT
"to",
"from",
value / 1e18 AS ether,
data,
gas_limit,
gas_price / 1e9 AS gas_price_gwei,
gas_used,
ROUND(((gas_used / gas_limit) * 100),2) AS gas_used_pct
FROM ethereum."transactions"
WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
ORDER BY block_time DESC
ब्लॉक
प्रत्येक लेन-देन इथेरियम वर्चुअल मशीन (EVM) की स्थिति को बदल देगा (स्रोत)। लेन-देन को सत्यापित करने और एक ब्लॉक में शामिल करने के लिए नेटवर्क पर प्रसारित किया जाता है। प्रत्येक लेन-देन एक ब्लॉक संख्या से जुड़ा होता है। डेटा देखने के लिए, हम एक विशिष्ट ब्लॉक संख्या को क्वेरी कर सकते हैं: 12396854 (इस लेखन के समय, 11/5/21 तक एथेरियम फाउंडेशन के लेन-देन में सबसे हालिया ब्लॉक)।
इसके अलावा, जब हम अगले दो ब्लॉकों को क्वेरी करते हैं, तो हम देख सकते हैं कि प्रत्येक ब्लॉक में पिछले ब्लॉक का हैश (यानी, पैरेंट हैश) होता है, जो यह दर्शाता है कि ब्लॉकचेन कैसे बनती है।
प्रत्येक ब्लॉक में उसके पैरेंट ब्लॉक का संदर्भ होता है। इसे नीचे hash और parent_hash कॉलम के बीच दिखाया गया है (स्रोत):
Dune Analytics पर क्वेरी (opens in a new tab) यहां दी गई है:
SELECT
time,
number,
hash,
parent_hash,
nonce
FROM ethereum."blocks"
WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 12396856
LIMIT 10
हम समय, ब्लॉक संख्या, कठिनाई, हैश, पैरेंट हैश और नॉन्स को क्वेरी करके एक ब्लॉक की जांच कर सकते हैं।
एकमात्र चीज जो यह क्वेरी कवर नहीं करती है वह है लेन-देन की सूची जिसके लिए नीचे एक अलग क्वेरी की आवश्यकता होती है और स्थिति रूट (state root)। एक पूर्ण या अभिलेखीय नोड सभी लेन-देन और स्थिति संक्रमणों को संग्रहीत करेगा, जिससे क्लाइंट किसी भी समय चेन की स्थिति को क्वेरी कर सकेंगे। क्योंकि इसके लिए बड़े भंडारण स्थान की आवश्यकता होती है, हम चेन डेटा को स्थिति डेटा से अलग कर सकते हैं:
- चेन डेटा (ब्लॉक, लेन-देन की सूची)
- स्थिति डेटा (प्रत्येक लेन-देन के स्थिति संक्रमण का परिणाम)
स्थिति रूट बाद वाले में आता है और निहित (implicit) डेटा है (ऑनचेन संग्रहीत नहीं है), जबकि चेन डेटा स्पष्ट है और चेन पर ही संग्रहीत है (स्रोत (opens in a new tab))।
इस ट्यूटोरियल के लिए, हम ऑनचेन डेटा पर ध्यान केंद्रित करेंगे जिसे Dune Analytics के माध्यम से SQL के साथ क्वेरी किया जा सकता है।
जैसा कि ऊपर बताया गया है, प्रत्येक ब्लॉक में लेन-देन की एक सूची होती है, हम एक विशिष्ट ब्लॉक के लिए फ़िल्टर करके इसे क्वेरी कर सकते हैं। हम सबसे हालिया ब्लॉक, 12396854 का प्रयास करेंगे:
SELECT * FROM ethereum."transactions"
WHERE block_number = 12396854
ORDER BY block_time DESC`
Dune पर SQL आउटपुट यहां दिया गया है:
चेन में जोड़ा जा रहा यह एकल ब्लॉक इथेरियम वर्चुअल मशीन (EVM) की स्थिति को बदल देता है। कभी-कभी दर्जनों, सैकड़ों लेन-देन एक साथ सत्यापित किए जाते हैं। इस विशिष्ट मामले में, 222 लेन-देन शामिल थे।
यह देखने के लिए कि वास्तव में कितने सफल रहे, हम सफल लेन-देन की गणना करने के लिए एक और फ़िल्टर जोड़ेंगे:
WITH temp_table AS (
SELECT * FROM ethereum."transactions"
WHERE block_number = 12396854 AND success = true
ORDER BY block_time DESC
)
SELECT
COUNT(success) AS num_successful_txn
FROM temp_table
ब्लॉक 12396854 के लिए, कुल 222 लेन-देन में से, 204 सफलतापूर्वक सत्यापित किए गए थे:
लेन-देन के अनुरोध प्रति सेकंड दर्जनों बार होते हैं, लेकिन ब्लॉक लगभग हर 15 सेकंड में एक बार कमिट किए जाते हैं (स्रोत)।
यह देखने के लिए कि लगभग हर 15 सेकंड में एक ब्लॉक उत्पन्न होता है, हम प्रति दिन ब्लॉकों की अनुमानित औसत संख्या (~ 5760) प्राप्त करने के लिए एक दिन में सेकंड की संख्या (86400) को 15 से विभाजित कर सकते हैं।
प्रति दिन उत्पन्न होने वाले इथेरियम ब्लॉकों (2016 - वर्तमान) का चार्ट है:
इस समयावधि में प्रतिदिन उत्पन्न होने वाले ब्लॉकों की औसत संख्या ~5,874 है:
क्वेरी हैं:
# query to visualize number of blocks produced daily since 2016
SELECT
DATE_TRUNC('day', time) AS dt,
COUNT(*) AS block_count
FROM ethereum."blocks"
GROUP BY dt
OFFSET 1
# average number of blocks produced per day
WITH temp_table AS (
SELECT
DATE_TRUNC('day', time) AS dt,
COUNT(*) AS block_count
FROM ethereum."blocks"
GROUP BY dt
OFFSET 1
)
SELECT
AVG(block_count) AS avg_block_count
FROM temp_table
2016 के बाद से प्रति दिन उत्पन्न होने वाले ब्लॉकों की औसत संख्या 5,874 पर उस संख्या से थोड़ी अधिक है। वैकल्पिक रूप से, 86400 सेकंड को 5874 औसत ब्लॉकों से विभाजित करने पर 14.7 सेकंड या लगभग हर 15 सेकंड में एक ब्लॉक आता है।
गैस
ब्लॉक आकार में सीमित होते हैं। अधिकतम ब्लॉक आकार गतिशील होता है और नेटवर्क की मांग के अनुसार 12,500,000 और 25,000,000 इकाइयों के बीच भिन्न होता है। डिस्क स्थान और गति आवश्यकताओं के संदर्भ में पूर्ण नोड्स पर दबाव डालने वाले मनमाने ढंग से बड़े ब्लॉक आकारों को रोकने के लिए सीमाओं की आवश्यकता होती है (स्रोत)।
ब्लॉक गैस सीमा की अवधारणा करने का एक तरीका इसे उपलब्ध ब्लॉक स्थान की आपूर्ति के रूप में सोचना है जिसमें लेन-देन को बैच किया जा सकता है। ब्लॉक गैस सीमा को 2016 से वर्तमान दिन तक क्वेरी और विज़ुअलाइज़ किया जा सकता है:
SELECT
DATE_TRUNC('day', time) AS dt,
AVG(gas_limit) AS avg_block_gas_limit
FROM ethereum."blocks"
GROUP BY dt
OFFSET 1
फिर इथेरियम चेन पर किए गए कंप्यूटिंग (यानी, लेन-देन भेजना, स्मार्ट अनुबंध को कॉल करना, NFT की मिंटिंग करना) के भुगतान के लिए प्रतिदिन उपयोग की जाने वाली वास्तविक गैस है। यह उपलब्ध इथेरियम ब्लॉक स्थान की मांग है:
SELECT
DATE_TRUNC('day', time) AS dt,
AVG(gas_used) AS avg_block_gas_used
FROM ethereum."blocks"
GROUP BY dt
OFFSET 1
हम यह देखने के लिए इन दोनों चार्टों को एक साथ रख सकते हैं कि मांग और आपूर्ति कैसे संरेखित होती हैं:
इसलिए हम उपलब्ध आपूर्ति को देखते हुए, इथेरियम ब्लॉक स्थान की मांग के एक कार्य के रूप में गैस की कीमतों को समझ सकते हैं।
अंत में, हम इथेरियम चेन के लिए औसत दैनिक गैस की कीमतों को क्वेरी करना चाह सकते हैं, हालांकि, ऐसा करने से क्वेरी का समय विशेष रूप से लंबा हो जाएगा, इसलिए हम अपनी क्वेरी को एथेरियम फाउंडेशन द्वारा प्रति लेन-देन भुगतान की गई गैस की औसत मात्रा तक फ़िल्टर करेंगे।
हम पिछले कुछ वर्षों में एथेरियम फाउंडेशन के पते पर किए गए सभी लेन-देन के लिए भुगतान की गई गैस की कीमतें देख सकते हैं। यहाँ क्वेरी है:
SELECT
block_time,
gas_price / 1e9 AS gas_price_gwei,
value / 1e18 AS eth_sent
FROM ethereum."transactions"
WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
ORDER BY block_time DESC
सारांश
इस ट्यूटोरियल के साथ, हम इथेरियम की बुनियादी अवधारणाओं को समझते हैं और ऑनचेन डेटा को क्वेरी करके और महसूस करके इथेरियम ब्लॉकचेन कैसे काम करता है, यह समझते हैं।
इस ट्यूटोरियल में उपयोग किए गए सभी कोड वाला डैशबोर्ड यहां (opens in a new tab) पाया जा सकता है।
Web3 का पता लगाने के लिए डेटा के अधिक उपयोग के लिए मुझे ट्विटर पर खोजें (opens in a new tab)।










