لأغراض تعليمية فقط؛ لا يشكل ذلك نصيحة استثمارية أو توصية استثمارية. قد تؤدي الاستثمارات إلى خسائر.
الإجابة المباشرة
آلة إيثريوم الافتراضية هي آلة انتقال الحالة في طبقة التنفيذ التي تفسر البايت كود وفق قواعد ترقية محددة. وعند إعطائها الحالة السابقة الصالحة نفسها، والمعاملة أو الرسالة العليا نفسها، وبيئة الكتلة ومواصفة الترقية نفسيهما، يجب أن تحسب عملاء التنفيذ المتوافقة الحالة اللاحقة أو نتيجة الفشل نفسها. ولا تختار EVM ترتيب المعاملات، ولا توفر نهائية الإجماع، ولا تتحقق من أصالة الواجهة، ولا تجعل كل سلسلة متوافقة مع EVM آمنة بقدر إيثريوم.
المعاملة الموقعة خارجيًا كائن بروتوكولي أعلى. أما النشاط بين العقود فيتكون من استدعاءات رسائل متداخلة وأطر استدعاء، وليس معاملات مستقلة لكل منها nonce وإيصال وhash خاص. ويضم كل إطار البايت كود وعداد البرنامج ومكدسًا من كلمات 256 بت وذاكرة وcalldata وreturndata وغازًا وسياق تنفيذ؛ وينتمي التخزين الدائم إلى حساب، بينما يستمر التخزين العابر طوال المعاملة وفق قواعد الترقية.
آلية العمل
- ثبّت لقطة التنفيذ: السلسلة و
chainId، والشبكة، ورقم الكتلة وhash، والحالة القانونية أو النهائية، والترقية، وعميل التنفيذ ومراجعة المواصفة، والحالة السابقة أو جذرها، ونوع المعاملة، والبايتات الموقعة الأصلية، وhash المعاملة وإيصالها. الحتمية مشروطة بهذا السياق الدقيق. - فك غلاف المعاملة وافصل الصلاحية السابقة للتنفيذ عن التنفيذ. تحقق من التوقيع والمرسل وnonce والوجهة أو الإنشاء والقيمة وcalldata وحد الغاز وحقول الرسوم وقائمة الوصول وأي حقول خاصة بالنوع. المعاملة المرفوضة قبل الإدراج ليست معاملة مدرجة نُفذت ثم تراجعت.
- أنشئ الرسالة العليا وشجرة الاستدعاءات الكاملة. سجّل أطر
CALLوSTATICCALLوDELEGATECALLوإنشاء العقود والعقود سابقة التجميع؛ والمتصل وعنوان السياق وعنوان الكود وmsg.senderوmsg.valueوتحويل القيمة وcalldata وreturndata والغاز المحال وعلامة النجاح. تسمية المستكشف «معاملة داخلية» عرض مشتق من trace وليست معاملة موقعة. - تتبع في كل إطار عداد البرنامج والمكدس والذاكرة وcalldata وreturndata والسجلات والتخزين الدائم ودفتر التخزين العابر. يستخدم
CALLعنوان المستدعى وسياق تخزينه؛ وينفذDELEGATECALLالكود المستهدف ضمن عنوان المتصل وسياق تخزينه مع الحفاظ على المرسل والقيمة القادمين من الأعلى؛ ويمنعSTATICCALLتعديل الحالة. - طبّق قواعد الغاز للترقية المستهدفة: الغاز الأساسي، والتكاليف الديناميكية للتعليمات، وتوسيع الذاكرة، والوصول البارد والدافئ، وتمرير الغاز للاستدعاء، والمخصصات، ورسوم العقود سابقة التجميع، والمبالغ المستردة وحدودها. ثم احسب رسوم المعاملة بصورة منفصلة عن القيمة باستخدام الغاز المستهلك وسعر الغاز الفعلي. تقدير الغاز مشروط وليس ضمانًا.
- حدد نتائج الأطر بحسب نطاقها. يثبت
RETURNنتائج الإطار إذا ثبتت نتائج أسلافه لاحقًا. ويتراجعREVERTعن الإطار وذريته ويعيد بيانات، ولا يلزم أن يستهلك كل الغاز المتبقي للإطار؛ أما التوقفات الاستثنائية فمختلفة. يمكن للأب التقاط فشل استدعاء منخفض المستوى ومواصلة التنفيذ، لذلك قد تكون حالة الإيصال الأعلى1رغم فشل ابن. والفشل الأعلى المدرج يظل مستهلكًا nonce المرسل والغاز المدفوع. - طابق حالة الإيصال والغاز المستهلك والسجلات والعنوان المنشأ وبيانات الإرجاع مع الأرصدة وnonce والكود والتخزين الدائم والعابر ودفاتر الرموز وtraces قبل الحالة وبعدها ومع جذر حالة الكتلة. أعد التنفيذ بعميل مستقل عند الحاجة، ودقق تنفيذات proxy وتخطيطات التخزين والعقود سابقة التجميع وهدف EVM للمترجم وترقيات fork بمعزل عن نهائية الإجماع.
أمثلة محلولة
- تراجع أعلى مدرج ودفتر الرسوم. لمعاملة من النوع 2 حد غاز
80,000، واستهلاك52,000، ورسوم أساسية20 gwei، وحد أقصى لإكرامية الأولوية3 gwei، وحد أقصى للرسوم40 gwei. سعر الغاز الفعلي هوmin(40, 20 + 3) = 23 gwei؛ والرسوم الفعلية52,000 * 23 gwei = 0.001196 ETH، منها52,000 * 20 gwei = 0.001040 ETHتُحرق و52,000 * 3 gwei = 0.000156 ETHإكرامية أولوية. ولا تُفرض رسوم على28,000 gasغير المستخدمة. وإذا تراجع التنفيذ الأعلى، تتراجع آثار التخزين وتحويل القيمة والسجلات، لكن nonce المرسل والرسوم الفعلية يبقيان. - التقاط فشل ابن. يبدأ العقد A بالقيمة
A.x = 5. يستدعي B؛ فيكتب B القيمةB.y = 9، ويصدر سجلًا، ثم ينفذREVERT. تتراجع كتابة B وسجله. يلاحظ A أنsuccess = false، ويكتبA.x = 7، ثم يعود طبيعيًا. حالة الإيصال النهائية1، والقيمةA.x = 7، بينما يحتفظ B بقيمته السابقة. لذلك لا يثبت نجاح المستوى الأعلى نجاح كل استدعاء ابن. - سياق تخزين DELEGATECALL. لدى proxy القيمة
slot0 = 5، ولدى حساب التنفيذslot0 = 99. يقرأ كود التنفيذ الخانة 0، ويضيف7، ثم يخزن النتيجة. عند تنفيذه عبرDELEGATECALL، تتغير قيمة proxy إلىslot0 = 12، بينما يبقى التنفيذ عندslot0 = 99؛ إذ يسري عنوان proxy وسياق تخزينه، مع الحفاظ على المرسل والقيمة القادمين من الأعلى. وقد يفسد تخطيط تخزين غير متوافق حالة proxy. - SELFDESTRUCT ضمن ترقية محددة. وفق قاعدة EIP-6780، ينفذ عقد موجود يملك
2 ETHأمرSELFDESTRUCTلصالح المستفيد B. يتلقى B مقدار2 ETHويصبح رصيد العقد صفرًا، لكن الحساب الموجود وكوده وتخزينه لا تُحذف. ويقتصر سلوك الحذف على عقد أُنشئ ودمر نفسه في المعاملة ذاتها. هذا سلوك خاص بالترقية ولا يجوز تعميمه إلى الماضي أو إلى كل سلسلة EVM.
المخاطر
- إعادة التشغيل على سلسلة أو كتلة أو ترقية أو عميل أو حالة سابقة خاطئة.
- اعتبار حالة غير قانونية أو أعيد تنظيمها سياق تنفيذ نهائيًا.
- الخلط بين رفض التحقق السابق والتراجع عن تنفيذ مدرج.
- افتراض أن محاكاة معلقة ستطابق الحالة عند الإدراج لاحقًا.
- تجاهل تراجع أعلى أو توقف استثنائي أو نفاد الغاز.
- إغفال فشل ابن التقطه أبوه.
- إساءة قراءة سياق الاستدعاء أو عنوان الكود أو المتصل أو المرسل أو القيمة.
- إفساد حالة proxy بسبب عدم توافق تخطيط التخزين في
DELEGATECALL. - السماح بإعادة الدخول أو تحويل خارجي غير آمن للقيمة والتحكم.
- الوثوق ببيانات إرجاع أو علامات نجاح أو أخطاء مخصصة من دون تحقق.
- اعتبار السجلات أو traces حالة نهائية موثوقة.
- الخطأ في حساب الوصول البارد والدافئ أو الذاكرة أو الغاز المحال للاستدعاء.
- إساءة تطبيق المبالغ المستردة أو حدودها أو المخصصات أو قاعدة
63/64. - استخدام عنوان أو مدخلات أو رسوم أو دلالات ترقية خاطئة لعقد سابق التجميع.
- الخلط بين أعمار التخزين الدائم والذاكرة والتخزين العابر.
- توقع نجاح تعديل الحالة داخل
STATICCALL. - تطبيق افتراضات حذف
SELFDESTRUCTالسابقة لـEIP-6780. - إغفال تغير تنفيذ proxy أو المسؤول أو هدف المترجم.
- تشغيل قواعد عميل تنفيذ مختلفة أو غير محدثة.
- استنتاج أمان الإجماع أو الجسر أو الرمز أو الحوكمة أو النهائية من توافق EVM.
مفاهيم خاطئة شائعة
- كود Solidity المصدري هو الكائن الذي يُنفذ مباشرة على السلسلة.
- المعاملة المدرجة التي تراجعت لا تكلف شيئًا ولا تغير nonce.
- تثبت حالة الإيصال
1نجاح كل استدعاء داخلي كما هو مقصود. - الحدث أو trace هو الحالة الموثوقة للأصول والتخزين.
- يضمن توافق EVM تطابق التعليمات والغاز والعقود سابقة التجميع والإجماع والأمان.
موضوعات ذات صلة
المصادر
- Ethereum Virtual Machine (EVM) - Ethereum.org (تاريخ الاطلاع: 2026-08-12)
- Ethereum Yellow Paper: a formal specification of Ethereum, a programmable blockchain - Ethereum Foundation (تاريخ الاطلاع: 2026-08-12)
- Ethereum Execution Layer Specification - Ethereum Execution Specs (تاريخ الاطلاع: 2026-08-12)
- Introduction to Smart Contracts - Solidity Documentation (تاريخ الاطلاع: 2026-08-12)
- EIP-7: DELEGATECALL - Ethereum Improvement Proposals (تاريخ الاطلاع: 2026-08-12)
- EIP-140: REVERT instruction - Ethereum Improvement Proposals (تاريخ الاطلاع: 2026-08-12)
- EIP-2929: Gas cost increases for state access opcodes - Ethereum Improvement Proposals (تاريخ الاطلاع: 2026-08-12)
- EIP-6780: SELFDESTRUCT only in same transaction - Ethereum Improvement Proposals (تاريخ الاطلاع: 2026-08-12)