نصائح صغيرة لتطوير العقود: خبرات قيمة مستفادة من كود Uniswap
مؤخراً أثناء تطوير دليل حول بورصة لامركزية، استندت إلى كود تنفيذ بورصة معروفة وتعلمت العديد من النقاط المثيرة للاهتمام. كوني مبتدئاً سابقاً طورت فقط عقود NFT بسيطة، كانت هذه أول تجربة لي في تطوير عقود DeFi، ومن المؤكد أن هذه التقنيات ستكون مفيدة للمطورين الذين يرغبون في البدء.
دعونا نلقي نظرة على هذه النصائح المفيدة، وبعضها يمكن اعتباره تقنيات مذهلة.
عنوان عقد قابل للتنبؤ
عادةً ما تبدو عناوين العقود الموزعة عشوائية، لأنها تتعلق بالعدد غير المستخدم. ولكن في بعض السيناريوهات، نحتاج إلى استنتاج عنوان العقد من خلال معلومات المعاملة المماثلة، وهذا مفيد عند تحديد صلاحيات المعاملات أو الحصول على عنوان المسبح.
يمكن استخدام طريقة CREATE2 لإنشاء عقد من خلال إضافة معلمة salt، وبالتالي سيكون عنوان العقد الناتج قابلاً للتنبؤ. منطق إنشاء العنوان هو: العنوان الجديد = hash("0xFF"، عنوان المنشئ، salt، initcode).
استخدام دوال الاسترجاع بذكاء
في Solidity، يمكن للعقود أن تستدعي بعضها البعض. أحيانًا تستدعي طريقة A طريقة B، وتقوم B باستدعاء A في طريقة الاستدعاء، وهذا مفيد في بعض السيناريوهات.
على سبيل المثال، أثناء التداول، ستقوم طريقة swap لعقد pool باستدعاء swapCallback، مع تمرير الكمية الفعلية المطلوبة من الرموز. يتعين على الجهة التي تستدعي الاستدعاء أن تقوم بإدخال الرموز في الاستدعاء، بدلاً من تقسيم swap إلى استدعائين. هذا يضمن التنفيذ الكامل لطريقة swap وأمانها.
استخدم الاستثناءات لنقل المعلومات ، وطبق try-catch لتحقيق تقدير الصفقة
عند تقدير الصفقة، نحتاج إلى محاكاة التبادلات ولكن دون تبادل الرموز فعليًا. يمكننا إلقاء خطأ خاص في رد النداء، ثم التقاطه وتحليل البيانات المطلوبة من معلومات الخطأ. بهذه الطريقة، لا داعي لتعديل طريقة التبادل لتلبية احتياجات التقدير، مما يجعل المنطق أبسط.
استخدام الأعداد الكبيرة لحل مشكلة الدقة
في العمليات الحسابية المعقدة، لتجنب فقدان الدقة في القسمة، يمكن أولاً إزاحة الرقم 96 لليسار ( مما يعادل الضرب في 2^96)، ثم حساب الناتج وإزاحته لليمين. بهذه الطريقة، يمكن ضمان الدقة دون تجاوز الحدود. عادةً ما يمكن قبول فقدان الدقة في الوحدة الأصغر.
حساب العائد باستخدام طريقة المشاركة
بالنسبة لحساب عوائد LP، لا يمكن تسجيل كل عملية تداول. يمكن تسجيل إجمالي الرسوم المطبقة وحصة كل سيولة مستحقة، وعند سحب LP يتم حسابها بناءً على السيولة المحتفظ بها. مشابه لتوزيعات الأرباح على الأسهم، يكفي معرفة تاريخ الأرباح لكل سهم ووقت السحب الأخير.
تخزين المعلومات خارج السلسلة
تخزين البيانات على السلسلة مكلف نسبيًا، وليس من الضروري أن تكون جميع المعلومات على السلسلة. يمكن أن تتواجد قوائم تجمع المعاملات والمعلومات الأخرى في قواعد بيانات عادية، وتتم المزامنة من السلسلة بشكل دوري. كما أن بعض واجهات RPC المتقدمة توفر طرقًا أسرع وأرخص للحصول على البيانات.
تقسيم العقد بشكل معقول، واستخدام المعايير الحالية
قد يحتوي المشروع على عدة عقود نشطة تم نشرها. حتى لو تم نشر واحد فقط، يمكن تقسيمه إلى عدة عقود للحفاظ عليها من خلال الوراثة. ويمكن أيضًا الاستفادة من العقود القياسية الموجودة مثل ERC721 لزيادة كفاءة التطوير.
ملخص
قم ببناء نسخة مبسطة من DEX بيديك، لتفهم بعمق كيفية تنفيذ الكود، وستتعلم المزيد من النقاط العملية في المشاريع. أنصح الأصدقاء المهتمين بمحاولة اتباع الدروس ذات الصلة خطوة بخطوة، وأعتقد أنه سيكون هناك الكثير من الفوائد.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 11
أعجبني
11
5
مشاركة
تعليق
0/400
SelfSovereignSteve
· منذ 15 س
مبتدئ لا تحاول عبثا استخدام الشيفرة المصدرية
شاهد النسخة الأصليةرد0
TooScaredToSell
· منذ 15 س
ما فائدة تعلم هذه الأشياء، سأخسر المال على أي حال.
تحليل شفرة Uniswap: 7 نصائح لتطوير العقود الذكية لمساعدتك على دخول عالم DEX
نصائح صغيرة لتطوير العقود: خبرات قيمة مستفادة من كود Uniswap
مؤخراً أثناء تطوير دليل حول بورصة لامركزية، استندت إلى كود تنفيذ بورصة معروفة وتعلمت العديد من النقاط المثيرة للاهتمام. كوني مبتدئاً سابقاً طورت فقط عقود NFT بسيطة، كانت هذه أول تجربة لي في تطوير عقود DeFi، ومن المؤكد أن هذه التقنيات ستكون مفيدة للمطورين الذين يرغبون في البدء.
دعونا نلقي نظرة على هذه النصائح المفيدة، وبعضها يمكن اعتباره تقنيات مذهلة.
عنوان عقد قابل للتنبؤ
عادةً ما تبدو عناوين العقود الموزعة عشوائية، لأنها تتعلق بالعدد غير المستخدم. ولكن في بعض السيناريوهات، نحتاج إلى استنتاج عنوان العقد من خلال معلومات المعاملة المماثلة، وهذا مفيد عند تحديد صلاحيات المعاملات أو الحصول على عنوان المسبح.
يمكن استخدام طريقة CREATE2 لإنشاء عقد من خلال إضافة معلمة salt، وبالتالي سيكون عنوان العقد الناتج قابلاً للتنبؤ. منطق إنشاء العنوان هو: العنوان الجديد = hash("0xFF"، عنوان المنشئ، salt، initcode).
استخدام دوال الاسترجاع بذكاء
في Solidity، يمكن للعقود أن تستدعي بعضها البعض. أحيانًا تستدعي طريقة A طريقة B، وتقوم B باستدعاء A في طريقة الاستدعاء، وهذا مفيد في بعض السيناريوهات.
على سبيل المثال، أثناء التداول، ستقوم طريقة swap لعقد pool باستدعاء swapCallback، مع تمرير الكمية الفعلية المطلوبة من الرموز. يتعين على الجهة التي تستدعي الاستدعاء أن تقوم بإدخال الرموز في الاستدعاء، بدلاً من تقسيم swap إلى استدعائين. هذا يضمن التنفيذ الكامل لطريقة swap وأمانها.
استخدم الاستثناءات لنقل المعلومات ، وطبق try-catch لتحقيق تقدير الصفقة
عند تقدير الصفقة، نحتاج إلى محاكاة التبادلات ولكن دون تبادل الرموز فعليًا. يمكننا إلقاء خطأ خاص في رد النداء، ثم التقاطه وتحليل البيانات المطلوبة من معلومات الخطأ. بهذه الطريقة، لا داعي لتعديل طريقة التبادل لتلبية احتياجات التقدير، مما يجعل المنطق أبسط.
استخدام الأعداد الكبيرة لحل مشكلة الدقة
في العمليات الحسابية المعقدة، لتجنب فقدان الدقة في القسمة، يمكن أولاً إزاحة الرقم 96 لليسار ( مما يعادل الضرب في 2^96)، ثم حساب الناتج وإزاحته لليمين. بهذه الطريقة، يمكن ضمان الدقة دون تجاوز الحدود. عادةً ما يمكن قبول فقدان الدقة في الوحدة الأصغر.
حساب العائد باستخدام طريقة المشاركة
بالنسبة لحساب عوائد LP، لا يمكن تسجيل كل عملية تداول. يمكن تسجيل إجمالي الرسوم المطبقة وحصة كل سيولة مستحقة، وعند سحب LP يتم حسابها بناءً على السيولة المحتفظ بها. مشابه لتوزيعات الأرباح على الأسهم، يكفي معرفة تاريخ الأرباح لكل سهم ووقت السحب الأخير.
تخزين المعلومات خارج السلسلة
تخزين البيانات على السلسلة مكلف نسبيًا، وليس من الضروري أن تكون جميع المعلومات على السلسلة. يمكن أن تتواجد قوائم تجمع المعاملات والمعلومات الأخرى في قواعد بيانات عادية، وتتم المزامنة من السلسلة بشكل دوري. كما أن بعض واجهات RPC المتقدمة توفر طرقًا أسرع وأرخص للحصول على البيانات.
تقسيم العقد بشكل معقول، واستخدام المعايير الحالية
قد يحتوي المشروع على عدة عقود نشطة تم نشرها. حتى لو تم نشر واحد فقط، يمكن تقسيمه إلى عدة عقود للحفاظ عليها من خلال الوراثة. ويمكن أيضًا الاستفادة من العقود القياسية الموجودة مثل ERC721 لزيادة كفاءة التطوير.
ملخص
قم ببناء نسخة مبسطة من DEX بيديك، لتفهم بعمق كيفية تنفيذ الكود، وستتعلم المزيد من النقاط العملية في المشاريع. أنصح الأصدقاء المهتمين بمحاولة اتباع الدروس ذات الصلة خطوة بخطوة، وأعتقد أنه سيكون هناك الكثير من الفوائد.