تحليل شفرة Uniswap: 7 نصائح لتطوير العقود الذكية لمساعدتك على دخول عالم DEX

robot
إنشاء الملخص قيد التقدم

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

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

دعونا نلقي نظرة على هذه النصائح المفيدة، وبعضها يمكن اعتباره تقنيات مذهلة.

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

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

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

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

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

استخدام دوال الاسترجاع بذكاء

في Solidity، يمكن للعقود أن تستدعي بعضها البعض. أحيانًا تستدعي طريقة A طريقة B، وتقوم B باستدعاء A في طريقة الاستدعاء، وهذا مفيد في بعض السيناريوهات.

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

استخدم الاستثناءات لنقل المعلومات ، وطبق try-catch لتحقيق تقدير الصفقة

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

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

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

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

حساب العائد باستخدام طريقة المشاركة

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

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

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

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

تقسيم العقد بشكل معقول، واستخدام المعايير الحالية

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

ملخص

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

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

شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 5
  • مشاركة
تعليق
0/400
SelfSovereignStevevip
· منذ 15 س
مبتدئ لا تحاول عبثا استخدام الشيفرة المصدرية
شاهد النسخة الأصليةرد0
TooScaredToSellvip
· منذ 15 س
ما فائدة تعلم هذه الأشياء، سأخسر المال على أي حال.
شاهد النسخة الأصليةرد0
ChainMaskedRidervip
· منذ 15 س
جاءت بشارة مبتدئ DEX
شاهد النسخة الأصليةرد0
OnchainUndercovervip
· منذ 15 س
تعلم U سهل مثل نسخ الواجبات
شاهد النسخة الأصليةرد0
PretendingSeriousvip
· منذ 15 س
嗯哼 رؤى قيمة满满啊
شاهد النسخة الأصليةرد0
  • تثبيت