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 کے ڈیٹا کا ایک پورٹل ہیں۔ وہ حقیقی وقت میں، بلاکس، ٹرانزیکشنز، مائنرز، اکاؤنٹس اور دیگر آن چین سرگرمیوں پر ڈیٹا دکھاتے ہیں (یہاں دیکھیں here)۔
تاہم، ایک صارف بیرونی بلاک ایکسپلوررز کے ذریعہ فراہم کردہ معلومات کو ہم آہنگ کرنے کے لیے براہ راست ڈیٹا کو کوئری کرنا چاہے گا۔ Dune Analyticsopens in a new tab SQL کے کچھ علم رکھنے والے کسی بھی شخص کو یہ صلاحیت فراہم کرتا ہے۔
حوالہ کے لیے، Ethereum فاؤنڈیشن (EF) کے لیے اسمارٹ کنٹریکٹ اکاؤنٹ کو Blockscoutopens in a new tab پر دیکھا جا سکتا ہے۔
ایک بات قابل غور ہے کہ تمام اکاؤنٹس، بشمول EF کے، کا ایک عوامی پتہ ہوتا ہے جسے ٹرانزیکشن بھیجنے اور وصول کرنے کے لیے استعمال کیا جا سکتا ہے۔
Etherscan پر اکاؤنٹ کا بیلنس باقاعدہ ٹرانزیکشنز اور اندرونی ٹرانزیکشنز پر مشتمل ہوتا ہے۔ اندرونی ٹرانزیکشنز، نام کے باوجود، اصل ٹرانزیکشنز نہیں ہیں جو چین کی حالت کو بدلتی ہیں۔ وہ ایک معاہدے کو انجام دینے کے ذریعے شروع کی گئی قدر کی منتقلی ہیں (sourceopens 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
ڈیون اینالیٹکس
آپ ڈیش بورڈ یہاںopens in a new tab تلاش کر سکتے ہیں۔ کوئری دیکھنے کے لیے ٹیبل پر کلک کریں (اوپر بھی دیکھیں)۔
ٹرانزیکشنز کو توڑنا
جمع کرائی گئی ٹرانزیکشن میں کئی معلومات شامل ہوتی ہیں (source):
- وصول کنندہ: وصول کرنے والا پتہ ("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) کی حالت کو بدل دے گی (source)۔ ٹرانزیکشنز کو تصدیق اور بلاک میں شامل کرنے کے لیے نیٹ ورک پر نشر کیا جاتا ہے۔ ہر ٹرانزیکشن ایک بلاک نمبر سے منسلک ہے۔ ڈیٹا دیکھنے کے لیے، ہم ایک مخصوص بلاک نمبر کو کوئری کر سکتے ہیں: 12396854 (اس تحریر کے مطابق Ethereum فاؤنڈیشن ٹرانزیکشنز میں سب سے حالیہ بلاک، 11/5/21)۔
مزید برآں، جب ہم اگلے دو بلاکس کو کوئری کرتے ہیں، تو ہم دیکھ سکتے ہیں کہ ہر بلاک میں پچھلے بلاک کا ہیش (یعنی پیرنٹ ہیش) ہوتا ہے، جو یہ ظاہر کرتا ہے کہ بلاک چین کیسے بنتا ہے۔
ہر بلاک میں اس کے پیرنٹ بلاک کا حوالہ ہوتا ہے۔ یہ نیچے hash اور parent_hash کالموں کے درمیان دکھایا گیا ہے (source):
Dune Analytics پر queryopens 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سب دکھائیںہم وقت، بلاک نمبر، مشکل، ہیش، پیرنٹ ہیش، اور نونس کو کوئری کرکے ایک بلاک کا جائزہ لے سکتے ہیں۔
صرف ایک چیز جس کا یہ کوئری احاطہ نہیں کرتی ہے وہ ہے ٹرانزیکشن کی فہرست جس کے لیے نیچے ایک الگ کوئری اور اسٹیٹ روٹ درکار ہے۔ ایک مکمل یا آرکائیول نوڈ تمام ٹرانزیکشنز اور اسٹیٹ ٹرانزیشن کو اسٹور کرے گا، جس سے کلائنٹس کو کسی بھی وقت چین کی حالت کو کوئری کرنے کی اجازت ملے گی۔ چونکہ اس کے لیے بڑی اسٹوریج کی جگہ درکار ہے، ہم چین ڈیٹا کو اسٹیٹ ڈیٹا سے الگ کر سکتے ہیں:
- چین ڈیٹا (بلاکس، ٹرانزیکشنز کی فہرست)
- اسٹیٹ ڈیٹا (ہر ٹرانزیکشن کے اسٹیٹ ٹرانزیشن کا نتیجہ)
اسٹیٹ روٹ بعد میں آتا ہے اور یہ مضمر ڈیٹا ہے (آن چین ذخیرہ نہیں کیا گیا)، جبکہ چین ڈیٹا واضح ہے اور خود چین پر ذخیرہ کیا گیا ہے (sourceopens 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 سیکنڈ میں ایک بار کمٹ کیے جاتے ہیں (source)۔
یہ دیکھنے کے لیے کہ تقریباً ہر 15 سیکنڈ میں ایک بلاک تیار ہوتا ہے، ہم ایک دن میں سیکنڈز کی تعداد (86400) کو 15 سے تقسیم کر کے روزانہ بلاکس کی تخمینی اوسط تعداد (~ 5760) حاصل کر سکتے ہیں۔
روزانہ تیار ہونے والے Ethereum بلاکس (2016 - حال) کا چارٹ یہ ہے:
اس مدت میں روزانہ تیار ہونے والے بلاکس کی اوسط تعداد ~5,874 ہے:
کوئریز یہ ہیں:
1# query to visualize number of blocks produced daily since 201623SELECT4 DATE_TRUNC('day', time) AS dt,5 COUNT(*) AS block_count6FROM ethereum."blocks"7GROUP BY dt8OFFSET 1910# average number of blocks produced per day1112WITH 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 یونٹس کے درمیان مختلف ہوتا ہے۔ ڈسک کی جگہ اور رفتار کی ضروریات کے لحاظ سے مکمل نوڈس پر دباؤ ڈالنے والے من مانے بڑے بلاک سائز کو روکنے کے لیے حدود کی ضرورت ہوتی ہے (source)۔
بلاک گیس کی حد کا تصور کرنے کا ایک طریقہ یہ ہے کہ اسے دستیاب بلاک کی جگہ کی سپلائی کے طور پر سوچا جائے جس میں ٹرانزیکشنز کو بیچ کیا جائے۔ بلاک گیس کی حد کو 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 کو دریافت کرنے کے لیے ڈیٹا کے مزید استعمال کے لیے مجھے ٹویٹر پر تلاش کریںopens in a new tab۔
صفحہ کی آخری تازہ کاری: 29 ستمبر، 2025










