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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

( 1. حذف الكود غير المفيد

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

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

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

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

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

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

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

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

( 3. استخدام تعليمات التجميع المضمنة

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

GAS-1.81%
ETH-0.06%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 4
  • مشاركة
تعليق
0/400
SilentObservervip
· منذ 23 س
الغاز باهظ الثمن ، فقير يبكي 555
شاهد النسخة الأصليةرد0
ConfusedWhalevip
· منذ 23 س
إذا كان هذا هو الحال خلال النهار، فكيف سنلعب في الليل؟
شاهد النسخة الأصليةرد0
NightAirdroppervip
· منذ 23 س
الإيثريوم هو يُستغل بغباء. ليُرتفع الغاز.
شاهد النسخة الأصليةرد0
SybilSlayervip
· 07-20 19:40
غاز يحرق الأموال من يستطيع تحمله؟
شاهد النسخة الأصليةرد0
  • تثبيت