تحليل 7 تقنيات لتطوير عقود Uniswap لزيادة كفاءة مشاريع التمويل اللامركزي

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

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

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

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

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

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

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

![Web3 سلسلة المبتدئين: النصائح الصغيرة لتطوير العقود التي تعلمتها من كود Uniswap](https://img-cdn.gateio.im/webp-social/moments-0aaa61a4d43aba7fdeddbc55e3665305.webp01

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

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

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

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

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

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

![Web3 سلسلة المبتدئين: النصائح الصغيرة لتطوير العقود التي تعلمتها من كود Uniswap])https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(

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

يتضمن Uniswap حسابات كثيرة، مثل حساب عدد الرموز التي سيتم تبادلها بناءً على السعر والسيولة. لتجنب فقدان الدقة في العمليات القسمة، يتم استخدام عملية << FixedPoint96.RESOLUTION في عملية الحساب، أي اليسار 96 بت، مما يعادل الضرب في 2^96.

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

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

يجب على Uniswap تسجيل عائدات رسوم المعاملات لمزود السيولة LP). من الواضح أنه لا يمكن تسجيل رسوم المعاملات لكل LP في كل صفقة، حيث سيتطلب ذلك استهلاك كمية كبيرة من الغاز.

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

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

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

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

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

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

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

مثلما ورث عقد NonfungiblePositionManager الخاص بـ Uniswap عدة عقود. حيث استخدم ERC721Permit مباشرةً عقد ERC721 الخاص بـ OpenZeppelin، مما يسهل إدارة المواقع من خلال NFT ويزيد من كفاءة التطوير.

الملخص

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

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

UNI1.37%
DEFI12.19%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 7
  • مشاركة
تعليق
0/400
PoolJumpervip
· 07-28 02:11
صفر بنية تحتية تفعل بضع أشياء
شاهد النسخة الأصليةرد0
OldLeekConfessionvip
· 07-27 04:18
إذا استطعت أن تجعلني أفهم، فهذا سيكون رائعًا...
شاهد النسخة الأصليةرد0
OnchainGossipervip
· 07-27 03:51
يوصى بالتدريب العملي~
شاهد النسخة الأصليةرد0
BagHolderTillRetirevip
· 07-25 17:02
终于找到解决我 وقع في الفخ现状的出路了
شاهد النسخة الأصليةرد0
PanicSeller69vip
· 07-25 17:00
V3 لا يزال لديه بعض الأشياء ، هيا!
شاهد النسخة الأصليةرد0
degenonymousvip
· 07-25 16:58
إنه إنجاز لطبقة البرمجيات
شاهد النسخة الأصليةرد0
AirdropDreamBreakervip
· 07-25 16:56
التطوير ليس أفضل من سرقة الكود مباشرة
شاهد النسخة الأصليةرد0
  • تثبيت