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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2. حزم المتغيرات

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

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

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

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

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

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

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

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.

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

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

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

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

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

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

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

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

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

![إثيريوم العقود الذكية 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 تحسين أفضل 10 ممارسات])https://img-cdn.gateio.im/webp-social/moments-839b91e2f02389949aa698d460a497d8.webp(

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

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

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

) 4. استخدام حلول Layer 2

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

ETH1.7%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 3
  • مشاركة
تعليق
0/400
RugResistantvip
· 07-28 10:42
تجربة عملية مضمونة
شاهد النسخة الأصليةرد0
P2ENotWorkingvip
· 07-28 09:27
غاز费太离谱了
شاهد النسخة الأصليةرد0
PhantomMinervip
· 07-25 13:06
رؤى قيمة实战价值高
شاهد النسخة الأصليةرد0
  • تثبيت