WATS Wallet logoWATS Wallet
تقني8 دقيقة قراءة

شرح رسائل أخطاء محافظ العملات المشفرة: Execution Reverted وNonce Too Low وBlockhash Not Found (EVM وSolana وTON)

ابحث عن "execution reverted" و"nonce too low" و"Blockhash not found" وAA21 ورمز الخروج 37 على TON: ماذا يعني كل خطأ على EVM وSolana وTON، وهل كلّفتك المحاولة رسم شبكة، وكيف تصلحه.

بقلم Alltoscan LLC، الشركة التي تقف وراء WATS Wallet السياسة التحريرية

تاريخ النشر تاريخ التحديث

اعتبارًا من أكتوبر 2026، تنقسم معظم أخطاء المحافظ إلى مجموعتين. الأخطاء التي تظهر قبل تضمين المعاملة في كتلة، مثل "nonce too low" أو "replacement transaction underpriced" أو "insufficient funds for gas * price + value" أو "Transaction simulation failed: Blockhash not found" على Solana، تعني أنه لم يُسجَّل شيء على السلسلة ولم يُنفق أي رسم شبكة. أما حالات الفشل بعد التضمين، مثل معاملة EVM ارتدّت أو نفد غازها، أو معاملة Solana استقرت مع خطأ، أو فشل في مرحلة الحساب (compute) على TON، فلا تزال تستهلك الرسم مقابل العمل المنجَز. ابحث عن نص الخطأ بالضبط في الجداول أدناه لمعرفة معناه وإصلاحه.

هل كلّفتك المعاملة الفاشلة رسمًا؟ القاعدة الواحدة التي تتحقق منها أولًا

لا تكلّف المعاملة الفاشلة رسم شبكة إلا إذا ضُمّنت في كتلة قبل أن تفشل.

قد تفشل المعاملة في لحظتين:

  • قبل التضمين: ترفضها محاكاة المحفظة أو عقدة RPC أو mempool. لا يصل شيء إلى كتلة، فلا يُنفق أي رسم شبكة.
  • بعد التضمين: تستقر المعاملة في كتلة ويُنفَّذ كودها ويفشل. يُنفق الرسم مقابل العمل المنجَز. تقول Etherscan إن الغاز يُخصم رغم فشل المعاملات بسبب الحوسبة المستخدمة، وتقول وثائق رسوم Solana إنه إذا فشلت المعاملة فإن الرسم يظل مفروضًا.

لمعرفة أي الحالتين أنت فيها، ابحث عن تجزئة المعاملة أو توقيعها على مستكشف كتل. غياب أي سجل بعد بضع دقائق يعني عادةً أنها لم تستقر ولم تكلّف شيئًا؛ وحالة Pending تعني أنها لم تُضمَّن بعد. وسجل موسوم بـ Failed أو Reverted، أو برمز خروج غير صفري، يعني أنها استقرت وأُنفق الرسم.

أي أخطاء EVM تعني "nonce too low" أو "underpriced" أو "out of gas"؟

هذه هي النصوص الحرفية من كود عميل go-ethereum، ومعظمها يعني أن المعاملة رُفضت قبل أن تصل إلى كتلة.

نص الخطأ الحرفيمعناههل أُنفق رسم شبكة؟ما العمل
"nonce too low"معاملة بهذا الرقم تأكدت بالفعل؛ وحالة المحفظة قديمةلاأعد مزامنة المحفظة وتحقق من المستكشف؛ ولا تعد الإرسال إلا إذا لم يحدث الإجراء الذي قصدته
"replacement transaction underpriced"التسريع أو الإلغاء استخدم زيادة رسوم صغيرة جدًالاارفع الزيادة أكثر؛ فالافتراضي في Geth يتطلب 10%
"max fee per gas less than block base fee"أقصى رسم لديك أقل من الرسم الأساسي الحاليلاارفع أقصى رسم
"insufficient funds for gas * price + value"العملة الأصلية لا تغطي المبلغ مضافًا إليه أقصى غازلاأضف رصيدًا من العملة الأصلية؛ اطلع على رموز دون رمز غاز
"already known"المعاملة نفسها موجودة بالفعل في mempoolلاانتظر؛ فهو غير ضار
"out of gas"تجاوز التنفيذ حد الغاز؛ وأُلغيت التغييراتنعمأعد المحاولة بحد غاز أعلى

ماذا يعني "execution reverted"؟

