لأغراض تعليمية فقط؛ لا يشكل ذلك نصيحة استثمارية أو توصية استثمارية. قد تؤدي الاستثمارات إلى خسائر.
الإجابة المباشرة
في سلسلة متوافقة مع EVM، تُنفذ معاملات الحساب المملوك خارجيًا (EOA) وفق ترتيب nonce. إذا كان nonce التالي القابل للتنفيذ مفقودًا أو عالقًا، فقد تبقى المعاملات ذات nonce الأعلى في قائمة الانتظار حتى مع رسوم مرتفعة. عالج أدنى nonce غير محلول أولًا: تحقق من السلسلة والمرسل، وقارن بيانات nonce المؤكدة والمعلقة، ثم استبدل المعاملة المقصودة أو نافسها بمعاملة إلغاء تستخدم nonce نفسه.
الإلغاء ليس تراجعًا على مستوى البروتوكول. يكون عادةً تحويل 0 ETH من الحساب إلى نفسه ينافس على nonce ذاته. تفوز المعاملة الصالحة التي تُدرج أولًا؛ ولا يمكن إلغاء معاملة مؤكدة بهذه الطريقة.
تنطبق هذه الخطوات على معاملات EOA العادية في EVM. قد تستخدم الحسابات الذكية أو عمليات تجريد الحساب مخططات nonce تحددها العقود، بينما تستخدم شبكات UTXO نموذجًا مختلفًا.
لماذا تعطل فجوة nonce قائمة الانتظار
يمثل nonce في EOA عدادًا متسلسلًا. لا يمكن تنفيذ سوى معاملة واحدة عند nonce معين، ولا يستطيع الحساب تنفيذ nonce 26 قبل nonce 25. لذلك تفصل العقد المعاملات القابلة للتنفيذ فورًا عن المعاملات ذات nonce الأعلى المؤجلة للمستقبل.
ليست قائمة الانتظار mempool عالمية واحدة وموثوقة. ترى كل عقدة RPC مجموعة فرعية مختلفة من المعاملات المعلقة وتحتفظ بها. قد تظهر المعاملة في المحفظة ولا تظهر في المستكشف، أو تظهر عبر RPC وتغيب عبر آخر. ربما لم تُبث أصلًا، أو حذفتها عقدة من مجمعها، أو لم تنتشر إلى الخدمة المستعلَم منها.
يعيد eth_getTransactionCount مع latest العدد في حالة أحدث كتلة؛ وبالنسبة إلى EOA يُفهم على أنه nonce التالي بعد المعاملات المؤكدة. أما pending فيطلب عرض الحالة المعلقة لدى عقدة واحدة. يشير الفرق إلى أن تلك العقدة تعرف معاملات معلقة، لكنه لا يثبت أن كل العقد العامة تعرفها.
التشخيص قبل التوقيع
- أوقف الإرسال من العنوان المتأثر على كل الأجهزة والتطبيقات. سجّل الشبكة وchain ID وعنوان المرسل وهاشات المعاملات وnonces والمستلمين والقيم وcalldata وgas limits وحقول الرسوم.
- تحقق من أن المحفظة والمستكشف وRPC تشير إلى السلسلة والمرسل نفسيهما. يرتبط nonce بحساب على سلسلة محددة، لا بنسخة تثبيت للمحفظة.
- استعلم عن
eth_getTransactionCountباستخدامlatestوpending، ويُفضل عبر مزودين مستقلين لخدمة RPC. اعتبر الاختلاف دليلًا على اختلاف عروض mempool، لا دليلًا على تناقض الحالة on-chain. - افحص معاملات المرسل حسب nonce. إذا توفرت API لمجمع معاملات العقدة، فيمكنها تمييز مدخلات
pendingالقابلة للتنفيذ عن مدخلاتqueuedالمستقبلية. غالبًا ما يعطل مزودو RPC العامون هذه API غير القياسية. - بدءًا من قيمة
latest، ابحث عن أول nonce بلا معاملة مؤكدة. حدد هل ما زالت معاملة معروفة عنده ظاهرة، أم حُذفت، أم أُنشئت محليًا فقط.
لا تتصرف اعتمادًا على تسمية الحالة في المحفظة وحدها. الأدلة الحاسمة هي nonce المؤكد وإيصال المعاملة وإدراجها في كتلة على السلسلة الصحيحة.
استبدال أو إلغاء أول nonce غير محلول
للحفاظ على الإجراء الأصلي: استخدم ميزة التسريع في المحفظة أو أعد بث معاملة لها المرسل وnonce والمستلم والقيمة وcalldata نفسها، مع رسوم تنافسية. راجع كل حقل قبل التوقيع؛ فتغيير payload يحولها إلى إجراء مختلف.
للتخلي عن الإجراء الأصلي: ما دامت المعاملة غير مؤكدة، أرسل 0 ETH من العنوان إلى نفسه باستخدام nonce ذاته ورسوم تنافسية. يحاول ذلك فقط جعل التحويل الذاتي يفوز. قد تتأكد المعاملة الأصلية أولًا؛ لذلك لا تفترض نجاح الإلغاء حتى يكون للبديلة إيصال وتظل الأصلية غير مؤكدة.
قبول الاستبدال سياسة للعقدة وليس نسبة عالمية. في معاملة EIP-1559 قد يلزم رفع maxPriorityFeePerGas وmaxFeePerGas معًا، ويجب أن يظل maxFeePerGas صالحًا مع base fee الحالية. تختلف تقديرات المحافظ وقواعد العملاء؛ ويعني replacement transaction underpriced أن العقدة المستقبلة لم تقبل البديلة وفق سياستها الحالية.
بعد تأكيد أدنى nonce، أعد فحص الإيصال وlatest والأرصدة وكل معاملة ذات nonce أعلى. قد تصبح المعاملات المصطفة قابلة للتنفيذ فورًا، بينما قد تحتاج المعاملات التي حذفتها كل العقد المعنية إلى إعادة بث مقصودة. لا تعد إرسالها بلا تحقق؛ تأكد أولًا من عدم إدراج نسخة سابقة.
مثال
لدى عنوان معاملات مؤكدة حتى nonce 24، لذا تكون latest مساوية 25. تبلغ إحدى خدمات RPC عن pending بقيمة 25، بينما تعرض المحفظة nonce 26 وnonce 27 في قائمة الانتظار. لا يجد أي مزود معاملة مبثوثة عند nonce 25.
يتحقق المالك أولًا من السلسلة والمرسل وpayloads المسجلة. إذا كان هناك إجراء مقصود عند nonce 25، فيعيد إنشاءه وبثه عند nonce 25 بالرسوم الحالية. وإن لم يوجد، فيمكنه إرسال تحويل ذاتي بقيمة 0 ETH عند nonce 25. رفع رسوم nonce 27 وحده لا يسد الفجوة.
بعد إدراج nonce 25، يفحص المالك إيصالها قبل لمس nonce 26 أو nonce 27. ثم يراجع كلًا منهما منفردًا، فقد تكون حُذفت أو قد تُنفذ سريعًا بعد إغلاق الفجوة.
المخاطر وشروط التوقف
- قد تتسابق المعاملة البديلة مع الأصلية. إلى أن يظهر دليل on-chain، افترض أن المستلم والقيمة واستدعاء العقد الأصلي قد تُنفذ.
- تحقق من عنوان المرسل كاملًا وchain ID وnonce وcalldata على شاشة موثوقة. قد تستبدل برمجية خبيثة أو موقع “استرداد” غير موثوق تحويلًا أو موافقة.
- احتفظ بعملة أصلية تكفي رسوم البديلة. تُفرض gas على المعاملة المدرجة حتى لو حدث revert لاستدعاء العقد لاحقًا.
- لا تكشف عبارة الاسترداد أو المفتاح الخاص لمعالجة فجوة nonce. لا تحتاجها أي خدمة RPC أو مستكشف أو دعم شرعي.
- إذا اختُرق العنوان، فقد تتحول البدائل العامة المتكررة إلى سباق رسوم مع المهاجم. توقف عن استخدام الجهاز المخترق واتبع خطة استجابة للحوادث.
- إذا اختلف مزودو RPC، أو كان المستلم الأصلي مجهولًا، أو تعذر إعادة إنشاء payload، أو كان تفاعل عقد كبير معرضًا للخطر، فتوقف واطلب مساعدة خبير قبل التوقيع.
للاستخدام المتكرر عبر الأجهزة أو أدوات التوقيع الآلية، امنع التكرار بمخصص nonce واحد لكل حساب وسلسلة، وتوقيع متسلسل، وسجلات دائمة للـ nonces والهاشات المحجوزة، ومطابقة مع الحالة المؤكدة ومجمع pending لدى عقدة البث. لا يغير مسح سجل المحفظة المحلي الحالة on-chain أو mempools العقد الأخرى.
مفاهيم خاطئة شائعة
- “تسمح رسوم أعلى عند nonce 27 بتجاوز nonce 25.” قد تحسن الأولوية فقط بعد أن تصبح nonces السابقة قابلة للتنفيذ؛ ولا تصلح الفجوة.
- “عدم العثور عليها يعني إلغاءها.” قد تحذفها عقدة بينما تحتفظ بها عقدة أخرى أو builder أو طرف مقابل. يمكن إعادة بث المعاملة الموقعة.
- “يعكس تحويل 0 ETH إلى الذات المعاملة الأصلية.” إنه ينافس فقط على nonce نفسه ولا يؤثر بعد تأكيد الأصلية.
- “
pendingهي إجابة الشبكة النهائية.” إنها رؤية الحالة المعلقة لدى العقدة المستعلَم منها وقد تختلف بين المزودين.
مواضيع ذات صلة
المصادر
- المعاملات - Ethereum.org (تاريخ الوصول: 2026-08-22)
- واجهة JSON-RPC - Ethereum.org (تاريخ الوصول: 2026-08-22)
- نطاق txpool - go-ethereum (تاريخ الوصول: 2026-08-22)
- كيفية تسريع معاملة معلقة أو إلغائها - مركز مساعدة MetaMask (تاريخ الوصول: 2026-08-22)