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