لأغراض تعليمية فقط؛ لا يشكل ذلك نصيحة استثمارية أو توصية استثمارية. قد تؤدي الاستثمارات إلى خسائر.
الإجابة المباشرة
يمثل النموذج القائم على الحسابات حالة التنفيذ في صورة بيانات مفهرسة حسب العنوان. في طبقة تنفيذ Ethereum، تتضمن ورقة الحساب [nonce, balance, storageRoot, codeHash]. يقاس balance الأصلي بوحدة wei، وتقع بيانات العقد خلف storageRoot لذلك الحساب، ويلتزم stateRoot للكتلة بالحالة العالمية الناتجة بعد التنفيذ. تقرأ المحفظة أو مزود RPC أو مستكشف الكتل هذه الحالة ويفسرها، لكنها لا تخزن الرصيد المعتمد نيابة عن المستخدم.
أرصدة ERC-20 والمخصصات وديون الإقراض والضمانات تكون عادة قيما في تخزين العقود، وليست حقولا إضافية في حساب حاملها على مستوى البروتوكول. كذلك فإن ما يسميه المستكشف «معاملة داخلية» يكون عادة استدعاء رسالة EVM أعيد بناؤه بالتتبع، لا معاملة Ethereum مستقلة موقعة لها hash معاملة وnonce مرسل خاصان بها.
يظل التمييز التقليدي بين الحساب المملوك خارجيا (EOA) وحساب العقد مفيدا، لكن عبارة «EOA لا يحتوي أبدا على code» لم تعد مطلقة في سلسلة فعّلت EIP-7702. يمكن أن يحمل EOA مؤشر تفويض 0xef0100 || address وينفذ code المفوض مع احتفاظه بسلطة إرسال معاملات EOA. لذلك يجب أن يستند التصنيف إلى قواعد السلسلة وcode الفعلي للحساب، لا إلى تسمية قديمة في واجهة المستخدم.
تدقيق انتقال الحالة في سبع خطوات
- ثبّت نقطة الرصد: الشبكة و
chainIdوقواعد fork ورقم الكتلة وhash والطابع الزمني ووسم الكتلة مثلpendingأوlatestأوsafeأوfinalized. قد تتغير الحالة القريبة من رأس السلسلة بعد إعادة تنظيم؛ فلا تدمج حقائق من كتل مختلفة من دون تسميتها. - اقرأ حقول حساب البروتوكول:
nonceوbalanceالأصلي وstorageRootوcodeHash. إذا كان code مؤشر تفويض EIP-7702، فحل عنوان المفوض وفق قواعد ذلك fork. وبالنسبة إلى proxies والحسابات المفوضة، حدد على نحو منفصل code التنفيذ وسلطة الترقية وتخطيط التخزين. - حدد موضع أرصدة التطبيق. يغير ETH الرصيد الأصلي؛ أما رصيد ERC-20 فيغير عادة mapping في تخزين عقد الرمز؛ وقد تقع المخصصات والديون والضمانات والمكافآت في عقود وslots أخرى. decimals الرمز وlogs أدوات تفسير، وليست حقولا إضافية في ورقة الحساب.
- فك ترميز المعاملة العليا وافحصها مسبقا: النوع ونطاق السلسلة والتوقيع وnonce المرسل والمستلم أو الإنشاء والقيمة وinput وحد gas وحدود الرسوم وقائمة الوصول الاختيارية أو تفويضات EIP-7702. يجب أن يغطي المرسل القيمة والحد الأقصى للرسوم. المعاملة المرفوضة لا تدرج ولا تستهلك gas على السلسلة.
- نفذ المعاملات بترتيب الكتلة انطلاقا من الحالة السابقة. تعالج EVM استدعاءات الرسائل المتداخلة وأطر إنشاء العقود، ولكل إطار مستدع ومستدعى وقيمة وcalldata وgas وحالة إرجاع. تجعل القراءات والكتابات المشتركة النتائج معتمدة على الترتيب. تقوم قائمة وصول EIP-2930 بتسخين الحسابات وslots المسماة وتغير محاسبة gas؛ لكنها لا تمنع الوصول غير المعلن ولا تثبت سلامة التنفيذ المتوازي.
- طبق حدود الالتزام والتراجع. يثبت الإطار الناجح حالته وlogs ما لم يتراجع إطار أب لاحقا. يعيد
REVERTكتابات الإطار الفاشل وتحويلات القيمة وlogs مع إعادة gas غير المستخدم؛ ويمكن للعقد الخارجي التقاط فشل استدعاء فرعي والاستمرار بنجاح. يكون إيصال فشل أعلى مدرجstatus = 0، لكن nonce معاملة المرسل يزداد ويدفع gas المستهلك. ولمعالجة تفويض EIP-7702 قواعد ثبات خاصة بها حتى إذا تراجع التنفيذ اللاحق. - طابق الحالة اللاحقة. طابق تغيرات أرصدة الأصل والرموز وتغيرات التخزين وحالة الإيصال وgas المستخدم وسعر gas الفعلي وlogs وتتبع المزود مع الجذور التي التزمت بها الكتلة. تعامل مع traces بوصفها إعادة بناء من المزود لا معاملات إجماع مستقلة. انتظر مستوى النهائية المطلوب، ثم عالج الاستبدالات وإعادة التنظيم ومراجعات المفهرس والجسور وrollups والقيود المحاسبية العكسية صراحة.
أربعة أمثلة محلولة
- تحويل ETH وفق EIP-1559. يبدأ A برصيد
5 ETHوnonce قدره12، ويبدأ B برصيد1 ETH. يرسل A مقدار1 ETHباستخدام21,000 gas، مع base fee قدره20 gweiوpriority cap قدره3 gweiوmax fee قدره40 gwei. سعر gas الفعلي هوmin(40, 20 + 3) = 23 gwei؛ وإجمالي الرسوم21,000 × 23 gwei = 0.000483 ETH، منها0.000420 ETHحرق base fee و0.000063 ETHpriority fee. الحد الأقصى المطلوب وقت التوقيع هو1 ETH + 21,000 × 40 gwei = 1.000840 ETH. الأرصدة النهائية هي A3.999517 ETHوB2 ETH، ويصبح nonce لدى A هو13. - معاملة مدرجة تراجعت. يبدأ A برصيد
2 ETHوnonce قدره7. يستدعي A عقدا بقيمة0.50 ETH؛ ويتراجع التنفيذ الأعلى بعد80,000 gasبسعر فعلي25 gwei، فتكون الرسوم80,000 × 25 gwei = 0.002000 ETH. تتراجع كتابات تخزين العقد وlogs وتحويل0.50 ETH، بينما ينتهي A برصيد1.998000 ETHوnonce قدره8وإيصالstatus = 0. وفي المقابل يمكن أن يتعايش فشل استدعاء فرعي التقطه A مع إيصال خارجيstatus = 1. - رصيد الرمز هو تخزين عقد. يسجل عقد رمز Alice بمقدار
1,000 unitsوBob بمقدار200 units. ينتج عن تحويل ناجح قدره250 unitsرصيد Alice750 unitsورصيد Bob450 units، مع بقاء المجموع1,200 units. إذا استخدمت معاملة Alice العليا60,000 gas × 20 gwei = 0.001200 ETH، ينخفض رصيد ETH الأصلي لديها بالرسوم بصورة منفصلة. يتغيرstorageRootلحساب الرمز وstateRootالعالمي؛ ولم يصبح أصل الرمز يوما جزءا من الرصيد الأصلي لحساب Alice. - حد الثبات في EIP-7702. يرسل راع معاملة set-code تتضمن تفويضا من الحساب A عند nonce
5إلى التنفيذ D. يكتب البروتوكول المؤشر ذا23-byte، أي0xef0100 || 20-byte address، ويزيد nonce سلطة A إلى6. إذا تراجع التنفيذ اللاحق في تلك المعاملة الخارجية، يبقى مؤشر التفويض وnonce التفويض المعالجان مسبقا. وهذا يختلف عن حد تراجع تخزين EVM العادي الذي كتبه الاستدعاء الفاشل.
المخاطر والضوابط
- تؤدي قراءة سلسلة أو fork أو hash كتلة أو وسم كتلة خاطئ إلى لقطة حالة غير متسقة داخليا.
- قد يحذف مزود RPC قديم أو غير موثوق حالة الرأس أو يتأخر عنها أو يبلغها بصورة خاطئة.
- قد تبطل سباقات nonce المعلق والفجوات والاستبدالات افتراضات قائمة الانتظار.
- يكون «الإلغاء» في المحفظة عادة معاملة استبدال، لا حذفا على مستوى البروتوكول.
- يمنع نقص الرصيد اللازم للقيمة والحد الأقصى للرسوم إدراج المعاملة.
- قد تؤخر حركة base fee أو أخطاء حد الرسوم الإدراج أو تغير التكلفة.
- قد يؤدي code في EIP-7702 إلى تصنيف EOA خطأ باستخدام قواعد حساب قديمة.
- قد يعرض مفوض خبيث أو خلل تهيئة أو إعادة تشغيل تفويض حساب EIP-7702 للخطر.
- قد تجعل ترقيات proxy وdelegate calls تفسير code والتخزين يتغير بمرور الوقت.
- قد تسمح أخطاء المفتاح أو نطاق التوقيع أو chain ID بالسرقة أو إعادة التشغيل.
- قد تغير reentrancy وترتيب الحالة المشتركة الأرصدة خلال تنفيذ واحد.
- قد يفشل استدعاء فرعي ويلتقطه العقد بينما تظل المعاملة الخارجية ناجحة.
- يظل التراجع الأعلى أو فشل نفاد gas مستهلكا للgas ويزيد nonce المرسل.
- قد تبطل decimals الرمز ورسوم التحويل وإعادة الأساس وhooks حساب الرصيد البسيط.
- قد تسقط المخصصات والديون والضمانات والمكافآت عند مطابقة أرصدة المحفظة فقط.
- قد تغيب logs أو تتراجع أو تضلل أو لا تكفي لإثبات الحالة النهائية.
- قد تختلف «المعاملات الداخلية» وtraces المزود لأنها مشاهد أعيد بناؤها.
- قد تكون قائمة الوصول ناقصة أو مكررة أو غير اقتصادية، ولا تقفل مجموعة القراءة والكتابة.
- قد يغير ترتيب الحالة المشتركة وpriority fees وMEV نتائج التنفيذ.
- قد تعكس إعادة التنظيم أو pruning أو غياب proofs أو انتقالات L2 أو نهائية الجسر القيود المحاسبية أو تحجبها.
مفاهيم خاطئة شائعة
- «المحفظة تخزن الرصيد على السلسلة.» تحتفظ المحفظة ببيانات الاعتماد وتعرض الحالة التي تحصل عليها من الشبكة.
- «كل عنوان إما EOA خال من code دائما أو عقد عادي.» يغير تفويض EIP-7702 هذه القاعدة الاستدلالية.
- «كل تحويل معروض هو معاملة Ethereum مستقلة.» أحداث الرموز وتتبع استدعاءات الرسائل الداخلية ليست معاملات عليا موقعة.
- «المعاملة الفاشلة لا تغير شيئا ولا تكلف شيئا.» يمكن أن يستهلك الفشل المدرج gas ويزيد nonce المرسل.
- «نموذج الحساب أو قائمة الوصول يضمن تنفيذا متوازيا أسرع من UTXO.» يعتمد الأداء والتعارض على البروتوكول وعبء العمل بالكامل.