يعني "Execution reverted" أن عقدًا ذكيًا رفض الإجراء وألغى كل تغيير أجراه. ويظهر في نقطتين، ويختلف الرسم بينهما.

إذا ظهر في تقدير المحفظة قبل الإرسال، فلم يُرسل شيء ولم يُنفق رسم. وإذا استقرت المعاملة، تعرضها Etherscan بحالة Fail أو Reverted، ووفق Alchemy يدفع المرسل ثمن الغاز المستخدم. والنص بعد النقطتين الرأسيتين هو السبب الحقيقي. ومن الأسباب الشائعة:

  • "UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT": تحرك السعر متجاوزًا حد الانزلاق الذي حددته بين التوقيع والتضمين.
  • "ERC20: insufficient allowance": موافقة الرمز أصغر من المبلغ الذي يُنفق. وشقيقه "ERC20: transfer amount exceeds balance" يعني أن رصيدك من الرمز أقل مما حاولت نقله.

نصا ERC-20 هذان يأتيان من عقود OpenZeppelin v4؛ أما الإصدارات الأحدث فتستخدم أخطاء مخصصة بأسماء مختلفة.

ماذا تعني رموز AA في ERC-4337 وأخطاء EIP-7702؟

ترسل حسابات العقود الذكية UserOperation عبر bundler بدلًا من معاملة عادية، وتقول مواصفة EIP-4337 إن رسائل خطأ EntryPoint تبدأ برمز بصيغة AA##.

الرمزمعناههل أُنفق رسم شبكة؟
AA21 didn't pay prefundلم يُستخدم مُسدِّد رسوم (paymaster)، ووديعة الحساب في EntryPoint لا تغطي أقصى غازلا
AA23 revertedكود التحقق الخاص بالحساب رفض العمليةلا
AA33 revertedتحقق paymaster رفض العمليةلا
AA95 out of gasكان حد غاز الحزمة منخفضًا جدًا للعملية أو لاستدعاء فرعيعادةً لا؛ يرتد handleOps

تقول مواصفة EIP-4337 إن على bundler إسقاط أي عملية ترتد محاكاتها، لذا فإخفاقات التحقق (AA2x وAA3x) لا تترك عادةً شيئًا على السلسلة. وإذا ضُمّنت العملية وارتد استدعاؤها الرئيسي، يُدفع الغاز على السلسلة من الحساب أو من paymaster الذي تكفّل بها. وتشير Alchemy إلى أن AA95 يعني عادةً أن حدود الغاز كانت منخفضة جدًا؛ ويرتد handleOps، فأعد المحاولة بحدود غاز أعلى (وهي إعداد في bundler أو SDK).

ويضيف EIP-7702 خطأ واحدًا قد تراه من عقدة: "in-flight transaction limit reached for delegated accounts" (لا يقبل مجمّع Geth سوى معاملة واحدة معلّقة قابلة للتنفيذ لمثل هذا الحساب، فانتظرها). أما أي تفويض (authorization) بمعرّف سلسلة أو nonce خاطئ فيُتجاهل بصمت، فقد تنجح المعاملة دون تطبيق التفويض. وإذا لم تفوّض حسابك عن علم، فـتحقق من التفويض وألغِه: فالتفويض غير المتوقع إشارة إلى وجود مُفرِغ محافظ (drainer).

ماذا تعني "Blockhash not found" و"block height exceeded" على Solana؟

تعني "Block height exceeded" أن blockhash انتهت صلاحيته، وتعني "Blockhash not found" أن العقدة لم تتعرف على blockhash (عادةً لانتهاء صلاحيته، وأحيانًا لتأخر العقدة). وفي الحالتين لم تُعالَج المعاملة عادةً. ويظل blockhash صالحًا لنحو 151 كتلة، أي ما بين 60 و90 ثانية تقريبًا، وفق دليل التأكيد في Solana، ولا يمكن بعد ذلك معالجة معاملة منتهية الصلاحية.

