يمكن اعتبار آلة الإيثريوم (ETH) الافتراضية آلة شبه كاملة حسب تورنغ. يشير مفهوم الاكتمال حسب تورنغ Turing Completeness إلى نظام من قواعد معالجة البيانات. سُمي هذا المفهوم على اسم آلان تورنغ، مخترع ما يُعرف بـ”آلة تورنغ” Turing Machine. وتُعد لغات البرمجة ووحدات المعالجة المركزية (CPU) أمثلة جيدة على الأنظمة التي يمكنها الوصول إلى البيانات وتعديلها. وفي حال استُخدمت تلك القواعد لتحفيز آلة الحوسبة الافتراضية التي اخترعها تورنغ، فإنَّها تُعد “كاملة حسب تورنغ”. من الممكن البرهنة رياضياً على أنَّ أي نظام كامل حسب تورنغ لديه القدرة اللازمة لإجراء أي عملية حسابية ممكنة أو برنامج حاسوبي ممكن: بعبارة أخرى، الآلة الكاملة حسب تورنغ قادرة رياضياً على حل أي مسألة حسابية إذا أُدخلت فيها. وعليه، فإنَّ آلة الإيثريوم الافتراضية شبه كاملة حسب تورنغ لأنَّ العمليات الحسابية التي تُجريها هذه الآلة تكون مرتبطة بوقود الإيثريوم الذي يعمل على الحد من عدد العمليات الحسابية التي يمكن للآلة إجراءها.
وقود الإيثريوم ولغة البرمجة الذكية الخاصة بآلة الإيثريوم الافتراضية (EVM) “بايت كود” Bytecode
يمكن النظر إلى أسعار وقود شبكة الإيثريوم على أنَّها مكافئة للرسوم: كل معاملة تُجرى على شبكة الإيثريوم تتطلب دفع رسوم مرتبطة بها؛ هذه الرسوم تتخذ شكل أسعار وقود الإيثريوم. يمكن تقسيم فكرة أسعار وقود الإيثريوم إلى فئتين: وقود الإيثريوم وأسعار وقود الإيثريوم، كالآتي:
- وقود الإيثريوم: هي بمثابة أداة تُستخدم لتقدير الرسوم المطلوبة لتنفيذ عملية حسابية معينة.
- أسعار وقود الإيثريوم: هي المبلغ الذي يقبل الأفراد دفعه بعملة الإيثريوم (ETH) مقابل كل وحدة من وقود الإيثريوم. تُقاس أسعار وقود الإيثريوم في أكثر الأحيان بوحدة “وي” (Wei)، وهي أصغر وحدة بعملة الأثير؛ إذ أنَّ الإيثريوم الواحدة يساوي 10^18 وي.
من ثم، لكي تُنفذ أي معاملة على شبكة الإيثريوم، لابد أن يحدد المرسل الحد الأقصى لوقود الإيثريوم وسعر وقود الإيثريوم المرتبط بالمعاملة. وفي حال لم يكن المرسل يمتلك ما يكفي من وقود الإيثريوم لإجراء المعاملة، يُقال إنَّ “الوقود قد نفد” من المعاملة وأصبحت غير صالحة.
يحدّ وقود الإيثريوم من عدد العمليات الحسابية التي يمكن لآلة الإيثريوم الافتراضية إجراءها بعدة طرق، من بينها:
- أنَّ هناك حداً أقصى لوقود الإيثريوم المرتبط بالبلوكات المعدّنة على بلوكتشين شبكة الإيثريوم؛ أي أنَّ وقود الإيثريوم المُستخدم من جميع المعاملات الموجودة داخل بلوك واحد لا يمكن أن يتجاوز مقدار معين.
- لوقود الإيثريوم أسعار مرتبطة به، بغض النظر عمّا إذا كانت قيود الحد الأقصى للوقود قد رُفعت وأصبحت الآلة نظرياً من حل أي مسألة حسابية تستقبلها أم لا؛ فبعض المعاملات قد تكون بالغة التعقيد وغير عملية من الناحية الاقتصادية.
كذلك، لآلة الإيثريوم الافتراضية لغة برمجة خاصة بها تُعرف باسم “بايت كود” (EVM bytecode): عند كتابة أي كود بلغات البرمجة رفيعة المستوى مثل لغة سوليدتي Solidity الخاصة بالعقود الذكية لشبكة الإيثريوم، يمكن بعد ذلك تجميع هذا الكود بلغة بايت كود الخاصة بآلة الإيثريوم الافتراضية لكي تتمكن الآلة من فهم المكتوب.
آلة حالات حسب طبيعة المعاملات
تُعد آلة الإيثريوم الافتراضية عنصراً مهماً من عناصر بناء شبكة الإيثريوم. يرجع ذلك إلى أنَّها مسؤولة عن معالجة الحالة الداخلية والحوسبة الخاصة بالشبكة. ليس هذا فحسب، بل يجب على الآلة أيضاً معالجة بيانات الحسابات المتعلقة بالمحافظ والأرصدة والأسعار الحالية لوقود الإيثريوم وبيانات البلوكات.
كما ذكرنا من قبل، فإنَّ آلة الإيثريوم الافتراضية مسؤولة عن معالجة الحالة الداخلية للشبكة: إذ يتوجب على الآلة تتبع حالة العديد من المكونات لكي تدعم إجراء المعاملات بنجاح. ويُعد ذلك مهماً لأنَّ حالة تلك المكونات هي ما يؤثر حقاً في مستوى التغيير في البلوكتشين الأساسية؛ وهذا هو سبب وصف شبكة الإيثريوم في كثير من الأحيان بأنَّها آلة حالات مبنية على المعاملات. لكن قبل أن نلقي نظرة على المكونات المختلفة التي يتوجب على آلة الإيثريوم الافتراضية متابعتها، لعل من المفيد أن نعطي شرحاً موجزاً لمفهوم “الحالة” أولاً.
يشير مفهوم “آلة الحالات” في مجال علوم الحاسوب إلى أيّ آلة قادرة على قراءة سلسلة من المدخلات والانتقال إلى حالة جديدة بناءً على ذلك. وبالمثل، تعمل آلة الحالات الخاصة بشبكة الإيثريوم أيضاً على هذا النحو: قبل إضافة أي مدخلات أو تنفيذ أي معاملات على شبكة الإيثريوم، تكون نقطة البدء أشبه بالصفحة البيضاء. ومع إجراء المعاملات على الشبكة، تمثل أي مرحلة في ذلك الوقت الحالة الراهنة لشبكة الإيثريوم. لكن لكي يتم الانتقال من حالة إلى أخرى، يجب أن تكون المعاملات الجارية صحيحة؛ وتُعد المعاملات صحيحة حين يتم التحقق منها بنجاح من خلال عملية التعدين.
تُعرف عملية التعدين هذه باسم “إثبات العمل” (PoW) وتجري بمشاركة عُقد ضمن شبكة الإيثريوم تستهلك الموارد الحاسوبية للشبكة في سبيل الحصول على امتياز إنشاء بلوك جديد بالمعاملات الصحيحة وإضافته إلى بلوكتشين الشبكة. يمكن للمعدّنين إضافة بلوك جديد إلى البلوكتشين حين يتمكنون من تقديم “إثبات” حسابي بذلك؛ إذ أنَّ الإثبات الصحيح يرسل إشارة إلى الشبكة تفيد بأنَّ البلوك صحيح، مما ينتج عنه قبول البلوك وإضافته إلى البلوكتشين. وعندما يتمكن المعدّنون من التحقق من صحة البلوك بنجاح، يحصلون على مكافأة بعملة الإيثريوم، وهي الأصل الأصلي لشبكة الإيثريوم، في مقابل استهلاكهم الموارد الحاسوبية خلال عملية إثبات العمل.
من بين المكونات التي يتوجب على آلة الإيثريوم الافتراضية متابعتها: حالة الحسابات Account State وحالة العالم World State وحالة التخزين Storage State وبيانات البلوك Block Information وبيانات بيئة التشغيل Runtime Environment Information.
حالة الحسابات Account State
يمكن اعتبار أنًّ شبكة الإيثريوم تتألف من عدة حسابات صغيرة قادرة على التفاعل مع بعضها (وهذا ممكن بفضل تمتع شبكة الإيثريوم بنظام لتمرير الرسائل). ويمكن تقسيم الحسابات الموجودة على شبكة الإيثريوم إلى نوعين فرعيين هما حسابات مملوكة لأطراف خارجية وحسابات العقود:
- الحسابات المملوكة لأطراف خارجية: يتم التحكم بهذه الحسابات عن طريق مفاتيح خاصة ولا يوجد لها كود مرتبط بها.
- حسابات العقود: يتم التحكم بهذه الحسابات عن طريق كود العقد الخاص بها ولها كود مرتبط بها.
بإمكان الحسابات المملوكة لأطراف خارجية إرسال الرسائل إلى الحسابات الأخرى المملوكة لأطراف خارجية أو إلى حسابات العقود الأخرى من خلال التوقيع رقمياً على المعاملة باستخدام مفتاح خاص. ويمكن اعتبار التواصل بين أي حسابين مملوكين لأطراف خارجية مجرد نقل للقيمة. أما الرسائل بين الحسابات المملوكة لأطراف خارجية وحسابات العقود، فإنَّها تنفذ كود حساب العقد؛ مما يتيح لحساب العقد تنفيذ الإجراءات المنصوص عليها في الكود، والتي قد تتضمن: تحويل التوكنات واستحداث توكنات جديدة، وما إلى ذلك. من المهم الإشارة إلى أنَّه ليس بمقدور حسابات العقود بدء معاملة جديدة من تلقاء نفسها (بخلاف الحسابات المملوكة لأطراف خارجية). وعليه، فإنَّ حسابات العقود هي حسابات تفاعلية؛ بمعنى أنَّها لا تستطيع المشاركة إلا في المعاملات التي تأتي كرد لمعاملات أخرى استقبلتها إما من حساب مملوك لأطراف خارجية أو من حسابات عقود أخرى.
هناك أربعة عناصر مكوّنة لحالة الحسابات، نذكر من بينها:
- الرقم العشوائي Nonce: في حالة الحساب المملوك لأطراف خارجية، تمثل هذه القيمة عدد المعاملات المرسلة من عنوان محفظة الحساب. لكن إذا كان حساب عقد، ففي هذه الحالة يشير الرقم العشوائي إلى عدد العقود المنشأة من الحساب.
- الرصيد Balance: هو عدد وحدات وي المملوكة لعنوان محفظة الحساب.
- هاش الكود CodeHash: عبارة عن قيمة هاش ثابتة لهاش الكود الخاص بالحساب لدى آلة الإيثريوم الافتراضية
حالة العالم World State
تتألف الحالة الشاملة لشبكة الإيثريوم فعلياً من خريطة من معرّفات عناوين للمحافظ مكوّنة من 160 بت وحالة الحسابات، وتُحفظ بيانات هذه الخريطة في هيكل بيانات يُعرف باسم “شجرة ميركل- باتريشيا” (Merkle Patricia Tree)؛ هذا الهيكل مكوّن من مجموعة من العُقد تتميز بما يلي:
- كمية كبيرة من العُقد الفرعية تحتوي على البيانات الأساسية وتقع في أسفل الشجرة
- مجموعة من العُقد الوسطى، كل عُقدة منها هي هاش العقدتين الفرعيتين.
- معدل هاش جذري واحد تشكّل من معدل الهاش الخاص بالعقدتين الفرعيتين السابقتين، ويمثل قمة الهيكل الشجري.
حالة التخزين Storage State
وهي بيانات الحالة الخاصة بالحساب التي يتم الاحتفاظ بها في وقت التشغيل على آلة الإيثريوم الافتراضية.
بيانات البلوك Block Information
وهي قيّم الحالة المطلوبة لدعم المعاملة. تشمل بيانات البلوك ما يلي:
- هاش البلوك Blockhash: وهو هاش لأخر بلوك تم الانتهاء منه
- محفظة كوين بيس Coinbase: عنوان محفظة مُستقبِل المعاملة
- الطابع الزمني Timestamp: الطابع الزمني الحالي للبلوك
- الرقم Number: رقم البلوك الحالي
- الصعوبة Difficulty: صعوبة البلوك الحالي
- الحد الأقصى لوقود الإيثريوم: الحد الأقصى لوقود الإيثريوم المرتبط بالبلوك الحالي
بيانات بيئة التشغيل Runtime Environment Information
هي البيانات التي تُستخدم لتنفيذ المعاملات، وتشمل ما يلي:
- سعر وقود الإيثريوم: السعر الحالي لوقود الإيثريوم الذي يحدده الطرف الذي أنشأ المعاملة
- حجم الكود Codesize: حجم الكود الأساسي للمعاملة
- المتصل Caller: عنوان محفظة الحساب الذي ينفّذ المعاملة
- المنشأ Origin: عنوان محفظة المُرسل الأصلي للمعاملة
لمزيد من المعلومات حول آلة الإيثريوم الافتراضية، يُرجى الاستعانة بالدورة التعليمية بعنوان (الدورة التعليمية لتطوير الإيثريوم) الموجودة على حساب شبكة الإيثريوم على منصة غيت هاب Github. يُرجى الاطلاع أيضاً على الورقة الصفراء لشبكة الإيثريوم.
إخلاء المسؤولية: الآراء والتحليلات والأخبار الواردة لا تعكس رأي بت شين. لا ينبغي اعتبار أي من المعلومات التي تقرأها على موقع بت شين بمثابة نصيحة استثمارية، ولا تصادق بت شين على أي مشروع قد يتم ذكره أو ربطه في هذه المقالة. يجب اعتبار شراء وتداول العملات المشفرة نشاطًا عالي المخاطر. ويرجى بذل المجهود الواجب قبل اتخاذ أي إجراء يتعلق بالمحتوى المذكور ضمن هذا التقرير. لا تتحمل بت شين أي مسؤولية في حالة خسارة الأموال في تداول العملات المشفرة.