مؤخراً أثناء كتابة دليل لتطوير بورصة لامركزية، قمت بالاستعانة بكود تنفيذ Uniswap V3 وتعلمت العديد من النقاط القيمة. كوني مطوراً يحاول لأول مرة تطوير عقود Defi، فإن هذه التقنيات ستكون مفيدة جداً للمبتدئين الذين يرغبون في تعلم تطوير العقود.
عنوان نشر العقد القابل للتنبؤ
عادة ما تبدو العناوين الناتجة عن نشر العقود عشوائية، لأنها تتعلق بالـ nonce. لكن في بعض الحالات، نحتاج إلى استنتاج عنوان العقد من خلال أزواج التداول والمعلومات ذات الصلة. يستخدم Uniswap طريقة CREATE2 لإنشاء العقود، ويضيف معلمة salt، مما يجعل عنوان العقد الناتج قابلاً للتنبؤ. منطق توليد العنوان هو: عنوان جديد = hash("0xFF"، عنوان المنشئ، salt، initcode).
استخدام دوال الاستدعاء بذكاء
في بعض السيناريوهات، يكون من المفيد جدًا استدعاء العقود لبعضها البعض والعودة إليها. على سبيل المثال، في طريقة swap الخاصة بـ Uniswap، سيتم استدعاء swapCallback مع عدد التوكنات المطلوبة فعليًا. يجب على الجهة المستدعية نقل التوكنات المطلوبة إلى المسبح في الاستدعاء، لضمان سلامة وتكامل منطق الصفقة بأكمله.
استخدام الاستثناءات لنقل المعلومات، وتقدير المعاملات باستخدام try catch
في عقد Quoter الخاص بـ Uniswap، يتم استخدام try catch لتغليف تنفيذ طريقة swap لتقدير الصفقة. من خلال إلقاء أخطاء خاصة في وظيفة الاسترجاع، ثم التقاط وتحليل معلومات الخطأ، تم تحقيق وظيفة تقدير الصفقة دون الحاجة إلى تعديل طريقة swap خصيصًا لاحتياجات التقدير.
حل مشكلة الدقة باستخدام الأعداد الكبيرة
تستخدم منطق الحساب في Uniswap بشكل متكرر عملية التحريك لليسار بمقدار 96 بت (ما يعادل الضرب في 2^96). تضمن هذه الطريقة عدم تجاوز العمليات التجارية العادية مع الحفاظ على الدقة. على الرغم من أن هناك خسارة صغيرة في الدقة من الناحية النظرية، إلا أنها مقبولة في التطبيقات العملية.
حساب الأرباح من آلية المشاركة
لتسجيل عوائد رسوم المعاملات الخاصة بمزودي السيولة (LP) بكفاءة، اعتمد Uniswap طريقة تشبه نظام الأسهم. من خلال تسجيل إجمالي الرسوم وكل وحدة من السيولة التي يجب توزيع الرسوم عليها، يحتاج مزودو السيولة عند السحب فقط إلى حساب الرسوم القابلة للسحب بناءً على السيولة المحتفظ بها، مما يقلل بشكل كبير من استهلاك الغاز.
الاستخدام المعقول للمعلومات خارج السلسلة
نظرًا للتكاليف الباهظة لتخزين البيانات على السلسلة، ليس من الضروري أن تكون جميع المعلومات على السلسلة أو يتم الحصول عليها من السلسلة. على سبيل المثال، يمكن تخزين قائمة تجمعات المعاملات ومعلومات التجمعات وما إلى ذلك في قواعد بيانات تقليدية، ومزامنتها بشكل دوري مع البيانات الموجودة على السلسلة. يمكن أن تزيد هذه الطريقة من الكفاءة وتقلل من التكاليف.
تقسيم العقود وإعادة استخدام العقود القياسية
قد يتضمن المشروع عدة عقود تم نشرها فعليًا، حتى إذا تم نشر عقد واحد فقط، يمكن تقسيم الشيفرة إلى عدة عقود للحفاظ عليها من خلال طريقة الوراثة. في نفس الوقت، يمكن أن يؤدي استخدام العقود القياسية الموجودة (مثل ERC721) إلى تحسين كفاءة التطوير وزيادة موثوقية العقود.
الخاتمة
الممارسة هي أفضل طريقة للتعلم. من خلال محاولة تنفيذ نسخة بسيطة من بورصة لامركزية، يمكن فهم تنفيذ كود Uniswap بشكل أعمق، واكتساب خبرة قيمة من المشاريع الواقعية. بالنسبة للمطورين المهتمين بالتعمق في تعلم تطوير مشاريع Web3 وDefi، سيكون المشاركة في دورات عملية خيارًا جيدًا.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 12
أعجبني
12
6
مشاركة
تعليق
0/400
GateUser-9ad11037
· منذ 14 س
مبتدئ ادخل مركز教程齁
شاهد النسخة الأصليةرد0
WalletManager
· منذ 14 س
التدقيق الدقيق قبل العقد هو أساس المشروع... تعلم قليلاً من الهجوم
كشف شفرة Uniswap: شرح مفصل لـ 7 تقنيات لتطوير العقود الذكية
تقنيات تطوير العقود المستفادة من كود Uniswap
مؤخراً أثناء كتابة دليل لتطوير بورصة لامركزية، قمت بالاستعانة بكود تنفيذ Uniswap V3 وتعلمت العديد من النقاط القيمة. كوني مطوراً يحاول لأول مرة تطوير عقود Defi، فإن هذه التقنيات ستكون مفيدة جداً للمبتدئين الذين يرغبون في تعلم تطوير العقود.
عنوان نشر العقد القابل للتنبؤ
عادة ما تبدو العناوين الناتجة عن نشر العقود عشوائية، لأنها تتعلق بالـ nonce. لكن في بعض الحالات، نحتاج إلى استنتاج عنوان العقد من خلال أزواج التداول والمعلومات ذات الصلة. يستخدم Uniswap طريقة CREATE2 لإنشاء العقود، ويضيف معلمة salt، مما يجعل عنوان العقد الناتج قابلاً للتنبؤ. منطق توليد العنوان هو: عنوان جديد = hash("0xFF"، عنوان المنشئ، salt، initcode).
استخدام دوال الاستدعاء بذكاء
في بعض السيناريوهات، يكون من المفيد جدًا استدعاء العقود لبعضها البعض والعودة إليها. على سبيل المثال، في طريقة swap الخاصة بـ Uniswap، سيتم استدعاء swapCallback مع عدد التوكنات المطلوبة فعليًا. يجب على الجهة المستدعية نقل التوكنات المطلوبة إلى المسبح في الاستدعاء، لضمان سلامة وتكامل منطق الصفقة بأكمله.
استخدام الاستثناءات لنقل المعلومات، وتقدير المعاملات باستخدام try catch
في عقد Quoter الخاص بـ Uniswap، يتم استخدام try catch لتغليف تنفيذ طريقة swap لتقدير الصفقة. من خلال إلقاء أخطاء خاصة في وظيفة الاسترجاع، ثم التقاط وتحليل معلومات الخطأ، تم تحقيق وظيفة تقدير الصفقة دون الحاجة إلى تعديل طريقة swap خصيصًا لاحتياجات التقدير.
حل مشكلة الدقة باستخدام الأعداد الكبيرة
تستخدم منطق الحساب في Uniswap بشكل متكرر عملية التحريك لليسار بمقدار 96 بت (ما يعادل الضرب في 2^96). تضمن هذه الطريقة عدم تجاوز العمليات التجارية العادية مع الحفاظ على الدقة. على الرغم من أن هناك خسارة صغيرة في الدقة من الناحية النظرية، إلا أنها مقبولة في التطبيقات العملية.
حساب الأرباح من آلية المشاركة
لتسجيل عوائد رسوم المعاملات الخاصة بمزودي السيولة (LP) بكفاءة، اعتمد Uniswap طريقة تشبه نظام الأسهم. من خلال تسجيل إجمالي الرسوم وكل وحدة من السيولة التي يجب توزيع الرسوم عليها، يحتاج مزودو السيولة عند السحب فقط إلى حساب الرسوم القابلة للسحب بناءً على السيولة المحتفظ بها، مما يقلل بشكل كبير من استهلاك الغاز.
الاستخدام المعقول للمعلومات خارج السلسلة
نظرًا للتكاليف الباهظة لتخزين البيانات على السلسلة، ليس من الضروري أن تكون جميع المعلومات على السلسلة أو يتم الحصول عليها من السلسلة. على سبيل المثال، يمكن تخزين قائمة تجمعات المعاملات ومعلومات التجمعات وما إلى ذلك في قواعد بيانات تقليدية، ومزامنتها بشكل دوري مع البيانات الموجودة على السلسلة. يمكن أن تزيد هذه الطريقة من الكفاءة وتقلل من التكاليف.
تقسيم العقود وإعادة استخدام العقود القياسية
قد يتضمن المشروع عدة عقود تم نشرها فعليًا، حتى إذا تم نشر عقد واحد فقط، يمكن تقسيم الشيفرة إلى عدة عقود للحفاظ عليها من خلال طريقة الوراثة. في نفس الوقت، يمكن أن يؤدي استخدام العقود القياسية الموجودة (مثل ERC721) إلى تحسين كفاءة التطوير وزيادة موثوقية العقود.
الخاتمة
الممارسة هي أفضل طريقة للتعلم. من خلال محاولة تنفيذ نسخة بسيطة من بورصة لامركزية، يمكن فهم تنفيذ كود Uniswap بشكل أعمق، واكتساب خبرة قيمة من المشاريع الواقعية. بالنسبة للمطورين المهتمين بالتعمق في تعلم تطوير مشاريع Web3 وDefi، سيكون المشاركة في دورات عملية خيارًا جيدًا.