نص الخطأ الحرفيمعناههل أُنفق رسم شبكة؟ما العمل
الخطأ: Transaction simulation failed: Blockhash not foundblockhash قديم جدًا، أو أن العقدة التي حاكت المعاملة لم تره بعدلاأعد المحاولة للحصول على blockhash جديد
الخطأ "block height exceeded" أي تجاوز ارتفاع الكتلة (TransactionExpiredBlockheightExceededError)لم تستقر قبل انتهاء صلاحية blockhashلا، إلا إذا استقرت قبيل الانتهاء؛ فتحقق من التوقيعتحقق من التوقيع على مستكشف، ثم أعد المحاولة
الخطأ: Transaction simulation failed: Error processing Instruction N: custom program error: 0x...توقع البرنامج فشلًا، مثل انزلاق المبادلةلا، عند اكتشافه في المحاكاة قبل الإرسال؛ وإذا تخطّت محفظة أو تطبيق المحاكاة، فقد تستقر المعاملة بحالة Failed ويُنفق الرسماقرأ السبب؛ واضبط الانزلاق أو المبلغ
الخطأ: Attempt to debit an account but found no record of a prior credit.الحساب الدافع لا يحتفظ بأي SOL على الإطلاقلاموّله بـ SOL
الخطأ: Transaction results in an account (0) with insufficient funds for rentالإرسال سيترك حسابًا دون الحد الأدنى المعفى من الإيجارلا، عند اكتشافه في المحاكاة؛ وإذا تُخطّيت المحاكاة فقد تستقر بحالة Failed وتكلّف الرسمأرسل أقل قليلًا؛ اطلع على إيجار Solana
يعرض المستكشف "Failed"استقرت وأعاد البرنامج خطأنعماقرأ سجل المستكشف، وأصلح، وأعد الإرسال

تُدفع رسوم Solana دائمًا بـ SOL، لذا فإن "Insufficient funds for fee" و"insufficient funds for rent" تعنيان أنك بحاجة إلى SOL. أما "insufficient funds" المجردة أو "custom program error: 0x1" من تحويل رمز فتعني أن رصيدك من ذلك الرمز أقل مما حاولت إرساله.

هل ترفع رسم الأولوية (priority fee) على Solana؟

ارفع رسم الأولوية فقط عندما تنتهي صلاحية معاملتك مرارًا أثناء الازدحام، لا عندما يظهر خطأ محاكاة.

وفق وثائق الرسوم على solana.com، رسم Solana هو رسم أساسي قدره 5,000 lamports لكل توقيع (يُحرق 50% ويذهب 50% إلى المدقّق) إضافة إلى رسم أولوية اختياري: سعر وحدة الحوسبة (بوحدات micro-lamports) مضروبًا في حد وحدات الحوسبة، مقسومًا على 1,000,000 ومقرَّبًا إلى lamports كاملة، ويذهب كله إلى المدقّق. ويحسّن رسم الأولوية الأعلى فرص أن يجدول قائد (leader) مزدحم معاملتك. لكنه لا يصلح أخطاء الانزلاق أو الإيجار أو نقص SOL، ويظل مفروضًا إذا استقرت المعاملة وفشلت. وإذا ظهر خطأ محاكاة، فأصلح السبب بدلًا من ذلك.

ماذا تعني رموز الخروج في TON والرسائل المرتدة (bounced)؟

تعمل معاملة TON على مراحل (التخزين، والائتمان، والحساب، والإجراء، والارتداد)، ووفق docs.ton.org يعني رمزا الخروج 0 و1 النجاح بينما يعني أي رمز آخر الفشل. وإذا فشلت مرحلة الحساب، تُتخطى مرحلة الإجراء، وتُكوَّن رسالة ارتداد للرسالة الواردة القابلة للارتداد؛ وتُخصم الرسوم مرحلة بمرحلة، لذا تبقى الرسوم السابقة مُنفقة. وتُدفع الرسوم بـ GRAM (المعروف سابقًا باسم Toncoin؛ اطلع على ما الذي تغيّر في إعادة التسمية).

الإشارةمعناهاهل أُنفق رسم شبكة؟ما العمل
رمز الخروج 13 أو -14نفد الغاز في مرحلة الحسابنعم، عن الغاز المستخدمأرفق مزيدًا من GRAM
رمز الخروج 9Cell underflow: حاول العقد قراءة بيانات أكثر مما تحويه الخلية، غالبًا لأن الحمولة لا تطابق ما يتوقعه العقدنعمتحقق من أن الحمولة أو التعليق يناسب ذلك العقد
رمز الخروج 37مرحلة الإجراء: "Not enough GRAMs" لإرسال الرسالة الصادرةنعمأرفق مزيدًا من GRAM
تخطي مرحلة الحسابحملت الرسالة قدرًا قليلًا جدًا من GRAM لدفع تكلفة التنفيذلا غاز؛ وتظل مرحلة التخزين تعملأرسل مع إرفاق مزيد من GRAM
رسالة مرتدة (bounced)فشلت الوجهة أو غير موجودةنعم، تُخصم الرسومتعود القيمة مطروحًا منها رسوم الرسالة والغاز

