دليل تحسين رسوم الغاز للعقود الذكية EVM: 10 نصائح عملية

دليل تحسين تكاليف الغاز للعقود الذكية EVM

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

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

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

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

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

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

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

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

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

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

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

عند استخدام Solidity لتجميع العقود الذكية، سيتم تحويل العقد إلى سلسلة من رموز العمليات (opcodes).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

اختيار نوع البيانات المناسب يساعد على تحسين استخدام الغاز.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

تشمل أمثلة العقود الذكية خوارزمية توقيع المنحنى البياني الرقمي ###ECDSA( وخوارزمية تجزئة SHA2-256.

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

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

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

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

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

تستطيع حلول Layer 2 مثل rollups و الجوانب و قنوات الحالة تفريغ معالجة المعاملات من سلسلة الإيثيريوم الرئيسية، مما يتيح معاملات أسرع وأرخص.

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

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

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

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

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

الاستنتاج

تحسين استهلاك الغاز هو خطوة مهمة للمطورين

GAS-4.6%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 9
  • مشاركة
تعليق
0/400
NotGonnaMakeItvip
· 07-13 18:50
مجتمع البلوكتشين يفهم جميعًا أن الجوهر هو فقط بيع غاز
شاهد النسخة الأصليةرد0
DeFiGraylingvip
· 07-13 18:26
غاز جيد غالي غالي تقريباً أفلسنا
شاهد النسخة الأصليةرد0
BearMarketSurvivorvip
· 07-13 13:49
رسوم الغاز حرضت الفقراء مرة أخرى
شاهد النسخة الأصليةرد0
WalletManagervip
· 07-12 02:38
الغاز باهظ الثمن ، من الأفضل الذهاب إلى L2 للقلي
شاهد النسخة الأصليةرد0
RugDocDetectivevip
· 07-12 02:36
لا تتلاعب بالأمور، فإن رسوم الغاز هي المشكلة الحقيقية.
شاهد النسخة الأصليةرد0
BearMarketGardenervip
· 07-12 02:21
احترافي又整活儿 该买啥 قطع الخسارة操作的来了
شاهد النسخة الأصليةرد0
DataChiefvip
· 07-12 02:18
يا إلهي، مرة أخرى على رسوم الغاز في الماء، هل يمكن أن تقول شيئًا جديدًا؟
شاهد النسخة الأصليةرد0
RektCoastervip
· 07-12 02:16
من يمكنه إخباري كيف أنقذ محفظتي، فإن رسوم غاز تأكل الناس حقًا
شاهد النسخة الأصليةرد0
MaticHoleFillervip
· 07-12 02:10
غاز费 حقًا رائع، وقد جعل فيتاليك بوتيرين يربح كثيرًا
شاهد النسخة الأصليةرد0
عرض المزيد
  • تثبيت