मुख्य आशयावर जा

SQL सह इथेरियमचे मूलभूत विषय शिका

SQL
क्वेरींग
व्यवहार
डेटा-आणि-अॅनालिटिक्स
नवशिक्या
पॉल अपिवात
11 मे, 2021
7 मिनिटांचे वाचन

अनेक इथेरियम ट्युटोरिअल्स डेव्हलपर्सना लक्ष्य करतात, परंतु डेटा विश्लेषकांसाठी किंवा क्लायंट किंवा नोड न चालवता ऑनचेन डेटा पाहू इच्छिणाऱ्या लोकांसाठी शैक्षणिक संसाधनांची कमतरता आहे.

हे ट्युटोरिअल वाचकांना 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) येथे आहे:

आपण वेळ, ब्लॉक क्रमांक, काठिण्य, हॅश, पॅरेंट हॅश आणि नॉन्सची क्वेरी करून ब्लॉकचे परीक्षण करू शकतो.

या क्वेरीमध्ये समाविष्ट नसलेली एकमेव गोष्ट म्हणजे व्यवहारांची यादी ज्यासाठी खाली स्वतंत्र क्वेरी आवश्यक आहे आणि स्टेट रूट. एक पूर्ण किंवा आर्काइव्हल नोड सर्व व्यवहार आणि स्थिती संक्रमण संग्रहित करेल, ज्यामुळे क्लायंटला कोणत्याही वेळी चेनच्या स्थितीची क्वेरी करण्याची अनुमती मिळते. यासाठी मोठ्या स्टोरेज स्पेसची आवश्यकता असल्यामुळे, आपण चेन डेटाला स्थिती डेटापासून वेगळे करू शकतो:

  • चेन डेटा (ब्लॉक्स, व्यवहारांची यादी)
  • स्थिती डेटा (प्रत्येक व्यवहाराच्या स्थिती संक्रमणाचा परिणाम)

स्टेट रूट नंतरच्या प्रकारात येते आणि तो अव्यक्त (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 सेकंदांनी एक ब्लॉक तयार होतो हे पाहण्यासाठी, आपण एका दिवसातील सेकंदांची संख्या (86400) 15 ने भागून दररोज ब्लॉक्सची अंदाजित सरासरी संख्या (~ 5760) मिळवू शकतो.

दररोज तयार होणाऱ्या इथेरियम ब्लॉक्सचा चार्ट (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).