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

إثيريومالشبكة الرئيسية的 غاز غسيل الأموال 一直是老大难问题,尤其是在网络拥堵时更为显著。在高峰期,用户往往需要支付极高的غسيل الأموال。因此,在العقد الذكي开发阶段进行 غاز غسيل الأموال 优化尤为重要。优化 غاز 消耗不仅能有效كلفة العملية,还能提升交易效率,为用户带来更加经济、高效的区块链使用体验。

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

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

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

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

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

المصدر: موقع إثيريوم الرسمي[1]

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

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

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

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

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

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

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

ETH العقد الذكي الغاز الأمثل عشرة ممارسات أفضل

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

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

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

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

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

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

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

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

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

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

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

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

ETH坊العقد الذكي الحل الأمثل للغاز في أفضل 10 ممارسات

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

  • تخزين البيانات غير الدائمة في الذاكرة
  • تقليل عدد مرات تعديل التخزين: من خلال حفظ النتائج المؤقتة في الذاكرة، ثم تخصيص النتائج إلى المتغيرات التخزينية بعد اكتمال جميع الحسابات.

2. تجميع المتغيرات

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

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

الجانب الأيسر هو طريقة تنفيذ ذات كفاءة منخفضة ، تستهلك 3 فتحات تخزين ؛ الجانب الأيمن هو طريقة تنفيذ أكثر كفاءة.

ETH العقد الذكي الغاز الأمثلة العشرة لأفضل الممارسات

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

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

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

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

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

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

يمكننا مقارنة تكلفة الغاز بين uint8 و uint256 من خلال الرمز الموجود في الصورة. تستهلك الدالة UseUint() 120,382 وحدة غاز، بينما تستهلك الدالة UseUInt8() 166,111 وحدة غاز.

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

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

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

! [أفضل 10 ممارسات لتحسين الغاز لعقود Ethereum الذكية] (https://cdn-img.panewslab.com/yijian/2024/12/30/images/f5d5201df99b4efc4f05505890f72811.jpg)

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

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

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

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

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

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

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

مثال ١: استخدام الذاكرة

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

عند استخدام كلمة memory، سيتم نسخ قيمة المصفوفة من calldata المشفرة إلى memory أثناء عملية فك تشفير ABI. تبلغ تكلفة تنفيذ كتلة الكود هذه 3,694 وحدة من الغاز.

المثال 2: استخدام calldata

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

عند قراءة القيم مباشرة من calldata ، تجاوز عملية الذاكرة الوسيطة. تسمح هذه الطريقة بتقليل تكلفة التنفيذ إلى 2,413 وحدة غاز فقط ، مما يؤدي إلى زيادة كفاءة الغاز بنسبة 35٪.

7. استخدام الكلمات الرئيسية Constant/Immutable في الحد الأقصى إذا كان ذلك ممكنًا

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

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

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

في الرسم البياني أدناه، مقيد بشروط بيانية i

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

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

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

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

قبل التحسين:

! [أفضل 10 ممارسات لتحسين الغاز لعقود Ethereum الذكية] (https://cdn-img.panewslab.com/yijian/2024/12/30/images/59757bbd4eb217a80657c9b064d269bc.jpg)

تحسين بعد:

! [أفضل 10 ممارسات لتحسين الغاز لعقود Ethereum الذكية] (https://cdn-img.panewslab.com/yijian/2024/12/30/images/df60343780f702692bf7f465b390fa4f.jpg)

في هذا المثال، من خلال إعادة بناء البرمجيات اللوجيكية كدالة داخلية _checkOwner()، يُسمح باستخدام هذه الدالة الداخلية بشكل متكرر في المعدلات، مما يؤدي إلى تقليل حجم البايتات واسقاط تكلفة الـ Gas.

10. تحسين الاختصار

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

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

توصيات عامة إضافية

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

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

هنا بعض النصائح العملية:

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

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

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

2. استخدام العقود المعدة مسبقًا

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

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

للحصول على قائمة كاملة بالعقود المُعدة مُسبقًا المدعومة من شبكة إثيريوم، يُرجى الرجوع إلى هنا[4].

3. استخدام رمز التجميع المضمن

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

فيما يلي مثال للكود باستخدام اللغة المضمنة لتوفير الغاز:

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

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

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

4. استخدام حلول الطبقة 2

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

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

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

5. استخدام أدوات ومكتبات التحسين

هناك العديد من أدوات التحسين المتاحة للاستخدام ، مثل محسن solc ومحسن بناء Truffle ومترجم Solidity لـ Remix.

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

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

الاستنتاج

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

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

[1] :

[2] :

[3] :

[4] :p إعادة تجميع

ETH4.65%
GAS2.51%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 1
  • إعادة النشر
  • مشاركة
تعليق
0/400
IELTSvip
· 2024-12-31 01:14
نظرا لمضختها السريعة والضخمة في عام 2024 ، تم الإبلاغ عن أن BTCETF "IBIT" من BlackRock هو "أعظم إطلاق في تاريخ ETF". " #圣诞冒险岛:喜迎新年,$50,000福利派送中# #2024 Gate.io 年度账单# #荣誉积分新年抽奖,赢Macbook、周边好礼# BSV ethw ethw etcDoge xrp adapepe
شاهد النسخة الأصليةرد0
  • تثبيت