7 نصائح عملية لتطوير العقود الذكية لدعم مشاريع الـ Defi

مشاركة نصائح صغيرة لتطوير العقود

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

Web3 مبتدئين سلسلة: النصائح الصغيرة لتطوير العقود التي تعلمتها من كود Uniswap

عنوان العقد القابل للتنبؤ

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

هناك طريقة لإنشاء عقد باستخدام طريقة CREATE2، من خلال إضافة معلمة الملح لجعل العنوان الناتج قابلاً للتنبؤ. منطق إنشاء العنوان الجديد هو: hash("0xFF"، عنوان المنشئ، الملح، initcode).

سلسلة المبتدئين في Web3: النصائح الصغيرة لتطوير العقود التي تعلمتها من كود Uniswap

استخدام دوال الاسترجاع بمهارة

في بعض السيناريوهات، من المفيد أن تستدعي العقد A طرق العقد B، ثم يقوم B باستدعاء طرق A.

على سبيل المثال، أثناء التداول، ستقوم طريقة swap لعقد pool باستدعاء swapCallback، مع تمرير الكمية الفعلية المطلوبة من الرموز. يقوم المتصل في الاستدعاء بنقل الرموز إلى pool، مما يضمن سلامة وكمال طريقة swap، دون الحاجة إلى سجلات متغيرة معقدة.

تمرير المعلومات من خلال الاستثناءات

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

Web3 للمبتدئين: النصائح الصغيرة التي تعلمتها من كود Uniswap لتطوير العقود

حل مشكلة دقة الأعداد الكبيرة

في السيناريوهات التي تتعلق بالحسابات، لتجنب فقدان الدقة في عمليات القسمة، يمكن أولاً إزاحة الرقم 96 بتًا إلى اليسار ( وهو ما يعادل الضرب في 2^96)، ثم إجراء عملية القسمة. بهذه الطريقة، يمكن ضمان الدقة دون تجاوز.

حساب الأرباح بطريقة المشاركة

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

سلسلة المبتدئين في Web3: نصائح صغيرة لتطوير العقود التي تعلمتها من كود Uniswap

تخزين المعلومات المساعدة خارج السلسلة

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

تقسيم العقود وإعادة استخدام العقود القياسية

يمكن للمشاريع الكبيرة تقسيم العقود إلى عدة عقود أو تقسيمها وصيانتها من خلال الوراثة. في نفس الوقت، يمكن إعادة استخدام العقود القياسية مثل ERC721، مما يزيد من كفاءة التطوير.

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

Web3 مبتدئين سلسلة: النصائح الصغيرة لتطوير العقود التي تعلمتها من كود Uniswap

DEFI-6.55%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 7
  • مشاركة
تعليق
0/400
HappyMinerUnclevip
· 08-04 03:00
هذا معقد جداً، أيها المعدّنون، استعدوا للحفرة.
شاهد النسخة الأصليةرد0
SadMoneyMeowvip
· 08-03 20:33
هذه طريقة اللعب بالعقد فاخرة للغاية..
شاهد النسخة الأصليةرد0
SandwichTradervip
· 08-01 04:28
الموجة الجديدة التي هي سيئة ولكنها ليست محتالة
شاهد النسخة الأصليةرد0
LayerZeroHerovip
· 08-01 03:29
من المستحسن استخدام dapptools للاختبار مباشرة، فاختبار الغاز أكثر موثوقية.
شاهد النسخة الأصليةرد0
hodl_therapistvip
· 08-01 03:21
هل أنت متأكد أن هذه هي أحدث التقنيات؟... تبدو قديمة بعض الشيء
شاهد النسخة الأصليةرد0
NewPumpamentalsvip
· 08-01 03:11
لم يصل مستوى الملح بعد يا أخي
شاهد النسخة الأصليةرد0
DiamondHandsvip
· 08-01 03:10
أحب التعلم على الرغم من عدم تمكني من ذلك yyds
شاهد النسخة الأصليةرد0
  • تثبيت