
المصدر: أكاديمية جريفسيس
يوفر هذا التقرير البحثي تفسيرًا مفصلاً لمبدأ العمل وتكوين المشروع وتحليل رمز المصدر وأجزاء أخرى من بروتوكول UNISWAPv2.يتضمن مبدأ العمل صانعي السوق التلقائي (AMMS) العقود الرئيسية (مثل عقود المصنع وعقود التبادل) ووظائفها في قسم تحليل رمز المصدر ، نقوم بتحليل رمز مصدر العقد الذكي في UNISWAPv2 وشرح مفاهيم التصميم للوظائف الرئيسية وهياكل البيانات.
1. مقدمة للاتفاقية
UNISWAPv2 هو بروتوكول معاملات لا مركزية يعتمد على ethereum blockchain ، مما يتيح للمستخدمين تداول العملات المشفرة دون الوثوق في الوسطاء.على عكس التبادلات المركزية التقليدية ، تعتمد UNISWAPv2 نموذج صانع السوق التلقائي (AMM) لإدارة المعاملات ومجمعات السيولة من خلال العقود الذكية ، وبالتالي تحقيق اللامركزية الكاملة.
جوهر UNISWAPv2 هو صيغة منتجها المستمرة (x * y = k)،فيxوذيمثل عدد اثنين من الأصول المختلفة في تجمع السيولة على التوالي.كثابت.تضمن هذه الصيغة أنه بعد كل معاملة ، يتم إعادة توازن نسبة الأصول في المجمع ، وبالتالي توفير السيولة للمستخدمين.يجعل هذا التصميم عملية التداول شفافة وعادلة ، ويمكن للمستخدمين إضافة أو إزالة السيولة في أي وقت وكسب الأرباح من خلال رسوم المعاملات.
يتكون بروتوكول UNISWAPv2 من عقود ذكية متعددة ، أهمها عقود المصنع وعقود التبادل.عقود المصنع مسؤولة عن إنشاء وإدارة تجمعات السيولة ، في حين أن كل عقد تبادل يتوافق مع زوج تداول معين (مثل ETH/DAI).
بالإضافة إلى ذلك ، قدمت UNISWAPv2 أيضًا عقود جهاز التوجيه ووظائف المكتبة لتحسين كفاءة المعاملات والأمان.بالمقارنة مع سابقتها ، UNISWAPv1 ، يجلب UNISWAPv2 العديد من التحسينات المهمة.أولاً ، تتيح وظيفة Exchange Lightning للمستخدمين استعارة الأصول في معاملة واحدة وإعادتها قبل انتهاء المعاملة.والثاني هو السعر Oracle ، الذي يوفر بيانات أسعار أكثر موثوقية من خلال تجميع المتوسط المرجح للوقت (TWAP).
بالإضافة إلى ذلك ، يدعم UNISWAPv2 المعاملات المباشرة لأي رمز ERC-20 دون الحاجة إلى استخدام Ethereum كوسيط.لا يكمن نجاح UNISWAPv2 في ابتكاره التكنولوجي فحسب ، بل يكمن أيضًا في نموذج التنمية المفتوح والمجتمع.بروتوكول UNISWAP حر في استخدام أي شخص ، مما يجلب إمكانيات غير محدودة للنظام الإيكولوجي للتمويل اللامركزي (DEFI).العديد من مشاريع Defi الأخرى ، مثل منصات الإقراض وبروتوكولات StableCoin ، مبنية على Uniswap لتشكيل نظام بيئي مزدهر.
بشكل عام ، قامت UNISWAPv2 بتغيير طريقة معاملات العملة المشفرة من خلال تصميم بروتوكولها المبتكر ونموذج التشغيل اللامركزي وأصبحت حجر الزاوية في مجال DEFI.من خلال التطوير المستمر للتكنولوجيا والابتكار المستمر للمجتمع ، سيتم توسيع تأثير UnisWAPv2 بشكل أكبر ، مما يجلب المزيد من الحرية المالية والفرص للمستخدمين العالميين.
2. ميزات البروتوكول
2.1 أزواج ERC-20
سيستخدم UnisWAPV1 Ethereum (ETH) كعملة انتقالية ، أي إذا كان المستخدم يريد تبادل Tokena و TokenB ، فإنه يحتاج إلى استخدام Tokena لتبادل ETH أولاً ، ثم استخدام ETH لتبادل الرمز المميز. السيولة ، فإنه يضع ضغط التكلفة الضخم على مقدمي السيولة.يجب أن يكون لدى كل مزود سيولة واجهة للتبادل مع ETH.
عندما يرتبط جنس abc و xyz (على سبيل المثال ، كلاهما stablecoins بالدولار الأمريكي) ، فإن مقدمي السيولة على UnisWAP عادة ما يعانون من خسائر دائمة أصغر في زوج ABC/XYZ مقارنة مع ABC/ETH أو XYZ/ETH.بالإضافة إلى ذلك ، فإن استخدام ETH كعملة انتقال قسري يزيد من تكاليف التجار.سيدفع المتداول مرتين بقدر الشراء المباشر لـ ABC/XYZ ، وسيعاني أيضًا من اثنين من المتقاعدين.
في UNISWAPv2 ، يُسمح لمقدمي السيولة بإنشاء عقود زوج لأي رموز اثنين من ERC-20.في حين أن الزيادة في عدد أزواج المعاملات بين أي الرموز المميزة ERC-20 قد تجعل من أكثر تعقيدًا لإيجاد مسار معاملة أصول معين ، يمكن حل هذه المشكلة عن طريق التوجيه العالي المستوى (عبر أجهزة التوجيه خارج السلسلة أو على السلسلة ).
2.2 السعر أوراكل
يتم حساب سعر UNISWAPv1 بحلول الوقت T ، يمكن الحصول على السعر الهامشي الذي توفره UNISWAP (باستثناء رسوم المناولة) من خلال تقسيم المبلغ الاحتياطي للأصل A بمبلغ الاحتياطي للأصل ب.صيغة الحساب المحددة هي كما يلي:
ومع ذلك ، فإن UNISWAPV1 ليس آمنًا لاستخدامه كأوراكل سعر على السلسلة لأنه من السهل جدًا التلاعب به.سيبيع المعالج كمية كبيرة من الأصول A في بداية كتلة للتأثير على السعر ، ثم تنفيذ عمليات عقد أخرى (عقود زوج غير UNINISWAP) في منتصف الكتلة ، وأخيراً تشتري مرة أخرى في نهاية كتلة.تقدم UnisWAP V2 آلية تراكم الأسعار ، مما يسمح لأطراف ثالثة باستخدام متوسط سعر نطاق معين ، مما يزيد بشكل كبير من صعوبة التلاعب في الأسعار ويجعل سلوك التلاعب ليس له فوائد جوهرية.
على وجه التحديد ، يتراكم UNISWAP V2 هذا السعر من خلال تسجيل مجموع الأسعار المتراكم في بداية كل كتلة ، حيث يتفاعل شخص ما مع العقد.يتم وزن كل سعر بناءً على الوقت المنقضي منذ تحديث الكتلة السابقة ، استنادًا إلى الطابع الزمني للكتلة.هذا يعني أنه في أي وقت معين (بعد التحديث) ، يجب أن تكون قيمة المتراكم مجموع السعر الفوري لكل ثانية في سجل العقد.
لتقدير متوسط سعر المرجح للوقت من الوقت إلى T₁ ، يمكن للمتصل الخارجي التحقق من قيمة التراكم في T₁ ، ثم تحقق مرة أخرى في T₂ ، وطرح القيمة الأولى ، وتقسيمها على الثواني المنقضية.(لاحظ أن العقد نفسه لا يخزن القيمة التاريخية لهذا المتراكم – يجب على المتصل استدعاء العقد في بداية الدورة لقراءة وتخزين هذه القيمة.)
يمكن لمستخدم Oracle اختيار وقت بدء وإنهاء الدورة.إن اختيار دورة أطول سيجعل الأمر أكثر تكلفة للمهاجمين لمعالجة سعر المتوسط المرجح للوقت (TWAP) ، على الرغم من أن هذا سيؤدي إلى انخفاض سعر آخر.نظرًا لاستخدام متوسط القيمة ، فإن متوسط قيمة A/B و B/A في فاصل معين لم يعد علاقة متبادلة ، لذلك يوفر UnisWAP V2 كلا الأسعار.
2.3 دقة حساب الأسعار
نظرًا لأن الصلابة لا تدعم أنواع البيانات العددية غير المعدنية ، فإن UNISWAPv2 تعتمد تنسيق بيانات UQ112.112 لتحسين دقة حسابات الأسعار ، ويستخدم UINT112 لتخزين عدد الأصول في زوج المعاملة ، ويستخدم 32 بت لتسجيل الإنشاء وقت الكتلة الحالية.ستؤدي طريقة التسجيل في هذه المرة إلى تجاوز الطابع الزمني لـ UNIX بعد 100 عام ، 7 فبراير 2106.وذلك لأن الطوابع الزمنية لـ UNIX تمثل الوقت في ثوانٍ منذ 1 يناير 1970 (تسمى عصر UNIX) ، ويمكن أن تمثل UINT32 نطاقًا من 0 إلى 2^{32} – 1 ثانية ، أي حوالي 136 عامًا.
للتأكد من أن النظام سيظل يعمل بشكل صحيح في 7 فبراير ، 2106 وما بعده ، تم تصميم UNISWAPv2 ليطلب من Oracles التحقق من السعر مرة واحدة على الأقل كل دورة في التدفق (حوالي 136 عامًا).هذا لأنه في هذا التصميم ، لا تزال طريقة تراكم الأسعار آمنة في التدفق حتى لو كانت الطوابع الزمنية تفيض ، ويمكن حساب تغيير السعر بشكل صحيح حتى إذا كانت المعاملة تمتد على الفاصل الزمني للتفوق.وبهذه الطريقة ، يتم ضمان أن يظل النظام دقيقًا وموثوقًا لفترة طويلة.
2.4 خلاص البرق
Exchange Lightning هو تبادل عملات مشفرة فورية يتم إجراؤها على منصة blockchain ، حيث يمكن للمستخدمين إكمال المعاملات بسرعة بين العملات المشفرة المختلفة دون انتظار تأكيد كتل متعددة.عادةً ما يتم تنفيذ هذه المعاملات تلقائيًا من خلال العقود الذكية ، مما يضمن أن كلا الطرفين للمعاملة يفيون بالتزامات التبادل في نفس الوقت ، وبالتالي تقليل مخاطر المعاملات وتحسين الكفاءة.باختصار ، يعني Exchange Trade Trade First ومن ثم السداد من خلال Exchange Lightning.
دعنا نوضح الخلاص من خلال مثال عملي على افتراض أن هناك زوجًا تداولًا A/B في UNISWAPv2 كمية أمن خلال العملية أعلاه ، أكملنا التحكيم الفارق بين A0-A بتكلفة 0.نحن لا نحتاج إلى أي مدير ، نحتاج فقط إلى دفع رسوم الغاز.إذا وجدت أن هناك فرقًا في السعر بين dexes الأخرى على السلسلة ، فيمكنك أيضًا إجراء عمليات مماثلة عليها في مراجحة التكلفة صفر.
2.5 رسوم البروتوكول
يقدم UNISWAPv2 رسوم بروتوكول 0.05 ٪ يمكن تشغيلها وإيقافها.إذا تم تمكينه ، فسيتم إرسال هذه الرسوم إلى عنوان Feeto المحدد في عقد المصنع.في البداية ، لم يتم تعيين Footo ، لذلك لم يتم فرض أي رسوم.يمكن لعناوين قدم محددة مسبقًا استدعاء وظيفة setFeeto في عقد مصنع UNISWAPv2 وتعيين قدمين بقيمة مختلفة.يمكن أيضًا تسمية FoosOsetter SetFeetoSetter لتغيير عنوان FeetOsetter نفسه.
إذا تم تعيين عنوان Feeto ، فسيبدأ البروتوكول في فرض رسوم على 5 نقاط أساس ، وهي رسوم النقطة الأساسية 30 التي حصل عليها مزودو السيولة \ frac {1} {6}.أي أن المتداولين سيستمرون في دفع 0.30 ٪ من جميع رسوم المعاملات ، منها 83.3 ٪ (أي 0.25 ٪) سيتم دفعها لمقدمي السيولة وسيتم دفع 16.6 ٪ (أي 0.05 ٪) إلى عنوان Feeto.يؤدي فرض رسوم 0.05 ٪ في كل معاملة على تكاليف غاز إضافية.لتجنب ذلك ، يتم شحن الرسوم المتراكمة فقط عند إيداع السيولة أو سحبها.يحسب العقد الرسوم المتراكمة والنعناع الرموز الجديدة للسيولة لمستفيدين الرسوم مباشرة قبل أن يتم نصب الرمز المميز أو تدميره.
يمكن حساب الرسوم المتراكمة عن طريق قياس نمو √K (أي √ (x · y)) ، منذ آخر مرة تم فيها فرض الرسوم.تعطي هذه الصيغة المصاريف التراكمية للنسبة المئوية للسيولة في تجمع التدفق بين T₁ و T₂ كـ T₂:
إذا تم تنشيط الرسوم قبل T₁ ، فيجب التقاط عنوان Feeto إلى ⅙ بين T₁ و T₂.لذلك ، نريد أن ننكر رمزًا جديدًا للسيولة على عنوان Feeto ، الذي يمثل مجموعة φ · f₁ ، ₂ ، حيث φ = ⅙.
وهذا يعني ، نريد اختيار Sₘ لتلبية العلاقة التالية ، حيث S₁ هو المبلغ الإجمالي للأسهم المعلقة في الوقت t₁:
بعد بعض الحسابات ، بما في ذلك استخدام 1-
بدلاً من f₁ و ₂ وحل Sₘ ، يمكننا إعادة كتابتها على النحو التالي:
اضبط φ إلى ⅙ وسنحصل على الصيغة التالية
أدناه ، دعنا نشرح ذلك بمثال محدد.لنفترض أن المودع الأولي يودع 100 DAI و 1 ETH في زوج واحصل على 10 أسهم.بعد فترة من الوقت (لم يشارك أي مودعين آخرين في الاقتران) ، حاولوا سحب الأموال ، وعندها كان هناك 96 DAI و 1.5 ETH في الاقتران.استبدال هذه القيم في الصيغة أعلاه ، نحصل على النتيجة التالية:
2.6 حساب رسوم المعاملات
uniswapv1 حساب رسوم المعاملة هو الصيغة
هذه الصيغة تعني أن صيغة المنتج الثابتة يتم تقليلها أولاً ثم تنفيذها في إصدار UNISWAPv2 ، بسبب وجود تبادل فلاش ، يتم ضبط صيغة الحساب لرسوم المعاملة
2.7 Sync () و Skim ()
يتم استخدام Sync () لتحديث عدد الأصول المخزنة مؤقتًا في العقد على القيمة الفعلية الحالية للعقد ، وخاصةً لحالات التعامل حيث تتوفر اختلال التوازن النسبي وعدم توفر موفري السيولة.يتم استخدام Skim () للتعامل مع الموقف الذي يتجاوز فيه عدد الأصول في العقد الحد الأقصى لقيمة UINT112 ، مما يسمح للمستخدم بسحب جزء الأصول التي تتجاوز الحد الأقصى لقيمة UINT112.
2.8 التعامل
يحتاج عقد الرمز المميز ERC20 القياسي إلى إرجاع قيمة منطقية بعد نقل الرمز المميز للإشارة إلى ما إذا كان النقل ناجحًا ، ولكن لن يفعل كل الرموز الرموز.بعض الرموز لا تُرجع القيم.في UNISWAPv1 ، تعتبر عمليات نقل الرمز المميز بدون قيم الإرجاع بمثابة فشل افتراضيًا ، ويتم إعادة تعيين المعاملة بأكملها.وفي Uniswap V2 ، تعتبر عمليات نقل الرمز المميز بدون قيم إرجاع ناجحة.
بالإضافة إلى ذلك ، تفترض UNISWAPV1 أن عمليات نقل الرمز المميز لا تؤدي إلى إعادة إدخال زوج المعاملة ، ولكن بعض الرموز المميزة ERC20 التي تدعم خطافات ERC777 تكسر هذا الافتراض.لدعم هذه الرموز ، يضيف UNISWAPv2 وظيفة قفل مضادة للالتقاط إلى جميع وظائف تعديل متغير الحالة العامة ، ويمنع أيضًا إعادة دخول عمليات الاتصال المعرفة من قبل المستخدم في مقايضات الفلاش.
2.9 إعدادات تهيئة السيولة
إذا كان المستخدم يوفر السيولة لزوج تداول موجود A/B ، فعندئذٍ بناءً على النسبة الحالية لـ A و B ، فيمكنه حساب عدد النسب A و B لتقديمه.ومع ذلك ، عند تهيئة زوج المعاملة ، لا توجد نسبة مرجعية.في إصدار UNISWAPv1 ، عندما يودع موفر السيولة الجديد الرموز الرموز في زوج رمز UNISWAP موجود ، سيتم حساب عدد الرموز المميزة للسيولة بناءً على عدد الرموز الموجودة.صيغة الحساب المحددة هي كما يلي:
بالنسبة لأول شخص يقدم السيولة ، فإن الصيغة هيxstartingنعم 0.في مواجهة هذا الموقف ، تتمثل الطريقة التي تم تبنيها من قبل UNISWAPV1 تحددها نسبة السيولة الأولية.في UnisWAPv2 ، يمكن تهيئة السيولة بواسطة الصيغة التالية
هذه الصيغة تعنيمضمونهذا هو مقدار الرموز المميزة للسيولة التي ستتلقاها ،xDepositedهذا هو عدد الرموز الأولى التي تودعها.xDepositedهذا هو مبلغ ETH الذي تودعه.ydepositedهذا هو رقم الرمز الثاني الذي تودعه.
على سبيل المثال ، إذا قمت بإيداع داي ،ydepositedهذا هو مبلغ داي الذي تودعه.يمكن أن تضمن هذه الصيغة أن الحصة في تجمع السيولة لن تكون أبدًا أقل من المتوسط الهندسي في المجمع ، لكن قيمة هذه الصيغة ستتغير أيضًا مع عدد الرموز في المجمع ، من أجل إضعاف عدد الرموز في تجمع الصندوق بسبب تأثير التغيير ، دمر UNISWAPv2 السيولة الأولية 1E-⁵ ، والتي هي 1000 ضعف سيولة 1E-⁸.على الرغم من أن هذا تافهة لأي زوج من المعاملات ، إلا أنه يزيد بشكل كبير من تكلفة المهاجمين الذين يستفيدون من هذه الآلية.
2.10 ويث
نظرًا لأن واجهة تداول Ethereum Currency Currency ETH تختلف عن تداول الرموز المميزة ERC20 ، فإن العديد من البروتوكولات لا تدعم ETH مباشرة ، ولكنها بدلاً من ذلك تستخدم Weth بديلة (رمز ETH المعبأة).يعد UNISWAPV1 استثناءً لأن أزواج التداول الخاصة بها تشمل ETH مباشرة ، مما يتيح للمستخدمين التداول مباشرة باستخدام ETH.ومع ذلك ، تم تصميم UNISWAP V2 لدعم أزواج التداول بين أي رموز ERC20 ، والدعم المباشر لـ ETH يمكن أن يعقد النظام وزيادة المخاطر.
لذلك ، لا يتم دعم ETH مباشرة في UNISWAPv2 ، ويجب على المستخدمين تحويل ETH إلى Weth قبل استخدام زوج المعاملة.في الواقع ، يحول UNISWAPv2 داخليًا ETH الذي يقدمه المستخدم ETH إلى Weth ، مما يبسط عمليات المستخدمين دون تحويل ETH يدويًا إلى Weth.في حين أن هذا التحويل تافهة لأي زوج معاملة ، فإنه يحسن بشكل فعال أمان وسهولة تشغيل النظام.
2.11 عنوان زوج التداول الحتمي
سواء كان UnisWAPv1 أو UNISWAPv2 ، يتم إنشاء جميع الأزواج من خلال عقد مصنع واحد.في UNISWAPv1 ، يتم استخدام رمز OPCODE ، وسيتأثر عنوان المعاملة إلى العقد بالترتيب الذي يتم إنشاؤه به.في UNISWAPv2 ، يتم استخدام رمز OPCODE2 جديد ، ويتم تحديد العنوان الذي تم إنشاؤه بواسطة هذه الطريقة.هذا يعني أنه يمكن حساب عنوان زوج المعاملة مسبقًا خارج السلسلة دون الاستعلام عن الحالة على السلسلة.
2.12 الحد الأقصى لعدد الرموز
لتنفيذ وظائف Oracle بكفاءة ، يستخدم UNISWAP V2 UINT112 لحفظ عدد الرموز ، مما يعني أن الحد الأقصى لعدد الرموز المدعومة هو 2¹² – 1.بالنسبة للرموز ذات الدقة 18 ، هذه القيمة كافية ، حوالي 5192296858534828 (5.19E⁵) ، أي 5.19 تريليون.إذا تجاوزت قيمة السجل في العقد هذا الحد ، فسوف تفشل المعاملة وإعادة ضبطها.كما ذكرنا سابقًا ، يمكن لأي شخص أن يتعافى باستخدام وظيفة skim () ، وحل هذه المشكلة عن طريق إزالة الأصول الزائدة من تجمع السيولة.
3. تحليل مبدأ UNISWAPv2
UNISWAP هو بروتوكول السيولة الآلي مدعوم من صيغ منتج ثابت ويتم تنفيذه في أنظمة العقود الذكية غير القابلة للترقية على ethereum blockchain.إنه يلغي الحاجة إلى الوسطاء الموثوق بهم ، وتحديد أولويات اللامركزية ، ومقاومة الرقابة والأمن.يدير كل عقد ذكي UNISWAP أو زوج العملة تجمع سيولة يتكون من محميتين رمزيين ERC-20.يمكن لأي شخص تبادل الرموز المميزة عن طريق إيداع القيمة المكافئة لكل رمز كامن ، وبالتالي يصبح مزود سيولة (LP) لمجموعة الأموال.تتتبع هذه الرموز أسهم LP في إجمالي الاحتياطي ويمكنها استرداد الأصول الأساسية في أي وقت.
أولاً ، سنقدم آلية صانع السوق التلقائية لـ UNISWAP.
في،xيمثل عدد الرمز المميز A ،ذيمثل عدد الرمز المميز B ،كهو ثابت يشير إلى أن ناتج الرموز المميزة في المسبح لا يزال دون تغيير.عندما يتداول المتداول على UnisWap ، يغير عدد الرموز في المجمع عن طريق إضافة أو إزالة الرموز إلى حمام السباحة.وفقًا لصيغة المنتج الثابتة ، سيتغير عدد الرمز المميز الآخر وفقًا لذلك للحفاظ على المنتجكثابت.هذا التغيير يحدد سعر المعاملة.
على سبيل المثال ، إذا كان المتداول يريد تبادل الرمز المميز B مع الرمز المميز A ، فيجب عليهم إضافة عدد معين من الرمز المميز A إلى المجمع ، مما سيؤدي إلى انخفاض عدد الرمز المميز B في المجموعة ، وبالتالي تغيير السعر.ستتحرك عمليات المتداول على طول هذا المنحنى ، وتغيير عدد وسعر الرموز.أي نقطة على المنحنى تلبي علاقة المنتج المستمرة.
يمكن تقسيم مبدأ العمل لـ UNISWAPv2 تقريبًا إلى ثلاثة أجزاء: موفر السيولة ، ومجموعة UNISWAP ، والتاجر.يتمثل دور مزودي السيولة في أن مقدمي الخدمات السيولة يقومون بإيداع اثنين من الرموز المميزة (على سبيل المثال ، الرمز المميز A والرمز B) إلى تجمع Uniswap.
في المثال الموضح في الشكل ، يودع مزود السيولة 10 رمز الرمز المميز A و 1.
يتم تمثيل حصة السيولة في التجمع برمز السيولة ، مما يدل على أن هناك 12 رمزًا للسيولة في الشكل ؛على سبيل المثال ، يمكن للمتداول إيداع 10 Token A ودفع رسوم المناولة بنسبة 0.3 ٪ للحصول على 1 رمز B من التجمع.
دعونا نلقي نظرة أولاً على كيفية توفير مقدمي السيولة (LPS) للسيولة.كما هو مبين في الشكل أدناه ، يقوم مقدمو موفري السيولة بإيداع الرموز المميزة إلى تجمعات UNISWAP لزيادة السيولة.
على سبيل المثال ، في الشكل ، يودع مزود السيولة 3 رمز الرمز المميز A و 1 B.عندما يودع مزودو السيولة الرموز المميزة ، فإنهم يتلقون رموز تجمع تمثل حصة السيولة الخاصة بهم.في الشكل ، حصل مزود السيولة على 12.4 رمز تجمع.على سبيل المثال ، ستزداد احتياطيات الرمز المميز في التجمع ، على سبيل المثال ، ستصبح الاحتياطيات الرمزية في المجمع في الشكل 1210 الرمز المميز A و 399 Token B.المزيد من السيولة تساعد على تقليل انزلاق الأسعار وجعل التداول أكثر استقرارًا.
صيغة المنتج المستمرة التي تستخدمها UnisWapx · y = kلتحديد منحنى السعر.توسع السيولة المتزايدة مساحة الانزلاق المنخفضة وتحسن استقرار سعر المعاملات.يزيد مزودي السيولة السيولة في التجمع عن طريق إيداع الرموز والحصول على رموز السيولة المقابلة في المقابل.هذا لا يساعد المتداولين على الحصول على أسعار أكثر استقرارًا فحسب ، بل يجلب أيضًا مزايا لمقدمي سيولة رسوم المعاملات.
بعد ذلك ، من منظور التجار ، وكيف يتبادل التجار الرموز والآثار التي سيحدثها سلوك التداول على مجموعة Uniswap.
كما هو موضح في الشكل أدناه ، يريد التجار تبادل الرموز على UnisWap.على سبيل المثال ، في الشكل ، يعتزم المتداول تبادل 3 الرموز.يدخل التجار 3 الرموز A ويدفعون رسوم المناولة بنسبة 0.3 ٪.في النهاية ، سيحصل المتداول على حوالي 0.997 رمز BS كإخراج.تغيير المعاملة توازن الاحتياط في المجمع ، مما يؤدي إلى سعر جديد.قبل الصفقة ، كان هناك 1200 رمز الرمز A و 400 رمز B في البركة.
وفقا لصيغة المنتج الثابتةx · y = kسيكون هناك ماUNISWAP استخدامx · y = kيتم تعريف صيغة المنتج الثابتة لمنحنى السعر.مع تبادل Trader ، يتغير عدد الرموز في المجموعة ، ويتم ضبط منحنى السعر أيضًا لتحديد السعر الجديد.
4. تحليل رمز المصدر
4.1 تحليل مخطط تدفق العملية الأساسية
في هذا القسم ، سنقدم العمليات الثلاثة الأكثر شيوعًا في UNISWAPv2 ، وهي إضافة السيولة ، وإزالة السيولة ، وتبادل الرموز.سنقوم بتحليل العقود التي يسمونها والوظائف التي يسمونها من خلال المخطط الانسيابي لاكتساب فهم أعمق لقواعد المصدر لـ UNISWAPv2.
4.1.1 إضافة السيولة
عندما يضيف المستخدم السيولة ، يقوم المستخدم أولاً باستدعاء عقد UnisWAPv2Router.sol لتوفير عدد الرمز المميز A والرمز B. وظيفة AddLiquide of UnisWAPv2Router.sol يتلقى طلب المستخدم ومعالجته.
تدعو وظيفة AddLiquide إلى عقد UnisWapv2pair. ب المقدمة من المستخدم (::::::::::::::::::::::::::::::::::::::: :::::::::::::::::: “عدد رموز LP) وتخصيص هذه الرموز LP إلى المستخدم بعد اكتمال عملية إضافة السيولة. تحديث الاحتياطي.
4.1.2 تبادل الرموز
عندما يرغب المستخدم في تبادل الرموز ، يقوم أولاً باستدعاء عقد UnisWAPv2Router.sol لتوفير عدد الرموز المميزة للدخل والحد الأدنى لعدد الرموز المميزة.
ثم تتلقى وظيفة Subexacttokensfortoffortofforts uniswapv2router طلب المستخدم ويعالجه يعتمد على عدد الرموز والاحتياطيات.العملية المحددة هي كما يلي:
4.1.3 إزالة السيولة
يستدعي المستخدم أولاً عقد UNISWAPV2Router. . Sol Contract ، يقوم استدعاء وظيفة Burn بإجراء عملية سحب السيولة الفعلية.
4.2 العقد الأساسي
يعد عقد UNISWAPv2 Core جزءًا أساسيًا من Uniswap ، وهو منصة تداول لا مركزية ، وهي مسؤولة عن تنفيذ وظائف صانع السوق الآلي (AMM).على عكس كتب الطلبات التقليدية ، يمر Uniswap برك السيولة وصيغ منتجات ثابتةx · y = kلتحقيق المعاملة.يودع مزود السيولة رموبين في المجمع ويحصل على رموز السيولة كبيانات اعتماد.عندما يقوم المستخدم بإجراء معاملة ، يحسب العقد سعر المعاملة بناءً على عدد الرموز في المجمع وصيغة المنتج الثابتة.قدمت UNISWAPv2 العديد من التحسينات ، بما في ذلك معاملات ERC20 Division ، وتحسينات Oracle Price ، وقروض الفلاش ، وتعديلات رسوم البروتوكول.تتضمن المكونات الأساسية للعقد الأساسي الملفات الثلاثة التالية:
-
uniswapv2pair.sol: يدير حمامات السيولة لكل زوج تداول ، ويتعامل مع التبادلات الرمزية ، وإضافات السيولة ، والإزالة
-
uniswapv2factory.sol: مسؤول عن إنشاء وإدارة أزواج المعاملات
-
uniswapv2erc20
4.2.1 UNISWAPV2 Factory.Sol
دور عقد UNISWAPv2Factory مسؤول عن إنشاء وإدارة أزواج التداول (تجمعات السيولة).يتيح هذا العقد للمستخدمين إنشاء أزواج تجارية جديدة وتسجيل جميع أزواج التداول التي تم إنشاؤها.بالإضافة إلى ذلك ، يدير رسوم تلقي المعاملات وعناوين Setter.uniswapv2factory.sol لديه خمس وظائف ، دعونا نلقي نظرة عليها بشكل منفصل
-
وظيفة المنشئ: وظيفة مُنشئ ، تستخدم لتهيئة عقد UNISWAPv2Factory.الإدخال هو عنوان Setter Setter رسوم المعاملة _feetoSetter ، والمخرجات لا شيء.
-
وظيفة AllPairsLength: إرجاع عدد جميع أزواج المعاملات التي تم إنشاؤها.المدخلات لا شيء ، والمخرج هو وحدة عدد جميع أزواج المعاملات.
-
وظيفة CreatePair: إنشاء زوج معاملة جديد.المدخلات هي العنوان الرمزيين لـ Tokena و TokenB ، والمخرج هو زوج عنوان زوج المعاملة الذي تم إنشاؤه.
-
وظيفة setFeeto: اضبط عنوان قبول رسوم المعاملة.الإدخال هو عنوان قبول رسوم المعاملة الجديد _feeto ، والمخرجات لا شيء.
-
وظيفة setFeetoSetter: تعيين عنوان Setter جديد رسوم المعاملة.الإدخال هو عنوان Setter Setter الجديد لرسوم المعاملة _feetoSetter ، والمخرجات لا شيء.
تحليل التعليمات البرمجية المحددة كما يلي:
وظيفة CreatePair
تتمثل وظيفة CreatePair في إنشاء زوج معاملة مع Tokena و TokenB. TokenB ، تليها التحقق من عنوان Token0 ويتطلب أن يكون عنوان token0 هو 0 ؛
ثم تحقق مما إذا كان هذا الزوج الرمزي موجودًا (GetPair [token0] [token1] العقد
ثم استخدم قيم التجزئة الخاصة بـ Token0 و Token1 كقيمة ملح للتأكد ؛
بعد ذلك ، قم بتهيئة عقد الزوج الرمزي الذي تم إنشاؤه حديثًا ، ثم قم بتحديث جدول التعيين ، وتسجيل عنوان عقد الزوج الرمز المميز ، ثم أضف عنوان عقد الزوج الرمزي الذي تم إنشاؤه حديثًا إلى قائمة جميع أزواج الرمز المميز ، وأخيراً تحفيز الأحداث التي تم إنشاء زوجها لإخطار خارج أزواج رمزية جديدة ليتم إنشاؤها.
4.2.2 uniswapv2 erc20.sol
تتمثل الوظيفة الرئيسية لـ UNISWAPv2erC20.SOL في تنفيذ الرموز ERC-20 ، والتي تنفذ وظيفة الرمز المميز القياسي ERC20 ، وتستخدم خصيصًا في تجمعات السيولة UNISWAPv2.يتضمن العقد العمليات الأساسية مثل الصب والحرق والموافقة والنقل.بالإضافة إلى ذلك ، فإنه يدعم وظيفة الإذن ، مما يتيح استخدام التوقيعات للموافقة على عمليات النقل الرمزية.دعونا نلقي نظرة على الوظائف التي تحتوي عليها واحدة تلو الأخرى:
-
وظيفة المنشئ: تهيئة العقد ، تعيين domain_separator لوظيفة الإذن.إدخال لا شيء ، إخراج لا شيء.
-
_mint وظيفة: النعناع الرموز الجديدة ، الإدخال هو عنوان الاستلام “إلى” ، وكمية النعناع “القيمة” ، الإخراج لا
-
_burn وظيفة: تدمير الرموز ، والمدخلات هي عنوان التدمير من وقيمة الكمية المدمرة ، والإخراج لا شيء.
-
_approve وظيفة: الموافقة على نقل الرمز المميز ، مالك عنوان المالك ، عنوان العنوان المعتمد وقيمة الكمية المعتمدة ، الإخراج لا شيء.
-
_ وظيفة النقل: رمز النقل ، الإدخال هو عنوان النقل من ، تلقي العنوان إلى قيمة الكمية ونقله ، الإخراج لا شيء.
-
الوظيفة الموافقة: وظيفة الموافقة العامة ، الوظيفة هي استدعاء وظيفة _approve ، والمدخلات هي وظيفة الموافقة العامة لوظيفة الموافقة ، والمخرج هو إعادة قيمة منطقية للإشارة إلى أن العملية ناجحة.
-
وظيفة النقل: تتمثل الوظيفة في استدعاء وظيفة _transfer ، والمدخلات هي قبول العنوان وقيمة رقم النقل ، والإخراج هو إرجاع قيمة Boolean True تعني أن العملية ناجحة
-
وظيفة النقل من: وظيفة نقل التفويض المكشوف.المدخلات هي عنوان النقل من وعنوان الاستلام إلى وقيمة كمية النقل ، والإخراج هو قيمة الإرجاع المنطقية يعني أن العملية ناجحة
-
وظيفة التصريح: استخدم التوقيع للموافقة على نقل الرمز المميز ، والتحقق من التوقيع والاتصال بوظيفة _approve. الإخراج لا شيء.
تحليل رمز المصدر الرسمي على النحو التالي:
4.2.3 uniswapv2 pair.sol
UNISWAPv2Pair هو عقد زوج تداول ، يدرك الوظيفة الأساسية لـ UNISWAP V2 ، وهي تدير وتدير مجموعة السيولة لكل زوج تداول.هذا العقد مسؤول عن التعامل مع تبادل الرموز ، وإضافة وإزالة السيولة ، وحساب تراكم الأسعار.إنه يضمن أنه بعد كل معاملة ، يتم تحديث معلومات الاحتياطي والسعر لزوج المعاملات وتحفيز إشعارات الأحداث المقابلة.هناك 11 وظيفة في uniswapv2pair.sol ، والتي تظهر في الجدول التالي:
رمز وتعليقات UNISWAPv2Pair.sol الرسمي هي كما يلي:
uniswapv2pair يرث iuniswapv2pair ، uniswapv2erc20.
ثم يتم تعريف المتغيرات والمعدلات العالمية
الحد الأدنى المذكور أعلاه هو ثابت يحدد الحد الأدنى من الرموز المميزة للسيولة التي يجب الاحتفاظ بها في تجمع السيولة لضمان الاحتفاظ بمقدمي الخدمات على الأقل من الرموز في أي وقت ، وبالتالي تجنب استنفاد السيولة. 10 ، التي يتم حرقها عند توفير السيولة الأولية ؛ يتم استخدام توقيع الوظيفة الصحيح عند تنفيذ عمليات نقل الرمز المميز ؛
يتم استخدام المصنع لتخزين عنوان Uniswap V2 Factory Contract لعقد زوج المعاملات ، Token0 ، Token1 لتخزين عنوان الرمز المميز ، الاحتياطي ، الاحتياطي 1 و blockestamplast ، تسجل متغيرات الحالة الثلاثة عدد الأصول في أحدث ثابتة المنتج وكتلة وقت المعاملة (خلق) وقت ؛
يتم استخدام متغيرات Price0Cumulativelast و Price1Cumulativelast لتسجيل القيم المتراكمة للأسعارين في زوج التداول ، ويتم استخدام Klast لتتبع الحالة الأخيرة لمنتج المحميات الرمزية في زوج التداول UNISWAPv2 ، كمعلمة رئيسية ، كمعلمة رئيسية للحفاظ على استقرار سعر تجمع السيولة وحساب رسوم المعاملات ، يستخدم بشكل رئيسي لحساب رسوم معالجة الفريق.
يوفر القسم التالي من الديكور آلية قفل لمنع هجمات إعادة الدخول.
يمثل _ المتغير غير المقفلة.
تتمثل الوظيفة أدناه في توفير وسيلة للاستعلام علنًا وإرجاع المعلومات على محميات الرمز المميز الحاليين وآخر طابع زمني محدث لعقد زوج UNISWAPv2.
تتمثل وظيفة وظيفة _safetransfer في إجراء عمليات نقل الرمز المميز ضمن العقد الذكي ، والتحقق مما إذا كان النقل ناجحًا هو الرمز التفصيلي لهذا القسم.
يتم استخدام المنشئ التالي ببساطة لتهيئة المصنع:
تتمثل وظيفة وظيفة التهيئة في تعيين عناوين الرموز المميزة المتورطة في عقد زوج المعاملة ، ولا يمكن استدعاؤها إلا من خلال عقد المصنع حيث يتم نشر زوج المعاملة ، مما يضمن أن عملية تهيئة زوج المعاملة آمنة وآمنة تسيطر عليها.
تتمثل الوظيفة الرئيسية لوظيفة _update في التأكد من أن مبلغ الاحتياطي والأسعار للمعاملة إلى العقد يمكن أن يعكس أحدث حالة. واحد.معلمات الإدخال الأربعة لوظيفة _update هي: التوازن والتوازن 1 ، مما يمثل التوازن الحالي للرموز الرمزية في زوج المعاملة ؛بعد ذلك ، سوف نستخدم طريقة نقطة الرصاص لشرح كيفية تنفيذ وظيفة _update:
-
تحقق مما إذا كانت قيمة الرصيد قد تتسبب في تدفق فائض: استخدم بيان المتطلبات للتأكد من أن الرصيد الوارد والتوازن 1 لا يتجاوزان الحد الأقصى لقيمة UINT112 ، لأن الاحتياطي والاحتفاظ باستخدام نوع UINT112 عند التخزين ، وأمان تحويل نوع البيانات مطلوب .
-
سجل وقت الكتلة الحالي: احصل على الطابع الزمني للكتلة الحالية ، وقم بإجراء عملية Modulo 2^32 مع blocktimestamplast للحصول على blocktimestamp.هذه العملية لأن الطابع الزمني للكتلة من Ethereum هو 32 بت ، ونحن نهتم فقط بفارق الوقت داخل الكتلة ، وليس الوقت المطلق.
-
احسب الفرق الزمني: احسب الفرق بين وقت الكتلة الحالي وآخر وقت التحديث.إذا كان TimeLapsed هو 0 ، فهذا يعني أن هذه مكالمة مستمرة داخل نفس الكتلة ، وبالتالي لن يتم تحديث قيمة السعر المتراكمة.
-
تحديث تراكمي للأسعار: إذا كان الفرق الزمني أكبر من 0 ولم يكن الاحتياطي 0 ، فاستخدم مكتبة الرياضيات الثابتة UQ112x112 لحساب نسبة السعر وتحديث Price0Cumulativelast و Price1Cumulativelast.”لا تتدفق أبدًا” هنا يعني أنه نظرًا لأن الوقت الفاصل الزمني الذي يتم الانقطاع منه من النوع UINT32 ، فإن الضرب مع قيمة السعر المتراكمة (UINT224) لن يتسبب في تدفق فائض.”+ فائض المطلوب” يشير إلى القيمة المتراكمة للسعر للسماح بالتدفق ، لأن حساب السعر يستخدم الدلتا بدلاً من القيمة المطلقة.
-
تحديث الاحتياطي: قم بتعيين الرصيد الجديد لـ Resperv0 و Resperve1 لتحديث احتياطي تجمع السيولة.
-
تحديث Timestamp: قم بتعيين Timestamp to to blockestamplast الحالي للتحضير للتحديث التالي.
-
حدث تزامن الزناد: إصدار حدث Sync من خلال الكلمة الرئيسية SEIT لإبلاغ المستمع الخارجي بأن المحمية قد تم تحديثها.
يسمح هذا التصميم UNISWAPv2 بالحفاظ على استمرارية الأسعار ودقتها عند معالجة كميات كبيرة من المعاملات ، ويمكن أن يحسب بدقة متوسط سعر المعاملة من خلال حجم التغيير حتى عندما يكون الطابع الزمني للكتلة أو القيمة المتراكمة للسعر قد تفيض.ويتحقق ذلك من خلال الاستفادة الذكية للرياضيات النقطة الثابتة وفرق الوقت.
في UNISWAPv2 ، سيتم فرض رسوم على المستخدمين بنسبة 0.3 ٪ لكل معاملة.سيتم تخصيص سادس واحد من هذه الرسوم لفريق التطوير ، وسيتم منح الخمسة السادسة المتبقية لمزود السيولة كمكافأة.ومع ذلك ، إذا تم حساب رسوم المناولة مرة واحدة لكل معاملة ، فإن هذا سيزيد حتما من رسوم غاز المستخدم.
لذلك ، في UNISWAPv2 ، سيتم تجميع رسوم المناولة وسيتم تخصيص رسوم المناولة فقط عندما تتغير السيولة.تتحقق وظيفة _mintfee أولاً ما إذا تم تمكين رسوم المعاملة وتحديد عنوان استلام الرسوم.إذا لم يتم تمكين رسوم المعاملة وكان هناك رسوم تعدين (_klast ليست 0) ، أعد ضبط قيمة Klast.هذه الرسوم هي جزء من UNISWAPv2 لتوفير حوافز إضافية لمقدمي السيولة ؛
يمثل Sₘ عدد الرموز المميزة السائلة التي يجب أن تكون متوقعة ، ويمثل K₁ نتاج الاحتياطيات بعد حدث السيولة السابق ، يمثل K₂ المنتج الاحتياطي الحالي K ، يمثل S₁ إجمالي إمداد الرمز المميز السائل بعد كمية حدث السيولة السابقة.
4.3 عقد المحيط
تتمثل الوظيفة الرئيسية لعقود UNISWAPv2 المحيطية في العمل كجسر بين الحسابات الخارجية والعقود الأساسية ، بما في ذلك أربعة أجزاء: تعريف الواجهة ، مكتبة الأدوات ، جهاز التوجيه وتنفيذ العينة.
4.3.1 المكتبات
يحتوي مجلد المكتبات على أربعة ملفات
-
safemath.sol
-
uniswapv2library.sol
-
uniswapv2liquidentmathlibrary.sol
-
uniswapv2oraclelibrary.sol
بعد ذلك ، سنقوم بتحليل ملفات SOL الأربعة هذه بالتفصيل
safemath.sol
يتم استخدام Safemath.sol لأداء العمليات الرياضية الآمنة في التدفق ، والتي من المهم للغاية تجنب أخطاء الفائض الصحيح والتدفق ، وخاصة في تطوير العقد الذكي.أنه يحتوي بشكل أساسي على ثلاث وظائف.
-
إضافة وظيفة: تستخدم لأداء عمليات إضافة بأمان من أعداد صحيحة غير موقعة
-
الوظيفة الفرعية: تستخدم لأداء عمليات الطرح بأمان من أعداد صحيحة غير موقعة
-
وظيفة MUL: تستخدم لإجراء عمليات الضرب بأمان من أعداد صحيحة غير موقعة
تعليقات التعليمات البرمجية المحددة كما يلي
uniswapv2library.sol
يوفر UnisWAPv2Library.sol بعض الوظائف العملية للتفاعل والتشغيل مع أزواج تبادل UNISWAP V2.
تستخدم هذه الوظائف بشكل أساسي لحساب مسارات المعاملات والحصول على احتياطيات وحساب الأسعار وإجراء حسابات السلسلة.تستخدم هذه المكتبة مكتبة تسمى Safemath لضمان أمان العمليات الرياضية وتجنب تدفق عدد صحيح وتدفق.uniswapv2library.sol يحتوي هذا الملف على ثماني وظائف:
-
وظيفة sorttokens: إرجاع اثنين من عناوين رمزية تم فرزها حسب العنوان.الإدخال هو اثنين من عناوين الرمز المميز Tokena و TokenB.الإخراج هو عنوان الرمز المميز المرتبة Token0 و Token1.
-
وظيفة pairfor: يحسب عنوان عنوان المصنع المعطى وزوج عناوين رمزية دون إجراء مكالمات خارجية.المدخلات هي مصنع عناوين المصنع ، ويقوم الرمز المميز بعنوان Tokena و TokenB ؛
-
وظيفة getReserves: الحصول على وفرز زوج من الاحتياطيات.المدخلات هي مصنع عناوين المصنع ، ويعالج الرمز المميز Tokena و TokenB.
-
دالة الاقتباس: إرجاع الكمية المكافئة لأصل آخر بناءً على كمية الأصول المحددة وحفظ الزوج.أدخل: الأصول كمية A ، الاحتياطي و ResperveB.الإخراج هو كمية أصل آخر.
-
وظيفة getAmountout: إرجاع الحد الأقصى لعدد الإخراج من أصل آخر بناءً على عدد أصول الإدخال واحتياطيات الزوج.المدخلات هي عدد أصول الإدخال والاحتياطي والاحتياطي.
-
وظيفة getamountin: إرجاع عدد أصل آخر ليتم إدخاله بناءً على عدد أصول الإخراج واحتياطيات الزوج.المدخلات هي كمية كمية أصول الإخراج ، الاحتياطي و Respervout.
-
وظيفة GetAmountsout: أداء سلسلة GetAmountout على أي عدد من الأزواج ، فإن المدخلات هي مصنع عنوان المصنع ، وعدد الأصول كمية ، ومسار المسار ؛
-
وظيفة GetAmountsin: أداء سلسلة Getamountin على أي عدد من الأزواج ، فإن المدخلات هي مصنع عنوان المصنع ، وعدد إخراج الأصول ، ومسار المسار ؛
التعليقات التفصيلية على رمز مصدر UNISWAPv2Libray هي كما يلي:
uniswapv2oraclelibrary.sol
يوفر ملف UnisWAPv2oracleLileBrary.sol بعض الطرق الإضافية للعمليات المتعلقة بحساب متوسط الأسعار.تتضمن المكتبة طرقًا للحصول على الطابع الزمني الحالي للكتلة وحساب السعر التراكمي ، مما يساعد على توفير تكاليف الغاز وتجنب المكالمات المتزامنة المتكررة.أنه يحتوي على وظيفتين ، على النحو التالي:
-
CurrentBlockEstamp وظيفة: إرجاع الطابع الزمني للكتلة الحالية.الإدخال لا شيء ، والإخراج هو الطابع الزمني للكتلة الحالية ، اكتب uint32.
-
CurrentCumulativePrices وظيفة: يحسب ويعيد السعر المتراكم.المدخلات هو زوج عنوان زوج المعاملة ، والإخراج هو سعر الأسعار التراكمية والأسعار والأسعار الحالية و blockestamp blockestamp الحالي.
إن مدونة المصدر الرسمية لـ UnisWAPv2oraclelelibrary.sol هي كما يلي:
uniswapv2liquidentmathlibrary.sol
مدونة المصدر الرسمية لـ UNISWAPv2LiquideMathlibrary.sol كما يلي
-
ComputeProfitMaximizingTrade وظيفة: يحسب اتجاه المعاملة وحجمها الذي يزيد من الأرباح.
-
وظيفة getReservesAfterArborge: تحت “السعر الحقيقي” المرصود ، يتم الحصول على احتياطيات تجمع السيولة بعد معاملات المراجحة.
-
وظيفة computeliquitionvalue: حساب قيمة السيولة ، جميع المعلمات من تجمع سيولة معين.
-
وظيفة getLiquideValue: تحصل على جميع المعلمات الحالية ويحسب قيمة كمية السيولة.
-
وظيفة getLiquidevalueafterArbitRagetOpric: بالنظر إلى اثنين من الرموز و “سعرها الحقيقي” ، وكذلك مبلغ السيولة ، إرجاع قيمة السيولة.
uniswapv2Router02.sol
دعنا نلقي نظرة أولاً على الكود المصدري لـ UnisWapv2Router02.
المنشئون والمعدلات
-
مُنشئ (العنوان _factory ، العنوان _weth): تهيئة عنوان عقد المصنع وعنوان عقد Weth.
-
ضمان المعدل (الموعد النهائي UINT): تأكد من اكتمال المعاملة قبل الموعد النهائي.
الوظائف التي تتلقى ETH
-
استلام () خارجي مستحق الدفع: يتلقى ETH فقط ، لا يُسمح سوى بالمكالمات من عقود Weth.
أضف السيولة
-
_addliquident: وظيفة داخلية تستخدم لإضافة السيولة ، وحساب العدد الأمثل من الرموز المميزة بناءً على الاحتياطيات الموجودة.
-
AddLiquide: إضافة سيولة من اثنين من الرموز ERC-20.
-
AddLiquideeth: إضافة سيولة الرموز ERC-20 و ETH.
إزالة السيولة
-
الإزالة: يزيل سيولة اثنين من الرموز ERC-20.
-
الإزالة: يزيل سيولة الرموز ERC-20 و ETH.
-
الإزالة: يزيل سيولة رموز ERC-20 مع ترخيص.
-
الإزالة: إزالة الرموز المميزة ERC-20 والسيولة الأخلاقية مع الترخيص.
-
الإزالة readiDithSupportingFeeonTransfertokens: يزيل سيولة الرموز الرموز ERC-20 و ETH ، ويدعم الرموز الرسوم.
-
RemoveliquitionethwithPermitsupportingFeeonTransfertokens: يزيل سيولة الرموز ERC-20 و ETH مع الترخيص ، ودعم الرموز الرسوم.
تبادل الرمز المميز
-
_swap: وظيفة داخلية ، تنفذ منطق تبادل الرمز المميز.
-
swapexacttokensfortokens: استخدم العدد الدقيق من الرموز المميزة لتبادل رمز آخر.
-
Swaptokensforexacttokens: استخدم الرموز لتبادل عدد دقيق من الرموز الأخرى.
-
SubexacteThortokens: استخدم العدد الدقيق من ETH لتبادل الرموز.
-
swaptokensforexacteth: استخدم الرموز لتبادل المبلغ الدقيق من ETH.
-
subexacttokensforeth: تبادل ETH مع العدد الدقيق من الرموز.
-
SwapeThorexActTokens: استخدم ETH لتبادل العدد الدقيق من الرموز.
-
swapexacttokensfortokenssupportingfeeontransfertokens: استخدم العدد الدقيق من الرموز المميزة للتبادل لرمز آخر ، ودعم الرسوم.
-
SubexacteThortokensSupportingFeeonTransfertokens: استخدم العدد الدقيق لرموز Eth Exchange ، ودعم الرموز.
-
swapexacttokensforethsupportingfeeontransfertokens: استخدم العدد الدقيق من الرموز المميزة لتبادل ETH ، ودعم الرموز الرسوم.
وظائف المكتبة
-
اقتباس: حساب عدد الرمز المميز B المقابل لكمية معينة من الرمز المميز A بناءً على كمية الاحتياطي.
-
GetAmountout: يحسب عدد المخرجات التي يمكن الحصول عليها بالنظر إلى عدد المدخلات والاحتياطيات.
-
Getamountin: يحسب عدد المدخلات المطلوبة لكمية إخراج معينة وكمية الاحتياطي.
-
getAmountsout: احسب رقم الإخراج بناءً على المسار ورقم الإدخال.
-
GetAmountsin: احسب عدد المدخلات بناءً على المسار وعدد المخرجات.
دعونا نلقي نظرة على الوظائف واحدة تلو الأخرى.
ينفذ عقد UNISWAPv2Router02 واجهة IUNISWAPv2Router02 ، مما يوفر وظائف المفاتيح التالية:
-
أضف السيولة: يسمح للمستخدمين بإضافة اثنين من الرموز إلى تجمع السيولة في مقابل الرموز المميزة لمزود السيولة.
-
قم بإزالة السيولة: السماح لمقدمي السيولة بتبادل الرموز المميزة لمزود السيولة إلى كلا الرموبين.
-
المعاملات: تتيح للمستخدمين التداول بين الرموز المميزة المختلفة ، ويدعم المعاملات والمسارات المباشرة من خلال أزواج تجارية متعددة.
-
حساب الاقتباس: يوفر سلسلة من الوظائف لحساب تفاصيل المعاملة عند إدخال معين أو حجم الإخراج.
يتم استخدام المعدل الضمان للتحقق مما إذا كان وقت الكتلة الحالي يتجاوز آخر وقت المعاملة ، مما يضمن أن المعاملة المحددة من قبل المستخدم لا تفشل بسبب المهلة ، مما يساعد على تحسين أمان وموثوقية المعاملة.
يقوم المنشئ بتهيئة عنوان عقد المشروع وعنوان عقد Weth ، وكلاهما لم يتغير طوال دورة حياة العقد.
عادةً ما تستخدم وظيفة الاستلام للسماح لعقد لاستلام الأثير مباشرة ، بدلاً من إجراء مكالمة وظيفية.في هذا المثال بالذات ، تستخدم وظيفة الاستلام عبارة Assert لضمان أن عقد Weth فقط يمكنه إرسال الأثير إليه.
الغرض من دالة _addliquide هو حساب العدد الأمثل من الرموز التي يحتاج المستخدم إلى إيداعها عند إضافة السيولة.هناك ستة معلمات لقبول هذه الوظيفة. المستخدم لإضافة كمية لمنع الانزلاق من أن يكون منخفضًا جدًا.
يأخذ هذا الحساب في الاعتبار كمية محميات الرمز المميز بالفعل في تجمع السيولة للتأكد من موازنة السيولة التي يضاف إليها المستخدم.إذا كان تجمع السيولة جديدًا ولم يكن هناك احتياطي موجود ، فيمكن للمستخدمين إضافة المبلغ الذي يريدونه مباشرة.إذا كان هناك احتياطي بالفعل في التجمع ، فستقوم الوظيفة بحساب العدد الأمثل من الإضافات بناءً على النسبة الحالية ، مما يضمن أن نسبة الرموز في التجمع لا تزال دون تغيير بعد إضافة السيولة.
وظيفة AddLiquide العامة لإضافة السيولة إلى مجموعة السيولة من الرموز المحددة (Tokena و TokenB)
تتيح وظيفة AddLiquideeth إضافة الرموز غير المتوفرة إلى مجموعة السيولة UnisWAPV في مقابل الرمز المميز للسيولة المقابلة. من الرموز غير الأثرية التي يريد المستخدم إضافتها ، فإن MaterTokenMin هو الحد الأدنى لعدد الرموز غير المميزة التي يمكن للمستخدم قبولها ، وتستخدم لمنع الانزلاق من أن تكون منخفضة للغاية ، وكمية الكمية هي الحد الأدنى لعدد الرموز الأثير ، وهو أيضًا اعتاد لمنع الانزلاق من أن يكون منخفضًا جدًا ، إلى عنوان استلام رموز السيولة التي تم ترقيتها حديثًا ، الموعد النهائي هو الموعد النهائي للمعاملة ، المستخدمة لمنع مهلة المعاملات.
تُرجع الوظيفة ثلاث معلمات: كمية كمية وكمية هي كمية العملات غير الأثير والأثير التي تتم إضافتها فعليًا إلى تجمع السيولة ، والسيولة هي عدد رموز السيولة التي تم تكثيفها حديثًا.
تتيح وظيفة الإزالة للمستخدمين إزالة السيولة التي تمت إضافتها مسبقًا من تجمع السيولة والحصول على رموزتين متناسبا.وظيفة Burn هي وظيفة أساسية في عقد تجمع السيولة IunisWAPv2Pair ، وتستخدم لأداء تدمير السيولة الفعلي وعمليات تخصيص الرمز المميز.
تتيح وظيفة الإزالة للمستخدمين إزالة السيولة التي تمت إضافتها مسبقًا مع الأثير من تجمع سيولة UNISWAPv2 والحصول على غير الأثير والأثير المقابل.تستدعي الوظيفة أولاً الإزالة ، ثم تستخرج الرمز المقابل من خلال SafetRansfer ، ثم يستبدل Weth المستخرجة من سيولة الاحتراق مع ETH ، ثم ينقل ETH المسترد إلى المستلم.
تتيح وظيفة الإزالة WithPermit للمستخدمين من خلال توقيع ECDSA ، مما يسمح للعقود بإزالة السيولة نيابة عن المستخدمين دون إذن من المستخدم السابق عبر وظيفة الموافقة.
تجمع وظيفة الإزالة وثيقة الإزالة بين آليات ترخيص الإزالة والتصريح ، مما يسمح للمستخدمين بإزالة السيولة عن طريق توقيع عقد ترخيص لمرة واحدة دون الحاجة إلى استخدام وضع الموافقة القياسي.يوفر هذا تجربة أفضل للمستخدم والأمان مع تقليل تكاليف الغاز للمعاملات.
تتيح وظيفة الإزالة readiditideThSupportingFeeonTransfertokens للمستخدمين إزالة السيولة التي تمت إضافتها مسبقًا مع الرموز الرموز والأثير من مجموعة سيولة UnisWAPv2 ، مع مراعاة أن بعض الرموز قد تتقاضى رسومًا عند النقل.
تستدعي الوظيفة أولاً إزالة السيولة لأداء إزالة السيولة ، ثم تعالج النقل الرمزي ، مما يضمن حصول المستخدم على عدد الرموز التي يستحقها ، وأخيراً يحول Weth إلى الأثير والتحويل إلى المستخدم.يجب إكمال العملية بأكملها قبل الموعد النهائي للمعاملة المحدد من قبل المستخدم.
تجمع دالة الإزالة الإزاحة extriableThsupportingFeeonTransfertokens وآليات التصريح ، مما يسمح للمستخدمين بإزالة العقد لمرة واحدة.
يوفر هذا النهج طريقة لتخويل العقود لتشغيل أصول المستخدم دون استخدام وضع الموافقة ، وتقليل تكاليف الغاز وتحسين تجربة المستخدم.
وظيفة _swap هي وظيفة داخلية تؤدي سلسلة من عمليات التبادل الرمزي.يتبادل من رمز واحد إلى آخر وفقا للمسار والكمية المحددة حتى يتم الوصول إلى الرمز المميز النهائي.هذه الوظيفة هي الجزء الأساسي من تفاعل تجمع السيولة ، وتستخدم لتنفيذ تحديثات تحويل الرمز المميز والسيولة.
تعد وظيفة SwapexactTokensfortokens ميزة رئيسية لجهاز التوجيه UnisWAPv2 الذي يسمح للمستخدمين بتبادل رمز الإخراج على الأقل واحد على الأقل مع مبلغ إدخال دقيق.تقوم هذه الوظيفة أولاً بحساب إخراج مسار التبادل بأكمله ، ثم يضمن أن الناتج النهائي يلبي الحد الأدنى من المتطلبات للمستخدم ، ثم ينقل الرموز بأمان من المستخدم إلى تجمع السيولة ويؤدي عملية التبادل.
تتيح وظيفة swaptokensforexacttokens للمستخدمين تحديد عدد الرموز التي يرغبون في الحصول عليها وتوفر الرموز التي لا تتجاوز القيمة القصوى للتبادل.تقوم هذه الوظيفة أولاً بحساب الحد الأقصى للمدخلات المطلوبة للحصول على المبلغ ، ثم يضمن أن هذا الإدخال لا يتجاوز المبلغ المحدد من قبل المستخدم.
تتيح وظيفة SubexacteThortokens للمستخدم تبادل عدد معين من الرموز الأخرى على الأقل مع مبلغ دقيق من ETH.تتحقق هذه الوظيفة أولاً مما إذا كان مسار التبادل صالحًا ، ثم يحسب العدد المطلوب من Weth ، ويحفظ ETH في عقد Weth ، ثم يؤدي عملية التبادل ، ويرسل الرموز المتبادلة إلى العنوان المحدد من قبل المستخدم.يجب إكمال العملية بأكملها قبل الموعد النهائي للمعاملة المحدد من قبل المستخدم.
تتمثل وظيفة وظيفة SubexacteThortokens في بيع عدد محدد من ETH في مقابل الرموز الأخرى.أولاً ، قم بإجراء فحص مسار فعال للتأكد من أن العنصر الأول من صفيف المسار هو عنوان Weth ، لأن زوج معاملة UNISWAP هو زوج معاملة ERC20/ERC20 ؛
التالي هو حساب مبلغ الإخراج ، واستخدام وظيفة uniswApv2library.getAmountsout لحساب عدد كل رمز يمكن للمستخدم الحصول عليه بناءً مجموعة الكميات التالية هي القيام بالحد الأدنى من التحقق من الإخراج ، والوظيفة تتحقق مما إذا كان العنصر الأخير في صفيف المبالغ (أي عدد الرموز المستهدفة) يفي بالحد الأدنى من كمية الإخراج التي تم تحديدها من قِبل المستخدم.
إذا لم يكن الأمر راضياً ، فسيتم إلقاء خطأ ؛ إلى عنوان عقد زوج المعاملة المحدد Weth ، إذا فشل ، فسوف يتم ترحيل المعاملة ، وأخيراً يتم استدعاء الوظيفة الداخلية _swap لتنفيذ عملية تبادل الرمز المميز الفعلي.
Swaptokensforexacteth هي عملية بيع الرموز الأخرى مقابل مبلغ معين من ETH. ، العنوان الذي يتم استلام ETH ، وموعد نهائي للمعاملات ؛
أولاً ، يتم فحص فحص صحة المسار للتأكد من أن العنصر الأخير من مسار التبادل هو عنوان Weth ، وإذا لم يكن الأمر كذلك ، يتم إلقاء استثناء ؛ يحتاج المستخدم إلى توفير عدد من العملات المعدنية في ETH ؛ وظيفة safetransferfrom من transferHelper لنقل الرموز بأمان من عنوان msg.sender ؛
بعد ذلك ، استدعاء الدالة الداخلية لتنفيذ عملية التبادل الرمزية الفعلية ؛ مستخدم. .
يتم استخدام وظيفة وظيفة subexacttokensforeth لتبادل عدد المبلغ على الأقل من ETH مع عدد ثابت من الرموز. للحصول على المبلغ ، مسار التبادل المميز ، والعنوان الذي يتم استلامه له ، والموعد النهائي للمعاملة هو الموعد النهائي ؛
تتيح وظيفة SwapeThorexActTokens للمستخدمين تبادل عدد ثابت من الرموز باستخدام ETH ، ويشبه منطق التنفيذ مع swapexacttokensforeth ، swaptokensforexacteth.
تدعم وظيفة _swapsupportingfeeontransfertokens منطق تبادل الرمز المميز لرسوم المعاملات.
يتم تبادل عدد المميزات الثابتة من الرموز الثابتة من SwapexacttokensfortokenssupportingFeeonTransfertokens ، مع التعامل مع رموز رسوم المعاملات على الأقل.
تبادل SubexacteThortokensSupportingFeeonTransfertokens ينفذ استخدام عدد معين من ETH لتبادل الرموز الأخرى
تتيح وظيفة subexacttokensforethsupportingfeeontransfertokens أن يمكّن المستخدم بدقة على الأقل من المبلغ المتوقع من ETH مع عدد ثابت من الرموز المميزة ، مع التعامل مع رموز رسوم المعاملة ، وضمان نقل دقيق لـ ETH.
تنفذ دالة الاقتباس وظيفة حساب وإعادة عدد الرموز المميزة الأخرى التي يمكن للمستخدم تبادلها بناءً على عدد الرموز المحددة من قبل المستخدم وحفظ رموبين في تجمع السيولة.
تعد مبادئ حساب وظيفة getAmountout ودالة getAmountsout خوارزميات منتجات ثابتة.تحديد وظيفة getAmountout لحساب مبلغ الإخراج الذي يمكن للمستخدم الحصول عليه بعد مبلغ إدخال معين ومبلغ الاحتياطي ؛
يتمثل مبدأ الحساب في Getamountin و GetAmountsin في حساب عدد الأصول المباعة بناءً على خوارزمية المنتج الثابتة.
4.3.2 UNISWAPV2 Migrator.sol
uniswapv2migrator.sol يستخدم لترحيل السيولة من uniswap v1 إلى uniswap v2.يتضمن هذا العقد القدرة على تلقي ETH ويستخدم أجهزة التوجيه UNISWAP V1 و V2 وعقود التبادل للهجرة.إنه يضمن أنه يمكن للمستخدمين نقل سيولةهم بأمان في Uniswap V1 إلى UnisWAP V2.هناك ثلاث وظائف ، والوظائف المحددة لكل وظيفة هي كما يلي:
-
وظيفة المنشئ: وظيفة مُنشئ ، تستخدم لتهيئة عقد UnisWAPv2Migrator.الإدخال هو عنوان مصنع V1 _factoryv1 و V2 عنوان _Router ؛
-
استلام وظيفة: يتلقى ETH ، مما يسمح للعقد بتلقي ETH من أي مفتاح V1 وموجه.إدخال لا شيء ، إخراج لا شيء.
-
وظيفة الترحيل: الرمز المميز لعنوان الرمز المميز ، الحد الأدنى لمجموعة الرمز المميز ، الحد الأدنى لمقدار كمية ETH ، عنوان الاستقبال ، الموعد النهائي ؛
يتم تحليل مدونة المصدر الرسمية لـ UNISWAPv2Migrator بالتفصيل على النحو التالي:
4.3.3 واجهات المجلد
يحتوي مجلد الواجهات على تعريفات واجهة للتفاعل مع تبادل UNISWAPv1 و V2 ، وأجهزة التوجيه ، والمصانع ، وعقود Weth و ERC20.تشمل الميزات الرئيسية إدارة السيولة والترحيل ، ومعالجة التداول الرمزي ، وإضافة وإزالة السيولة ، والتعبئة والتغليف وتفريغ ETH.هذه الواجهات تضمن تفاعلات موحدة بين العقود.دعونا نلقي نظرة على محتويات كل ملف بالتفصيل.
iuniswapv1exchange.sol
يحدد هذا الملف واجهة iuniswapv1exchange ، والتي تستخدم للتفاعل مع عقود تبادل UNISWAPv1.عقد التبادل مسؤول بشكل أساسي عن التعامل مع المعاملات وإدارة السيولة بين الرموز و ETH.أنه يحتوي على الوظائف الأربع التالية:
-
وظيفة التوازن: إرجاع رصيد العنوان في عقد التبادل.
-
وظيفة النقل من: نقل الرموز من عنوان إلى آخر.
-
وظيفة tokentoethswapinput: تستخدم لتبادل الرموز في الأثير.
-
وظيفة ethtotokenswapinput: تبادل الأثير في الرموز.
iuniswapv1factory.sol
iuniswapv1factory.sol يتم استخدامه للتفاعل مع عقود المصنع لـ UNISWAPV1.تحليل التعليمات البرمجية المحددة كما يلي:
IERC20.SOL
يحدد IERC20.SOL واجهة تسمى IERC20 ، والتي تتبع معيار رمز Ethereum (ERC-20)
iuniswapv2migrator.sol
يتم استخدام IunisWapv2Migrator.sol للتفاعل مع عقد الترحيل في Uniswap V2.
iuniswapv2router01.sol
توفر واجهة IunisWAPv2Router01 مجموعة متنوعة من الوظائف ، بما في ذلك إضافة السيولة وإزالتها ، وتبادل الرمز المميز ، وما إلى ذلك.من خلال هذه الواجهة ، يمكن للمستخدمين التفاعل بسهولة مع بروتوكول UNISWAPv2.
iuniswapv2router02.sol
تضيف الطريقة في IunisWAPv2Router02.Sol واجهة الدعم بشكل أساسي لرسوم النقل ، والتي تتيح لمقدمي السيولة أو حاملي الرمز المميز تلقي جزء من الرسوم في المقابل عند نقل الرموز.عادةً ما يستدعي تنفيذ هذه الأساليب عقد الرمز المميز المقابل في الأسفل لإدراك الرسوم المفروضة أثناء التحويل.
iweth.sol
يعرّف Iweth.sol واجهة تسمى IWETH ، والتي تمثل واجهة قياسية على Ethereum للتفاعل مع عقود الأثير (Weth) ملفوفة.
<-style-type>