مرکزی مواد پر جائیں

SQL کے ساتھ ایتھیریم کے بنیادی موضوعات سیکھیں

SQL
کیوری کرنا
ٹرانزیکشنز
data-and-analytics
ابتدائی
پول ایپیوت
۱۱ مئی، ۲۰۲۱
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 کے ساتھ ان کی کیوری نہیں کی جا سکتی۔

لہذا، یہ ٹیوٹوریل باقاعدہ ٹرانزیکشنز پر توجہ مرکوز کرے گا۔ اس کی کیوری اس طرح کی جا سکتی ہے:

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

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)

ہم ایتھیریم فاؤنڈیشن کے پبلک ایڈریس پر ہونے والی ٹرانزیکشنز کے لیے ان مخصوص معلومات کی کیوری کر سکتے ہیں:

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

بلاکس

ہر ٹرانزیکشن ایتھیریم ورچوئل مشین (EVM) کی اسٹیٹ کو تبدیل کر دے گی (ذریعہ)۔ ٹرانزیکشنز کو نیٹ ورک پر نشر کیا جاتا ہے تاکہ ان کی تصدیق کی جا سکے اور انہیں ایک بلاک میں شامل کیا جا سکے۔ ہر ٹرانزیکشن ایک بلاک نمبر سے وابستہ ہوتی ہے۔ ڈیٹا دیکھنے کے لیے، ہم ایک مخصوص بلاک نمبر کی کیوری کر سکتے ہیں: 12396854 (اس تحریر کے وقت، 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

ہم وقت، بلاک نمبر، مشکل (difficulty)، ہیش، پیرنٹ ہیش، اور نانس (nonce) کی کیوری کر کے ایک بلاک کا جائزہ لے سکتے ہیں۔

واحد چیز جو یہ کیوری کور نہیں کرتی وہ ٹرانزیکشنز کی فہرست ہے جس کے لیے نیچے ایک الگ کیوری کی ضرورت ہے اور اسٹیٹ روٹ۔ ایک فل یا آرکائیول نوڈ تمام ٹرانزیکشنز اور اسٹیٹ ٹرانزیشنز کو اسٹور کرے گا، جس سے کلائنٹس کسی بھی وقت چین کی اسٹیٹ کی کیوری کر سکیں گے۔ چونکہ اس کے لیے بڑی اسٹوریج اسپیس کی ضرورت ہوتی ہے، اس لیے ہم چین ڈیٹا کو اسٹیٹ ڈیٹا سے الگ کر سکتے ہیں:

  • چین ڈیٹا (بلاکس، ٹرانزیکشنز کی فہرست)
  • اسٹیٹ ڈیٹا (ہر ٹرانزیکشن کی اسٹیٹ ٹرانزیشن کا نتیجہ)

اسٹیٹ روٹ مؤخر الذکر میں آتا ہے اور یہ پوشیدہ (implicit) ڈیٹا ہے (آن چین اسٹور نہیں ہوتا)، جبکہ چین ڈیٹا واضح (explicit) ہوتا ہے اور خود چین پر اسٹور ہوتا ہے (ذریعہ (opens in a new tab)

اس ٹیوٹوریل کے لیے، ہم آن چین ڈیٹا پر توجہ مرکوز کریں گے جس کی Dune Analytics کے ذریعے SQL کے ساتھ کیوری کی جا سکتی ہے۔

جیسا کہ اوپر بیان کیا گیا ہے، ہر بلاک میں ٹرانزیکشنز کی ایک فہرست ہوتی ہے، ہم ایک مخصوص بلاک کو فلٹر کر کے اس کی کیوری کر سکتے ہیں۔ ہم سب سے حالیہ بلاک، 12396854 کو آزمائیں گے:

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

Dune پر SQL آؤٹ پٹ یہ ہے:

Screenshot of a list of Ethereum transactions

چین میں شامل ہونے والا یہ واحد بلاک ایتھیریم ورچوئل مشین (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 کامیابی کے ساتھ تصدیق شدہ تھیں:

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

کیوریز یہ ہیں:

1# query to visualize number of blocks produced daily since 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# average number of blocks produced per day
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 یونٹس کے درمیان مختلف ہوتا ہے۔ صوابدیدی طور پر بڑے بلاک سائزز کو ڈسک اسپیس اور رفتار کی ضروریات کے لحاظ سے فل نوڈز پر دباؤ ڈالنے سے روکنے کے لیے حدود درکار ہیں (ذریعہ

بلاک گیس کی حد کو تصور کرنے کا ایک طریقہ یہ ہے کہ اسے دستیاب بلاک اسپیس کی سپلائی کے طور پر سوچا جائے جس میں ٹرانزیکشنز کو بیچ (batch) کیا جاتا ہے۔ بلاک گیس کی حد کی 2016 سے آج تک کیوری اور تصور کیا جا سکتا ہے:

Chart showing average Ethereum gas limit over time

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

پھر روزانہ استعمال ہونے والی اصل گیس ہے جو ایتھیریم چین پر کی جانے والی کمپیوٹنگ (یعنی ٹرانزیکشن بھیجنا، اسمارٹ کانٹریکٹ کو کال کرنا، NFT منٹ کرنا) کی ادائیگی کے لیے استعمال ہوتی ہے۔ یہ دستیاب ایتھیریم بلاک اسپیس کی طلب (demand) ہے:

Chart showing daily Ethereum gas used

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

ہم ان دونوں چارٹس کو ایک ساتھ رکھ کر یہ بھی دیکھ سکتے ہیں کہ طلب اور رسد (demand and supply) کیسے ہم آہنگ ہوتے ہیں:

gas_demand_supply

لہذا ہم دستیاب سپلائی کو دیکھتے ہوئے، ایتھیریم بلاک اسپیس کی طلب کے فنکشن کے طور پر گیس کی قیمتوں کو سمجھ سکتے ہیں۔

آخر میں، ہم ایتھیریم چین کے لیے اوسط روزانہ گیس کی قیمتوں کی کیوری کرنا چاہ سکتے ہیں، تاہم، ایسا کرنے کے نتیجے میں کیوری کا وقت خاص طور پر طویل ہو جائے گا، اس لیے ہم اپنی کیوری کو ایتھیریم فاؤنڈیشن کی جانب سے فی ٹرانزیکشن ادا کی جانے والی گیس کی اوسط مقدار تک فلٹر کریں گے۔

Chart showing Ethereum Foundation daily gas usage

ہم سالوں کے دوران ایتھیریم فاؤنڈیشن کے ایڈریس پر کی گئی تمام ٹرانزیکشنز کے لیے ادا کی گئی گیس کی قیمتیں دیکھ سکتے ہیں۔ کیوری یہ ہے:

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

خلاصہ

اس ٹیوٹوریل کے ساتھ، ہم ایتھیریم کے بنیادی تصورات کو سمجھتے ہیں اور یہ کہ ایتھیریم بلاک چین آن چین ڈیٹا کی کیوری کر کے اور اسے محسوس کر کے کیسے کام کرتی ہے۔

وہ ڈیش بورڈ جس میں اس ٹیوٹوریل میں استعمال ہونے والا تمام کوڈ موجود ہے یہاں (opens in a new tab) پایا جا سکتا ہے۔

ویب 3 کو دریافت کرنے کے لیے ڈیٹا کے مزید استعمال کے لیے مجھے ٹوئٹر پر تلاش کریں (opens in a new tab)۔

صفحہ کی آخری اپ ڈیٹ: ۳ مارچ، ۲۰۲۶

کیا یہ ٹیوٹوریل مددگار تھا؟