تخطي إلى المحتوى الرئيسي

تعلم موضوعات إيثيريوم الأساسية باستخدام ⁦SQL⁩

SQL
الاستعلام
المعاملات
البيانات والتحليلات
مبتدئ
بول أبيفات
11 مايو 2021
8 دقيقة للقراءة

تستهدف العديد من البرامج التعليمية الخاصة بإيثيريوم المطورين، ولكن هناك نقص في الموارد التعليمية لمحللي البيانات أو للأشخاص الذين يرغبون في رؤية البيانات على السلسلة دون تشغيل عميل أو عقدة.

يساعد هذا البرنامج التعليمي القراء على فهم مفاهيم إيثيريوم الأساسية بما في ذلك المعاملات والكتل والغاز من خلال الاستعلام عن البيانات على السلسلة باستخدام لغة الاستعلام المهيكلة (SQL) من خلال واجهة توفرها Dune Analytics (opens in a new tab).

يمكن أن تساعدنا البيانات على السلسلة في فهم إيثيريوم، والشبكة، وكاقتصاد لقوة الحوسبة، ويجب أن تكون بمثابة أساس لفهم التحديات التي تواجه إيثيريوم اليوم (أي ارتفاع أسعار الغاز)، والأهم من ذلك، المناقشات حول حلول التوسع.

المعاملات

تبدأ رحلة المستخدم على إيثيريوم بتهيئة حساب يتحكم فيه المستخدم أو كيان برصيد 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).

الشيء الوحيد الذي يجب ملاحظته هو أن جميع الحسابات، بما في ذلك حساب مؤسسة إيثيريوم، لها عنوان عام يمكن استخدامه لإرسال واستقبال المعاملات.

يتكون رصيد الحساب على Etherscan من المعاملات العادية والمعاملات الداخلية. المعاملات الداخلية، على الرغم من اسمها، ليست معاملات فعلية تغير حالة السلسلة. إنها تحويلات قيمة يتم إجراؤها عن طريق تنفيذ عقد (المصدر (opens in a new tab)). نظرًا لأن المعاملات الداخلية ليس لها توقيع، فهي غير مدرجة في سلسلة الكتل ولا يمكن الاستعلام عنها باستخدام Dune Analytics.

لذلك، سيركز هذا البرنامج التعليمي على المعاملات العادية. يمكن الاستعلام عن ذلك على النحو التالي:

سينتج عن ذلك نفس المعلومات المقدمة في صفحة المعاملات الخاصة بـ Etherscan. للمقارنة، إليك المصدرين:

Etherscan

Screenshot of Etherscan transaction explorer view

صفحة عقد مؤسسة إيثيريوم على Blockscout. (opens in a new tab)

Dune Analytics

Screenshot of a Dune Analytics query dashboard

يمكنك العثور على لوحة المعلومات هنا (opens in a new tab). انقر على الجدول لرؤية الاستعلام (انظر أيضًا أعلاه).

تفصيل المعاملات

تتضمن المعاملة المُقدمة عدة أجزاء من المعلومات بما في ذلك (المصدر):

  • المستلم: عنوان الاستلام (يُستعلم عنه كـ "to")
  • التوقيع: بينما تقوم المفاتيح الخاصة للمرسل بتوقيع معاملة، فإن ما يمكننا الاستعلام عنه باستخدام SQL هو العنوان العام للمرسل ("from").
  • القيمة: هذا هو مقدار ETH المحول (انظر عمود ether).
  • البيانات: هذه بيانات عشوائية تم إجراء تجزئة لها (انظر عمود data)
  • حد الغاز (gasLimit) – الحد الأقصى لعدد وحدات الغاز التي يمكن أن تستهلكها المعاملة. تمثل وحدات الغاز خطوات حسابية
  • الحد الأقصى لرسوم الأولوية لكل غاز (maxPriorityFeePerGas) - الحد الأقصى لمقدار الغاز الذي سيتم تضمينه كإكرامية للمُعَدِّن
  • الحد الأقصى للرسوم لكل غاز (maxFeePerGas) - الحد الأقصى لمقدار الغاز الذي يُرغب في دفعه مقابل المعاملة (شاملاً baseFeePerGas و maxPriorityFeePerGas)

يمكننا الاستعلام عن هذه الأجزاء المحددة من المعلومات للمعاملات المرسلة إلى العنوان العام لمؤسسة إيثيريوم:

الكتل

ستغير كل معاملة حالة آلة إيثيريوم الافتراضية (EVM) (المصدر). يتم بث المعاملات إلى الشبكة ليتم التحقق منها وتضمينها في كتلة. ترتبط كل معاملة برقم كتلة. لرؤية البيانات، يمكننا الاستعلام عن رقم كتلة محدد: 12396854 (أحدث كتلة بين معاملات مؤسسة إيثيريوم حتى وقت كتابة هذا التقرير، 11/5/21).

علاوة على ذلك، عندما نستعلم عن الكتلتين التاليتين، يمكننا أن نرى أن كل كتلة تحتوي على تجزئة الكتلة السابقة (أي تجزئة الأصل)، مما يوضح كيف تتشكل سلسلة الكتل.

تحتوي كل كتلة على إشارة إلى كتلتها الأصلية. يظهر هذا أدناه بين عمودي hash و parent_hash (المصدر):

parent_hash

إليك الاستعلام (opens in a new tab) على Dune Analytics:

يمكننا فحص كتلة من خلال الاستعلام عن الوقت ورقم الكتلة والصعوبة والتجزئة وتجزئة الأصل والرقم الفريد.

الشيء الوحيد الذي لا يغطيه هذا الاستعلام هو قائمة المعاملات والتي تتطلب استعلامًا منفصلاً أدناه و جذر الحالة. ستقوم العقدة الكاملة أو الأرشيفية بتخزين جميع المعاملات وانتقالات الحالة، مما يسمح للعملاء بالاستعلام عن حالة السلسلة في أي وقت. نظرًا لأن هذا يتطلب مساحة تخزين كبيرة، يمكننا فصل بيانات السلسلة عن بيانات الحالة:

  • بيانات السلسلة (قائمة الكتل والمعاملات)
  • بيانات الحالة (نتيجة انتقال حالة كل معاملة)

يقع جذر الحالة في الفئة الأخيرة وهو بيانات ضمنية (غير مخزنة على السلسلة)، بينما بيانات السلسلة صريحة ومخزنة على السلسلة نفسها (المصدر (opens in a new tab)).

في هذا البرنامج التعليمي، سنركز على البيانات على السلسلة التي يمكن الاستعلام عنها باستخدام SQL عبر Dune Analytics.

كما ذكرنا أعلاه، تحتوي كل كتلة على قائمة بالمعاملات، ويمكننا الاستعلام عن ذلك عن طريق التصفية لكتلة معينة. سنجرب أحدث كتلة، 12396854:

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

إليك مخرجات SQL على Dune:

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

ثم هناك الغاز الفعلي المستخدم يوميًا لدفع تكاليف الحوسبة التي تتم على سلسلة إيثيريوم (أي إرسال معاملة، أو استدعاء عقد ذكي، أو سك رمز غير قابل للاستبدال). هذا هو الطلب على مساحة كتلة إيثيريوم المتاحة:

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).