मुख्य सामग्री पर जाएँ

SQL के साथ मूलभूत एथेरियम विषय सीखें

SQL
क्वेरी करना
ट्रांसक्शन्स
शुरआती
पॉल अपिवत
11 मई 2021
9 मिनट का पठन

कई एथेरियम ट्यूटोरियल डिवेलपर को लक्षित करते हैं, लेकिन डेटा विश्लेषकों या उन लोगों के लिए शैक्षिक संसाधनों की कमी है जो क्लाइंट या नोड चलाए बिना ऑन-चेन डेटा देखना चाहते हैं।

यह ट्यूटोरियल पाठकों को ड्यून एनालिटिक्स (opens in a new tab) द्वारा प्रदान किए गए इंटरफ़ेस के माध्यम से स्ट्रक्चर्ड क्वेरी लैंग्वेज (SQL) के साथ ऑन-चेन डेटा की क्वेरी करके लेनदेन, ब्लोक और गैस सहित मूलभूत एथेरियम अवधारणाओं को समझने में मदद करता है।

ऑन-चेन डेटा हमें एथेरियम, नेटवर्क और कंप्यूटिंग शक्ति के लिए एक अर्थव्यवस्था को समझने में मदद कर सकता है और इसे आज एथेरियम के सामने आने वाली चुनौतियों (यानी, बढ़ती गैस कीमतें) और, इससे भी महत्वपूर्ण बात, स्केलिंग समाधानों के आसपास की चर्चाओं को समझने के लिए एक आधार के रूप में काम करना चाहिए।

लेनदेन

एथेरियम पर एक यूज़र की यात्रा एक यूज़र-नियंत्रित खाता या ETH बैलेंस वाली एक इकाई को शुरू करने के साथ शुरू होती है। दो प्रकार के खाते होते हैं - उपयोगकर्ता-नियंत्रित या एक स्मार्ट अनुबंध (ethereum.org देखें)।

किसी भी खाते को ईथरस्कैन (opens in a new tab) या ब्लॉकस्काउट (opens in a new tab) जैसे ब्लॉक खोजकर्ता पर देखा जा सकता है। ब्लॉक खोजकर्ता एथेरियम के डेटा का एक पोर्टल हैं। वे वास्तविक समय में, ब्लोक, लेनदेन, माईनर, खाते और अन्य ऑन-चेन गतिविधि पर डेटा प्रदर्शित करते हैं (यहां देखें)।

हालांकि, एक यूज़र बाहरी ब्लॉक खोजकर्ताओं द्वारा प्रदान की गई जानकारी का मिलान करने के लिए सीधे डेटा की क्वेरी करना चाह सकता है। ड्यून एनालिटिक्स (opens in a new tab) SQL के कुछ ज्ञान वाले किसी भी व्यक्ति को यह क्षमता प्रदान करता है।

संदर्भ के लिए, एथेरियम फाउंडेशन (EF) के लिए स्मार्ट अनुबंध खाते को ब्लॉकस्काउट (opens in a new tab) पर देखा जा सकता है।

ध्यान देने वाली एक बात यह है कि EF सहित सभी खातों में, एक सार्वजनिक पता होता है जिसका उपयोग लेनदेन भेजने और प्राप्त करने के लिए किया जा सकता है।

ईथरस्कैन पर खाता बैलेंस में नियमित लेनदेन और आंतरिक लेनदेन शामिल हैं। आंतरिक लेनदेन, नाम के बावजूद, वास्तविक लेनदेन नहीं हैं जो श्रृंखला की स्थिति को बदलते हैं। वे मूल्य हस्तांतरण हैं जो एक अनुबंध को निष्पादित करके शुरू किए जाते हैं (स्रोत (opens in a new tab))। चूंकि आंतरिक लेनदेन में कोई हस्ताक्षर नहीं होता है, इसलिए वे ब्लॉकचेन पर शामिल नहीं होते हैं और ड्यून एनालिटिक्स के साथ क्वेरी नहीं किए जा सकते।

इसलिए, यह ट्यूटोरियल नियमित लेनदेन पर ध्यान केंद्रित करेगा। इसे इस तरह से क्वेरी किया जा सकता है:

1WITH temp_table AS (
2SELECT
3 hash,
4 block_number,
5 block_time,
6 "from",
7 "to",
8 value / 1e18 AS ether,
9 gas_used,
10 gas_price / 1e9 AS gas_price_gwei
11FROM ethereum."transactions"
12WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
13ORDER BY block_time DESC
14)
15SELECT
16 hash,
17 block_number,
18 block_time,
19 "from",
20 "to",
21 ether,
22 (gas_used * gas_price_gwei) / 1e9 AS txn_fee
23FROM temp_table
सभी दिखाएँ

यह वही जानकारी देगा जो ईथरस्कैन के लेनदेन पृष्ठ पर प्रदान की गई है। तुलना के लिए, यहां दो स्रोत दिए गए हैं:

ईथरस्कैन

ब्लॉकस्काउट पर EF का अनुबंध पृष्ठ। (opens in a new tab)

डून एनालिटिक्स

आप डैशबोर्ड यहां (opens in a new tab) पा सकते हैं। क्वेरी देखने के लिए तालिका पर क्लिक करें (ऊपर भी देखें)।

लेनदेन को तोड़ना

एक प्रस्तुत लेनदेन में कई जानकारी शामिल होती है (स्रोत):

  • प्राप्तकर्ता: प्राप्तकर्ता पता ("to" के रूप में क्वेरी किया गया)
  • हस्ताक्षर: जबकि एक प्रेषक की निजी चाबी एक लेनदेन पर हस्ताक्षर करती है, हम SQL के साथ जो क्वेरी कर सकते हैं वह प्रेषक का सार्वजनिक पता ("from") है।
  • मान: यह हस्तांतरित ETH की राशि है (ether कॉलम देखें)।
  • डेटा: यह मनमाना डेटा है जिसे हैश किया गया है (data कॉलम देखें)
  • gasLimit – गैस इकाइयों की अधिकतम मात्रा जो लेनदेन द्वारा उपभोग की जा सकती है। गैस की इकाइयां कम्प्यूटेशनल चरणों का प्रतिनिधित्व करती हैं
  • maxPriorityFeePerGas - माईनर को टिप के रूप में शामिल की जाने वाली गैस की अधिकतम राशि
  • maxFeePerGas - लेनदेन के लिए भुगतान की जाने वाली गैस की अधिकतम राशि (baseFeePerGas और maxPriorityFeePerGas सहित)

हम एथेरियम फाउंडेशन के सार्वजनिक पते पर किए गए लेनदेन के लिए इस विशिष्ट जानकारी की क्वेरी कर सकते हैं:

1SELECT
2 "to",
3 "from",
4 value / 1e18 AS ether,
5 data,
6 gas_limit,
7 gas_price / 1e9 AS gas_price_gwei,
8 gas_used,
9 ROUND(((gas_used / gas_limit) * 100),2) AS gas_used_pct
10FROM ethereum."transactions"
11WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
12ORDER BY block_time DESC
सभी दिखाएँ

ब्लॉक

प्रत्येक लेनदेन एथेरियम वर्चुअल मशीन (EVM) की स्थिति को बदल देगा (स्रोत)। लेनदेन को सत्यापित होने और एक ब्लोक में शामिल होने के लिए नेटवर्क पर प्रसारित किया जाता है। प्रत्येक लेनदेन एक ब्लोक संख्या से जुड़ा होता है। डेटा देखने के लिए, हम एक विशिष्ट ब्लोक संख्या: 12396854 की क्वेरी कर सकते हैं (इस लेखन के समय, 11/5/21 तक एथेरियम फाउंडेशन लेनदेन के बीच सबसे हालिया ब्लोक)।

इसके अलावा, जब हम अगले दो ब्लोक की क्वेरी करते हैं, तो हम देख सकते हैं कि प्रत्येक ब्लोक में पिछले ब्लोक का हैश होता है (यानी, पैरेंट हैश), यह दर्शाता है कि ब्लॉकचेन कैसे बनता है।

प्रत्येक ब्लोक में इसके पैरेंट ब्लोक का एक संदर्भ होता है। यह नीचे hash और parent_hash कॉलम के बीच दिखाया गया है (स्रोत):

parent_hash

ड्यून एनालिटिक्स पर क्वेरी (opens in a new tab) यहां दी गई है:

1SELECT
2 time,
3 number,
4 hash,
5 parent_hash,
6 nonce
7FROM ethereum."blocks"
8WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 12396856
9LIMIT 10
सभी दिखाएँ