كيف ترتبط WATS Wallet بهذه الأخطاء

WATS Wallet، من Alltoscan LLC، محفظة غير حافظة (إضافة Chrome وتطبيق لـ iOS/Android) لشبكات EVM وSolana وTON، تحوز فيها مفاتيحك وعبارة الاسترجاع بنفسك. والرسائل في هذا الدليل أخطاء على مستوى الشبكة تحددها تلك السلاسل، وليست رموزًا خاصة بـ WATS.

على Solana تُدفع رسوم الشبكة بـ SOL، لذا تنطبق صفوف "insufficient funds" الخاصة بـ Solana مباشرة: والاحتفاظ برصيد صغير من SOL يتجنبها. أما صفوف TON فتصف أخطاء على مستوى البروتوكول؛ وفي WATS Wallet تُدفع الرسوم على TON بـ ATS. وعلى شبكات EVM، تحتسب WATS Wallet رسوم الشبكة بـ ATS عبر مُسدِّد رسوم ERC-4337 (paymaster)، من رصيد ATS واحد على BNB Chain؛ وكيف يعمل رسم ATS مشروح على حدة.

الأسئلة الشائعة

هل أخسر مالًا عندما تفشل معاملة مشفرة؟

يتوقف ذلك على متى فشلت. إذا رُفضت قبل التضمين (أخطاء المحاكاة أو العقدة أو mempool مثل "nonce too low" أو "replacement transaction underpriced" أو "Blockhash not found")، فلم يستقر شيء ولم يُنفق أي رسم شبكة. وإذا استقرت وفشلت (ارتداد EVM أو نفاد الغاز، أو "Failed" في مستكشف Solana، أو رمز خروج غير صفري على TON)، فقد أُنفق الرسم مقابل العمل المنجَز، لكن المبلغ الذي حاولت إرساله يبقى في حسابك، وترتد معاملات TON المرتدة بالقيمة مطروحًا منها الرسوم. تحقق من التجزئة أو التوقيع على مستكشف لمعرفة أي الحالتين تنطبق.

لماذا تقول محفظتي "nonce too low" وليس لدي معاملة معلّقة؟

الـ nonce هو عدّاد معاملات الحساب، و"nonce too low" تعني أن معاملة بذلك الرقم تأكدت بالفعل. ومن الأسباب الشائعة استخدام الحساب نفسه من تطبيق محفظة أو جهاز آخر، أو معاملة "عالقة" تأكدت فعلًا، أو حالة محفظة مخزّنة قديمة. تحقق على مستكشف مما إذا كان الدفع أو الإجراء الذي قصدته قد نُفّذ بالفعل؛ فإذا كان قد نُفّذ فلا تعد الإرسال؛ وإذا لم يُنفَّذ فأعد مزامنة المحفظة وأرسل مجددًا. المحاولة المرفوضة نفسها لم تُنفق أي رسم. وإذا كانت هناك معاملة معلّقة فعلًا، فاطلع على <a href="/blog/speed-up-or-cancel-stuck-transaction">كيفية تسريع معاملة معلّقة أو إلغائها</a>.

هل من الآمن إعادة المحاولة بعد "block height exceeded" أو "Blockhash not found" على Solana؟

عمومًا نعم. تعني "Block height exceeded" أن blockhash انتهت صلاحيته (نحو 151 كتلة، أي ما بين 60 و90 ثانية تقريبًا)، وتعني "Blockhash not found" أن العقدة لم تتعرف عليه، وعادةً لأنه انتهت صلاحيته. ولا يمكن بعد ذلك معالجة معاملة منتهية الصلاحية، فلا يمكن أن تستقر لاحقًا وتكرر المعاملة الجديدة؛ ومع ذلك ابحث عن التوقيع على مستكشف Solana أولًا، ثم أعد المحاولة بـ blockhash جديد. ولم يُفرض رسم على المحاولة المنتهية إلا إذا استقرت قبل الانتهاء، وهو ما يُظهره البحث في المستكشف، وقد يساعد رسم أولوية أعلى قليلًا إذا ظلت تنتهي صلاحيتها أثناء الازدحام.