همانطور که در نمای کلی پروتکل یاد گرفتیم ، هر جفت در Uniswap در واقع توسط استخر نقدینگی زیربنایی می شود. استخرهای نقدینگی قراردادهای هوشمندانه ای هستند که تعادل دو نشانه منحصر به فرد را در خود جای داده و قوانین مربوط به واریز و برداشت آنها را اجرا می کنند. قانون اصلی فرمول محصول ثابت است. هنگامی که یک نشانه خارج می شود (خریداری می شود) ، برای حفظ ثابت باید مبلغ متناسب واریز شود (فروخته شود). نسبت نشانه های موجود در استخر ، در ترکیب با فرمول محصول ثابت ، در نهایت قیمتی را که مبادله در آن انجام می شود ، تعیین می کند.
چگونه UNISWAP قیمت ها را کنترل می کند
در UNISWAP V1 ، معاملات همیشه با قیمت "بهترین ممکن" اجرا می شوند ، که در زمان اجرا محاسبه می شود. تا حدودی گیج کننده ، این محاسبه در واقع با یکی از دو فرمول مختلف انجام می شود ، بسته به اینکه تجارت یک مقدار ورودی یا خروجی دقیق را مشخص می کند. از نظر عملکردی ، تفاوت بین این دو عملکرد کوچک است ، اما وجود یک تفاوت باعث افزایش پیچیدگی مفهومی می شود. تلاش های اولیه برای پشتیبانی از هر دو کارکرد در V2 به طور نامحسوس اثبات شد و تصمیم گرفته شد که هیچ کارکرد قیمت گذاری در هسته را ارائه ندهد. درعوض ، جفت ها مستقیماً بررسی می کنند که آیا این ثابت پس از هر تجارت رضایت داشته است (حسابداری برای هزینه ها). این بدان معناست که به جای تکیه بر یک عملکرد قیمت گذاری برای اجرای جفت های ثابت ، V2 به سادگی و شفاف ، امنیت خود را تضمین می کنند ، یک جدایی خوب از نگرانی ها. یکی از مزایای پایین دست این است که جفت های V2 به طور طبیعی از سایر طعم های تجاری که ممکن است ظهور کنند ، پشتیبانی می کنند (به عنوان مثال معاملات با قیمت خاص در زمان اجرای). در سطح بالایی ، در Uniswap V2 ، معاملات باید در حاشیه قیمت گذاری شود. خبر خوب این است که این کتابخانه عملکردهای مختلفی را ارائه می دهد که برای این کار بسیار ساده است و تمام عملکردهای مبادله ای در روتر با توجه به این موضوع طراحی شده اند.
معاملات قیمت گذاری
هنگام تعویض نشانه ها در UniSwap ، معمول است که بخواهیم تا حد امکان برای مقدار ورودی دقیق ، هرچه بیشتر از نشانه های خروجی دریافت کنید ، یا به اندازه ممکن برای یک مقدار خروجی دقیق به اندازه چند نشانه ورودی بپردازید. برای محاسبه این مبالغ ، یک قرارداد باید ذخایر فعلی یک جفت را جستجو کند تا بفهمد قیمت فعلی چیست. با این حال ، انجام این جستجو و اعتماد به نتایج بدون دسترسی به قیمت خارجی بی خطر نیست. بگویید یک قرارداد هوشمند ساده لوحانه می خواهد 10 DAI را به جفت DAI/WETH ارسال کند و با توجه به نسبت ذخیره فعلی ، به همان اندازه WETH دریافت کند. اگر در صورت فراخوانی ، قرارداد هوشمند ساده لوح به سادگی قیمت فعلی را به دنبال داشته باشد و تجارت را اجرا کند ، در برابر جلو آسیب پذیر است و احتمالاً متحمل ضرر اقتصادی خواهد شد. برای دیدن چرا ، یک بازیگر مخرب را در نظر بگیرید که این معامله را قبل از تأیید می بیند. آنها می توانند مبادله ای را انجام دهند که بلافاصله قبل از اتمام مبادله ساده لوح ، قیمت DAI/WETH را به طرز چشمگیری تغییر می دهد ، صبر کنید تا مبادله ساده لوحانه با سرعت بد اجرا شود و سپس مبادله ای را تغییر دهد تا قیمت را به آنچه قبل از مبادله ساده لوح بود تغییر دهد. این حمله نسبتاً ارزان و کم خطر است و به طور معمول می تواند برای سود انجام شود. برای جلوگیری از این نوع حملات ، ارسال مبادله ای که به دانش در مورد قیمت "عادلانه" که مبادله آنها باید در آن انجام شود ، بسیار مهم است. به عبارت دیگر ، مبادله ها نیاز به دسترسی به یک اوراکل دارند ، تا مطمئن شوید که بهترین اعدام که می توانند از UniSwap دریافت کنند به اندازه کافی نزدیک به آنچه اوراکل قیمت "واقعی" می داند نزدیک است. در حالی که این ممکن است پیچیده به نظر برسد ، اوراکل می تواند به سادگی مشاهده خارج از زنجیره قیمت فعلی بازار یک جفت باشد. به دلیل داوری ، به طور معمول این مورد است که نسبت ذخایر داخل بلوک یک جفت نزدیک به قیمت بازار "واقعی" است. بنابراین ، اگر کاربر با این دانش در ذهن خود تجارت کند ، می تواند اطمینان حاصل کند که ضررهای ناشی از جلو به شدت محدود شده است. به این ترتیب ، به عنوان مثال ، جبهه Uniswap از امنیت تجارت اطمینان می دهد. این مبلغ ورودی/خروجی بهینه را با توجه به قیمت های مشاهده شده در داخل بلوک محاسبه می کند و از روتر برای انجام مبادله استفاده می کند ، که تضمین می کند مبادله با سرعت انجام می شود نه کمتر از x ٪ بدتر از نرخ مشاهده شده داخل بلوک ، جایی که x است. تحمل لغزش مشخص شده توسط کاربر (0. 5 ٪ به طور پیش فرض). البته گزینه های دیگری برای اوراکل ها ، از جمله اوراکل های بومی V2 وجود دارد.
ورودی دقیق
اگر می خواهید در ازای هرچه بیشتر نشانه های خروجی ، مقدار دقیقی از نشانه های ورودی ارسال کنید ، می خواهید از GetAmountSout استفاده کنید. عملکرد SDK معادل GetOutputAmount یا MinimumAmountout برای محاسبات لغزش است.
خروجی دقیق
اگر می خواهید مقدار دقیقی از نشانه های خروجی را برای تعداد کمی از نشانه های ورودی دریافت کنید ، می خواهید از GetAmountSin استفاده کنید. عملکرد SDK معادل GetInputAmount یا حداکثر برای محاسبات لغزش است.
پرسش و پاسخ بورس...
ما را در سایت پرسش و پاسخ بورس دنبال می کنید
برچسب :
نویسنده : ماندانا اصلانی
بازدید : <-PostHit->
تاريخ : پنجشنبه
19 مرداد
1402 ساعت: 15:05