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

SQL के साथ इथेरियम के बुनियादी विषय सीखें

SQL
क्वेरी करना
लेन-देन
डेटा-और-एनालिटिक्स
शुरुआती
पॉल अपिवत
11 मई 2021
10 मिनट पढ़ें

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

यह ट्यूटोरियल पाठकों को 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 के साथ क्वेरी नहीं किया जा सकता है।

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

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

Etherscan

Screenshot of Etherscan transaction explorer view

Blockscout पर EF का अनुबंध पृष्ठ। (opens in a new tab)

Dune Analytics

Screenshot of a Dune Analytics query dashboard

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

लेन-देन का विश्लेषण

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

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

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

ब्लॉक

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

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

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

parent_hash

Dune Analytics पर क्वेरी (opens in a new tab) यहां दी गई है:

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

एकमात्र चीज जो यह क्वेरी कवर नहीं करती है वह है लेन-देन की सूची जिसके लिए नीचे एक अलग क्वेरी की आवश्यकता होती है और स्थिति रूट (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 आउटपुट यहां दिया गया है:

Screenshot of a list of Ethereum transactions

चेन में जोड़ा जा रहा यह एकल ब्लॉक इथेरियम वर्चुअल मशीन (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 सफलतापूर्वक सत्यापित किए गए थे:

Screenshot of a successful Ethereum transaction

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

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

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

Chart showing daily Ethereum block production

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

Chart showing daily Ethereum block production

क्वेरी हैं:

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

गैस

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

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

Chart showing average Ethereum gas limit over time

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

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

Chart showing daily Ethereum gas used

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

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

gas_demand_supply

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

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

Chart showing Ethereum Foundation daily gas usage

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

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)