أفكار مبتكرة لتطوير العقود: استلهام الإلهام من كود Uniswap
مؤخراً، أثناء كتابتي لدليل تطوير بورصة لامركزية، قمت بدراسة تنفيذ كود Uniswap V3 بشكل عميق، وقد استفدت كثيراً. كوني مطورًا سبق له تطوير عقود NFT بسيطة، هذه هي المرة الأولى التي أتعامل فيها مع مجال عقود Defi. فيما يلي بعض النصائح الصغيرة التي تلقيتها، وأعتقد أنها ستلهم المبتدئين في تطوير العقود.
عنوان نشر العقد القابل للتنبؤ
عادةً، يبدو أن العنوان الذي يتم الحصول عليه بعد نشر العقد عشوائي، لأنه مرتبط بـ nonce. ومع ذلك، في بعض السيناريوهات، نحتاج إلى استنتاج عنوان العقد من خلال معلومات المعاملات والأمور ذات الصلة. يستخدم Uniswap طريقة CREATE2 لإنشاء العقود، مضيفًا معلمة salt، مما يجعل عنوان العقد الناتج قابلاً للتنبؤ. هذه الطريقة مفيدة جداً عند الحكم على صلاحيات المعاملات أو الحصول على عنوان المسبح.
استخدام دوال الاسترجاع بذكاء
في Solidity، يمكن للعقود أن تتصل ببعضها البعض. تستخدم طريقة swap في Uniswap آلية الاستدعاء للتأكد من تنفيذ منطق المعاملة بالكامل، دون الحاجة إلى سجلات متغيرة معقدة لضمان الأمان.
معلومات نقل الاستثناء وتقدير المعاملات
في عقد Quoter الخاص بـ Uniswap، يتم تنفيذ طريقة swap من خلال تغليفها بـ try-catch، لالتقاط أخطاء معينة لتقدير الرموز المطلوبة للصفقة. هذه الطريقة عملية وبسيطة، ولا تتطلب إعادة تصميم طريقة swap بشكل منفصل لتقدير الطلب.
حل مشكلة دقة الأعداد الكبيرة
تستخدم Uniswap غالبًا عملية الإزاحة إلى اليسار بمقدار 96 بت (ما يعادل الضرب في 2^96) أثناء عمليات الحساب، لضمان الدقة دون حدوث تجاوز. وتكون هذه الطريقة فعالة بشكل خاص عند التعامل مع حسابات الأسعار والسيولة.
حساب العوائد في وضع المشاركة
لتجنب تسجيل رسوم المعاملات لكل مزود سيولة (LP) في كل مرة يتم فيها التداول، اعتمد Uniswap طريقة مشابهة لتوزيعات الأرباح على الأسهم. من خلال تسجيل إجمالي الرسوم والرسوم التي يجب تخصيصها لكل سيولة، يمكن لمزودي السيولة حساب أرباحهم المستحقة عند سحبهم.
استراتيجيات الحصول على المعلومات على السلسلة
ليس كل المعلومات بحاجة إلى الحصول عليها من السلسلة. على سبيل المثال، يمكن تخزين قائمة تجمعات التداول ومعلومات تجمعات التداول في قاعدة بيانات تقليدية، مع التزامن الدوري من السلسلة. هذه الطريقة يمكن أن تحسن الكفاءة والأداء بشكل كبير.
تقسيم العقود واستخدام العقود القياسية
قد تتضمن المشاريع الكبيرة عدة عقود تم نشرها فعليًا، أو يمكن تقسيم عقد واحد إلى عدة عقود من خلال الوراثة. عقد NonfungiblePositionManager الخاص بـ Uniswap هو مثال جيد على ذلك، حيث أنه يرث من عدة عقود ويستفيد من عقد ERC721 القياسي الذي تقدمه OpenZeppelin.
الممارسة تؤدي إلى المعرفة الحقيقية. من خلال تنفيذ نسخة مبسطة من تبادل لامركزي بيدك، ستفهم بشكل أعمق تنفيذ كود Uniswap، وستكتسب خبرة قيمة في المشاريع العملية. سواء كنت من عشاق Web3 أو مطور مشاريع Defi، فإنني أؤمن أن هذه النصائح ستكون مفيدة لك.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 12
أعجبني
12
10
إعادة النشر
مشاركة
تعليق
0/400
LuckyBlindCat
· 07-19 21:04
هل تفهم هذا الكود؟
شاهد النسخة الأصليةرد0
AirdropHuntress
· 07-19 01:08
يستحق الدراسة. الكود لديه شيء مميز.
شاهد النسخة الأصليةرد0
MEVEye
· 07-18 19:39
مثير للاهتمام يكشف عن نصائح صغيرة لعقود
شاهد النسخة الأصليةرد0
UncleWhale
· 07-18 19:39
احتفظت بها الآن ستفيدني في التعلم لاحقًا
شاهد النسخة الأصليةرد0
MetaMaximalist
· 07-18 19:34
رؤية مثيرة للاهتمام حول استدامة البروتوكول. ولكن بصراحة، هذه أشياء أساسية في الويب 3...
شاهد النسخة الأصليةرد0
SpeakWithHatOn
· 07-18 19:23
أتعلّم وأتعلم، لكن كل شعري يتساقط، الأمر صعب جداً.
تحليل كود Uniswap: 7 نصائح لتطوير العقود لدعم التمويل اللامركزي
أفكار مبتكرة لتطوير العقود: استلهام الإلهام من كود Uniswap
مؤخراً، أثناء كتابتي لدليل تطوير بورصة لامركزية، قمت بدراسة تنفيذ كود Uniswap V3 بشكل عميق، وقد استفدت كثيراً. كوني مطورًا سبق له تطوير عقود NFT بسيطة، هذه هي المرة الأولى التي أتعامل فيها مع مجال عقود Defi. فيما يلي بعض النصائح الصغيرة التي تلقيتها، وأعتقد أنها ستلهم المبتدئين في تطوير العقود.
عنوان نشر العقد القابل للتنبؤ
عادةً، يبدو أن العنوان الذي يتم الحصول عليه بعد نشر العقد عشوائي، لأنه مرتبط بـ nonce. ومع ذلك، في بعض السيناريوهات، نحتاج إلى استنتاج عنوان العقد من خلال معلومات المعاملات والأمور ذات الصلة. يستخدم Uniswap طريقة CREATE2 لإنشاء العقود، مضيفًا معلمة salt، مما يجعل عنوان العقد الناتج قابلاً للتنبؤ. هذه الطريقة مفيدة جداً عند الحكم على صلاحيات المعاملات أو الحصول على عنوان المسبح.
استخدام دوال الاسترجاع بذكاء
في Solidity، يمكن للعقود أن تتصل ببعضها البعض. تستخدم طريقة swap في Uniswap آلية الاستدعاء للتأكد من تنفيذ منطق المعاملة بالكامل، دون الحاجة إلى سجلات متغيرة معقدة لضمان الأمان.
معلومات نقل الاستثناء وتقدير المعاملات
في عقد Quoter الخاص بـ Uniswap، يتم تنفيذ طريقة swap من خلال تغليفها بـ try-catch، لالتقاط أخطاء معينة لتقدير الرموز المطلوبة للصفقة. هذه الطريقة عملية وبسيطة، ولا تتطلب إعادة تصميم طريقة swap بشكل منفصل لتقدير الطلب.
حل مشكلة دقة الأعداد الكبيرة
تستخدم Uniswap غالبًا عملية الإزاحة إلى اليسار بمقدار 96 بت (ما يعادل الضرب في 2^96) أثناء عمليات الحساب، لضمان الدقة دون حدوث تجاوز. وتكون هذه الطريقة فعالة بشكل خاص عند التعامل مع حسابات الأسعار والسيولة.
حساب العوائد في وضع المشاركة
لتجنب تسجيل رسوم المعاملات لكل مزود سيولة (LP) في كل مرة يتم فيها التداول، اعتمد Uniswap طريقة مشابهة لتوزيعات الأرباح على الأسهم. من خلال تسجيل إجمالي الرسوم والرسوم التي يجب تخصيصها لكل سيولة، يمكن لمزودي السيولة حساب أرباحهم المستحقة عند سحبهم.
استراتيجيات الحصول على المعلومات على السلسلة
ليس كل المعلومات بحاجة إلى الحصول عليها من السلسلة. على سبيل المثال، يمكن تخزين قائمة تجمعات التداول ومعلومات تجمعات التداول في قاعدة بيانات تقليدية، مع التزامن الدوري من السلسلة. هذه الطريقة يمكن أن تحسن الكفاءة والأداء بشكل كبير.
تقسيم العقود واستخدام العقود القياسية
قد تتضمن المشاريع الكبيرة عدة عقود تم نشرها فعليًا، أو يمكن تقسيم عقد واحد إلى عدة عقود من خلال الوراثة. عقد NonfungiblePositionManager الخاص بـ Uniswap هو مثال جيد على ذلك، حيث أنه يرث من عدة عقود ويستفيد من عقد ERC721 القياسي الذي تقدمه OpenZeppelin.
الممارسة تؤدي إلى المعرفة الحقيقية. من خلال تنفيذ نسخة مبسطة من تبادل لامركزي بيدك، ستفهم بشكل أعمق تنفيذ كود Uniswap، وستكتسب خبرة قيمة في المشاريع العملية. سواء كنت من عشاق Web3 أو مطور مشاريع Defi، فإنني أؤمن أن هذه النصائح ستكون مفيدة لك.