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

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

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

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

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

مقدمة حول آلية رسوم الغاز EVM

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9. مُعدل تحسين

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ومع ذلك، فإن استخدام التجميع المضمن قد يجلب أيضًا مخاطر وسهولة.

ETH4.16%
GAS-4.38%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 7
  • مشاركة
تعليق
0/400
AllInAlicevip
· 07-21 16:10
غاز جيد غالي ، لا أستطيع تحمله بعد الآن
شاهد النسخة الأصليةرد0
TopBuyerBottomSellervip
· 07-21 00:35
غاز حقاً تسرق الأموال، أشعر بالدوار.
شاهد النسخة الأصليةرد0
PoetryOnChainvip
· 07-20 06:30
غاز غالي جداً، من الذي سيتداول؟
شاهد النسخة الأصليةرد0
LightningClickervip
· 07-18 19:09
أتعلم هذا في وقت متأخر من الليل أثناء البرمجة
شاهد النسخة الأصليةرد0
PerpetualLongervip
· 07-18 19:05
غاز لا تخفضه أرجوك لقد عجزت عن فتح الصفقة...
شاهد النسخة الأصليةرد0
FarmToRichesvip
· 07-18 18:53
غاز مكلف للغاية، مستثمر التجزئة قد هربوا جميعًا
شاهد النسخة الأصليةرد0
DeFiCaffeinatorvip
· 07-18 18:46
احترق الغاز كثيرا لدرجة أنني لم أستطع النوم ...
شاهد النسخة الأصليةرد0
  • تثبيت