प्रमुख मजकुराकडे जा

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

SQL
क्वेरी करणे
व्यवहार
नवशिक्या
Paul Apivat
११ मे, २०२१
7 मिनिट वाचन

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

हे ट्युटोरियल वाचकांना Dune Analyticsopens in a new tab द्वारे प्रदान केलेल्या इंटरफेसद्वारे स्ट्रक्चर्ड क्वेरी लँग्वेज (SQL) सह ऑनचेन डेटा क्वेरी करून व्यवहार, ब्लॉक्स आणि गॅस यासह मूलभूत Ethereum संकल्पना समजून घेण्यास मदत करते.

ऑनचेन डेटा आपल्याला Ethereum, नेटवर्क आणि कंप्यूटिंग पॉवरसाठी एक अर्थव्यवस्था म्हणून समजून घेण्यास मदत करू शकतो आणि आज Ethereum समोर असलेल्या आव्हानांना (उदा., वाढत्या गॅस किमती) आणि अधिक महत्त्वाचे म्हणजे, स्केलिंग सोल्यूशन्सच्या आसपासच्या चर्चा समजून घेण्यासाठी आधार म्हणून काम केले पाहिजे.

व्यवहार

Ethereum वरील वापरकर्त्याचा प्रवास वापरकर्ता-नियंत्रित खाते किंवा ETH बॅलन्स असलेल्या एंटिटीच्या आरंभीकरणाने सुरू होतो. दोन प्रकारचे खाते आहेत - वापरकर्ता-नियंत्रित किंवा स्मार्ट कॉन्ट्रॅक्ट (ethereum.org पहा).

कोणतेही खाते Etherscanopens in a new tab किंवा Blockscoutopens in a new tab सारख्या ब्लॉक एक्सप्लोररवर पाहिले जाऊ शकते. ब्लॉक एक्सप्लोरर हे Ethereum च्या डेटासाठी एक पोर्टल आहेत. ते रिअल-टाइममध्ये ब्लॉक्स, व्यवहार, मायनर्स, खाती आणि इतर ऑनचेन अ‍ॅक्टिव्हिटीवरील डेटा प्रदर्शित करतात (येथे पहा).

तथापि, बाह्य ब्लॉक एक्सप्लोरर्सद्वारे प्रदान केलेल्या माहितीचा ताळमेळ साधण्यासाठी वापरकर्ता थेट डेटा क्वेरी करू शकतो. Dune Analyticsopens in a new tab SQL चे काही ज्ञान असलेल्या कोणालाही ही क्षमता प्रदान करते.

संदर्भासाठी, Ethereum फाउंडेशन (EF) साठी स्मार्ट कॉन्ट्रॅक्ट खाते Blockscoutopens in a new tab वर पाहिले जाऊ शकते.

एक गोष्ट लक्षात घेण्यासारखी आहे की EF च्या खात्यासह सर्व खात्यांचा एक सार्वजनिक पत्ता असतो जो व्यवहार पाठवण्यासाठी आणि प्राप्त करण्यासाठी वापरला जाऊ शकतो.

Etherscan वरील खाते बॅलन्समध्ये नियमित व्यवहार आणि अंतर्गत व्यवहार समाविष्ट आहेत. अंतर्गत व्यवहार, नावाप्रमाणे, वास्तविक व्यवहार नाहीत जे चेनची स्थिती बदलतात. ते एका कॉन्ट्रॅक्टची अंमलबजावणी करून सुरू केलेले मूल्य हस्तांतरण आहेत (स्त्रोतopens in a new tab). अंतर्गत व्यवहारांना सही नसल्यामुळे, ते ब्लॉकचेनवर समाविष्ट केले जात नाहीत आणि Dune Analytics सह क्वेरी केले जाऊ शकत नाहीत.

म्हणून, हे ट्युटोरियल नियमित व्यवहारांवर लक्ष केंद्रित करेल. हे अशा प्रकारे क्वेरी केले जाऊ शकते:

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
सर्व दाखवा

हे Etherscan च्या व्यवहार पृष्ठावर प्रदान केलेल्या माहितीसारखीच माहिती देईल. तुलनेसाठी, येथे दोन स्रोत आहेत:

Etherscan

Blockscout वर EF चे कॉन्ट्रॅक्ट पृष्ठ.opens in a new tab

Dune Analytics

आपण डॅशबोर्ड येथेopens in a new tab शोधू शकता. क्वेरी पाहण्यासाठी टेबलवर क्लिक करा (वर देखील पहा).

व्यवहारांचे विघटन