हम समय, ब्लोक संख्या, कठिनाई, हैश, पैरेंट हैश और नॉन्स की क्वेरी करके एक ब्लोक की जांच कर सकते हैं।

यह क्वेरी केवल लेनदेन की सूची को कवर नहीं करती है जिसके लिए नीचे एक अलग क्वेरी और स्टेट रूट की आवश्यकता होती है। एक पूर्ण या अभिलेखीय नोड सभी लेनदेन और स्थिति संक्रमणों को संग्रहीत करेगा, जो क्लाइंट को किसी भी समय श्रृंखला की स्थिति की क्वेरी करने की अनुमति देता है। क्योंकि इसके लिए बड़े भंडारण स्थान की आवश्यकता होती है, हम श्रृंखला डेटा को स्थिति डेटा से अलग कर सकते हैं:

  • श्रृंखला डेटा (ब्लोक की सूची, लेनदेन)
  • स्थिति डेटा (प्रत्येक लेनदेन के स्थिति संक्रमण का परिणाम)

स्टेट रूट बाद वाले में आता है और यह अंतर्निहित डेटा है (ऑन-चेन संग्रहीत नहीं है), जबकि श्रृंखला डेटा स्पष्ट है और स्वयं श्रृंखला पर संग्रहीत है (स्रोत (opens in a new tab))।

इस ट्यूटोरियल के लिए, हम ऑन-चेन डेटा पर ध्यान केंद्रित करेंगे जिसे ड्यून एनालिटिक्स के माध्यम से SQL के साथ क्वेरी किया जा सकता है।

जैसा कि ऊपर कहा गया है, प्रत्येक ब्लोक में लेनदेन की एक सूची होती है, हम एक विशिष्ट ब्लोक के लिए फ़िल्टर करके इसे क्वेरी कर सकते हैं। हम सबसे हालिया ब्लोक, 12396854 का प्रयास करेंगे:

