
عقد يظل قيد التشغيل بعد مكالمة فاشلة لا يمتلك اليوم وسيلة موثوقة لتحديد ما إذا كان المُستَدْعَى قد ألغى العملية عمداً أو ببساطة نفد منه الغاز الذي حدد المرسل. هذا الفجوة هي جذر هجوم "إجهاد الغاز غير الكافي"، وتحاول مقترح مسودة جديد إغلاقها على مستوى EVM. EIP-8456، المفتوح للنقاش على Ethereum Magicians يوم الاثنين، يضيف تعليمة تُسمى CALLSTATUS، مؤقتاً عند opcode 0xA5 بتكلفة غاز 2. تُدفع حالة اكتمال أحدث مكالمة أو عملية إنشاء في الإطار الحالي كثلاثة بتات. البت 0 يعني إلغاء، والبت 1 يعني توقف استثنائي مثل نفاد الغاز، والبت 2 يعني أن شيئاً ما في إطار أدنى قد توقف. يشير المؤلف إلى أن الدليل الوحيد المتاح اليوم هو حساب gasleft() بعد المكالمة، وأن كل مراجعة لأسعار الغاز قد كسرت هذه العتبات. سيجعل الغاز ثنائي الأبعاد المقترح في EIP-8037 هذا الحساب أضعف حتى، لأن خزانه غير مرئي عبر تعليمة GAS. إذن لماذا البت الثالث؟ تمر معظم المكالمات الحقيقية عبر وسطاء مثل البروكسيات، أو مُلفّ functionCall من OpenZeppelin، أو Multicall3، أو مُحققين للتوقيع ERC-1271. إذا تم الإبلاغ عن حالة المُستَدْعَى المباشر فقط، فستبدو المُلفّات التي تلتقط توقف نفاد الغاز ثم تُلغي بسبب محدد وكأنها إلغاء متعمد. تحافظ المسودة على علم لاصق ينتقل عبر كل إطار، بحيث لا يمكن لأي مرسل يتحكم فقط في الغاز أن يجعل المُستدعي يقرأ إلغاءً بسيطاً. تُبلغ عن النتائج بدلاً من الأسباب، ولا يزال بإمكان المُستَدْعَى إنتاج توقف متعمد باستخدام INVALID. إنها تحمي فقط الكود المكتوب بعد نشرها، لأن العقود المُنشرة لن تقرأها. لا توجد مراجعات خارجية بعد، ورقم opcode لا يزال مفتوحاً، ونموذج أولي واختبارات لـ 58 حالة مدرجة لا تزال معلقة. الرابط - https://t.co/KnByUBgWrY
