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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.تغليف المتغيرات

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

سيقوم مترجم 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 تحسين أفضل عشرة ممارسات]###https://img-cdn.gateio.im/webp-social/moments-55fcdb765912ef9cd238c46b1d248cff.webp(

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

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

5.التعيين والمصفوفات

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

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

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

) 6.استخدام calldata بدلاً من memory

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

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

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

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

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

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

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

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

9.محسّن التعديل

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

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

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

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

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

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

نصائح عامة إضافية

) 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.استخدام حلول Layer 2

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

مثل rollups، الجانبية

ETH2.74%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 5
  • مشاركة
تعليق
0/400
OnchainHolmesvip
· منذ 7 س
التحسين حقًا يمكن أن يوفر المال
شاهد النسخة الأصليةرد0
BlockchainBouncervip
· 08-05 14:56
من الضروري تقليل غاز الرسوم.
شاهد النسخة الأصليةرد0
WalletAnxietyPatientvip
· 08-05 14:56
مطور توفير الغاز حقا إله
شاهد النسخة الأصليةرد0
AirdropLickervip
· 08-05 14:50
وفر الغاز واكسب الكثير من المال
شاهد النسخة الأصليةرد0
ContractExplorervip
· 08-05 14:49
غاز تحسين مهم جداً
شاهد النسخة الأصليةرد0
  • تثبيت