1SELECT * FROM ethereum."transactions"
2WHERE block_number = 12396854
3ORDER BY block_time DESC`

Dune पर SQL आउटपुट यहां दिया गया है:

श्रृंखला में जोड़े जाने वाला यह एकल ब्लोक एथेरियम वर्चुअल मशीन (EVM) की स्थिति को बदलता है। दर्जनों कभी-कभी, सैकड़ों लेनदेन एक साथ सत्यापित किए जाते हैं। इस विशिष्ट मामले में, 222 लेनदेन शामिल थे।

यह देखने के लिए कि वास्तव में कितने सफल हुए, हम सफल लेनदेन की गणना करने के लिए एक और फ़िल्टर जोड़ेंगे:

1WITH temp_table AS (
2 SELECT * FROM ethereum."transactions"
3 WHERE block_number = 12396854 AND success = true
4 ORDER BY block_time DESC
5)
6SELECT
7 COUNT(success) AS num_successful_txn
8FROM temp_table

ब्लोक 12396854 के लिए, कुल 222 लेनदेन में से, 204 को सफलतापूर्वक सत्यापित किया गया:

लेनदेन अनुरोध प्रति सेकंड दर्जनों बार होते हैं, लेकिन ब्लोक लगभग हर 15 सेकंड में एक बार प्रतिबद्ध होते हैं (स्रोत)।

यह देखने के लिए कि लगभग हर 15 सेकंड में एक ब्लोक का उत्पादन होता है, हम प्रति दिन ब्लोक की अनुमानित औसत संख्या (~ 5760) प्राप्त करने के लिए एक दिन में सेकंड की संख्या (86400) को 15 से विभाजित कर सकते हैं।

प्रति दिन उत्पादित एथेरियम ब्लोक के लिए चार्ट (2016 - वर्तमान) है:

इस समयावधि में प्रतिदिन उत्पादित ब्लोक की औसत संख्या ~5,874 है:

क्वेरी हैं:

1# 2016 से प्रतिदिन उत्पादित ब्लोक की संख्या की कल्पना करने के लिए क्वेरी
2
3SELECT
4 DATE_TRUNC('day', time) AS dt,
5 COUNT(*) AS block_count
6FROM ethereum."blocks"
7GROUP BY dt
8OFFSET 1
9
10# प्रति दिन उत्पादित ब्लोक की औसत संख्या
11
12WITH temp_table AS (
13SELECT
14 DATE_TRUNC('day', time) AS dt,
15 COUNT(*) AS block_count
16FROM ethereum."blocks"
17GROUP BY dt
18OFFSET 1
19)
20SELECT
21 AVG(block_count) AS avg_block_count
22FROM temp_table
सभी दिखाएँ

2016 से प्रति दिन उत्पादित ब्लोक की औसत संख्या उस संख्या से थोड़ी अधिक 5,874 है। वैकल्पिक रूप से, 86400 सेकंड को 5874 औसत ब्लोक से विभाजित करने पर 14.7 सेकंड या लगभग हर 15 सेकंड में एक ब्लोक आता है।

गैस

ब्लोक आकार में सीमित हैं। अधिकतम ब्लोक आकार गतिशील है और नेटवर्क मांग के अनुसार 12,500,000 और 25,000,000 इकाइयों के बीच बदलता रहता है। मनमाने ढंग से बड़े ब्लोक आकार को रोकने के लिए सीमाएं आवश्यक हैं जो डिस्क स्थान और गति आवश्यकताओं के मामले में पूर्ण नोड पर दबाव डालते हैं (स्रोत)।

ब्लोक गैस सीमा की अवधारणा का एक तरीका इसे उपलब्ध ब्लोक स्थान की आपूर्ति के रूप में सोचना है जिसमें लेनदेन को बैच किया जाता है। ब्लोक गैस सीमा को 2016 से आज तक क्वेरी और विज़ुअलाइज़ किया जा सकता है:

1SELECT
2 DATE_TRUNC('day', time) AS dt,
3 AVG(gas_limit) AS avg_block_gas_limit
4FROM ethereum."blocks"
5GROUP BY dt
6OFFSET 1

फिर एथेरियम श्रृंखला पर किए गए कंप्यूटिंग के लिए भुगतान करने के लिए दैनिक रूप से उपयोग की जाने वाली वास्तविक गैस है (यानी, लेनदेन भेजना, स्मार्ट अनुबंध को कॉल करना, एक एनएफटी का टकसाल बनाना)। यह उपलब्ध एथेरियम ब्लोक स्थान के लिए मांग है:

1SELECT
2 DATE_TRUNC('day', time) AS dt,
3 AVG(gas_used) AS avg_block_gas_used
4FROM ethereum."blocks"
5GROUP BY dt
6OFFSET 1

हम इन दोनों चार्ट को एक साथ रखकर यह भी देख सकते हैं कि मांग और आपूर्ति कैसे मिलती है:

gas_demand_supply

इसलिए हम उपलब्ध आपूर्ति को देखते हुए, एथेरियम ब्लोक स्थान की मांग के एक कार्य के रूप में गैस की कीमतों को समझ सकते हैं।

अंत में, हम एथेरियम श्रृंखला के लिए औसत दैनिक गैस कीमतों की क्वेरी करना चाह सकते हैं, हालांकि, ऐसा करने से क्वेरी का समय विशेष रूप से लंबा होगा, इसलिए हम अपनी क्वेरी को एथेरियम फाउंडेशन द्वारा प्रति लेनदेन भुगतान की गई गैस की औसत राशि पर फ़िल्टर करेंगे।

हम वर्षों से एथेरियम फाउंडेशन के पते पर किए गए सभी लेनदेन के लिए भुगतान की गई गैस की कीमतें देख सकते हैं। यहां क्वेरी है:

1SELECT
2 block_time,
3 gas_price / 1e9 AS gas_price_gwei,
4 value / 1e18 AS eth_sent
5FROM ethereum."transactions"
6WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
7ORDER BY block_time DESC

सारांश

इस ट्यूटोरियल के साथ, हम ऑन-चेन डेटा की क्वेरी करके और उसका अनुभव करके मूलभूत एथेरियम अवधारणाओं को और एथेरियम ब्लॉकचेन कैसे काम करता है, को समझते हैं।

इस ट्यूटोरियल में उपयोग किए गए सभी कोड वाला डैशबोर्ड यहां (opens in a new tab) पाया जा सकता है।

web3 का पता लगाने के लिए डेटा के अधिक उपयोग के लिए मुझे ट्विटर पर खोजें (opens in a new tab)

पेज का अंतिम अपडेट: 26 फ़रवरी 2026

क्या यह ट्यूटोरियल सहायक था?