أفضل 10 ممارسات لتحسين تكاليف الغاز للعقود الذكية على إثيريوم

أفضل 10 ممارسات لتحسين رسوم الغاز للعقود الذكية في إثيريوم

تعتبر تكاليف الغاز في شبكة إثيريوم الرئيسية مشكلة معقدة، خاصة عند ازدحام الشبكة. خلال أوقات الذروة، غالبًا ما يحتاج المستخدمون إلى دفع تكاليف معاملات مرتفعة للغاية. لذلك، فإن تحسين تكاليف الغاز في مرحلة تطوير العقود الذكية أمر بالغ الأهمية. لا يؤدي تحسين استهلاك الغاز فقط إلى خفض تكاليف المعاملات بشكل فعال، بل يعزز أيضًا كفاءة المعاملات، مما يوفر للمستخدمين تجربة استخدام أكثر اقتصادية وفعالية في البلوكتشين.

ستتناول هذه المقالة آلية رسوم الغاز الخاصة بـ إثيريوم (EVM)، والمفاهيم الأساسية لتحسين رسوم الغاز، وأفضل الممارسات لتحسين رسوم الغاز عند تطوير العقود الذكية. نأمل أن توفر هذه المحتويات إلهامًا ومساعدة عملية للمطورين، وفي نفس الوقت تساعد المستخدمين العاديين على فهم كيفية عمل رسوم الغاز في EVM بشكل أفضل، لمواجهة التحديات في بيئة blockchain.

إثيريوم العقود الذكية Gas تحسين أفضل عشرة ممارسات

مقدمة عن آلية رسوم الغاز في EVM

في الشبكات المتوافقة مع EVM، "Gas" هو وحدة تستخدم لقياس القدرة الحاسوبية المطلوبة لتنفيذ عمليات معينة.

في هيكل EVM، يتم تقسيم استهلاك الغاز إلى ثلاثة أجزاء: تنفيذ العمليات، استدعاء الرسائل الخارجية، وقراءة وكتابة الذاكرة والتخزين.

نظرًا لأن تنفيذ كل معاملة يتطلب موارد حسابية، فسوف يتم فرض رسوم معينة لمنع الحلقات اللانهائية وهجمات رفض الخدمة (DoS). تُعرف الرسوم المطلوبة لإكمال معاملة باسم "رسوم الغاز".

منذ دخول EIP-1559( الفرع الصلب لندن ) حيز التنفيذ، يتم حساب رسوم الغاز من خلال المعادلة التالية:

رسوم الغاز = وحدات الغاز المستخدمة * (رسوم القاعدة + رسوم الأولوية)

سيتم حرق الرسوم الأساسية، بينما ستستخدم الرسوم الأولوية كحافز، لتشجيع المدققين على إضافة المعاملات إلى سلسلة الكتل. عند إرسال المعاملة، فإن تعيين رسوم أولوية أعلى يمكن أن يزيد من احتمال تضمين المعاملة في الكتلة التالية. هذا مشابه لما يدفعه المستخدمون للمدققين ك"إكرامية".

إثيريوم العقود الذكية Gas تحسين أفضل عشرة ممارسات

1.فهم تحسين الغاز في EVM

عند تجميع العقود الذكية باستخدام Solidity، سيتم تحويل العقد إلى سلسلة من "أكواد العمليات"، أي opcodes.

أي جزء من كود التشغيل ( مثل إنشاء العقود، إجراء استدعاءات الرسائل، الوصول إلى تخزين الحسابات وتنفيذ العمليات على الآلة الافتراضية ) له تكلفة غاز معترف بها، وهذه التكاليف موثقة في كتاب إثيريوم الأصفر.

بعد العديد من التعديلات على EIP، تم تعديل تكلفة الغاز لبعض التعليمات البرمجية، وقد يكون هناك اختلاف مع الكتاب الأصفر.

2.المفاهيم الأساسية لتحسين الغاز

المفهوم الأساسي لتحسين الغاز هو اختيار العمليات ذات الكفاءة التكلفة العالية على سلسلة الكتل EVM، وتجنب العمليات ذات تكاليف الغاز المرتفعة.

في EVM، فإن العمليات التالية منخفضة التكلفة:

  • قراءة وكتابة متغيرات الذاكرة
  • قراءة الثوابت والمتغيرات غير القابلة للتغيير
  • قراءة وكتابة المتغيرات المحلية
  • قراءة متغيرات calldata، مثل مصفوفة calldata والهياكل
  • استدعاء الدالة الداخلية

