ما يحدث فعليًا عندما ترسل معاملة إيثريوم

--> المشكلة

تضغط على "إرسال" في محفظتك. واجهة المستخدم تؤكد المعاملة.

لكن بعد ذلك... لا يحدث شيء.

أحيانًا تتأكد في ثوان.
أحيانًا تتوقف لدقائق - أو تفشل تمامًا.

لماذا؟

معظم الشروحات تتوقف عند "تذهب إلى البلوكشين."

هذا ليس مفيدًا إذا كنت تبني أنظمة على .

دعنا نفكك ما يحدث فعليًا تحت الغطاء.


نموذج ذهني (توجيه سريع)


المعاملة لا تُنفذ على الفور.

تمر عبر ثلاث مراحل مميزة:

  • الانتشار (الميمبول)

  • التضمين (اقتراح الكتلة)

  • التنفيذ (انتقال الحالة)

كل مرحلة تضيف تأخيراً ومخاطر وأنماط فشل.


الخطوة 1: إنشاء المعاملة

عندما تضغط “send”:


  • محفظتك تنشئ معاملة:

    • من أجل

    • القيمة

    • حد الغاز

    • maxFeePerGas

    • البيانات (إذا كانت تتضمن تفاعلات مع عقد)

    توقّع المعاملة باستخدام مفتاحك الخاص

في هذه النقطة:
👉 المعاملة صالحة لكنها غير معروفة بعد للشبكة


الخطوة 2: بث إلى الشبكة

تقوم محفظتك بإرسال المعاملة إلى عقدة.

  • عقدة:

  • يتحقق من التوقيع

  • يتحقق من nonce

  • يضمن صحة أساسية

إذا كانت صحيحة → تدخل الميمبول


الخطوة 3: الميمبول (حيث تصبح الأمور مثيرة للاهتمام)

الميمبول هو:

  • منطقة احتفاظ مؤقتة

  • غير متسقة عالمياً

  • تختلف بين العقد

هذا يعني:
👉 قد تكون مع معاملتك موجودة في بعض العقد—لكن ليس في غيرها

السلوك الأساسي:

  • العقد تُعطي أولوية للمعاملات حسب الرسوم

  • كلما زاد maxFeePerGas = زادت الأولوية


📊 المخطط 1: تدفق انتشار المعاملة


يجب أن يُظهر المخطط:

  • محفظة المستخدم → العقدة A → العقدة B → العقدة C

  • لكل عقدة ميمبول خاص بها

  • أسهم تُظهر انتشار gossip

  • تمييز: “ليست كل الميمبوالت متماثلة”


الخطوة 4: اقتراح الكتلة

يقوم المدققون باختيار المعاملات من ميمبولهم.

هم يختارون:

  • أولاً معاملات الرسوم الأعلى

  • المعاملات التي تناسب حدود الغاز

مهم:
👉 مع معاملتك تنافس الآخرين



الخطوة 5: التنفيذ (مستوى EVM)


بمجرد تضمينها في كتلة

  • تُنفَّذ المعاملة داخل EVM

  • تحدث تغييرات في الحالة:

    • تحديثات الرصيد

    • تغييرات تخزين العقد الذكية

إذا فشل التنفيذ:

  • يظل الغاز مستهلكاً

  • تتراجع تغييرات الحالة


📊 المخطط 2: تدفق التنفيذ


يجب أن يُظهر المخطط:

  • الكتلة → EVM → انتقال الحالة

  • المدخلات:

    • معاملة

    • الحالة الحالية


  • الإخراج:

    • حالة جديدة

  • تضمين “استهلاك الغاز” في كل خطوة


حالات خاصة & أنماط فشل

هنا يفشل معظم المقالات. لنغوص أعمق.

❌ 1. معاملة عالقة في الميمبول

  • الرسوم منخفضة جداً

  • لم يتم اختيارها من قبل المدققين أبداً

❌ 2. معاملة مرفوضة

  • العقدة تزيلها بسبب:

    • رسوم منخفضة

    • تكدّس الميمبول

❌ 3. معاملة مستبدلة

  • نفس nonce + رسوم أعلى → تستبدل الأصلية

❌ 4. تنفيذ خارج الغاز

  • يتوقف التنفيذ في منتصف الطريق

  • ترجع الحالة إلى ما قبلها (reverts)

  • يُستهلك الغاز

❌ 5. إعادة تنظيم السلسلة (Reorg)

  • يتم استبدال الكتلة

  • قد تختفي المعاملة مؤقتاً



انعكاسات واقعية

للمطورين:

  • لا يمكنك افتراض نهائية فورية

  • يجب التعامل مع حالات معلّقة

لـ UX:

  • المستخدمون يرون “pending” → لَبس

  • تقدير الرسوم يصبح حاسماً

لتصميمات الأنظمة

  • منطق إعادة المحاولة ضروري

  • مراقبة المعاملات إلزامية


النتائج الأساسية

  • المعاملة عملية متعددة المراحل وليست حدثاً واحداً

  • الميمبول غير حتمي ومجزّأ

  • الرسوم تؤثر مباشرة على احتمال التنفيذ

  • يمكن أن يحدث الفشل على عدة طبقات

  • يجب تصميم الأنظمة من أجل عدم اليقين والتأخير



إذا كنت تبني على Ethereum، فإن فهم هذه السلسلة ليس اختيارياً—إنها الأساس$ETH