امشب یکی از بچه های سیمرغ درباره یونی سوآپ پرسید و منم درباره کانترکت هاش بهش یه توضح هات کلی دادم و گفتم اینجا هم به اشتراک بزارم شاید بعدا به درد کس دیگه هم خورد
همونطور که میدونی یونی سوآپ دوتا ریپو داره پروژه اش
- uniswap-v2-core
- uniswap-v2-periphery
توی uniswap-v2-periphery قراردا دهوشمند روتر (Router) قرار داره. روتر همون چیزی هستش که فرانت اند درخواست هاش رو بهش میفرسه
توی uniswap-v2-core سه تا کانترکت قرارداره
- UniswapV2Factory
- UniswapV2Pair
- UniswapV2ERC20
که فقط فکتوری روی شبکه دیپلوی میشه و با توجه به فانکشن هایی که ازش صدا زده میشه به دفعات UniswapV2Pair رو دیپلوی میکنه رو شبکه (اینستنس های متفاوت از این کانترکت رو دیپلوی میکنه برای توکن های متفاوت)
UniswapV2Pair هم از UniswapV2ERC20 ارث بری کرده و این کانترکت هم مستقیما روی شبکه دیپلوی نمیشه
فرض کنیم من میخوام برای دوتا توکن فرضی HMD و MSM استخر نقدینگی درست کنم تا بقیه بتونن این دوتا توکن رو با هم معامله کنن به طور مستقیم و با استفاده از یونی سوآپ
من میام درخواستم رو به کانترکت روتر میفرستم و فانکشن addLiquidity رو ازش صدا میزنم و ادامه ماجرا
کانترکت روتر میاد اول یه درخواست میزنه به کانترکت Factory و ازش میپرسه داداش آیا تا الان کانترکتی برای این دوتا pair دیپلوی کردی رو شبکه یا نه ؟
اگه کرده بود که میگه ایول دمت گرم، آدرسش چیه
وقتی آدرس رو گرفت میدونه این یه نمونه (اینستنس)از کانترکت UniswapV2Pair هستش و تابع های اون رو داره
میاد توکن ها رو بهش منتقل میکنه و بعدش هم توکن های LP رو برای ما مینت میکنه (یه تقاضا به همون کانترکت pair مورد نظر میفرسته که توکن های ما رو مینت کنه)
اگه نداشت هم اول میاد میگه خب حاجی دمت گرم حالا که وجود نداره بیا این استخر رو برای ما بساز یعنی یه کانترکت pair برای این دوتا توکن روی شبکه دیپلوی کن(به کانترکت فکتوری میگه)
و بعدش میاد توکن ها رو بهش منتقل میکنه و بعدش هم توکن های lp رو برای ما مینت میکنه (یه تقاضا به همون کانترکت پیر مورد نظر میفرسته که توکن های ما رو مینت کنه)
این رابطه کانترکت های مختلف توی یونی سواپ با هم بود توی روند ساخت استخر و اضافه کردن نقدینگی
همین کار رو برای سواپ هم میشه انجام داد
یه ابزار وجود داره روی vscode که توی ارائه شایان چند ماه پیش باهاش آشنا شدم
لینک ارائه شایان(درباره امنیت در قرارداد های هوشمند هستش) :
همینجا از شایان هم بابت ارائه خوبش تشکر کنم و هم بابت ابزار خوبی که تیمشون توسعه دادن
لینک ابزار:
خیلی خوبه برای دنبال کردن این روند ها و تو خوندن کد پروژه ها باعث میشه آدم سریع تر باشه. خیلی قابلیت داره
وقتی که روی vscode نصبش کردی بالای فایل های سالیدیتی همچین نواری اضافه میشه (دوتا ستون اولش نمیاد اون برای یه اکستنشن دیگه اس که من نصب کردم)
روی گراف کلیک کنی
همچین گرافی بهت نمایش میده که خداااااااااااااست
آدم میتونه ببینه کدوم فانکشن داره چی رو صدا میزنه و ذهن رو کلا راحت میکنه و باعث میشه آدم کمتر تو کد گم بشه (التبه کد بیس پروژه های دنیا سالیدیتی عموما زیاد گنده نیستن و آدم کم توش گم میشه)
سوال :
یک مشکلی هم خوردم بگم.نمیدونم به خاطر ورژن هاست یا چیز دیگر
مثلا قرارداد usdt مثل اون چیزی که خونده بودیم یه کانترکت درست کرده و توابع ERCbasic رو یکبار تعریف کرده بعد جای دیگ دوباره نوشته و استفاده کرده.
ولی چیزی مثل یونی سواپ یه همچین کاری رو نکرده اصلا که من حدس زدم شاید به خاطر ورژن سالیدیتی هست چون دلیلی براش پیدا نکردم
جواب:
یونی سوآپ اگه کدش رو نگاه کرده باشی تو دایرکتوی کانترکت یه دایرکتوری اینترفیس داره و این ها رو اونجا تعریف کرده و بعد ایمپورتش کرده توی کانترکت (وقتی کانترکت کامپایل میشه و تبدیل میشه به بایت کد فرقی نداره که چیز هایی که ما نوشتیم تو یه فایل هستش یا تو چند تا فایل نتیجه کار (یا همون بهتره بگم فانکشنالیتی نهایی ) یکی هستش