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

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

تقنيات تطوير العقود المستفادة من كود Uniswap

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

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

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

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

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

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

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

استخدام الاستثناءات لنقل المعلومات، وتقدير المعاملات باستخدام try catch

في عقد Quoter الخاص بـ Uniswap، يتم استخدام try catch لتغليف تنفيذ طريقة swap لتقدير الصفقة. من خلال إلقاء أخطاء خاصة في وظيفة الاسترجاع، ثم التقاط وتحليل معلومات الخطأ، تم تحقيق وظيفة تقدير الصفقة دون الحاجة إلى تعديل طريقة swap خصيصًا لاحتياجات التقدير.

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

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

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

حساب الأرباح من آلية المشاركة

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

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

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

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

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

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

الخاتمة

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

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

UNI2.32%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 6
  • مشاركة
تعليق
0/400
GateUser-9ad11037vip
· منذ 15 س
مبتدئ ادخل مركز教程齁
شاهد النسخة الأصليةرد0
WalletManagervip
· منذ 15 س
التدقيق الدقيق قبل العقد هو أساس المشروع... تعلم قليلاً من الهجوم
شاهد النسخة الأصليةرد0
SmartContractRebelvip
· منذ 15 س
لقد استنفد المطورون الموارد القديمة
شاهد النسخة الأصليةرد0
GateUser-a606bf0cvip
· منذ 15 س
هل هذا فقط؟ إنه أساسي جدًا، أليس كذلك؟
شاهد النسخة الأصليةرد0
BlockchainBouncervip
· منذ 15 س
يبدو أنه يطير ولا أفهمه
شاهد النسخة الأصليةرد0
GasGuzzlervip
· منذ 16 س
حتى لو قلتها عشرة مرات أخرى، لن أستطيع الكتابة.
شاهد النسخة الأصليةرد0
  • تثبيت