ما تحسين الغاز؟
تحسين الغاز هو عملية تقليل موارد البلوكشين اللازمة لنشر عقد ذكي للعملات المشفرة أو تنفيذه.تستهلك كل معاملة وكل عملية في آلة Ethereum الافتراضية مقدارًا محددًا من الغاز على Ethereum.يدفع مُرسِل المعاملة عادةً رسوم شبكة تُحسب وفق الغاز المفروض والسعر الفعلي لكل وحدة غاز.الحساب الأساسي هو: رسوم المعاملة = الغاز المفروض × سعر الغاز الفعلي.يقلل تحسين الغاز كمية الغاز المفروضة عبر جعل شيفرة العقد واستخدام التخزين وبيانات المعاملة ومسارات التنفيذ أكثر كفاءة.ولا يتحكم مباشرةً في سعر الغاز، الذي يتغير وفق الطلب على سعة البلوكشين.يمكن للعقد المحسّن على نحو صحيح أن يجعل تحويلات التوكنات وعمليات التمويل اللامركزي وإجراءات الحوكمة وأنشطة NFT وغيرها من معاملات العملات المشفرة أقل تكلفة.لكن يجب ألا يزيل تحسين الغاز فحوص الأمان أو يجعل سلوك العقد صعب الفهم.الهدف هو تنفيذ الحد الأدنى من العمل الآمن والقابل للتحقق على السلسلة الذي يتطلبه التطبيق.كيف يعمل تحسين الغاز؟
تفرض Ethereum كميات مختلفة من الغاز على أنواع مختلفة من العمل الحسابي وتغييرات الحالة.تكون الحسابات البسيطة قليلة التكلفة عمومًا، بينما قد ترتفع كثيرًا تكلفة تغييرات التخزين الدائم وإنشاء العقود والعمليات التشفيرية والاستدعاءات الخارجية.توضح وثائق Ethereum الرسمية حول الغاز أن الغاز يقيس الجهد الحسابي اللازم لمعالجة معاملات البلوكشين.
يبدأ تحسين الغاز بتحديد العمليات الأكثر استهلاكًا له ومعرفة ما إذا كان بإمكان التطبيق تنفيذ عمل أقل دون تغيير سلوكه المقصود.قد يقلل المطور قراءات التخزين المتكررة أو يدمج تغييرات الحالة أو يختصر بيانات المعاملة أو يحذف الحسابات المكررة أو يستخدم ميزات EVM أكفأ.ويمكن للمُصرّف أيضًا تحويل شيفرة Solidity المصدرية إلى شيفرة ثنائية أكثر كفاءة.تقلل بعض التحسينات تكلفة نشر العقد، بينما تقلل أخرى تكلفة كل تفاعل للمستخدم.يعتمد الأسلوب الأنسب على عدد مرات نشر العقد وتكرار استدعاء دواله.تحسين الغاز مقابل تحسين سعر الغاز
يتناول تحسين الغاز وتحسين سعره جزأين مختلفين من رسوم المعاملة.يقلل تحسين الغاز عدد وحدات الغاز التي تستهلكها المعاملة.أما تحسين سعر الغاز فيهدف إلى إرسال المعاملة عندما تكون تكلفة كل وحدة غاز أقل.يظل العقد الذي يستهلك 100,000 وحدة غاز أعلى تكلفة من الناحية الحسابية من عقد ينفذ المهمة الآمنة نفسها باستخدام 60,000 وحدة.ومع ذلك، قد يترتب على العقد الأقل تكلفة رسم مرتفع بالعملة الوطنية إذا كان ازدحام الشبكة أو سعر ETH مرتفعًا.قد يخفض المستخدمون سعر الغاز أحيانًا بانتظار تراجع الطلب على الشبكة، لكن المطورين يتحكمون في استهلاك الغاز عبر تصميم العقد والتطبيق.قد يقلل الجمع بين النهجين تكلفة المعاملة الإجمالية بفاعلية أكبر من الاعتماد على أي منهما وحده.أهمية تحسين الغاز في الكريبتو
قد تمنع تكاليف المعاملات المرتفعة المستخدمين من التفاعل مع تطبيق للعملات المشفرة حتى إن كانت خدمته الأساسية مفيدة.يصبح الانخفاض البسيط في الغاز ذا أهمية اقتصادية عندما تُنفذ الدالة نفسها آلاف المرات أو ملايينها.قد يسهم خفض استهلاك الغاز في تسهيل الوصول إلى التطبيق للمستخدمين الذين لديهم أرصدة صغيرة من العملات المشفرة.وقد يساعد المعاملات الحساسة للوقت على المنافسة للإدراج من دون الحاجة إلى رسوم إجمالية مرتفعة بلا داعٍ.تكتسب كفاءة الغاز أهمية خاصة لاستراتيجيات العملات المشفرة المؤتمتة، إذ قد تتجاوز تكاليف التنفيذ الربح المتوقع من التداول أو التصفية.وتستهلك العقود الكفؤة أيضًا قدرًا أقل من سعة الكتل المحدودة، ما يتيح إدراج مزيد من المعاملات ضمن موارد الشبكة المتاحة.لذلك، قد يفيد التحسين المستخدمين الأفراد ومنظومة البلوكشين الأوسع على حد سواء.قِس استهلاك الغاز قبل تعديل الشيفرة
ينبغي للمطورين قياس استهلاك الغاز قبل تحديد أجزاء العقد التي تحتاج إلى تحسين.قد يكون المُصرّف قد بسّط بالفعل شيفرة مصدرية تبدو غير كفؤة.وقد ينتج عن اختصار على مستوى الشيفرة شيفرة ثنائية أعلى تكلفة من تنفيذ أوضح.ينبغي أن تشمل تقارير الغاز نشر العقد والمعاملات الناجحة والمعاملات التي تراجعت والمدخلات ذات الأحجام القصوى ومسارات التنفيذ غير الشائعة.قد تصبح الدالة قليلة التكلفة لمستخدم واحد باهظة عندما تعالج مصفوفة كبيرة أو عددًا كبيرًا من عناصر التخزين.تتيح لقطات الغاز الآلية مقارنة التكاليف بين مراجعات البرنامج واكتشاف الزيادات غير المتوقعة.يمكن لآثار التنفيذ تحديد تعليمات التشغيل وخانات التخزين وتوسيع الذاكرة واستدعاءات العقود الخارجية الأعلى تكلفة.تشرح وثائق مُصرّف Solidity مخرجات المُصرّف المتاحة وإعدادات التحسين وتقديرات الغاز.
ينبغي للمطورين التعامل مع التقديرات على أنها إرشادية، إذ قد تجعل الحلقات الديناميكية والاستدعاءات الخارجية استهلاك الغاز الدقيق تابعًا لحالة البلوكشين.حسّن بنية العقد الذكي
غالبًا ما يتحقق أكبر توفير للغاز بتغيير بنية العقد بدلًا من إعادة كتابة التعابير منفردة.سيظل العقد الذي يخزن معلومات غير ضرورية مكلفًا حتى لو كانت عملياته الحسابية محسّنة للغاية.ينبغي للمطورين تحديد المعلومات التي يجب فرضها على السلسلة، وتلك التي يمكن حسابها أو فهرستها خارج العقد.تتطلب الأرصدة المهمة والأذونات وسجلات الملكية وبيانات الضمانات عادةً حالة دائمة على السلسلة.وقد تلائم معلومات العرض والنشاط التاريخي والتحليلات سجلات الأحداث عندما لا يحتاج تنفيذ العقد مستقبلًا إلى قراءتها.وينبغي للمطورين أيضًا التفكير فيما إذا كان يمكن تمثيل عدة تحديثات للحالة بقيمة تراكمية واحدة أو مؤشر محاسبي.تتطلب نماذج الحالة الأبسط عادةً عمليات تخزين أقل ويسهل تدقيقها.قلل عمليات الكتابة إلى التخزين الدائم
التخزين الدائم من أغلى الموارد المتاحة للعقود الذكية على Ethereum.تظل بيانات التخزين جزءًا من حالة Ethereum بعد اكتمال المعاملة.يجب أن تعالج عُقد الشبكة كل قيمة تخزين جديدة أو متغيرة وتحافظ عليها.ينبغي للعقد تجنب كتابة معلومات يمكنه حسابها بأمان من الحالة الحالية.كما ينبغي تجنب كتابة قيمة إذا كانت القيمة المطلوبة مخزنة بالفعل.يمكن أحيانًا استبدال عدة تحديثات وسيطة بعملية كتابة نهائية واحدة بعد اكتمال جميع الحسابات.وينبغي ألا يخزن المطورون نسخًا مكررة من البيانات نفسها، إلا إذا أتاح التكرار فائدة ضرورية للأمان أو الأداء.غالبًا ما يؤدي تقليل الكتابة إلى التخزين إلى توفير أكبر من التغييرات الحسابية البسيطة.خزّن مؤقتًا قراءات التخزين المتكررة
قد تهدر إعادة تحميل القيمة نفسها من التخزين الغاز عندما تظل القيمة ثابتة أثناء التنفيذ.غالبًا ما يمكن للعقد تحميل القيمة مرة واحدة إلى متغير محلي وإعادة استخدامها في الحسابات اللاحقة.تطبق Ethereum تكاليف مختلفة للوصول البارد والدافئ إلى الحالة بموجب EIP-2929.
يكون الوصول الأول إلى حساب أو خانة تخزين أثناء المعاملة أعلى تكلفة عمومًا من الوصول اللاحق إلى الموقع نفسه.ومع ذلك، قد تظل قراءة التخزين الدافئة أعلى تكلفة من استخدام قيمة موجودة على المكدس أو في الذاكرة.ينبغي تجنب التخزين المؤقت عندما يمكن لاستدعاء خارجي تغيير حالة العقد المعنية قبل استخدام القيمة المخزنة.ينبغي مراجعة إعادة الدخول وسلوك الاستدعاءات العكسية كلما خُزنت الحالة مؤقتًا عبر تفاعل خارجي.اجمع متغيرات الحالة
ينقسم تخزين Ethereum إلى خانات بعرض 32 بايت.يمكن أن تضع Solidity عدة متغيرات صغيرة من أنواع القيم في الخانة نفسها إذا سمحت أحجامها وترتيبها بذلك.تشرح وثائق تخطيط التخزين الرسمية في Solidity كيفية تعيين المتغيرات إلى خانات التخزين.
قد يقلل الترتيب المدروس للمتغيرات عدد الخانات التي يحتاج إليها العقد.فقد تتسع عدة أعداد صحيحة صغيرة أو قيم منطقية في خانة واحدة بدلًا من خانات منفصلة.لا يقلل استخدام عدد صحيح أصغر تكلفة التشغيل تلقائيًا، لأن EVM تنفذ الحسابات عادةً على كلمات من 256 بت.يكون التجميع أكثر فائدة عندما تُقرأ عدة قيم مجمعة أو تُكتب معًا عادةً.قد يتطلب تحديث حقل واحد فقط في خانة مجمعة عمليات إضافية للإخفاء والدمج.ينبغي للمطورين عدم إعادة ترتيب متغيرات تخزين موجودة في عقد قابل للترقية، لأن ذلك قد يتلف البيانات المخزنة سابقًا.استخدم المتغيرات الثابتة وغير القابلة للتغيير
ينبغي ألا تُخزن القيمة التي لا تتغير كمتغير حالة عادي قابل للتغيير.تتيح Solidity تعريف القيم وقت التجميع باستخدام الكلمة المفتاحية
وغالبًا ما يمكن تعريف القيم التي تُحدد عند إنشاء العقد ثم تثبت باستخدام الكلمة المفتاحية
تشرح وثائق Solidity للمتغيرات الثابتة وغير القابلة للتغيير الفروق بين هذه التعريفات.
تشمل الأمثلة المعتادة العناوين الدائمة والحدود الثابتة والقيم الرياضية والإعدادات التي لا يمكن تغييرها بعد النشر.ينبغي أن يظل المتغير قابلًا للتغيير إذا كان التطبيق يحتاج فعلًا إلى الحوكمة أو الإدارة المخولة لتحديثه.اختر موقع البيانات المناسب
يمكن أن توجد بيانات Solidity في التخزين أو الذاكرة أو calldata أو التخزين المؤقت، حسب طريقة استخدامها.يستمر التخزين بين المعاملات، وهو عمومًا أغلى المواقع.الذاكرة مؤقتة ولا تبقى متاحة إلا أثناء التنفيذ الحالي.تتضمن calldata مدخلات خارجية للقراءة فقط يرسلها المستخدم مع المعاملة أو استدعاء العقد.يستمر التخزين المؤقت عبر الاستدعاءات خلال معاملة واحدة، لكنه يُمسح تلقائيًا عند انتهائها.يزيد اختيار موقع بيانات أعلى تكلفة من اللازم تكلفة المعاملة من دون تحسين وظائفها.تشرح وثائق مواقع البيانات في Solidity تأثير هذه المواقع في النسخ وقابلية التعديل ومدة البقاء.
استخدم calldata للمدخلات الخارجية المخصصة للقراءة فقط
غالبًا ما يمكن أن تبقى معلمات الدوال الخارجية في calldata إذا لم تكن بحاجة إلى التعديل.قد يؤدي استخدام calldata إلى تجنب نسخ المصفوفات أو السلاسل النصية أو تسلسلات البايتات أو البنى الكبيرة إلى الذاكرة.قد يقلل ذلك الغاز عندما تحتاج الدالة إلى فحص القيم المقدمة فقط.تظل الذاكرة مناسبة عندما يحتاج العقد إلى تعديل المدخل أو إنشاء قيمة جديدة فيها.ينبغي للمطورين أيضًا تقليل بيانات المعاملة غير الضرورية، لأن كل بايت في calldata يسهم في تكلفة الغاز الأساسية.يمكن أحيانًا استبدال القيم المتكررة بمعرّفات مختصرة إذا كان العقد يخزن الإعداد الكامل مسبقًا.ينبغي قياس الضغط بعناية، فقد تتجاوز الحسابات اللازمة لفك البيانات مقدار ما وفره الضغط.راعِ تسعير calldata الحالي
فُعّلت ترقية Pectra على Ethereum في 7 مايو 2025، وشملت تغييرات تؤثر في اقتصاديات المعاملات كثيفة البيانات.قدم EIP-7623 حدًا أدنى أعلى للغاز في المعاملات التي تحمل كميات كبيرة من calldata وتنفذ قدرًا قليلًا نسبيًا من عمليات EVM.
وُضعت هذه القاعدة للحد من الحجم الأقصى للكتل كثيفة البيانات وتحسين مرونة الشبكة.ينبغي للمطورين ألا يفترضوا أن المعاملة ذات الحسابات المحدودة ستكون قليلة التكلفة دائمًا إذا تضمنت حمولة كبيرة من calldata.ينبغي للتطبيقات التي ترسل إثباتات أو توقيعات أو دفعات أو معلومات معاملات مضغوطة قياس سلوك البروتوكول الحالي.قد تغير ترقيات الشبكة الجديدة التكلفة النسبية لـ calldata والحسابات والتخزين والموارد الأخرى.استخدم التخزين المؤقت عندما تكون الحالة مؤقتة
صُمم التخزين المؤقت للمعلومات التي يجب أن تظل متاحة أثناء معاملة واحدة، لكن ينبغي ألا تستمر بعد انتهائها.قدمت Ethereum تعليمي التشغيل
استخدم محسّن Solidity
يمكن لمحسّن Solidity تبسيط التعابير وإزالة العمليات غير الضرورية ودمج الحسابات وتقليل حجم الشيفرة الثنائية.تشرح وثائق محسّن Solidity الرسمية مراحل التحسين المتعددة المطبقة على الشيفرة المولّدة.
قد يقلل المحسّن غاز النشر أو غاز التشغيل أو كليهما.يمثل إعداد runs تقديرًا لعدد مرات تنفيذ الشيفرة المنشورة المتوقعة.يركز العدد الأقل لـ runs عمومًا على شيفرة ثنائية أصغر عند النشر.يتيح العدد الأعلى عمومًا نشر عقد أكبر مقابل خفض تكلفة التنفيذ المتكرر.لا يناسب إعداد runs بعينه جميع العقود الذكية.ينبغي للمطورين مقارنة الإعدادات وفق توقعات النشر والاستخدام الفعلية للعقد.قد يعطي مسار التجميع المستند إلى IR نتائج مختلفة عن المسار الأقدم، وينبغي تقييمه باختبارات كاملة.استخدم مُصرّفًا حديثًا ومتحققًا منه
قد تتضمن إصدارات مُصرّف Solidity تحسينات للغاز ودعمًا لإصدارات EVM جديدة وإصلاحات للأخطاء والأمان.ينبغي للمطورين مراجعة موقع Solidity الرسمي قبل اختيار مُصرّف لنشر إنتاجي.
توصي وثائق Solidity عمومًا باستخدام أحدث إصدار مطروح، ما لم يكن لدى المشروع سبب توافق محدد يقتضي خلاف ذلك.وينبغي للمطورين أيضًا مراجعة القائمة الرسمية بالأخطاء المعروفة في مُصرّف Solidity.
ينبغي تثبيت إصدار المُصرّف وإعدادات التحسين في عملية البناء.قد تؤدي إعادة تجميع الشيفرة المصدرية نفسها باستخدام مُصرّف مختلف إلى شيفرة ثنائية وسلوك مختلفين من حيث الغاز.استخدم الأخطاء المخصصة
تكون الأخطاء المخصصة عمومًا أكثر كفاءة من حيث الغاز من رسائل التراجع الطويلة.تزيد رسالة التراجع حجم الشيفرة الثنائية المنشورة وتنشئ نصًا مشفرًا عند فشل المعاملة.يستخدم الخطأ المخصص معرّفًا مختصرًا ويمكن أن يتضمن معلمات منظمة.تشرح وثائق Solidity للأخطاء المخصصة كيفية تعريف العقود لهذه الأخطاء وإرجاعها.
ينبغي أن تظل الأخطاء موضحة بما يكفي ليفهم المستخدمون والمطورون والمحافظ سبب الفشل.قد يؤدي حذف معلومات مفيدة عن الفشل لتوفير قدر ضئيل جدًا من الغاز إلى صعوبة دعم التطبيق وتدقيقه.حسّن الحلقات
قد تصبح الحلقات مكلفة وخطيرة عندما يعتمد عدد تكراراتها على مجموعة يمكن أن تنمو من دون حد صارم.قد تتطلب الحلقة غير المحدودة غازًا أكثر مما تستطيع معاملة واحدة توفيره في نهاية المطاف.ينبغي تقسيم أعباء العمل الكبيرة إلى دفعات متوقعة متى أمكن.قد تخزن الحلقة طول المصفوفة أو قيمة أخرى كثيرة الاستخدام مؤقتًا إذا تعذر تغيير المعلومات المخزنة أثناء التنفيذ.يمكن للمطورين أحيانًا استخدام العمليات الحسابية غير الخاضعة للتحقق
قلل استدعاءات العقود الخارجية
تضيف استدعاءات العقود الخارجية تكلفة الغاز للوصول إلى الحسابات وترميز الوسائط ومعالجة بيانات الإرجاع وتنفيذ العقد المُستدعى.ينبغي للعقد تجنب تكرار استدعاء الدالة الخارجية نفسها عندما يوفر استدعاء واحد آمن القيمة المطلوبة.يمكن أحيانًا دمج عدة إجراءات مترابطة في استدعاء أو معاملة واحدة.لكن التجميع قد يزيد بيانات calldata وتعقيد التنفيذ وحجم العمل الذي يُلغى عند فشل إحدى الخطوات.وتنشأ عن الاستدعاءات الخارجية اعتبارات أمنية تتعلق بإعادة الدخول وبيانات الإرجاع الخبيثة واستهلاك الغاز والأعطال غير المتوقعة.يجب ألا يحذف تحسين الغاز التحقق من القيم المرجعة أو أنماط التفاعل الآمنة.استخدم الأحداث بدلًا من التخزين عند ملاءمة ذلك
يمكن للأحداث تسجيل نشاط البلوكشين للمحافظ والواجهات وأنظمة التحليلات والفهرسة خارج السلسلة.غالبًا ما تكون أقل تكلفة من تخزين المعلومات نفسها كحالة دائمة للعقد.تلائم الأحداث المعلومات التي لا يحتاج تنفيذ عقد ذكي لاحق إلى قراءتها أو فرضها.قد تلائم السجلات التاريخية للمعاملات وإشعارات النشاط والبيانات الوصفية الوصفية سجلات الأحداث.لكن ينبغي ألا تُخزن الأرصدة والأذونات والديون والضمانات والملكية في الأحداث وحدها، لأن تنفيذ EVM العادي لا يستطيع البحث في السجلات التاريخية.ينبغي للعقد الاحتفاظ في حالة يمكن الوصول إليها بأي معلومات يحتاج إليها لاتخاذ قرارات مستقبلية.قلل تكلفة نشر العقد
يستهلك نشر العقد غازًا لتنفيذ منطق التهيئة وتخزين شيفرته الثنائية أثناء التشغيل.قد تزيد الدوال غير المستخدمة والشيفرة المكررة والبيانات المضمّنة ورسائل الأخطاء الطويلة تكلفة النشر.ينبغي للمطورين حذف الشيفرة غير القابلة للوصول وتجنب استيراد مكتبة كبيرة إذا لم يلزم سوى جزء صغير منها.قد تقلل المكتبات تكرار الشيفرة الثنائية في عدة عقود، لكن استدعاءات المكتبة الخارجية تفرض تكاليفها أثناء التشغيل وتضيف تبعيات.قد تخفض أنماط Factory وClone تكلفة النشر عندما تكون هناك حاجة إلى عدد كبير من مثيلات العقود المتشابهة.وقد تشارك أنماط Proxy الشيفرة التنفيذية أيضًا، لكنها تضيف عبئًا لاستدعاءات delegate call وصلاحيات ترقية ومخاطر متعلقة بتخطيط التخزين.ينبغي اختيار البنية بناءً على متطلبات الأمان ودورة الحياة، لا تكلفة النشر وحدها.استهدف إصدار EVM الصحيح
قد ينشئ مُصرّف Solidity شيفرة ثنائية مختلفة تبعًا لإصدار EVM المحدد.قد تدعم إصدارات EVM الأحدث تعليمات أكفأ لا تستطيع الشبكات الأقدم تنفيذها.على سبيل المثال، قدم EIP-3855 التعليمة المختصرة
وقدم EIP-5656 التعليمة
افهم استرداد الغاز
قد يقلل استرداد الغاز مقدار الغاز النهائي المفروض بعد عمليات تخزين مؤهلة معينة.تحدد قواعد Ethereum الحالية استردادات البروتوكول بحد أقصى قدره 20% من إجمالي استهلاك الغاز.خفض EIP-3529 الاسترداد الناتج عن مسح التخزين المؤهل وألغى الاسترداد السابق لتعليمة
لا تُعد
ادرس تجميع الإجراءات بعناية
قد يؤدي جمع عدة إجراءات في معاملة واحدة إلى تجنب دفع النفقات المتكررة للمعاملة.وقد يحسن تجربة المستخدم عبر تقليل عدد مرات تأكيد المعاملات في المحفظة.لكن يظل كل إجراء يستهلك الغاز اللازم لحساباته وتغييرات حالته.قد تقترب الدفعة الكبيرة من حدود الغاز للمعاملة أو تتسبب في فشل مكلف يلغي كل شيء.ينبغي للتطبيقات تحديد ما إذا كان فشل الإجراءات الفرعية يؤدي إلى تراجع الدفعة كلها أم يسمح بالإكمال الجزئي.ينبغي تصميم التفويض بعناية، لأن توقيعًا شاملًا لدفعة قد يسمح بنشاط أوسع مما يتوقعه المستخدم.يتيح EIP-7702 ضمن ترقية Pectra للحسابات المملوكة خارجيًا تفويض التنفيذ إلى شيفرة عقد ذكي، ما يدعم ميزات المحافظ مثل تجميع الإجراءات ورعاية رسوم الغاز.
ينبغي مراجعة منطق الحسابات المفوضة بعناية مماثلة لأي عقد آخر يتحكم في العملات المشفرة.استخدم شبكات الطبقة الثانية لتحقيق توفير إضافي
يقلل تحسين العقد الذكي مقدار الحسابات التي يتطلبها التطبيق.وقد يؤدي النشر على شبكة طبقة ثانية مناسبة إلى خفض السعر المدفوع مقابل هذه الحسابات والبيانات المرتبطة بها.تعالج Rollups المعاملات خارج شبكة Ethereum الرئيسية وتنشر البيانات أو الإثباتات على Ethereum.قدمت ترقية Dencun بيانات Blob عبر EIP-4844، مانحةً Rollups سوق بيانات مؤقتًا منفصلًا.لا تلغي رسوم الطبقة الثانية المنخفضة الحاجة إلى تحسين الغاز، فالعقود غير الكفؤة تظل تهدر السعة وتكلف أكثر من العقود الكفؤة على الشبكة نفسها.وينبغي للمطورين أيضًا تقييم أمان الجسور وقواعد السحب والسيولة والنهائية وآليات حساب الرسوم الخاصة بالشبكة.تجنب التحسين منخفض المستوى قبل أوانه
ينبغي للمطورين عدم البدء بـ Assembly المضمنة أو معالجة البتات المعقدة قبل قياس شيفرة Solidity العادية.فقد يكون المُصرّف قد أنشأ بالفعل شيفرة ثنائية كفؤة من تنفيذ واضح عالي المستوى.قد تقلل Assembly الغاز أحيانًا في العمليات المتخصصة، لكنها تتجاوز عدة وسائل حماية على مستوى اللغة.قد تؤدي أخطاء Assembly إلى تلف الذاكرة أو ترميز غير صحيح أو استدعاءات غير آمنة أو خسارة أموال المستخدمين.ينبغي أن يتضمن التحسين منخفض المستوى تنفيذًا مرجعيًا واضحًا واختبارات تثبت تكافؤ السلوك.تكتسب المراجعة الأمنية المستقلة أهمية خاصة عندما تتعامل Assembly مع الأرصدة أو التوقيعات أو الأذونات أو الاستدعاءات الخارجية.لا تضحي بالأمان لتوفير الغاز
لا فائدة من عقد منخفض التكلفة إذا استطاع المهاجمون سرقة عملاته المشفرة.ينبغي عدم حذف ضوابط الوصول والتحقق من المدخلات والحماية من إعادة الدخول وفحوص الانزلاق السعري والمواعيد النهائية والمحاسبة لمجرد خفض استهلاك الغاز.لا ينبغي استخدام العمليات الحسابية غير الخاضعة للتحقق إلا عندما يستحيل تجاوز السعة أو نقصها في كل ظرف يمكن بلوغه.قد يوفر ضغط التخزين الغاز، لكنه يزيد احتمال الأخطاء على مستوى البتات.قد يخفض Proxy تكلفة النشر، لكنه قد ينشئ تحكمًا مركزيًا بالترقية أو تعارضات في التخزين.قد يلغي التوقيع خارج السلسلة معاملة، لكنه يضيف متطلبات لرقم nonce وانتهاء الصلاحية ومنع إعادة التشغيل وفصل النطاق.ينبغي مراجعة قرارات التحسين من حيث الأمان ووضوح الشيفرة وقابلية الترقية والمخاطر التشغيلية.اختبار تحسين الغاز
ينبغي اختبار كل تحسين مقارنةً بالتنفيذ الأصلي.ينبغي أن تؤكد الاختبارات الوظيفية أن الإصدارين ينتجان تغييرات الحالة والمخرجات نفسها.ينبغي أن تقيس اختبارات الغاز الاستهلاك المتوسط والأقصى المدعوم وظروف الفشل.قد تكشف اختبارات Fuzz مدخلات غير مألوفة تؤدي إلى مسار تنفيذ مكلف أو غير صحيح.وقد تؤكد اختبارات الثوابت استمرار صحة خصائص المحاسبة والأمان الأساسية بعد التحسين.ينبغي للمطورين أيضًا إجراء الاختبارات باستخدام إصدار المُصرّف وإعدادات التحسين وهدف EVM المحددة للإنتاج.ينبغي الاحتفاظ بلقطات الغاز كي لا تلغي التطويرات المستقبلية التحسين بصمت.أخطاء شائعة في تحسين الغاز
من الأخطاء الشائعة افتراض أن كل نوع أصغر من الأعداد الصحيحة يقلل الغاز.ومنها أيضًا نسخ البيانات الخارجية للقراءة فقط من calldata إلى الذاكرة من دون حاجة وظيفية.وقد ينشئ المطورون حلقات غير محدودة على مجموعات تخزين، فتصبح غير قابلة للتنفيذ مع توسع التطبيق.وقد يحسن بعض الفرق دالة نادرة الاستخدام ويتجاهل تكلفة صغيرة تتكرر في كل معاملة للمستخدم.ويختار آخرون إعدادات المحسّن من دون اختبار الموازنة بين النشر والتشغيل.وقد تضاف Assembly مكتوبة يدويًا قبل تحديد العملية المكلفة فعلًا.وقد يعتمد المطورون أيضًا على جداول غاز قديمة بعد أن أعادت ترقية Ethereum تسعير عملية ما.أما أخطر الأخطاء فهو حذف فحص أمني ضروري للحصول على نتيجة مبهرة في معيار قياس الغاز.كيفية وضع استراتيجية لتحسين الغاز
ينبغي أن تبدأ استراتيجية تحسين الغاز بتحديد واضح لسلوك العقد ومتطلبات الأمان.ينبغي لفريق التطوير إنشاء اختبارات كاملة قبل تعديل التنفيذ.ثم عليه قياس تكاليف النشر والمعاملات في ظروف واقعية.ينبغي إعطاء الأولوية لعمليات التخزين والحلقات وحمولات calldata والاستدعاءات الخارجية الأعلى تكلفة.ينبغي دراسة تبسيط البنية قبل إعادة كتابة الشيفرة منخفضة المستوى.ينبغي اختبار إعدادات المُصرّف وإصدار EVM المستهدف وتسجيلهما.ينبغي أن يخضع كل تحسين لمراجعة وظيفية واختبارات غاز ومراجعة أمنية.ينبغي أن يستخدم النشر النهائي شيفرة ثنائية قابلة لإعادة الإنتاج، منشأة بأدوات وتبعيات مثبتة الإصدارات.الأسئلة الشائعة
ما تحسين الغاز ببساطة؟
يعني تحسين الغاز تقليل الحسابات والتخزين وبيانات المعاملة على البلوكشين اللازمة لتنفيذ عقد ذكي بأمان.هل يخفض تحسين الغاز سعر الغاز؟
لا، بل يقلل استهلاك الغاز، بينما يحدد الطلب على الشبكة وإعدادات رسوم المعاملة سعر الغاز.ما أكثر طرق تحسين الغاز فاعلية؟
عادةً ما يحقق تقليل عمليات التخزين الدائم غير الضرورية وتبسيط بنية العقد أكبر توفير.هل التخزين أغلى من الذاكرة؟
نعم، يكون التخزين الدائم أعلى تكلفة عمومًا، لأن بياناته تظل جزءًا من حالة البلوكشين بعد انتهاء المعاملة.هل calldata أقل تكلفة من الذاكرة؟
قد تكون calldata أقل تكلفة للمدخلات الخارجية المخصصة للقراءة فقط، لأن القيمة كاملةً لا تحتاج إلى نسخها إلى الذاكرة.هل توفر أنواع الأعداد الصحيحة الصغيرة الغاز دائمًا؟
لا، إذ توفر عادةً قدرًا ملموسًا من التخزين عندما يمكن تجميع عدة قيم في خانة واحدة.ما التخزين المؤقت؟
هو تخزين في EVM يقتصر على معاملة واحدة ويُمسح تلقائيًا، وقد يقلل تكلفة الحالة المؤقتة للعقد.هل يقلل محسّن Solidity التكاليف دائمًا؟
لا، فقد يخفض أحد إعداداته غاز التشغيل ويزيد تكلفة النشر، لذا ينبغي قياس كل إعداد.ما معنى runs في المحسّن؟
يؤثر إعداد runs في الموازنة التي يجريها المُصرّف بين صغر الشيفرة الثنائية عند النشر وانخفاض تكلفة التنفيذ المتكرر.هل الأخطاء المخصصة أقل تكلفة من رسائل التراجع؟
تكون الأخطاء المخصصة أكثر كفاءة عمومًا، لأنها تستخدم معرّفات مختصرة ومعلمات مشفرة بدلًا من سلاسل نصية طويلة.هل يمكن للأحداث أن تحل محل التخزين؟
يمكن للأحداث أن تحل محل التخزين فقط عندما لا يحتاج تنفيذ العقد الذكي مستقبلًا إلى قراءة المعلومات أو فرضها.هل يؤدي مسح التخزين إلى استرداد الغاز؟
قد يؤدي مسح التخزين المؤهل إلى استرداد محدود، لكن الاسترداد مقيد ولا يعوض تكلفة التخزين الأصلية كاملةً.هل يمنع استرداد الغاز نفاد الغاز؟
لا، إذ يُحسب استرداد الغاز بعد التنفيذ، ولا يوفر غازًا إضافيًا أثناء تشغيل المعاملة.هل يوفر تجميع المعاملات الغاز دائمًا؟
لا، فقد يقلل التجميع النفقات المتكررة للمعاملات، لكنه قد يزيد بيانات calldata والتعقيد ومخاطر الفشل.هل ينبغي للمطورين استخدام Assembly المضمنة للتحسين؟
ينبغي استخدامها فقط لمعالجة نقاط اختناق أثبتها القياس، لأنها قد تنشئ مخاطر أمنية وصعوبات صيانة خطيرة.هل يمكن لشبكات الطبقة الثانية أن تحل محل تحسين الغاز؟
لا، فقد تخفض شبكات الطبقة الثانية الرسوم، لكن العقود غير الكفؤة تستهلك موارد أكثر من العقود المحسّنة على الشبكة نفسها.لماذا قد تتغير تكاليف الغاز بمرور الوقت؟
قد تضيف ترقيات Ethereum تعليمات تشغيل جديدة أو تعيد تسعير العمليات الحالية أو تغير قواعد calldata أو توسع سعة الشبكة.كيف يمكن للمطورين قياس استهلاك الغاز؟
يمكنهم استخدام تقارير الغاز وإيصالات المعاملات وآثار التنفيذ ومخرجات المُصرّف واللقطات الآلية والاختبارات الواقعية.هل التنفيذ الأقل استهلاكًا للغاز هو الأفضل دائمًا؟
لا، فأمان العقد وصحته ووضوحه وقابليته للصيانة أهم من التوفير الطفيف في الغاز.هل يستطيع المستخدمون تحسين الغاز من دون تغيير العقد؟
يمكن للمستخدمين اختيار فترات انخفاض الطلب أو الشبكات المناسبة، لكن مطور العقد وحده يستطيع تغيير كفاءة تنفيذ التطبيق الأساسية.الخلاصة
تحسين الغاز عملية هندسية تهدف إلى تقليل الموارد التي تستهلكها عقود العملات المشفرة الذكية ومعاملاتها.وهو يخفض استهلاك الغاز، لا سعر السوق لكل وحدة غاز مباشرةً.غالبًا ما يتحقق أقوى تحسين عبر تبسيط البنية وتقليل عمليات التخزين واختيار مواقع البيانات الكفؤة ووضع حدود للحلقات وخفض الاستدعاءات الخارجية.وقد توفر تحسينات المُصرّف والثوابت والقيم غير القابلة للتغيير والأخطاء المخصصة وتجميع المتغيرات والتخزين المؤقت والتجميع المناسب مزيدًا من التوفير.ينبغي للمطورين استخدام مُصرّف حديث ومراجعة أخطائه المعروفة واستهداف إصدار EVM الصحيح.يجب اختبار كل تحسين في المعاملات الناجحة وحالات الفشل والمدخلات الكبيرة ومسارات التنفيذ غير المألوفة.يجب ألا تُحذف ضوابط الأمان لمجرد خفض نتائج تقرير الغاز.ينفذ العقد المحسّن جيدًا العمل اللازم فقط على السلسلة لتوفير وظائف آمنة وشفافة وموثوقة للعملات المشفرة.قد يعجبك أيضاً
ZK-Rollup
ZK-Rollup-as-a-Service
zk-SNARK
رائج
العملات المشفرة الرائجة حاليًا والتي تحظى باهتمام كبير في السوق
الأعلى حجماً
العملات المشفرة ذات أعلى حجم تداول
مضاف حديثا
العملات المشفرة المدرجة مؤخرًا والمتاحة للتداول

