[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-1-kayfa-tunaffidh-evm-akwad-tashghil-makdas-ghaz":3},{"article":4,"author":54},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":7,"meta_description":16,"focus_keyword":17,"og_image":18,"canonical_url":18,"robots_meta":19,"created_at":15,"updated_at":15,"tags":20,"category_name":34,"related_articles":35},"d9000000-0000-0000-0000-000000000101","a0000000-0000-0000-0000-000000000092","Deep EVM #1: كيف تنفذ EVM الكود الخاص بك — أكواد التشغيل والمكدس والغاز","deep-evm-1-kayfa-tunaffidh-evm-akwad-tashghil-makdas-ghaz","جولة تفصيلية منخفضة المستوى في آلة إيثيريوم الافتراضية: كيف تتعامل أكواد التشغيل مع المكدس، وكيف يعمل قياس الغاز، وما يحدث فعلاً عندما تُنفَّذ معاملتك.","## EVM هي آلة مكدسية\n\nآلة إيثيريوم الافتراضية ليست مثل معالج x86 في حاسوبك المحمول. لا تحتوي على سجلات. بدلاً من ذلك، هي **آلة مكدسية** — كل عملية حسابية تدفع إلى أو تسحب من مكدس من 1024 عنصراً حيث كل عنصر هو كلمة 256 بت (32 بايت).\n\nعندما تستدعي عقداً ذكياً، تستقبل EVM البايتكود الخاص بالعقد — سلسلة مسطحة من أكواد التشغيل أحادية البايت — وتبدأ التنفيذ من البايت 0. لا توجد جداول دوال، ولا رأس ELF، ولا خطوة ربط. البايتكود هو البرنامج.\n\n```\n\u002F\u002F Solidity:\n\u002F\u002F uint256 result = 2 + 3;\n\n\u002F\u002F يُترجم إلى بايتكود:\n\u002F\u002F PUSH1 0x02  PUSH1 0x03  ADD\n\n\u002F\u002F تتبع المكدس:\n\u002F\u002F []           -> PUSH1 0x02 -> [2]\n\u002F\u002F [2]          -> PUSH1 0x03 -> [2, 3]\n\u002F\u002F [2, 3]       -> ADD        -> [5]\n```\n\nكل كود تشغيل يستهلك معاملاته من أعلى المكدس ويدفع نتيجته للخلف. كود التشغيل ADD يسحب قيمتين ويجمعهما ويدفع المجموع. هذا يختلف جوهرياً عن البنى القائمة على السجلات حيث تحدد سجلات المصدر والوجهة.\n\n## فئات أكواد التشغيل\n\nتحدد EVM حوالي 140 كود تشغيل، مجمعة في فئات وظيفية:\n\n### العمليات الحسابية والمقارنة\n- **ADD, SUB, MUL, DIV, MOD** — حساب أعداد صحيحة أساسي 256 بت. تكلفة كل منها 3 غاز (مستوى G_verylow).\n- **SDIV, SMOD** — القسمة والباقي مع إشارة باستخدام المتمم الثنائي.\n- **ADDMOD, MULMOD** — حساب معياري: `(a + b) % N` و`(a * b) % N` في كود تشغيل واحد. حاسمة لعمليات المنحنى الإهليلجي، تكلفتها 8 غاز.\n- **EXP** — الرفع إلى قوة. تكلفته 10 غاز + 50 لكل بايت في الأس، مما يجعله من أغلى أكواد التشغيل الحسابية.\n- **LT, GT, SLT, SGT, EQ, ISZERO** — أكواد مقارنة تدفع 1 (صحيح) أو 0 (خطأ).\n\n### العمليات البتية\n- **AND, OR, XOR, NOT** — منطق بتي، 3 غاز لكل منها.\n- **SHL, SHR, SAR** — إزاحة لليسار، إزاحة منطقية لليمين، إزاحة حسابية لليمين (أُضيفت في Constantinople، EIP-145).\n- **BYTE** — استخراج بايت واحد من كلمة 32 بايت.\n\n### معالجة المكدس\n- **POP** — تجاهل العنصر العلوي.\n- **PUSH1 إلى PUSH32** — دفع 1 إلى 32 بايت من البيانات الفورية إلى المكدس.\n- **DUP1 إلى DUP16** — تكرار العنصر N من المكدس إلى الأعلى.\n- **SWAP1 إلى SWAP16** — تبديل العنصر العلوي مع العنصر N أسفل منه.\n\n### معلومات البيئة والكتلة\n- **CALLER** (msg.sender)، **CALLVALUE** (msg.value)، **CALLDATALOAD**، **CALLDATASIZE**، **CALLDATACOPY** — الوصول إلى سياق المعاملة.\n- **NUMBER**، **TIMESTAMP**، **BASEFEE**، **CHAINID** — معلومات مستوى الكتلة.\n- **BALANCE**، **EXTCODESIZE**، **EXTCODECOPY** — الاستعلام عن حسابات أخرى.\n\n## جدول الغاز\n\nلكل كود تشغيل تكلفة غاز. يخدم الغاز غرضين: منع الحلقات اللانهائية (مشكلة التوقف) وتسعير الموارد الحسابية بشكل عادل.\n\n| المستوى | الغاز | أمثلة |\n|---------|-------|-------|\n| صفر | 0 | STOP, RETURN, REVERT |\n| أساسي | 2 | ADDRESS, ORIGIN, CALLER |\n| منخفض جداً | 3 | ADD, SUB, LT, GT, AND, OR, POP |\n| منخفض | 5 | MUL, DIV, MOD |\n| متوسط | 8 | ADDMOD, MULMOD, JUMP |\n| مرتفع | 10 | JUMPI |\n| خاص | متغير | SLOAD, SSTORE, CALL, CREATE |\n\nالأكواد الأغلى هي التي تتعامل مع الحالة:\n\n```\n\u002F\u002F تكاليف الغاز للوصول إلى الحالة (بعد EIP-2929):\n\u002F\u002F SLOAD (بارد):    2100 غاز\n\u002F\u002F SLOAD (دافئ):     100 غاز\n\u002F\u002F SSTORE (بارد، 0->غير صفري): 22100 غاز\n\u002F\u002F SSTORE (دافئ):    100 غاز (+ 20000 إذا 0->غير صفري)\n\u002F\u002F CALL (بارد):     2600 غاز\n\u002F\u002F CALL (دافئ):      100 غاز\n```\n\n## الوصول البارد مقابل الدافئ (EIP-2929)\n\nقدم EIP-2929 (ترقية Berlin، أبريل 2021) مفهوم **قائمة الوصول** — مجموعة لكل معاملة من العناوين وفتحات التخزين التي تم لمسها.\n\nفي المرة الأولى التي تصل فيها إلى فتحة تخزين أو عنوان خارجي ضمن معاملة، يكون \"بارداً\" ويكلف غازاً إضافياً. الوصولات اللاحقة \"دافئة\" ورخيصة. لهذا السبب يهم ترتيب قراءة فتحات التخزين لتحسين الغاز.\n\n## تدفق التنفيذ: ماذا يحدث في المعاملة\n\nعندما ترسل معاملة تستدعي عقداً، إليك تسلسل التنفيذ الكامل:\n\n1. **التحقق من المعاملة** — فحص الرقم التسلسلي، الرصيد >= القيمة + الغاز × سعر الغاز، التحقق من التوقيع.\n2. **خصم الغاز الجوهري** — 21000 غاز للمعاملة نفسها، بالإضافة إلى 16 غاز لكل بايت غير صفري في calldata و4 لكل بايت صفري.\n3. **إعداد السياق** — تنشئ EVM سياق تنفيذ: الكود، calldata، المستدعي، القيمة، الغاز المتبقي.\n4. **عداد البرنامج يبدأ من 0** — تقرأ EVM كود التشغيل في الموضع 0 وتنفذه.\n5. **التنفيذ التسلسلي** — يُنفَّذ كل كود تشغيل، يُخصم الغاز. JUMP وJUMPI يسمحان بتدفق تحكم غير خطي، لكن فقط إلى المواضع المعلمة بـ JUMPDEST.\n6. **الإنهاء** — ينتهي التنفيذ بـ STOP (نجاح)، RETURN (نجاح مع بيانات)، REVERT (فشل، يتم التراجع عن الحالة)، أو نفاد الغاز.\n7. **تثبيت أو تراجع الحالة** — عند النجاح، تُثبَّت جميع تغييرات الحالة. عند التراجع، تُلغى جميع التغييرات.\n\n## عداد البرنامج وJUMP\n\nعداد البرنامج (PC) هو سجل ضمني يتتبع الموضع الحالي في البايتكود. يتقدم لأكواد تشغيل عادية بمقدار 1 (أو 1 + N لأكواد PUSH). كودان يعدلان PC مباشرة:\n\n- **JUMP** — يسحب وجهة من المكدس ويضبط PC على تلك القيمة. يجب أن تحتوي الوجهة على كود JUMPDEST وإلا تتراجع المعاملة.\n- **JUMPI** — قفز مشروط. يسحب الوجهة والشرط. إذا كان الشرط غير صفري، يقفز؛ وإلا يستمر تسلسلياً.\n\n## الاستدعاءات الفرعية: CALL، STATICCALL، DELEGATECALL\n\nيمكن للعقود استدعاء عقود أخرى باستخدام ثلاثة أكواد استدعاء:\n\n- **CALL** — استدعاء قياسي. ينشئ سياق تنفيذ جديد بمكدسه وذاكرته الخاصة.\n- **STATICCALL** — استدعاء للقراءة فقط (EIP-214). أي كود تشغيل يعدل الحالة داخل المستدعى يسبب تراجعاً فورياً.\n- **DELEGATECALL** — ينفذ كود المستدعى لكن في سياق تخزين المستدعي. يُحفظ msg.sender وmsg.value من الاستدعاء الأصلي. هكذا تعمل أنماط الوكيل والمكتبات.\n\n## التبعات العملية لـ MEV\n\nإذا كنت تبني روبوتات MEV، فإن فهم EVM على مستوى أكواد التشغيل ليس خياراً — إنه متطلب تنافسي. كل وحدة غاز توفرها في تنفيذ روبوتك هي هامش ربح.\n\n- **المحاكاة قبل الإرسال** — استخدم `eth_call` أو EVM محلي (revm، EVMONE) لتتبع التنفيذ.\n- **تقليل الوصول البارد** — سخّن فتحات التخزين مسبقاً عبر قوائم الوصول (EIP-2930).\n- **استخدم STATICCALL للقراءة** — أرخص قليلاً ويضمن عدم تغيير الحالة.\n\n## الخلاصة\n\nEVM أنيقة في بساطتها: آلة مكدسية بكلمات 256 بت، وتنسيق بايتكود مسطح، ونظام قياس غاز يسعّر كل عملية. فهم هذا الأساس — أكواد التشغيل والمكدس والغاز — هو الشرط المسبق لكل ما يلي في هذه السلسلة.","\u003Ch2 id=\"evm\">EVM هي آلة مكدسية\u003C\u002Fh2>\n\u003Cp>آلة إيثيريوم الافتراضية ليست مثل معالج x86 في حاسوبك المحمول. لا تحتوي على سجلات. بدلاً من ذلك، هي \u003Cstrong>آلة مكدسية\u003C\u002Fstrong> — كل عملية حسابية تدفع إلى أو تسحب من مكدس من 1024 عنصراً حيث كل عنصر هو كلمة 256 بت (32 بايت).\u003C\u002Fp>\n\u003Cp>عندما تستدعي عقداً ذكياً، تستقبل EVM البايتكود الخاص بالعقد — سلسلة مسطحة من أكواد التشغيل أحادية البايت — وتبدأ التنفيذ من البايت 0. لا توجد جداول دوال، ولا رأس ELF، ولا خطوة ربط. البايتكود هو البرنامج.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F\u002F Solidity:\n\u002F\u002F uint256 result = 2 + 3;\n\n\u002F\u002F يُترجم إلى بايتكود:\n\u002F\u002F PUSH1 0x02  PUSH1 0x03  ADD\n\n\u002F\u002F تتبع المكدس:\n\u002F\u002F []           -&gt; PUSH1 0x02 -&gt; [2]\n\u002F\u002F [2]          -&gt; PUSH1 0x03 -&gt; [2, 3]\n\u002F\u002F [2, 3]       -&gt; ADD        -&gt; [5]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>كل كود تشغيل يستهلك معاملاته من أعلى المكدس ويدفع نتيجته للخلف. كود التشغيل ADD يسحب قيمتين ويجمعهما ويدفع المجموع. هذا يختلف جوهرياً عن البنى القائمة على السجلات حيث تحدد سجلات المصدر والوجهة.\u003C\u002Fp>\n\u003Ch2 id=\"\">فئات أكواد التشغيل\u003C\u002Fh2>\n\u003Cp>تحدد EVM حوالي 140 كود تشغيل، مجمعة في فئات وظيفية:\u003C\u002Fp>\n\u003Ch3>العمليات الحسابية والمقارنة\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>ADD, SUB, MUL, DIV, MOD\u003C\u002Fstrong> — حساب أعداد صحيحة أساسي 256 بت. تكلفة كل منها 3 غاز (مستوى G_verylow).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SDIV, SMOD\u003C\u002Fstrong> — القسمة والباقي مع إشارة باستخدام المتمم الثنائي.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>ADDMOD, MULMOD\u003C\u002Fstrong> — حساب معياري: \u003Ccode>(a + b) % N\u003C\u002Fcode> و\u003Ccode>(a * b) % N\u003C\u002Fcode> في كود تشغيل واحد. حاسمة لعمليات المنحنى الإهليلجي، تكلفتها 8 غاز.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>EXP\u003C\u002Fstrong> — الرفع إلى قوة. تكلفته 10 غاز + 50 لكل بايت في الأس، مما يجعله من أغلى أكواد التشغيل الحسابية.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>LT, GT, SLT, SGT, EQ, ISZERO\u003C\u002Fstrong> — أكواد مقارنة تدفع 1 (صحيح) أو 0 (خطأ).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>العمليات البتية\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>AND, OR, XOR, NOT\u003C\u002Fstrong> — منطق بتي، 3 غاز لكل منها.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SHL, SHR, SAR\u003C\u002Fstrong> — إزاحة لليسار، إزاحة منطقية لليمين، إزاحة حسابية لليمين (أُضيفت في Constantinople، EIP-145).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>BYTE\u003C\u002Fstrong> — استخراج بايت واحد من كلمة 32 بايت.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>معالجة المكدس\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>POP\u003C\u002Fstrong> — تجاهل العنصر العلوي.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>PUSH1 إلى PUSH32\u003C\u002Fstrong> — دفع 1 إلى 32 بايت من البيانات الفورية إلى المكدس.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>DUP1 إلى DUP16\u003C\u002Fstrong> — تكرار العنصر N من المكدس إلى الأعلى.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SWAP1 إلى SWAP16\u003C\u002Fstrong> — تبديل العنصر العلوي مع العنصر N أسفل منه.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>معلومات البيئة والكتلة\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>CALLER\u003C\u002Fstrong> (msg.sender)، \u003Cstrong>CALLVALUE\u003C\u002Fstrong> (msg.value)، \u003Cstrong>CALLDATALOAD\u003C\u002Fstrong>، \u003Cstrong>CALLDATASIZE\u003C\u002Fstrong>، \u003Cstrong>CALLDATACOPY\u003C\u002Fstrong> — الوصول إلى سياق المعاملة.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>NUMBER\u003C\u002Fstrong>، \u003Cstrong>TIMESTAMP\u003C\u002Fstrong>، \u003Cstrong>BASEFEE\u003C\u002Fstrong>، \u003Cstrong>CHAINID\u003C\u002Fstrong> — معلومات مستوى الكتلة.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>BALANCE\u003C\u002Fstrong>، \u003Cstrong>EXTCODESIZE\u003C\u002Fstrong>، \u003Cstrong>EXTCODECOPY\u003C\u002Fstrong> — الاستعلام عن حسابات أخرى.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"\">جدول الغاز\u003C\u002Fh2>\n\u003Cp>لكل كود تشغيل تكلفة غاز. يخدم الغاز غرضين: منع الحلقات اللانهائية (مشكلة التوقف) وتسعير الموارد الحسابية بشكل عادل.\u003C\u002Fp>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>المستوى\u003C\u002Fth>\u003Cth>الغاز\u003C\u002Fth>\u003Cth>أمثلة\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>صفر\u003C\u002Ftd>\u003Ctd>0\u003C\u002Ftd>\u003Ctd>STOP, RETURN, REVERT\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>أساسي\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>ADDRESS, ORIGIN, CALLER\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>منخفض جداً\u003C\u002Ftd>\u003Ctd>3\u003C\u002Ftd>\u003Ctd>ADD, SUB, LT, GT, AND, OR, POP\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>منخفض\u003C\u002Ftd>\u003Ctd>5\u003C\u002Ftd>\u003Ctd>MUL, DIV, MOD\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>متوسط\u003C\u002Ftd>\u003Ctd>8\u003C\u002Ftd>\u003Ctd>ADDMOD, MULMOD, JUMP\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>مرتفع\u003C\u002Ftd>\u003Ctd>10\u003C\u002Ftd>\u003Ctd>JUMPI\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>خاص\u003C\u002Ftd>\u003Ctd>متغير\u003C\u002Ftd>\u003Ctd>SLOAD, SSTORE, CALL, CREATE\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>الأكواد الأغلى هي التي تتعامل مع الحالة:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F\u002F تكاليف الغاز للوصول إلى الحالة (بعد EIP-2929):\n\u002F\u002F SLOAD (بارد):    2100 غاز\n\u002F\u002F SLOAD (دافئ):     100 غاز\n\u002F\u002F SSTORE (بارد، 0-&gt;غير صفري): 22100 غاز\n\u002F\u002F SSTORE (دافئ):    100 غاز (+ 20000 إذا 0-&gt;غير صفري)\n\u002F\u002F CALL (بارد):     2600 غاز\n\u002F\u002F CALL (دافئ):      100 غاز\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"eip-2929\">الوصول البارد مقابل الدافئ (EIP-2929)\u003C\u002Fh2>\n\u003Cp>قدم EIP-2929 (ترقية Berlin، أبريل 2021) مفهوم \u003Cstrong>قائمة الوصول\u003C\u002Fstrong> — مجموعة لكل معاملة من العناوين وفتحات التخزين التي تم لمسها.\u003C\u002Fp>\n\u003Cp>في المرة الأولى التي تصل فيها إلى فتحة تخزين أو عنوان خارجي ضمن معاملة، يكون “بارداً” ويكلف غازاً إضافياً. الوصولات اللاحقة “دافئة” ورخيصة. لهذا السبب يهم ترتيب قراءة فتحات التخزين لتحسين الغاز.\u003C\u002Fp>\n\u003Ch2 id=\"\">تدفق التنفيذ: ماذا يحدث في المعاملة\u003C\u002Fh2>\n\u003Cp>عندما ترسل معاملة تستدعي عقداً، إليك تسلسل التنفيذ الكامل:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>التحقق من المعاملة\u003C\u002Fstrong> — فحص الرقم التسلسلي، الرصيد &gt;= القيمة + الغاز × سعر الغاز، التحقق من التوقيع.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>خصم الغاز الجوهري\u003C\u002Fstrong> — 21000 غاز للمعاملة نفسها، بالإضافة إلى 16 غاز لكل بايت غير صفري في calldata و4 لكل بايت صفري.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>إعداد السياق\u003C\u002Fstrong> — تنشئ EVM سياق تنفيذ: الكود، calldata، المستدعي، القيمة، الغاز المتبقي.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>عداد البرنامج يبدأ من 0\u003C\u002Fstrong> — تقرأ EVM كود التشغيل في الموضع 0 وتنفذه.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>التنفيذ التسلسلي\u003C\u002Fstrong> — يُنفَّذ كل كود تشغيل، يُخصم الغاز. JUMP وJUMPI يسمحان بتدفق تحكم غير خطي، لكن فقط إلى المواضع المعلمة بـ JUMPDEST.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>الإنهاء\u003C\u002Fstrong> — ينتهي التنفيذ بـ STOP (نجاح)، RETURN (نجاح مع بيانات)، REVERT (فشل، يتم التراجع عن الحالة)، أو نفاد الغاز.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>تثبيت أو تراجع الحالة\u003C\u002Fstrong> — عند النجاح، تُثبَّت جميع تغييرات الحالة. عند التراجع، تُلغى جميع التغييرات.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"jump\">عداد البرنامج وJUMP\u003C\u002Fh2>\n\u003Cp>عداد البرنامج (PC) هو سجل ضمني يتتبع الموضع الحالي في البايتكود. يتقدم لأكواد تشغيل عادية بمقدار 1 (أو 1 + N لأكواد PUSH). كودان يعدلان PC مباشرة:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>JUMP\u003C\u002Fstrong> — يسحب وجهة من المكدس ويضبط PC على تلك القيمة. يجب أن تحتوي الوجهة على كود JUMPDEST وإلا تتراجع المعاملة.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>JUMPI\u003C\u002Fstrong> — قفز مشروط. يسحب الوجهة والشرط. إذا كان الشرط غير صفري، يقفز؛ وإلا يستمر تسلسلياً.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"call-staticcall-delegatecall\">الاستدعاءات الفرعية: CALL، STATICCALL، DELEGATECALL\u003C\u002Fh2>\n\u003Cp>يمكن للعقود استدعاء عقود أخرى باستخدام ثلاثة أكواد استدعاء:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>CALL\u003C\u002Fstrong> — استدعاء قياسي. ينشئ سياق تنفيذ جديد بمكدسه وذاكرته الخاصة.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>STATICCALL\u003C\u002Fstrong> — استدعاء للقراءة فقط (EIP-214). أي كود تشغيل يعدل الحالة داخل المستدعى يسبب تراجعاً فورياً.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>DELEGATECALL\u003C\u002Fstrong> — ينفذ كود المستدعى لكن في سياق تخزين المستدعي. يُحفظ msg.sender وmsg.value من الاستدعاء الأصلي. هكذا تعمل أنماط الوكيل والمكتبات.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"mev\">التبعات العملية لـ MEV\u003C\u002Fh2>\n\u003Cp>إذا كنت تبني روبوتات MEV، فإن فهم EVM على مستوى أكواد التشغيل ليس خياراً — إنه متطلب تنافسي. كل وحدة غاز توفرها في تنفيذ روبوتك هي هامش ربح.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>المحاكاة قبل الإرسال\u003C\u002Fstrong> — استخدم \u003Ccode>eth_call\u003C\u002Fcode> أو EVM محلي (revm، EVMONE) لتتبع التنفيذ.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>تقليل الوصول البارد\u003C\u002Fstrong> — سخّن فتحات التخزين مسبقاً عبر قوائم الوصول (EIP-2930).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>استخدم STATICCALL للقراءة\u003C\u002Fstrong> — أرخص قليلاً ويضمن عدم تغيير الحالة.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"\">الخلاصة\u003C\u002Fh2>\n\u003Cp>EVM أنيقة في بساطتها: آلة مكدسية بكلمات 256 بت، وتنسيق بايتكود مسطح، ونظام قياس غاز يسعّر كل عملية. فهم هذا الأساس — أكواد التشغيل والمكدس والغاز — هو الشرط المسبق لكل ما يلي في هذه السلسلة.\u003C\u002Fp>\n","ar","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:32.205052Z","دليل تفصيلي لعمل آلة إيثيريوم الافتراضية: أكواد التشغيل، عمليات المكدس، قياس الغاز، الوصول البارد والدافئ.","أكواد تشغيل EVM",null,"index, follow",[21,26,30],{"id":22,"name":23,"slug":24,"created_at":25},"c0000000-0000-0000-0000-000000000016","EVM","evm","2026-03-28T10:44:21.513630Z",{"id":27,"name":28,"slug":29,"created_at":25},"c0000000-0000-0000-0000-000000000020","Gas Optimization","gas-optimization",{"id":31,"name":32,"slug":33,"created_at":25},"c0000000-0000-0000-0000-000000000014","Solidity","solidity","بلوكتشين",[36,42,48],{"id":37,"title":38,"slug":39,"excerpt":40,"locale":12,"category_name":34,"published_at":41},"d0000000-0000-0000-0000-000000000617","طبقة التشغيل البيني لـ Ethereum: كيف تصبح 55+ سلسلة L2 سلسلة واحدة","tabaqat-altashghil-albaini-ethereum-55-l2-silsila-wahida","يملك Ethereum اكثر من 55 rollup من الطبقة الثانية، مما يجزئ السيولة وتجربة المستخدم. طبقة التشغيل البيني لـ Ethereum — الجمع بين الرسائل عبر الـ rollups والمتسلسلات المشتركة والـ based rollups — تهدف الى توحيدها في شبكة قابلة للتركيب واحدة.","2026-03-28T10:44:45.626845Z",{"id":43,"title":44,"slug":45,"excerpt":46,"locale":12,"category_name":34,"published_at":47},"d0000000-0000-0000-0000-000000000616","اثباتات ZK ما وراء الـ Rollups: استدلال الذكاء الاصطناعي القابل للتحقق على Ethereum","ithbatat-zk-ma-waraa-rollups-istidlal-dhakaa-istinaai-ethereum","اثباتات المعرفة الصفرية لم تعد مجرد اداة للتوسع. في 2026، يتيح zkML استدلال الذكاء الاصطناعي القابل للتحقق على السلسلة، وتنقل معالجات ZK المشتركة الحسابات الثقيلة خارج السلسلة مع التحقق على السلسلة، وانظمة الاثبات الجديدة مثل SP1 وJolt تجعل ذلك عمليا.","2026-03-28T10:44:45.621594Z",{"id":49,"title":50,"slug":51,"excerpt":52,"locale":12,"category_name":34,"published_at":53},"d0000000-0000-0000-0000-000000000593","EIP-7702 في الممارسة العملية: بناء تدفقات الحساب الذكي بعد Pectra","eip-7702-fi-almumaarasa-alamaliyya-binaa-tadaffuqat-alhisab-aldhaki-baad-pectra","يسمح EIP-7702 لأي EOA على Ethereum بالعمل مؤقتاً كعقد ذكي في معاملة واحدة. إليك كيفية تنفيذ المعاملات المجمّعة ورعاية الغاز والاسترداد الاجتماعي باستخدام البدائية الجديدة لتجريد الحساب.","2026-03-28T10:44:44.185251Z",{"id":13,"name":55,"slug":56,"bio":57,"photo_url":18,"linkedin":18,"role":58,"created_at":59,"updated_at":59},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]