सबमिट केलेल्या व्यवहारामध्ये अनेक माहितीचे तुकडे समाविष्ट असतात, ज्यात (स्त्रोत) खालील गोष्टींचा समावेश आहे:

  • प्राप्तकर्ता: प्राप्त करणारा पत्ता ("to" म्हणून क्वेरी केलेला)
  • सही: प्रेषकाची खाजगी की व्यवहारावर सही करत असली तरी, आपण SQL सह जो क्वेरी करू शकतो तो म्हणजे प्रेषकाचा सार्वजनिक पत्ता ("from").
  • मूल्य: ही हस्तांतरित ETH ची रक्कम आहे (ether स्तंभ पहा).
  • डेटा: हा हॅश केलेला अनियंत्रित डेटा आहे (data स्तंभ पहा)
  • gasLimit – व्यवहाराद्वारे वापरल्या जाऊ शकणाऱ्या गॅस युनिट्सची कमाल रक्कम. गॅसची युनिट्स संगणकीय पायऱ्या दर्शवतात
  • maxPriorityFeePerGas - मायनरला टिप म्हणून समाविष्ट करण्यासाठी गॅसची कमाल रक्कम
  • maxFeePerGas - व्यवहारासाठी देय करण्यास इच्छुक असलेल्या गॅसची कमाल रक्कम (baseFeePerGas आणि maxPriorityFeePerGas सह)

आपण Ethereum फाउंडेशनच्या सार्वजनिक पत्त्यावर झालेल्या व्यवहारांसाठी या विशिष्ट माहितीचे तुकडे क्वेरी करू शकतो:

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
सर्व दाखवा

ब्लॉक्स

प्रत्येक व्यवहार Ethereum व्हर्च्युअल मशीनची (EVM) स्थिती बदलेल (स्त्रोत). व्यवहार नेटवर्कवर प्रसारित केले जातात जेणेकरून ते सत्यापित केले जातील आणि ब्लॉकमध्ये समाविष्ट केले जातील. प्रत्येक व्यवहार एका ब्लॉक क्रमांकाशी संबंधित असतो. डेटा पाहण्यासाठी, आपण एक विशिष्ट ब्लॉक क्रमांक क्वेरी करू शकतो: 12396854 (हे लिहित असताना Ethereum फाउंडेशनच्या व्यवहारांमधील सर्वात अलीकडील ब्लॉक, 11/5/21).

शिवाय, जेव्हा आपण पुढील दोन ब्लॉक्सची क्वेरी करतो, तेव्हा आपण पाहू शकतो की प्रत्येक ब्लॉकमध्ये मागील ब्लॉकचा हॅश असतो (म्हणजे, पॅरेंट हॅश), जे ब्लॉकचेन कसे तयार होते हे दर्शवते.

प्रत्येक ब्लॉकमध्ये त्याच्या पॅरेंट ब्लॉकचा संदर्भ असतो. हे खाली hash आणि parent_hash स्तंभांदरम्यान दर्शविले आहे (स्त्रोत):

parent_hash

Dune Analytics वरील क्वेरी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).

या ट्युटोरियलसाठी, आपण Dune Analytics द्वारे SQL सह क्वेरी केल्या जाऊ शकणाऱ्या ऑनचेन डेटावर लक्ष केंद्रित करणार आहोत.

वर सांगितल्याप्रमाणे, प्रत्येक ब्लॉकमध्ये व्यवहारांची सूची असते, आपण एका विशिष्ट ब्लॉकसाठी फिल्टर करून हे क्वेरी करू शकतो. आपण सर्वात अलीकडील ब्लॉक, 12396854, वापरून पाहू:

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

Dune वरील SQL आउटपुट येथे आहे:

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

प्रति दिन तयार झालेल्या Ethereum ब्लॉक्सचा चार्ट (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

नंतर Ethereum चेनवर केलेल्या कंप्यूटिंगसाठी (उदा., व्यवहार पाठवणे, स्मार्ट कॉन्ट्रॅक्ट कॉल करणे, NFT मिंट करणे) दररोज वापरलेला वास्तविक गॅस आहे. ही उपलब्ध Ethereum ब्लॉक स्पेसची मागणी आहे:

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

म्हणून आपण उपलब्ध पुरवठ्याच्या तुलनेत Ethereum ब्लॉक स्पेसच्या मागणीचे एक कार्य म्हणून गॅस किमती समजू शकतो.

शेवटी, आपण Ethereum चेनसाठी सरासरी दैनिक गॅस किमती क्वेरी करू इच्छितो, तथापि, असे केल्याने क्वेरीला विशेषतः जास्त वेळ लागेल, म्हणून आपण Ethereum फाउंडेशनद्वारे प्रति व्यवहारासाठी भरलेल्या गॅसच्या सरासरी रकमेसाठी आपली क्वेरी फिल्टर करू.

आपण गेल्या काही वर्षांपासून Ethereum फाउंडेशनच्या पत्त्यावर केलेल्या सर्व व्यवहारांसाठी भरलेल्या गॅस किमती पाहू शकतो. येथे क्वेरी आहे:

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

सारांश

या ट्युटोरियलद्वारे, आपण मूलभूत Ethereum संकल्पना आणि Ethereum ब्लॉकचेन कसे कार्य करते हे ऑनचेन डेटा क्वेरी करून आणि त्याची अनुभूती घेऊन समजून घेतो.

या ट्युटोरियलमध्ये वापरलेला सर्व कोड असलेला डॅशबोर्ड येथेopens in a new tab आढळू शकतो.

web3 एक्सप्लोर करण्यासाठी डेटाच्या अधिक वापरासाठी मला Twitter वर शोधाopens in a new tab.

पृष्ठ अखेरचे अद्यतन: २९ सप्टेंबर, २०२५

हे मार्गदर्शन उपयुक्त होते का?