تشمل العمليات ذات التكلفة العالية:

  • قراءة وكتابة المتغيرات الحالة المخزنة في تخزين العقد
  • استدعاء الدوال الخارجية
  • عملية التكرار

العقود الذكية إثيريوم Gas تحسين أفضل عشرة ممارسات

أفضل الممارسات لتحسين رسوم غاز EVM

استنادًا إلى المفاهيم الأساسية المذكورة أعلاه، قمنا بتجميع قائمة بأفضل الممارسات لتحسين رسوم الغاز لمجتمع المطورين. من خلال اتباع هذه الممارسات، يمكن للمطورين تقليل استهلاك رسوم الغاز للعقود الذكية، وتقليل تكاليف المعاملات، وبناء تطبيقات أكثر كفاءة وودية للمستخدم.

1.حاول تقليل استخدام التخزين

في سوليديتي، التخزين ( هو مورد محدود، واستهلاكه للغاز أعلى بكثير من الذاكرة ). في كل مرة يقوم فيها العقد الذكي بقراءة أو كتابة بيانات من التخزين، يتم تكبد تكاليف غاز عالية.

وفقًا لتعريف كتاب إثيريوم الأصفر، فإن تكلفة عمليات التخزين أعلى بأكثر من 100 مرة من عمليات الذاكرة. على سبيل المثال، يتم استهلاك 3 وحدات غاز فقط بواسطة تعليمات OPcodesmload وmstore، بينما تتطلب عمليات التخزين مثل sload وsstore، حتى في أفضل الحالات، تكلفة لا تقل عن 100 وحدة.

طرق تقييد استخدام التخزين تشمل:

  • تخزين البيانات غير الدائمة في الذاكرة
  • تقليل عدد تغييرات التخزين: من خلال حفظ النتائج الوسيطة في الذاكرة، وعند الانتهاء من جميع الحسابات، يتم تخصيص النتائج لمتغيرات التخزين.

إثيريوم العقود الذكية Gas تحسين أفضل 10 ممارسات

( 2.تعبئة المتغيرات

عدد Storage slot) المستخدم في العقود الذكية وطريقة عرض المطورين للبيانات ستؤثر بشكل كبير على استهلاك Gas.

سيقوم مترجم Solidity بتجميع المتغيرات المخزنة المتتالية خلال عملية الترجمة، ويستخدم وحدة تخزين أساسية بحجم 32 بايت كموصل لتخزين المتغيرات. تجميع المتغيرات يعني ترتيب المتغيرات بشكل معقول بحيث يمكن أن تتناسب عدة متغيرات في موصل تخزين واحد.

من خلال هذا التعديل التفصيلي، يمكن للمطورين توفير 20,000 وحدة غاز ### لتخزين فتحة تخزين غير مستخدمة تحتاج إلى استهلاك 20,000 غاز (، ولكن الآن تحتاج فقط إلى فتحتين للتخزين.

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

![إثيريوم العقود الذكية Gas تحسين أفضل 10 ممارسات])https://img-cdn.gateio.im/webp-social/moments-995905cb414526d4d991899d0c2e6443.webp(

) 3.تحسين نوع البيانات

يمكن تمثيل متغير بأنواع بيانات متعددة، ولكن تكلفة العمليات المرتبطة بأنواع البيانات المختلفة تختلف أيضاً. اختيار نوع البيانات المناسب يساعد في تحسين استخدام الغاز.

على سبيل المثال، في Solidity، يمكن تقسيم الأعداد الصحيحة إلى أحجام مختلفة: uint8 و uint16 و uint32 وما إلى ذلك. نظرًا لأن EVM ينفذ العمليات بوحدات 256 بت، فإن استخدام uint8 يعني أنه يجب على EVM أولاً تحويله إلى uint256، وهذا التحويل سيستهلك غازًا إضافيًا.

عند النظر إليها بشكل منفصل، فإن استخدام uint256 أرخص من uint8. ومع ذلك، فإن الأمر يختلف إذا تم استخدام تحسين حزم المتغيرات الذي اقترحناه سابقًا. إذا كان بإمكان المطور حزم أربعة متغيرات uint8 في فتحة تخزين واحدة، فإن التكلفة الإجمالية لتكرارها ستكون أقل من تكلفة أربعة متغيرات uint256. بهذه الطريقة، يمكن للعقود الذكية قراءة وكتابة فتحة تخزين واحدة، ووضع أربعة متغيرات uint8 في الذاكرة/التخزين في عملية واحدة.

إثيريوم العقود الذكية Gas تحسين أفضل عشرة ممارسات

4.استخدام المتغيرات الثابتة الحجم بدلاً من المتغيرات الديناميكية

