تعلم مواضيع إيثريوم التأسيسية باستخدام SQL
تستهدف العديد من البرامج التعليمية الخاصة بإيثريوم المطورين، ولكن هناك نقص في الموارد التعليمية لمحللي البيانات أو للأشخاص الذين يرغبون في رؤية البيانات الموجودة على السلسلة دون تشغيل عميل أو عقدة.
يساعد هذا البرنامج التعليمي القراء على فهم مفاهيم إيثريوم الأساسية بما في ذلك المعاملات والكتل والغاز عن طريق الاستعلام عن البيانات الموجودة على السلسلة باستخدام لغة الاستعلام المهيكلة (SQL) من خلال واجهة مقدمة من ديون أناليتكس (opens in a new tab).
يمكن أن تساعدنا البيانات الموجودة على السلسلة في فهم إيثريوم والشبكة وكاقتصاد لقوة الحوسبة، ويجب أن تكون بمثابة أساس لفهم التحديات التي تواجه إيثريوم اليوم (مثل ارتفاع أسعار الغاز)، والأهم من ذلك، المناقشات حول حلول التوسع.
المعاملات
تبدأ رحلة المستخدم على إيثريوم بتهيئة حساب يتحكم فيه المستخدم أو كيان برصيد ETH. هناك نوعان من الحسابات - يتحكم فيها المستخدم أو عقد ذكي (انظر ethereum.org).
يمكن عرض أي حساب على مستكشف الكتل مثل إيثرسكان (opens in a new tab) أو بلوك سكوت (opens in a new tab). مستكشفات الكتل هي بوابة لبيانات إيثريوم. يعرضون، في الوقت الفعلي، بيانات عن الكتل والمعاملات والمعدنين والحسابات وغيرها من الأنشطة على السلسلة (انظر هنا).
ومع ذلك، قد يرغب المستخدم في الاستعلام عن البيانات مباشرة للتوفيق بين المعلومات التي توفرها مستكشفات الكتل الخارجية. توفر ديون أناليتكس (opens in a new tab) هذه الإمكانية لأي شخص لديه بعض المعرفة بلغة SQL.
كمرجع، يمكن عرض حساب العقد الذكي لمؤسسة إيثريوم (EF) على بلوك سكوت (opens in a new tab).
شيء واحد يجب ملاحظته هو أن جميع الحسابات، بما في ذلك حسابات مؤسسة إيثريوم (EF)، لها عنوان عام يمكن استخدامه لإرسال واستلام المعاملات.
يتكون رصيد الحساب على إيثرسكان من معاملات عادية ومعاملات داخلية. المعاملات الداخلية، على الرغم من الاسم، ليست معاملات فعلية تغير حالة السلسلة. إنها عمليات تحويل قيمة يتم بدؤها عن طريق تنفيذ عقد (المصدر (opens in a new tab)). نظرًا لأن المعاملات الداخلية لا تحتوي على توقيع، فهي غير مدرجة في البلوكتشين ولا يمكن الاستعلام عنها باستخدام ديون أناليتكس.
لذلك، سيركز هذا البرنامج التعليمي على المعاملات العادية. يمكن الاستعلام عن ذلك على النحو التالي:
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إظهار الكلسيؤدي هذا إلى الحصول على نفس المعلومات المتوفرة في صفحة معاملات إيثرسكان. للمقارنة، إليك المصدران:
إيثرسكان
صفحة عقد EF على بلوك سكوت. (opens in a new tab)
ديون أناليتكس
يمكنك العثور على لوحة المعلومات هنا (opens in a new tab). انقر فوق الجدول لرؤية الاستعلام (انظر أعلاه أيضًا).
تحليل المعاملات
تتضمن المعاملة المقدمة عدة أجزاء من المعلومات بما في ذلك (المصدر):
- المستلم: عنوان الاستلام (يتم الاستعلام عنه كـ "to")
- التوقيع: بينما تقوم المفاتيح الخاصة للمرسل بتوقيع معاملة، ما يمكننا الاستعلام عنه باستخدام SQL هو العنوان العام للمرسل ("from").
- القيمة: هذا هو مقدار ETH المحول (انظر عمود
ether). - البيانات: هذه بيانات عشوائية تم تجزئتها (انظر عمود
data) - gasLimit - الحد الأقصى لوحدات الغاز التي يمكن أن تستهلكها المعاملة. تمثل وحدات الغاز خطوات حسابية
- maxPriorityFeePerGas - الحد الأقصى لمقدار الغاز الذي سيتم تضمينه كإكرامية للمعدِّن
- maxFeePerGas - الحد الأقصى لمقدار الغاز الذي يرغب المستخدم في دفعه مقابل المعاملة (بما في ذلك baseFeePerGas و maxPriorityFeePerGas)
يمكننا الاستعلام عن هذه الأجزاء المحددة من المعلومات للمعاملات إلى العنوان العام لمؤسسة إيثريوم:
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إظهار الكلالكتل
ستغير كل معاملة حالة آلة إيثريوم الافتراضية (EVM) (المصدر). يتم بث المعاملات إلى الشبكة للتحقق منها وإدراجها في كتلة. ترتبط كل معاملة برقم كتلة. لرؤية البيانات، يمكننا الاستعلام عن رقم كتلة معين: 12396854 (أحدث كتلة بين معاملات مؤسسة إيثريوم وقت كتابة هذا التقرير، 11/5/21).
علاوة على ذلك، عندما نستعلم عن الكتلتين التاليتين، يمكننا أن نرى أن كل كتلة تحتوي على تجزئة الكتلة السابقة (أي، التجزئة الأصلية)، مما يوضح كيفية تشكيل البلوكتشين.
تحتوي كل كتلة على مرجع للكتلة الأصلية الخاصة بها. يظهر هذا أدناه بين عمودي hash وparent_hash (المصدر):
إليك الاستعلام (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)).
بالنسبة لهذا البرنامج التعليمي، سنركز على البيانات الموجودة على السلسلة والتي يمكن الاستعلام عنها باستخدام SQL عبر ديون أناليتكس.
كما هو مذكور أعلاه، تحتوي كل كتلة على قائمة بالمعاملات، ويمكننا الاستعلام عن ذلك عن طريق التصفية لكتلة معينة. سنجرب أحدث كتلة، 12396854:
1SELECT * FROM ethereum."transactions"2WHERE block_number = 123968543ORDER BY block_time DESC`إليك مخرجات SQL على Dune:
تؤدي إضافة هذه الكتلة الواحدة إلى السلسلة إلى تغيير حالة آلة إيثريوم الافتراضية (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).
الرسم البياني لكتل إيثريوم المنتجة يوميًا (2016 - حتى الآن) هو:
متوسط عدد الكتل المنتجة يوميًا خلال هذه الفترة الزمنية هو ~5,874:
الاستعلامات هي:
1# استعلام لتصوير عدد الكتل المنتجة يوميًا منذ 201623SELECT4 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ثم هناك الغاز الفعلي المستخدم يوميًا للدفع مقابل الحوسبة التي تتم على سلسلة إيثريوم (أي إرسال معاملة، أو استدعاء عقد ذكي، أو سك رمز غير قابل للاستبدال). هذا هو الطلب على مساحة كتل إيثريوم المتاحة:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_used) AS avg_block_gas_used4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1يمكننا أيضًا وضع هذين المخططين معًا لمعرفة كيفية توافق الطلب والعرض:
لذلك يمكننا فهم أسعار الغاز كدالة للطلب على مساحة كتل إيثريوم، مع الأخذ في الاعتبار العرض المتاح.
أخيرًا، قد نرغب في الاستعلام عن متوسط أسعار الغاز اليومية لسلسلة إيثريوم، ومع ذلك، سيؤدي القيام بذلك إلى وقت استعلام طويل بشكل خاص، لذلك سنقوم بتصفية استعلامنا إلى متوسط كمية الغاز المدفوعة لكل معاملة من قبل مؤسسة إيثريوم.
يمكننا أن نرى أسعار الغاز المدفوعة لجميع المعاملات التي تمت على عنوان مؤسسة إيثريوم على مر السنين. إليك الاستعلام:
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ملخص
من خلال هذا البرنامج التعليمي، نفهم مفاهيم إيثريوم الأساسية وكيف تعمل بلوكتشين إيثريوم عن طريق الاستعلام والحصول على فكرة عن البيانات الموجودة على السلسلة.
يمكن العثور على لوحة المعلومات التي تحتوي على كل التعليمات البرمجية المستخدمة في هذا البرنامج التعليمي هنا (opens in a new tab).
لمزيد من استخدام البيانات لاستكشاف ويب3 ابحث عني على تويتر (opens in a new tab).
آخر تحديث للصفحة: 26 فبراير 2026










