SQL सह Ethereum चे मूलभूत विषय शिका
बरेच 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 (2SELECT3 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_gwei11FROM ethereum."transactions"12WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'13ORDER BY block_time DESC14)15SELECT16 hash,17 block_number,18 block_time,19 "from",20 "to",21 ether,22 (gas_used * gas_price_gwei) / 1e9 AS txn_fee23FROM 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 फाउंडेशनच्या सार्वजनिक पत्त्यावर झालेल्या व्यवहारांसाठी या विशिष्ट माहितीचे तुकडे क्वेरी करू शकतो:
1SELECT2 "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_pct10FROM ethereum."transactions"11WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'12ORDER BY block_time DESCसर्व दाखवाब्लॉक्स
प्रत्येक व्यवहार Ethereum व्हर्च्युअल मशीनची (EVM) स्थिती बदलेल (स्त्रोत). व्यवहार नेटवर्कवर प्रसारित केले जातात जेणेकरून ते सत्यापित केले जातील आणि ब्लॉकमध्ये समाविष्ट केले जातील. प्रत्येक व्यवहार एका ब्लॉक क्रमांकाशी संबंधित असतो. डेटा पाहण्यासाठी, आपण एक विशिष्ट ब्लॉक क्रमांक क्वेरी करू शकतो: 12396854 (हे लिहित असताना Ethereum फाउंडेशनच्या व्यवहारांमधील सर्वात अलीकडील ब्लॉक, 11/5/21).
शिवाय, जेव्हा आपण पुढील दोन ब्लॉक्सची क्वेरी करतो, तेव्हा आपण पाहू शकतो की प्रत्येक ब्लॉकमध्ये मागील ब्लॉकचा हॅश असतो (म्हणजे, पॅरेंट हॅश), जे ब्लॉकचेन कसे तयार होते हे दर्शवते.
प्रत्येक ब्लॉकमध्ये त्याच्या पॅरेंट ब्लॉकचा संदर्भ असतो. हे खाली hash आणि parent_hash स्तंभांदरम्यान दर्शविले आहे (स्त्रोत):
Dune Analytics वरील क्वेरीopens in a new tab येथे आहे:
1SELECT2 time,3 number,4 hash,5 parent_hash,6 nonce7FROM ethereum."blocks"8WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 123968569LIMIT 10सर्व दाखवाआपण वेळ, ब्लॉक क्रमांक, डिफिकल्टी, हॅश, पॅरेंट हॅश आणि नॉन्स क्वेरी करून ब्लॉकची तपासणी करू शकतो.
ही क्वेरी केवळ व्यवहारांची सूची कव्हर करत नाही, ज्यासाठी खाली स्वतंत्र क्वेरी आणि स्टेट रूट आवश्यक आहे. एक पूर्ण किंवा आकाईव्हल नोड सर्व व्यवहार आणि स्टेट ट्रान्झिशन्स संग्रहित करेल, ज्यामुळे क्लायंट्सना कोणत्याही वेळी चेनची स्थिती क्वेरी करण्याची परवानगी मिळते. यासाठी मोठ्या स्टोरेज जागेची आवश्यकता असल्याने, आपण चेन डेटा स्टेट डेटामधून वेगळा करू शकतो:
- चेन डेटा (ब्लॉक्सची, व्यवहारांची सूची)
- स्टेट डेटा (प्रत्येक व्यवहाराच्या स्टेट ट्रान्झिशनचा परिणाम)
स्टेट रूट नंतरच्या प्रकारात येते आणि तो गर्भित डेटा आहे (ऑनचेन संग्रहित नाही), तर चेन डेटा स्पष्ट असतो आणि तो स्वतः चेनवर संग्रहित असतो (स्त्रोतopens in a new tab).
या ट्युटोरियलसाठी, आपण Dune Analytics द्वारे SQL सह क्वेरी केल्या जाऊ शकणाऱ्या ऑनचेन डेटावर लक्ष केंद्रित करणार आहोत.
वर सांगितल्याप्रमाणे, प्रत्येक ब्लॉकमध्ये व्यवहारांची सूची असते, आपण एका विशिष्ट ब्लॉकसाठी फिल्टर करून हे क्वेरी करू शकतो. आपण सर्वात अलीकडील ब्लॉक, 12396854, वापरून पाहू:
1SELECT * FROM ethereum."transactions"2WHERE block_number = 123968543ORDER 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 = true4 ORDER BY block_time DESC5)6SELECT7 COUNT(success) AS num_successful_txn8FROM temp_tableब्लॉक 12396854 साठी, एकूण 222 व्यवहारांपैकी, 204 यशस्वीरित्या सत्यापित केले गेले:
व्यवहारांच्या विनंत्या प्रति सेकंद डझनभर वेळा येतात, परंतु ब्लॉक्स अंदाजे दर 15 सेकंदांनी एकदा कमिट केले जातात (स्त्रोत).
अंदाजे दर 15 सेकंदांनी एक ब्लॉक तयार होतो हे पाहण्यासाठी, आपण एका दिवसातील सेकंदांची संख्या (86400) 15 ने भागू शकतो जेणेकरून प्रति दिन तयार होणाऱ्या ब्लॉक्सची अंदाजे सरासरी संख्या (~ 5760) मिळेल.
प्रति दिन तयार झालेल्या Ethereum ब्लॉक्सचा चार्ट (2016 - आतापर्यंत) आहे:
या कालावधीत दररोज तयार होणाऱ्या ब्लॉक्सची सरासरी संख्या ~5,874 आहे:
क्वेरीज आहेत:
1# 2016 पासून दररोज तयार झालेल्या ब्लॉक्सची संख्या व्हिज्युअलाइझ करण्यासाठी क्वेरी23SELECT4 DATE_TRUNC('day', time) AS dt,5 COUNT(*) AS block_count6FROM ethereum."blocks"7GROUP BY dt8OFFSET 1910# प्रति दिन तयार झालेल्या ब्लॉक्सची सरासरी संख्या1112WITH temp_table AS (13SELECT14 DATE_TRUNC('day', time) AS dt,15 COUNT(*) AS block_count16FROM ethereum."blocks"17GROUP BY dt18OFFSET 119)20SELECT21 AVG(block_count) AS avg_block_count22FROM temp_tableसर्व दाखवा2016 पासून प्रति दिन तयार होणाऱ्या ब्लॉक्सची सरासरी संख्या 5,874 आहे, जी त्या संख्येपेक्षा थोडी जास्त आहे. पर्यायाने, 86400 सेकंदांना 5874 सरासरी ब्लॉक्सने भागल्यास 14.7 सेकंद किंवा अंदाजे दर 15 सेकंदांनी एक ब्लॉक येतो.
गॅस
ब्लॉक्स आकारात मर्यादित असतात. कमाल ब्लॉक आकार डायनॅमिक आहे आणि नेटवर्कच्या मागणीनुसार 12,500,000 आणि 25,000,000 युनिट्स दरम्यान बदलतो. डिस्क स्पेस आणि गती आवश्यकतांच्या बाबतीत पूर्ण नोड्सवर ताण टाकणाऱ्या अनियंत्रित मोठ्या ब्लॉक आकारांना प्रतिबंधित करण्यासाठी मर्यादा आवश्यक आहेत (स्त्रोत).
ब्लॉक गॅस मर्यादेची संकल्पना मांडण्याचा एक मार्ग म्हणजे त्याला व्यवहारांना बॅच करण्यासाठी उपलब्ध ब्लॉक स्पेसचा पुरवठा म्हणून विचार करणे. ब्लॉक गॅस मर्यादा 2016 पासून आजपर्यंत क्वेरी आणि व्हिज्युअलाइझ केली जाऊ शकते:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_limit) AS avg_block_gas_limit4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1नंतर Ethereum चेनवर केलेल्या कंप्यूटिंगसाठी (उदा., व्यवहार पाठवणे, स्मार्ट कॉन्ट्रॅक्ट कॉल करणे, NFT मिंट करणे) दररोज वापरलेला वास्तविक गॅस आहे. ही उपलब्ध Ethereum ब्लॉक स्पेसची मागणी आहे:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_used) AS avg_block_gas_used4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1मागणी आणि पुरवठा कसे जुळतात हे पाहण्यासाठी आपण हे दोन चार्ट एकत्र ठेवू शकतो:
म्हणून आपण उपलब्ध पुरवठ्याच्या तुलनेत Ethereum ब्लॉक स्पेसच्या मागणीचे एक कार्य म्हणून गॅस किमती समजू शकतो.
शेवटी, आपण Ethereum चेनसाठी सरासरी दैनिक गॅस किमती क्वेरी करू इच्छितो, तथापि, असे केल्याने क्वेरीला विशेषतः जास्त वेळ लागेल, म्हणून आपण Ethereum फाउंडेशनद्वारे प्रति व्यवहारासाठी भरलेल्या गॅसच्या सरासरी रकमेसाठी आपली क्वेरी फिल्टर करू.
आपण गेल्या काही वर्षांपासून Ethereum फाउंडेशनच्या पत्त्यावर केलेल्या सर्व व्यवहारांसाठी भरलेल्या गॅस किमती पाहू शकतो. येथे क्वेरी आहे:
1SELECT2 block_time,3 gas_price / 1e9 AS gas_price_gwei,4 value / 1e18 AS eth_sent5FROM ethereum."transactions"6WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'7ORDER BY block_time DESCसारांश
या ट्युटोरियलद्वारे, आपण मूलभूत Ethereum संकल्पना आणि Ethereum ब्लॉकचेन कसे कार्य करते हे ऑनचेन डेटा क्वेरी करून आणि त्याची अनुभूती घेऊन समजून घेतो.
या ट्युटोरियलमध्ये वापरलेला सर्व कोड असलेला डॅशबोर्ड येथेopens in a new tab आढळू शकतो.
web3 एक्सप्लोर करण्यासाठी डेटाच्या अधिक वापरासाठी मला Twitter वर शोधाopens in a new tab.
पृष्ठ अखेरचे अद्यतन: २९ सप्टेंबर, २०२५