إذا كان يمكن التحكم في البيانات داخل 32 بايت، يُنصح باستخدام نوع بيانات bytes32 بدلاً من bytes أو strings. بشكل عام، المتغيرات ذات الحجم الثابت تستهلك غازًا أقل من المتغيرات ذات الحجم المتغير. إذا كان يمكن تحديد طول البايت، حاول اختيار الحد الأدنى من الطول من bytes1 إلى bytes32.

( 5.الخرائط والمصفوفات

يمكن تمثيل قائمة بيانات Solidity بنوعين من البيانات: المصفوفات ) Arrays ### و الخرائط ### Mappings (، لكن قواعدها وبنيتها مختلفة تمامًا.

تكون الخرائط أكثر كفاءة وأقل تكلفة في معظم الحالات، لكن المصفوفات تتمتع بالقدرة على التكرار وتدعم تعبئة أنواع البيانات. لذا، يُنصح بإعطاء الأولوية لاستخدام الخرائط عند إدارة قوائم البيانات، ما لم يكن هناك حاجة للتكرار أو يمكن تحسين استهلاك الغاز من خلال تعبئة أنواع البيانات.

![إثيريوم العقود الذكية Gas تحسين أفضل عشر ممارسات])https://img-cdn.gateio.im/webp-social/moments-5f3d7e103e47c886f50599cffe35c707.webp(

) 6.استخدام calldata بدلاً من الذاكرة

يمكن تخزين المتغيرات المعلنة في معلمات الدالة في calldata أو الذاكرة. الاختلاف الرئيسي بين الاثنين هو أن الذاكرة يمكن تعديلها بواسطة الدالة، بينما calldata غير قابلة للتغيير.

تذكر هذه القاعدة: إذا كانت معلمات الوظيفة للقراءة فقط، يجب أن نفضل استخدام calldata بدلاً من memory. سيؤدي ذلك إلى تجنب عمليات النسخ غير الضرورية من calldata إلى memory.

( 7.حاول استخدام الكلمات المفتاحية Constant/Immutable قدر الإمكان

لن يتم تخزين المتغيرات الثابتة/غير القابلة للتغيير في تخزين العقد. سيتم حساب هذه المتغيرات في وقت الترجمة، وتخزينها في بايت كود العقد. لذلك، فإن تكلفة الوصول إليها أقل بكثير مقارنة بالتخزين، ومن المستحسن استخدام الكلمات الرئيسية الثابتة أو غير القابلة للتغيير كلما كان ذلك ممكنًا.

![إثيريوم العقود الذكية Gas تحسين أفضل 10 ممارسات])https://img-cdn.gateio.im/webp-social/moments-9c566626ab499ef65d6f5089a2876ad3.webp###

8.استخدم Unchecked عند التأكد من عدم حدوث تجاوز/تحت التجاوز

عندما يتمكن المطورون من التأكد من أن العمليات الحسابية لن تؤدي إلى تجاوز أو تحت السعة، يمكنهم استخدام الكلمة الرئيسية unchecked التي تم إدخالها في Solidity v0.8.0، لتجنب فحوصات تجاوز أو تحت السعة الزائدة، مما يوفر تكاليف الغاز.

بالإضافة إلى ذلك، لم تعد الإصدارات 0.8.0 وما فوق من المترجمات بحاجة إلى استخدام مكتبة SafeMath، لأن المترجم نفسه يتضمن الآن ميزات حماية من overflow و underflow.

( 9.محسن

تم تضمين كود المعدل في الدالة التي تم تعديلها، وعند استخدام المعدل، يتم نسخ كوده في كل مرة. سيؤدي ذلك إلى زيادة حجم بايت الكود وزيادة استهلاك الغاز.

من خلال إعادة هيكلة المنطق إلى دالة داخلية _checkOwner)###، يسمح بإعادة استخدام هذه الدالة الداخلية في المعدلات، مما يقلل من حجم بايت الكود ويخفض من تكاليف الغاز.

![إثيريوم العقود الذكية Gas تحسين أفضل 10 ممارسات]###https://img-cdn.gateio.im/webp-social/moments-c0701f9e09280a1667495d54e262dd2f.webp(

) 10.تحسين الدائرة القصيرة

بالنسبة ل|| و&&، يحدث تقييم مختصر في العمليات المنطقية، أي إذا كان الشرط الأول قادرًا بالفعل على تحديد نتيجة التعبير المنطقي، فلن يتم تقييم الشرط الثاني.

من أجل تحسين استهلاك الغاز، يجب وضع الشروط ذات التكلفة المنخفضة في المقدمة، بحيث يمكن تجاوز الحسابات المكلفة.

