مؤخراً، أثناء مشاركتي في مشروع تعليم تطوير بورصة لا مركزية، تعلمت الكثير من تقنيات تطوير العقود القيمة من خلال دراسة تنفيذ كود Uniswap V3. باعتباري مبتدئاً في تطوير عقود Defi، قدمت لي هذه التقنيات العديد من الإلهامات، وأعتقد أنها ستفيد أيضاً المبتدئين الآخرين الذين يرغبون في تعلم تطوير العقود.
عنوان العقد القابل للتنبؤ
عادةً ما يتم الحصول على عنوان عشوائي عند نشر العقد، ولكن في بعض السيناريوهات نحتاج إلى القدرة على توقع عنوان العقد. تستخدم Uniswap طريقة CREATE2 لإنشاء العقد، من خلال إضافة معامل salt، مما يجعل عنوان العقد المنشأ قابلاً للتوقع. هذا مفيد جدًا في سيناريوهات مثل تحديد صلاحيات المعاملات أو الحصول على عنوان المسبح.
استخدام دوال الاستدعاء بذكاء
في بعض السيناريوهات، يكون من المفيد استدعاء العقود المتبادلة. على سبيل المثال في Uniswap، عند استدعاء طريقة swap لعقد UniswapV3Pool، يتم استدعاء swapCallback مع إدخال عدد الرموز الفعلي المطلوب المحسوب. يحتاج المستدعي إلى نقل الرموز إلى UniswapV3Pool في الاستدعاء، مما يضمن التنفيذ الكامل والأمان لطريقة swap.
نقل المعلومات عبر الاستثناء
في عقد Quoter الخاص بـ Uniswap، يتم تغليف تنفيذ طريقة swap لـ UniswapV3Pool باستخدام try-catch. وذلك لمحاكاة swap لتقدير الرموز المطلوبة للتداول، من خلال التقاط الأخطاء المحددة وتحليل معلومات الأخطاء للحصول على البيانات المطلوبة. هذه الطريقة تتجنب الحاجة إلى تعديل طريقة swap خصيصًا للتقدير، مما يجعل المنطق أكثر بساطة.
ضمان دقة الحسابات الكبيرة
يتضمن Uniswap الكثير من الحسابات، لتجنب فقدان الدقة أثناء عمليات القسمة، غالبًا ما يتم استخدام التحويل لليسار بمقدار 96 بت، ( يعادل عملية الضرب في 2^96). وبهذه الطريقة يمكن ضمان دقة الحسابات في حالة عدم تجاوز الحدود في المعاملات العادية. على الرغم من أنه نظريًا لا يزال هناك فقدان دقة طفيف، إلا أنه مقبول.
طريقة مشاركة حساب الأرباح
لتجنب استهلاك كمية كبيرة من الغاز لتسجيل رسوم المعاملات لكل LP في كل مرة يتم فيها التداول، اعتمد Uniswap طريقة مشابهة لتوزيع الأرباح على الأسهم. يكفي تسجيل إجمالي الرسوم المستحقة والرسوم التي يجب توزيعها لكل وحدة من السيولة، وعند سحب LP يمكن حساب الرسوم المستحقة بناءً على السيولة المحتفظ بها.
دمج البيانات على السلسلة وخارجها
ليس من الضروري الحصول على جميع المعلومات من السلسلة. على سبيل المثال، يمكن تخزين قائمة برك التداول ومعلومات البرك في قاعدة بيانات عادية، ومزامنتها بانتظام من السلسلة. يتم تنفيذ المعاملات الرئيسية على السلسلة، بينما يمكن الحصول على المعلومات غير الرئيسية بطرق أكثر كفاءة لتحسين الأداء والكفاءة.
تقسيم العقود وإعادة استخدام العقود القياسية
تحتوي المشاريع الكبيرة عادةً على عدة عقود تم نشرها فعليًا، حتى إذا تم نشر عقد واحد فقط، يمكن تقسيمه إلى عدة عقود للصيانة من خلال الوراثة. في الوقت نفسه، يمكن أن يؤدي استخدام العقود القياسية الموجودة ( مثل ERC721) إلى تحسين كفاءة التطوير وتبسيط الإدارة.
الممارسة هي أفضل طريقة للتعلم. من خلال القيام بتطوير نسخة بسيطة من بورصة لامركزية، يمكنك فهم تنفيذ كود Uniswap بشكل أعمق، وستتعلم المزيد من النقاط العملية في المشاريع. آمل أن تكون هذه التجارب مفيدة في طريقك لتطوير العقود.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 14
أعجبني
14
7
مشاركة
تعليق
0/400
LiquidityOracle
· 08-02 23:11
دمج مقالة أخرى عن تداول الأرز البارد للمبتدئين
شاهد النسخة الأصليةرد0
WhaleWatcher
· 08-02 19:29
من الصعب فهمه قليلاً، من يمكنه توضيح create2؟
شاهد النسخة الأصليةرد0
RetailTherapist
· 07-31 02:40
إرسال هذا أفضل من كتابة dex والقيام بخداع الناس لتحقيق الربح
شاهد النسخة الأصليةرد0
gas_guzzler
· 07-31 02:40
توقع العنوان هذه الحركة تضحك حتى الموت سانت ماري uniswap
شاهد النسخة الأصليةرد0
DeFiGrayling
· 07-31 02:35
عاجز عن الكلام ، إنه تدريب للمبتدئين في هذا النوع من الحفرة مرة أخرى ...
شاهد النسخة الأصليةرد0
DEXRobinHood
· 07-31 02:35
قال أبو الكلاب DOGE إن هذا صحيح! الجلوس في قاع الزنزانة ليس حلمًا!
سبع تقنيات لمساعدتك في إتقان تطوير العقود الذكية
نصائح وتقنيات تطوير العقود الذكية
مؤخراً، أثناء مشاركتي في مشروع تعليم تطوير بورصة لا مركزية، تعلمت الكثير من تقنيات تطوير العقود القيمة من خلال دراسة تنفيذ كود Uniswap V3. باعتباري مبتدئاً في تطوير عقود Defi، قدمت لي هذه التقنيات العديد من الإلهامات، وأعتقد أنها ستفيد أيضاً المبتدئين الآخرين الذين يرغبون في تعلم تطوير العقود.
عنوان العقد القابل للتنبؤ
عادةً ما يتم الحصول على عنوان عشوائي عند نشر العقد، ولكن في بعض السيناريوهات نحتاج إلى القدرة على توقع عنوان العقد. تستخدم Uniswap طريقة CREATE2 لإنشاء العقد، من خلال إضافة معامل salt، مما يجعل عنوان العقد المنشأ قابلاً للتوقع. هذا مفيد جدًا في سيناريوهات مثل تحديد صلاحيات المعاملات أو الحصول على عنوان المسبح.
استخدام دوال الاستدعاء بذكاء
في بعض السيناريوهات، يكون من المفيد استدعاء العقود المتبادلة. على سبيل المثال في Uniswap، عند استدعاء طريقة swap لعقد UniswapV3Pool، يتم استدعاء swapCallback مع إدخال عدد الرموز الفعلي المطلوب المحسوب. يحتاج المستدعي إلى نقل الرموز إلى UniswapV3Pool في الاستدعاء، مما يضمن التنفيذ الكامل والأمان لطريقة swap.
نقل المعلومات عبر الاستثناء
في عقد Quoter الخاص بـ Uniswap، يتم تغليف تنفيذ طريقة swap لـ UniswapV3Pool باستخدام try-catch. وذلك لمحاكاة swap لتقدير الرموز المطلوبة للتداول، من خلال التقاط الأخطاء المحددة وتحليل معلومات الأخطاء للحصول على البيانات المطلوبة. هذه الطريقة تتجنب الحاجة إلى تعديل طريقة swap خصيصًا للتقدير، مما يجعل المنطق أكثر بساطة.
ضمان دقة الحسابات الكبيرة
يتضمن Uniswap الكثير من الحسابات، لتجنب فقدان الدقة أثناء عمليات القسمة، غالبًا ما يتم استخدام التحويل لليسار بمقدار 96 بت، ( يعادل عملية الضرب في 2^96). وبهذه الطريقة يمكن ضمان دقة الحسابات في حالة عدم تجاوز الحدود في المعاملات العادية. على الرغم من أنه نظريًا لا يزال هناك فقدان دقة طفيف، إلا أنه مقبول.
طريقة مشاركة حساب الأرباح
لتجنب استهلاك كمية كبيرة من الغاز لتسجيل رسوم المعاملات لكل LP في كل مرة يتم فيها التداول، اعتمد Uniswap طريقة مشابهة لتوزيع الأرباح على الأسهم. يكفي تسجيل إجمالي الرسوم المستحقة والرسوم التي يجب توزيعها لكل وحدة من السيولة، وعند سحب LP يمكن حساب الرسوم المستحقة بناءً على السيولة المحتفظ بها.
دمج البيانات على السلسلة وخارجها
ليس من الضروري الحصول على جميع المعلومات من السلسلة. على سبيل المثال، يمكن تخزين قائمة برك التداول ومعلومات البرك في قاعدة بيانات عادية، ومزامنتها بانتظام من السلسلة. يتم تنفيذ المعاملات الرئيسية على السلسلة، بينما يمكن الحصول على المعلومات غير الرئيسية بطرق أكثر كفاءة لتحسين الأداء والكفاءة.
تقسيم العقود وإعادة استخدام العقود القياسية
تحتوي المشاريع الكبيرة عادةً على عدة عقود تم نشرها فعليًا، حتى إذا تم نشر عقد واحد فقط، يمكن تقسيمه إلى عدة عقود للصيانة من خلال الوراثة. في الوقت نفسه، يمكن أن يؤدي استخدام العقود القياسية الموجودة ( مثل ERC721) إلى تحسين كفاءة التطوير وتبسيط الإدارة.
الممارسة هي أفضل طريقة للتعلم. من خلال القيام بتطوير نسخة بسيطة من بورصة لامركزية، يمكنك فهم تنفيذ كود Uniswap بشكل أعمق، وستتعلم المزيد من النقاط العملية في المشاريع. آمل أن تكون هذه التجارب مفيدة في طريقك لتطوير العقود.