مؤخراً أثناء كتابة دليل تطوير البورصات اللامركزية، قمت بالرجوع إلى شيفرات بعض المشاريع المعروفة، وتعلمت العديد من التقنيات المثيرة لتطوير العقود. كوني مبتدئاً يحاول لأول مرة تطوير عقود Defi، كانت هذه التقنيات ملهمة جداً لي، وأعتقد أنها ستكون مفيدة أيضاً للأصدقاء الآخرين الذين يرغبون في تعلم تطوير العقود.
عنوان العقد القابل للتنبؤ
عادةً ما تبدو العناوين الناتجة عن نشر العقد عشوائية، لأنها مرتبطة بـ nonce. ولكن في بعض السيناريوهات، نحتاج إلى استنتاج عنوان العقد من خلال معلومات المعاملات المتقابلة، وهذا مفيد عند تحديد صلاحيات المعاملات أو الحصول على عنوان المجمع.
هناك طريقة لإنشاء عقد باستخدام طريقة CREATE2، من خلال إضافة معلمة الملح لجعل العنوان الناتج قابلاً للتنبؤ. منطق إنشاء العنوان الجديد هو: hash("0xFF"، عنوان المنشئ، الملح، initcode).
استخدام دوال الاسترجاع بمهارة
في بعض السيناريوهات، من المفيد أن تستدعي العقد A طرق العقد B، ثم يقوم B باستدعاء طرق A.
على سبيل المثال، أثناء التداول، ستقوم طريقة swap لعقد pool باستدعاء swapCallback، مع تمرير الكمية الفعلية المطلوبة من الرموز. يقوم المتصل في الاستدعاء بنقل الرموز إلى pool، مما يضمن سلامة وكمال طريقة swap، دون الحاجة إلى سجلات متغيرة معقدة.
تمرير المعلومات من خلال الاستثناءات
عند التداول التجريبي لتقدير الرموز المطلوبة، يمكنك رمي أخطاء خاصة في دالة الاسترجاع ثم التقاط تلك الأخطاء واستخراج المعلومات المطلوبة منها. بهذه الطريقة، لا تحتاج إلى تعديل طريقة التبديل لتقدير الطلب، مما يجعل المنطق أبسط.
حل مشكلة دقة الأعداد الكبيرة
في السيناريوهات التي تتعلق بالحسابات، لتجنب فقدان الدقة في عمليات القسمة، يمكن أولاً إزاحة الرقم 96 بتًا إلى اليسار ( وهو ما يعادل الضرب في 2^96)، ثم إجراء عملية القسمة. بهذه الطريقة، يمكن ضمان الدقة دون تجاوز.
حساب الأرباح بطريقة المشاركة
في السيناريوهات التي تحتاج إلى تسجيل عائدات رسوم LP، لا يمكن تسجيل كل LP في كل معاملة، حيث سيستهلك ذلك كمية كبيرة من الغاز. يمكن استخدام طريقة مشابهة لتوزيعات الأسهم، حيث يتم تسجيل إجمالي الرسوم فقط والرسوم المخصصة لكل وحدة من السيولة، ثم يتم حساب ذلك عند سحب LP بناءً على السيولة المحتفظ بها.
تخزين المعلومات المساعدة خارج السلسلة
ليس كل المعلومات بحاجة إلى أن تكون على السلسلة أو أن يتم الحصول عليها من السلسلة. يمكن تخزين بعض البيانات غير الأساسية مثل قوائم تجمعات التداول ومعلومات التجمعات في قواعد بيانات عادية، ومزامنتها بانتظام من السلسلة. يمكن أن يحسن ذلك الأداء والكفاءة.
تقسيم العقود وإعادة استخدام العقود القياسية
يمكن للمشاريع الكبيرة تقسيم العقود إلى عدة عقود أو تقسيمها وصيانتها من خلال الوراثة. في نفس الوقت، يمكن إعادة استخدام العقود القياسية مثل ERC721، مما يزيد من كفاءة التطوير.
قم بتطوير نسخة بسيطة من بورصة لامركزية بنفسك، يمكنك أن تفهم بشكل أعمق كيفية تطبيق هذه المهارات. آمل أن تكون هذه المشاركات مفيدة للجميع.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 19
أعجبني
19
7
مشاركة
تعليق
0/400
HappyMinerUncle
· 08-04 03:00
هذا معقد جداً، أيها المعدّنون، استعدوا للحفرة.
شاهد النسخة الأصليةرد0
SadMoneyMeow
· 08-03 20:33
هذه طريقة اللعب بالعقد فاخرة للغاية..
شاهد النسخة الأصليةرد0
SandwichTrader
· 08-01 04:28
الموجة الجديدة التي هي سيئة ولكنها ليست محتالة
شاهد النسخة الأصليةرد0
LayerZeroHero
· 08-01 03:29
من المستحسن استخدام dapptools للاختبار مباشرة، فاختبار الغاز أكثر موثوقية.
شاهد النسخة الأصليةرد0
hodl_therapist
· 08-01 03:21
هل أنت متأكد أن هذه هي أحدث التقنيات؟... تبدو قديمة بعض الشيء
7 نصائح عملية لتطوير العقود الذكية لدعم مشاريع الـ Defi
مشاركة نصائح صغيرة لتطوير العقود
مؤخراً أثناء كتابة دليل تطوير البورصات اللامركزية، قمت بالرجوع إلى شيفرات بعض المشاريع المعروفة، وتعلمت العديد من التقنيات المثيرة لتطوير العقود. كوني مبتدئاً يحاول لأول مرة تطوير عقود Defi، كانت هذه التقنيات ملهمة جداً لي، وأعتقد أنها ستكون مفيدة أيضاً للأصدقاء الآخرين الذين يرغبون في تعلم تطوير العقود.
عنوان العقد القابل للتنبؤ
عادةً ما تبدو العناوين الناتجة عن نشر العقد عشوائية، لأنها مرتبطة بـ nonce. ولكن في بعض السيناريوهات، نحتاج إلى استنتاج عنوان العقد من خلال معلومات المعاملات المتقابلة، وهذا مفيد عند تحديد صلاحيات المعاملات أو الحصول على عنوان المجمع.
هناك طريقة لإنشاء عقد باستخدام طريقة CREATE2، من خلال إضافة معلمة الملح لجعل العنوان الناتج قابلاً للتنبؤ. منطق إنشاء العنوان الجديد هو: hash("0xFF"، عنوان المنشئ، الملح، initcode).
استخدام دوال الاسترجاع بمهارة
في بعض السيناريوهات، من المفيد أن تستدعي العقد A طرق العقد B، ثم يقوم B باستدعاء طرق A.
على سبيل المثال، أثناء التداول، ستقوم طريقة swap لعقد pool باستدعاء swapCallback، مع تمرير الكمية الفعلية المطلوبة من الرموز. يقوم المتصل في الاستدعاء بنقل الرموز إلى pool، مما يضمن سلامة وكمال طريقة swap، دون الحاجة إلى سجلات متغيرة معقدة.
تمرير المعلومات من خلال الاستثناءات
عند التداول التجريبي لتقدير الرموز المطلوبة، يمكنك رمي أخطاء خاصة في دالة الاسترجاع ثم التقاط تلك الأخطاء واستخراج المعلومات المطلوبة منها. بهذه الطريقة، لا تحتاج إلى تعديل طريقة التبديل لتقدير الطلب، مما يجعل المنطق أبسط.
حل مشكلة دقة الأعداد الكبيرة
في السيناريوهات التي تتعلق بالحسابات، لتجنب فقدان الدقة في عمليات القسمة، يمكن أولاً إزاحة الرقم 96 بتًا إلى اليسار ( وهو ما يعادل الضرب في 2^96)، ثم إجراء عملية القسمة. بهذه الطريقة، يمكن ضمان الدقة دون تجاوز.
حساب الأرباح بطريقة المشاركة
في السيناريوهات التي تحتاج إلى تسجيل عائدات رسوم LP، لا يمكن تسجيل كل LP في كل معاملة، حيث سيستهلك ذلك كمية كبيرة من الغاز. يمكن استخدام طريقة مشابهة لتوزيعات الأسهم، حيث يتم تسجيل إجمالي الرسوم فقط والرسوم المخصصة لكل وحدة من السيولة، ثم يتم حساب ذلك عند سحب LP بناءً على السيولة المحتفظ بها.
تخزين المعلومات المساعدة خارج السلسلة
ليس كل المعلومات بحاجة إلى أن تكون على السلسلة أو أن يتم الحصول عليها من السلسلة. يمكن تخزين بعض البيانات غير الأساسية مثل قوائم تجمعات التداول ومعلومات التجمعات في قواعد بيانات عادية، ومزامنتها بانتظام من السلسلة. يمكن أن يحسن ذلك الأداء والكفاءة.
تقسيم العقود وإعادة استخدام العقود القياسية
يمكن للمشاريع الكبيرة تقسيم العقود إلى عدة عقود أو تقسيمها وصيانتها من خلال الوراثة. في نفس الوقت، يمكن إعادة استخدام العقود القياسية مثل ERC721، مما يزيد من كفاءة التطوير.
قم بتطوير نسخة بسيطة من بورصة لامركزية بنفسك، يمكنك أن تفهم بشكل أعمق كيفية تطبيق هذه المهارات. آمل أن تكون هذه المشاركات مفيدة للجميع.