[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-3-fahm-ghaz-limadha-yukallif-aqdak":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-000000000103","a0000000-0000-0000-0000-000000000092","Deep EVM #3: فهم الغاز — لماذا يكلف عقدك ما يكلفه","deep-evm-3-fahm-ghaz-limadha-yukallif-aqdak","تحليل شامل لاقتصاديات الغاز في EVM: كيف يُسعَّر كل كود تشغيل، وكيف يتفاعل EIP-1559 مع رسوم الغاز، وتقنيات عملية لتوفير الغاز.","## اقتصاديات الغاز في EVM\n\nالغاز هو وحدة القياس للجهد الحسابي في إيثيريوم. كل كود تشغيل في EVM له تكلفة غاز محددة تعكس الموارد المطلوبة لتنفيذه: وقت المعالج، استخدام الذاكرة، عمليات القرص (التخزين)، وعرض النطاق الترددي للشبكة.\n\nالغرض المزدوج للغاز:\n1. **منع الإساءة** — بدون الغاز، يمكن لأي شخص إرسال حلقة لانهائية تعطل جميع العقد.\n2. **تسعير الموارد** — العمليات الأكثر كثافة (مثل كتابة التخزين) تكلف أكثر من العمليات الخفيفة (مثل الجمع).\n\n## تسعير EIP-1559\n\nقبل EIP-1559 (ترقية لندن، أغسطس 2021)، كان تسعير الغاز مزاداً بسيطاً من السعر الأول. بعد EIP-1559:\n\n- **الرسم الأساسي (baseFee)** — يُحدد بالبروتوكول، يُحرق (لا يذهب للمعدنين). يزداد عندما تكون الكتل أكثر من 50% ممتلئة، وينخفض عندما تكون أقل.\n- **رسم الأولوية (tip)** — يذهب للمعدن\u002Fالمدقق. يحفز إدراج معاملتك.\n- **الحد الأقصى للرسم (maxFeePerGas)** — الحد الأعلى الذي ترغب في دفعه.\n\n```\nالتكلفة الفعلية = gasUsed × (baseFee + priorityFee)\nالاسترداد = (maxFeePerGas - baseFee - priorityFee) × gasUsed\n```\n\n## لماذا بعض أكواد التشغيل أغلى\n\nأكواد التشغيل مُسعرة وفقاً لتأثيرها على موارد العقدة:\n\n### عمليات التخزين (SLOAD\u002FSSTORE)\nالتخزين يعيش على القرص في شجرة Merkle Patricia. كل قراءة تتطلب اجتياز الشجرة (O(log n))، وكل كتابة تتطلب تحديث الشجرة وإنشاء إثبات جديد. لهذا تكلف SSTORE ما يصل إلى 22100 غاز.\n\n### عمليات الذاكرة\nالذاكرة خطية ومحلية لسياق الاستدعاء. MLOAD وMSTORE رخيصتان (3 غاز) لأنهما مجرد قراءة\u002Fكتابة في مصفوفة RAM. لكن تكلفة التوسيع التربيعية تمنع تخصيص كميات ضخمة.\n\n### عمليات التشفير\n- **SHA3\u002FKECCAK256** — 30 غاز + 6 لكل 32 بايت من المدخلات\n- **عقود مترجمة مسبقاً** — ecRecover (3000)، SHA256 (60)، التضاعف على المنحنى الإهليلجي (6000)\n\n## أنماط توفير الغاز\n\n### 1. تعبئة التخزين\n\nيخصص EVM 32 بايت لكل فتحة تخزين. إذا كان لديك متغيرات أصغر، يمكنك تعبئتها في فتحة واحدة:\n\n```solidity\n\u002F\u002F سيء: فتحتان (44200 غاز للتهيئة)\ncontract Bad {\n    uint128 public a; \u002F\u002F فتحة 0\n    uint256 public b; \u002F\u002F فتحة 1\n    uint128 public c; \u002F\u002F فتحة 2\n}\n\n\u002F\u002F جيد: فتحتان (a وc في فتحة واحدة)\ncontract Good {\n    uint128 public a; \u002F\u002F فتحة 0 (نصف)\n    uint128 public c; \u002F\u002F فتحة 0 (نصف)\n    uint256 public b; \u002F\u002F فتحة 1\n}\n```\n\n### 2. استخدام الأحداث بدلاً من التخزين\n\nإذا كنت تحتاج فقط لتسجيل البيانات (وليس قراءتها على السلسلة)، استخدم الأحداث:\n\n```solidity\n\u002F\u002F SSTORE: 22100 غاز\nstorage_var = value;\n\n\u002F\u002F LOG: ~375 + 8 × len غاز\nemit ValueUpdated(value);\n```\n\n### 3. عمليات قصيرة\n\nاستخدم الأنماط القصيرة للتحقق من المتطلبات:\n\n```solidity\n\u002F\u002F جيد: يفشل مبكراً\nrequire(condition, \"Error\");\n\u002F\u002F يتم تنفيذ المنطق المكلف فقط إذا تحقق الشرط\nexpensiveOperation();\n```\n\n### 4. الحسابات خارج السلسلة\n\nانقل ما يمكنك خارج السلسلة. احسب القيمة خارج السلسلة ومرر الإثبات فقط:\n\n```solidity\n\u002F\u002F بدلاً من حساب جذر Merkle على السلسلة\n\u002F\u002F تحقق فقط من الإثبات\nfunction verify(bytes32[] calldata proof, bytes32 leaf) external view {\n    require(MerkleProof.verify(proof, root, leaf), \"Invalid\");\n}\n```\n\n## استردادات الغاز\n\nبعد EIP-3529، الحد الأقصى للاسترداد هو 20% من إجمالي الغاز المستخدم. المصدر الرئيسي المتبقي:\n\n- **تصفير فتحة التخزين** (SSTORE من غير صفري إلى 0): استرداد 4800 غاز\n\nهذا يعني أن \"تنظيف\" التخزين لا يزال له قيمة اقتصادية، لكن لا يمكنك الحصول على استرداد أكبر من 20% من الغاز المستهلك.\n\n## أدوات تحليل الغاز\n\n- **forge test --gas-report** — تقرير غاز لكل دالة في اختبارات Foundry\n- **hardhat-gas-reporter** — مكوّن Hardhat لتقارير الغاز\n- **solc --asm** — إخراج التجميع لرؤية أكواد التشغيل المُولدة\n- **tenderly.co** — تتبع المعاملات مع تفصيل الغاز لكل كود تشغيل\n\n## الخلاصة\n\nالغاز ليس عشوائياً — إنه نموذج تسعير مصمم بعناية يعكس التكلفة الحقيقية لتنفيذ الكود على شبكة لامركزية. فهم لماذا يكلف كل كود تشغيل ما يكلفه يمكّنك من كتابة عقود أكثر كفاءة. النقاط الرئيسية: تقليل عمليات التخزين، تعبئة المتغيرات، التخزين المؤقت للقراءات، ونقل الحسابات خارج السلسلة حيثما أمكن.","\u003Ch2 id=\"evm\">اقتصاديات الغاز في EVM\u003C\u002Fh2>\n\u003Cp>الغاز هو وحدة القياس للجهد الحسابي في إيثيريوم. كل كود تشغيل في EVM له تكلفة غاز محددة تعكس الموارد المطلوبة لتنفيذه: وقت المعالج، استخدام الذاكرة، عمليات القرص (التخزين)، وعرض النطاق الترددي للشبكة.\u003C\u002Fp>\n\u003Cp>الغرض المزدوج للغاز:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>منع الإساءة\u003C\u002Fstrong> — بدون الغاز، يمكن لأي شخص إرسال حلقة لانهائية تعطل جميع العقد.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>تسعير الموارد\u003C\u002Fstrong> — العمليات الأكثر كثافة (مثل كتابة التخزين) تكلف أكثر من العمليات الخفيفة (مثل الجمع).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"eip-1559\">تسعير EIP-1559\u003C\u002Fh2>\n\u003Cp>قبل EIP-1559 (ترقية لندن، أغسطس 2021)، كان تسعير الغاز مزاداً بسيطاً من السعر الأول. بعد EIP-1559:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>الرسم الأساسي (baseFee)\u003C\u002Fstrong> — يُحدد بالبروتوكول، يُحرق (لا يذهب للمعدنين). يزداد عندما تكون الكتل أكثر من 50% ممتلئة، وينخفض عندما تكون أقل.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>رسم الأولوية (tip)\u003C\u002Fstrong> — يذهب للمعدن\u002Fالمدقق. يحفز إدراج معاملتك.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>الحد الأقصى للرسم (maxFeePerGas)\u003C\u002Fstrong> — الحد الأعلى الذي ترغب في دفعه.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode>التكلفة الفعلية = gasUsed × (baseFee + priorityFee)\nالاسترداد = (maxFeePerGas - baseFee - priorityFee) × gasUsed\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"\">لماذا بعض أكواد التشغيل أغلى\u003C\u002Fh2>\n\u003Cp>أكواد التشغيل مُسعرة وفقاً لتأثيرها على موارد العقدة:\u003C\u002Fp>\n\u003Ch3>عمليات التخزين (SLOAD\u002FSSTORE)\u003C\u002Fh3>\n\u003Cp>التخزين يعيش على القرص في شجرة Merkle Patricia. كل قراءة تتطلب اجتياز الشجرة (O(log n))، وكل كتابة تتطلب تحديث الشجرة وإنشاء إثبات جديد. لهذا تكلف SSTORE ما يصل إلى 22100 غاز.\u003C\u002Fp>\n\u003Ch3>عمليات الذاكرة\u003C\u002Fh3>\n\u003Cp>الذاكرة خطية ومحلية لسياق الاستدعاء. MLOAD وMSTORE رخيصتان (3 غاز) لأنهما مجرد قراءة\u002Fكتابة في مصفوفة RAM. لكن تكلفة التوسيع التربيعية تمنع تخصيص كميات ضخمة.\u003C\u002Fp>\n\u003Ch3>عمليات التشفير\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>SHA3\u002FKECCAK256\u003C\u002Fstrong> — 30 غاز + 6 لكل 32 بايت من المدخلات\u003C\u002Fli>\n\u003Cli>\u003Cstrong>عقود مترجمة مسبقاً\u003C\u002Fstrong> — ecRecover (3000)، SHA256 (60)، التضاعف على المنحنى الإهليلجي (6000)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"\">أنماط توفير الغاز\u003C\u002Fh2>\n\u003Ch3>1. تعبئة التخزين\u003C\u002Fh3>\n\u003Cp>يخصص EVM 32 بايت لكل فتحة تخزين. إذا كان لديك متغيرات أصغر، يمكنك تعبئتها في فتحة واحدة:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F سيء: فتحتان (44200 غاز للتهيئة)\ncontract Bad {\n    uint128 public a; \u002F\u002F فتحة 0\n    uint256 public b; \u002F\u002F فتحة 1\n    uint128 public c; \u002F\u002F فتحة 2\n}\n\n\u002F\u002F جيد: فتحتان (a وc في فتحة واحدة)\ncontract Good {\n    uint128 public a; \u002F\u002F فتحة 0 (نصف)\n    uint128 public c; \u002F\u002F فتحة 0 (نصف)\n    uint256 public b; \u002F\u002F فتحة 1\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>2. استخدام الأحداث بدلاً من التخزين\u003C\u002Fh3>\n\u003Cp>إذا كنت تحتاج فقط لتسجيل البيانات (وليس قراءتها على السلسلة)، استخدم الأحداث:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F SSTORE: 22100 غاز\nstorage_var = value;\n\n\u002F\u002F LOG: ~375 + 8 × len غاز\nemit ValueUpdated(value);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>3. عمليات قصيرة\u003C\u002Fh3>\n\u003Cp>استخدم الأنماط القصيرة للتحقق من المتطلبات:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F جيد: يفشل مبكراً\nrequire(condition, \"Error\");\n\u002F\u002F يتم تنفيذ المنطق المكلف فقط إذا تحقق الشرط\nexpensiveOperation();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>4. الحسابات خارج السلسلة\u003C\u002Fh3>\n\u003Cp>انقل ما يمكنك خارج السلسلة. احسب القيمة خارج السلسلة ومرر الإثبات فقط:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F بدلاً من حساب جذر Merkle على السلسلة\n\u002F\u002F تحقق فقط من الإثبات\nfunction verify(bytes32[] calldata proof, bytes32 leaf) external view {\n    require(MerkleProof.verify(proof, root, leaf), \"Invalid\");\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"\">استردادات الغاز\u003C\u002Fh2>\n\u003Cp>بعد EIP-3529، الحد الأقصى للاسترداد هو 20% من إجمالي الغاز المستخدم. المصدر الرئيسي المتبقي:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>تصفير فتحة التخزين\u003C\u002Fstrong> (SSTORE من غير صفري إلى 0): استرداد 4800 غاز\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>هذا يعني أن “تنظيف” التخزين لا يزال له قيمة اقتصادية، لكن لا يمكنك الحصول على استرداد أكبر من 20% من الغاز المستهلك.\u003C\u002Fp>\n\u003Ch2 id=\"\">أدوات تحليل الغاز\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>forge test –gas-report\u003C\u002Fstrong> — تقرير غاز لكل دالة في اختبارات Foundry\u003C\u002Fli>\n\u003Cli>\u003Cstrong>hardhat-gas-reporter\u003C\u002Fstrong> — مكوّن Hardhat لتقارير الغاز\u003C\u002Fli>\n\u003Cli>\u003Cstrong>solc –asm\u003C\u002Fstrong> — إخراج التجميع لرؤية أكواد التشغيل المُولدة\u003C\u002Fli>\n\u003Cli>\u003Cstrong>tenderly.co\u003C\u002Fstrong> — تتبع المعاملات مع تفصيل الغاز لكل كود تشغيل\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"\">الخلاصة\u003C\u002Fh2>\n\u003Cp>الغاز ليس عشوائياً — إنه نموذج تسعير مصمم بعناية يعكس التكلفة الحقيقية لتنفيذ الكود على شبكة لامركزية. فهم لماذا يكلف كل كود تشغيل ما يكلفه يمكّنك من كتابة عقود أكثر كفاءة. النقاط الرئيسية: تقليل عمليات التخزين، تعبئة المتغيرات، التخزين المؤقت للقراءات، ونقل الحسابات خارج السلسلة حيثما أمكن.\u003C\u002Fp>\n","ar","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:32.230804Z","تحليل شامل لاقتصاديات الغاز: تسعير أكواد التشغيل، EIP-1559، وتقنيات عملية لتوفير الغاز في العقود الذكية.","تحسين غاز 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"]