لأغراض تعليمية فقط؛ وليس نصيحة مالية أو أمنية. قد يؤدي الاستبدال أو الإلغاء إلى تنفيذ معاملة غير مقصودة، ورسوم الشبكة غير قابلة للاسترداد.
الإجابة المباشرة
replacement transaction underpriced هو رفض من RPC أو مجمع المعاملات، وليس تراجع عقد EVM. ويعني عادةً أن العقدة تعرف معاملة من المرسل نفسه وبالـ nonce نفسه، لكن المعاملة الجديدة لم ترفع حقول الرسوم بما يكفي لاستيفاء سياسة الاستبدال لدى تلك العقدة.
تحقق أولاً من الشبكة والمرسل والـ nonce وحالة كل تجزئة معروفة. إذا بقيت المعاملة الأصلية معلقة وكنت تريد استبدالها، فاستخدم الـ nonce نفسه تماماً وارفع حقول الرسوم وفق سياسة المحفظة أو العقدة. لا يفي رفع gasLimit وحده أو تغيير الانزلاق أو إعادة بث المعاملة الموقعة نفسها بقاعدة زيادة الرسوم.
آلية العمل
- يحدد الـ nonce موضع المعاملة. تستخدم معاملات الحساب الخارجي قيماً متسلسلة. إذا كانت لدى العقدة معاملة للمرسل عند ذلك الـ nonce، فستعامل معاملة أخرى في الموضع نفسه كمرشح للاستبدال. وقد يبقى nonce لاحق في الطابور حتى تُدرج القيم السابقة أو تُحل بطريقة أخرى.
- الاستبدال سياسة محلية للمجمع. لا يفرض إجماع Ethereum نسبة زيادة موحدة. قد تستخدم البرامج ومزودات RPC والمرحلات الخاصة سياسات مختلفة أو تعرف معاملات معلقة مختلفة. يستخدم legacy pool في Geth حالياً
10%افتراضياً، لكن يمكن للمشغّل تغييره ولا يلزم البرامج الأخرى. - لـ EIP-1559 حدان لرسوم التنفيذ. يحد
maxPriorityFeePerGasإكرامية المدقق، ويحدmaxFeePerGasإجمالي السعر لكل gas شاملاً الرسم الأساسي. في legacy pool لدى Geth يجب أن يتجاوز كل من fee cap وtip cap الجديدين القيم القديمة والعتبة المضبوطة. ينبغي للمحفظة حساب كليهما. - قبول المجمع ليس تأكيداً. قد تقبل عقدة الاستبدال بينما تحتفظ عقد أخرى بالأصل. لا يمكن إدراج سوى معاملة واحدة من المرسل والـ nonce نفسيهما في التسلسل القانوني. أول مرشح صالح يُدرج يجعل الآخرين غير قابلين للاستخدام على تلك الشبكة، وقد تتأخر الواجهات في التحديث.
- حد الرسوم والمبلغ المدفوع مختلفان. يقيّد fee cap سعر gas الفعلي في EIP-1559 ولا يُحاسب gas غير المستخدم. يرفع
maxFeePerGasالحد الأقصى للتعرض ولا يرفع السعر النهائي بالضرورة، لكن قد يُدفع الحد العالي إذا تطلب الرسم الأساسي والإكرامية ذلك.
خطوات الحل ومثال
افترض أن الـ nonce هو 42، وأن maxFeePerGas = 30 gwei وmaxPriorityFeePerGas = 2 gwei. قد ترفض عقدة تشترط 10% مرشحاً بقيمتي 31 gwei و2.1 gwei، بينما تتجاوز 35 gwei و2.5 gwei هاتين العتبتين التوضيحيتين. وقد تستمر المعاملة في الانتظار إذا ترك الرسم الأساسي إكرامية فعلية ضئيلة تحت fee cap البالغ 35 gwei. النسبة مثال وليست ضماناً للشبكة.
اتبع هذا الترتيب:
- تحقق من الشبكة والمرسل الصحيحين. استعلم عن التجزئة الأصلية وكل تجزئات الاستبدال عبر المحفظة وRPC مستقل أو مستكشف كتل.
- قارن عداد المعاملات المؤكدة بعرض pending. إذا تأكد nonce
42فلا تنشئ معاملة أخرى على افتراض أنه ما زال معلقاً. - فك ترميز
toوvalueوdata. للتسريع، حافظ على العملية والـ nonce. للإلغاء، ترسل المحافظ عادةً0 ETHإلى المرسل نفسه بالـ nonce نفسه؛ وهذا استبدال منافس وليس استرجاعاً على مستوى البروتوكول. - استخدم وظيفة المحفظة إن أمكن. وإلا فاحصل على السياسة وتقدير الرسوم الحاليين، وارفع حدي EIP-1559 مع هامش للتقريب، وتأكد من تغطية
value + gasLimit x maxFeePerGas. - راجع المعاملة كاملة قبل التوقيع. ابثها مرة واحدة واحتفظ بكل تجزئة وراقب إيصالات جميع المرشحين. لا إيصال للتجزئة pending؛ والإيصال المرتبط بالشبكة والكتلة الصحيحتين هو نقطة إثبات التنفيذ.
المخاطر
- الإلغاء غير مضمون. قد تُدرج المعاملة الأصلية أولاً، وقد لا تظهر معاملة خاصة أو ضعيفة الانتشار في RPC الذي تفحصه.
- قد ينشئ nonce خاطئ دفعة أو استدعاء عقد جديداً. وقد يعيد توقيع calldata قديمة تنفيذ عملية تغير سعرها أو allowance أو موعدها أو حالة البروتوكول فيها.
- قد تقبل نقطة نهاية الاستبدال وترفضه أخرى. تبديل RPC مراراً قد يترك مرشحين في مجمعات مختلفة ويربك عرض المحفظة.
- رفع
gasLimitلا يحسن الأولوية. رفع حدود الرسوم بلا تحقق يزيد التكلفة القصوى؛ وتغيير الانزلاق أو calldata يغير التنفيذ ولا يصلح قاعدة المجمع. - قد تستخدم معاملات blob وuser operations لتجريد الحساب وL2 والمرحلات الخاصة مجمعات وقواعد مختلفة. لا تفترض انطباق سياسة معاملات EVM العادية في Geth عليها.
توقف إذا كان المرسل أو الـ nonce مجهولاً، أو تعذر فك calldata، أو ربما تأكدت المعاملة، أو اقترحت المحفظة مستلماً أو مبلغاً مختلفاً، أو طلب RPC عبارة الاسترداد أو المفتاح الخاص. لا يتطلب استكشاف الأخطاء المشروع كشف أسرار الاسترداد.
مفاهيم خاطئة شائعة
- «رصيد الحساب غير كافٍ.» هذا خطأ آخر. تتعلق الرسالة بالمعاملة المنافسة وسعر استبدالها.
- «زيادة 10% تنجح دائماً.» هذه قيمة افتراضية شائعة في Geth وليست قاعدة إجماع. قد تتطلب الإعدادات والبرنامج والنوع والتقريب زيادة أكبر.
- «استبدلت المعاملة الأعلى رسوماً الأصل في كل مكان.» المجمعات محلية. قبول RPC واحد لا يحذف الأصل من كل المجمعات ولا يضمن أيهما يُدرج أولاً.
- «الإلغاء يعكس معاملة مؤكدة.» لا. ينافس فقط ما دام الـ nonce بلا حل؛ ويتطلب التغيير المؤكد علاجاً على مستوى التطبيق إن وُجد.
مواضيع ذات صلة
المصادر
- المعاملات - ethereum.org (تاريخ الاطلاع: 2026-08-21)
- EIP-1559: تغيير سوق رسوم سلسلة ETH 1.0 - Ethereum Improvement Proposals (تاريخ الاطلاع: 2026-08-21)
- منطق الاستبدال في legacy pool لدى go-ethereum - go-ethereum (تاريخ الاطلاع: 2026-08-21)
- نطاق أسماء txpool - go-ethereum (تاريخ الاطلاع: 2026-08-21)