إثيريوم العقود الذكية Gas تحسين أفضل عشر ممارسات

اقتراحات عامة إضافية

1. حذف الشيفرة غير المستخدمة

إذا كان هناك دوال أو متغيرات غير مستخدمة في العقد، يُنصَح بحذفها. هذه هي الطريقة الأكثر مباشرة لتقليل تكلفة نشر العقد والحفاظ على حجم العقد صغيرًا.

إليك بعض النصائح المفيدة:

استخدم أكثر الخوارزميات كفاءة لإجراء الحسابات. إذا تم استخدام نتائج بعض الحسابات مباشرةً في العقد، فيجب إزالة هذه العمليات الحسابية الزائدة. جوهريًا، يجب حذف أي حسابات غير مستخدمة.

في إثيريوم، يمكن للمطورين الحصول على مكافآت الغاز من خلال تحرير مساحة التخزين. إذا لم يعد هناك حاجة إلى متغير معين، يجب استخدام الكلمة الرئيسية delete لحذفه، أو تعيينه إلى القيمة الافتراضية.

تحسين الحلقة: تجنب العمليات الدائرية عالية التكلفة، دمج الحلقات قدر الإمكان، ونقل الحسابات المتكررة خارج جسم الحلقة.

( 2.استخدام العقود المسبقة التجهيز

توفر العقود المسبقة التجميع وظائف مكتبية معقدة، مثل عمليات التشفير والتجزئة. نظرًا لأن الكود لا يعمل على EVM، بل يعمل محليًا على عقدة العميل، فإن الغاز المطلوب يكون أقل. يمكن أن يوفر استخدام العقود المسبقة التجميع الغاز من خلال تقليل عبء العمل الحسابي المطلوب لتنفيذ العقود الذكية.

تتضمن أمثلة العقود المسبقة التجميع خوارزمية التوقيع الرقمي للمنحنيات البيضاوية )ECDSA### وخوارزمية هاش SHA2-256. من خلال استخدام هذه العقود المسبقة في العقود الذكية، يمكن للمطورين تقليل تكاليف الغاز وزيادة كفاءة تشغيل التطبيقات.

![إثيريوم العقود الذكية Gas تحسين أفضل عشر ممارسات]###https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(

) 3.استخدام كود التجميع الداخلي

البرمجة المضمّنة (in-line assembly) تتيح للمطورين كتابة كود منخفض المستوى ولكنه فعال يمكن تنفيذه مباشرة بواسطة EVM، دون الحاجة إلى استخدام رموز Solidity المكلفة. كما تسمح البرمجة المضمّنة بتحكم أكثر دقة في استخدام الذاكرة والتخزين، مما يقلل من رسوم الغاز بشكل أكبر. بالإضافة إلى ذلك، يمكن للبرمجة المضمّنة تنفيذ بعض العمليات المعقدة التي يصعب تحقيقها باستخدام Solidity فقط، مما يوفر مزيدًا من المرونة في تحسين استهلاك الغاز.

ومع ذلك، قد يؤدي استخدام التجميع المضمّن أيضًا إلى مخاطر ويسهل حدوث الأخطاء. لذلك، يجب استخدامه بحذر، ويقتصر على المطورين ذوي الخبرة.

4.استخدام حلول الطبقة الثانية

استخدام حلول الطبقة الثانية يمكن أن يقلل من كمية البيانات اللازمة للتخزين والحساب على شبكة إثيريوم الرئيسية.

مثل القوائم ،

ETH1.7%
GAS-1.26%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 5
  • إعادة النشر
  • مشاركة
تعليق
0/400
LootboxPhobiavip
· 07-07 22:43
لقد ذهب الغاز حقا
شاهد النسخة الأصليةرد0
OnChainSleuthvip
· 07-06 04:36
مرة أخرى، رسوم الغاز هي يُستغل بغباء.
شاهد النسخة الأصليةرد0
TokenomicsTrappervip
· 07-05 08:12
ههه موضوع آخر عن "تحسين الغاز"... فقط انتظر حتى ترى تسلسل التصفية عندما تتعرض هذه العقود "المحسنة" للانهيار تحت الضغط
شاهد النسخة الأصليةرد0
gas_fee_traumavip
· 07-05 08:09
غاز ارتفع لدرجة أننا لا نستطيع تحمل تكلفة الطعام
شاهد النسخة الأصليةرد0
ForumLurkervip
· 07-05 08:02
آه، التكاليف مرتفعة جدًا، ماذا نفعل بالعقد؟
شاهد النسخة الأصليةرد0
  • تثبيت