مدیریت وثیقه
قرارداد
GemJoin
وظیفه مدیریت وثیقه را برعهده دارد. هنگامی که یک کاربر رمزارزی را وثیقه می کند، این وثیقه در این قرارداد قفل و هنگام تسویه بدهی وام، برای آن کاربر آزاد می شود. برای این منظور دو تابع کلیدی
join
و
exit
در آن طراحی شده است که در آن به ترتیب وظیفه قفل نمودن وثیقه و آزادسازی آن برای کاربر را دارند. این قرارداد در فایل
join.sol
پیاده سازی شده است.
جزئیات فنی
مقدمه
در این قرارداد از دو رابط کاربری صندوق
Vat
وثیقه و
Gem
استفاده می شود.
این قرارداد
دارای 4 تابع عمومی
join
، exit
، cage
و
constructor
آن است. مانند همه قراردادها، سازنده این قرارداد هنگام مقداردهی اولیه قرارداد استفاده میشود و متغیرهای اصلی آن را تنظیم میکند. همانطور که از نامشان مشخص است، توابع
join
و exit
برای اضافه (قفل) کردن و آزادسازی وثیقه استفاده میشوند.
مکانیسمها و مفاهیم کلیدی
متغیرهای کلیدی
متغیر | نوع داده | توضیح |
---|---|---|
vat | Vat | یک ردیف در ترازنامه مالی سیستم |
ilk | bytes32 | یک شناسه برای مشخص شدن طرح آن صندوق |
gem | Gem | توکن وثیقه |
zar | address | آدرس توکن زر |
one | uint256 | مقدار عددی ثابت 27^10 |
live | uint256 | مقدار عددی 0 یا 1 به عنوان یک پرچم برای کنترل دسترسی ها در قرارداد |
dec | uint256 | رقم اعشار توکن وثیقه |
توابع اصلی و عملکرد
تابع ()join
- ورودیها: آدرس کاربر usr و مقدار wad از نوع uint256
- عملکرد: این تابع از نوع
external
است. ابتدا دو شرط مجاز بودن دسترسی برای کاربر usr و مثبت بودن مقدارwad
را بررسی می کند و در صورت برقرار نبودن این شروط به ترتیب خطاهای "دسترسی مجاز نیست" و "مقدارwad
بیشتر از حد مجاز است" را صادر می کند. سپس با فراخوانی تابعslip
از قرارداد صندوق، مقدارwad
از وثیقه را به این قرارداد منتقل می کند. در صورت بروز هرگونه خطای انتقال، یک پیام خطا مبنی بر اینکه انتقال انجام نشده است صادر می کند. در نهایت لاگ قفل شدن وثیقه را ثبت می کند.
تابع ()exit
- ورودیها: آدرس کاربر usr و مقدار wad از نوع uint256
- عملکرد: این تابع نیز از نوع
external
است. ابتدا مجاز بودن مقدارwad
را بررسی می کند و در صورت مجاز نبودن، خطای مرتبط را صادر می کند. سپس با فراخوانی تابعslip
از قرارداد صندوق، مقدارwad
را از صندوق به کاربرusr
منتقل می کند. در صورت بروز هرگونه خطا، ئیامی مبنی بر انجام نشدن این انتقال صادر می کند و در صورت انجام موفقیت آمیز آن مقدار وثیقه لاگ آزادسازی وثیقه و انتقال آن به کاربر ثبت می شود.
ریسکها و خطاهای احتمالی
خطاهای کاربران
❌ دقت داشته باشید کاربران هیچوقت نباید توکنها را به صورت مستقیم به قراردادها انتقال دهند. ارسال مستقیم توکن به قرارداد منجر به از دست رفتن دارایی می شود و قادر به بازیابی توکنهای خود نخواهند بود.
✅ سناریوی صحیح: کاربران باید از توابع مناسب مدیریت وثیقه و وام استفاده کنند .
ریسکهای خارجی
❌ حملات فیشینگ با قراردادهای مخرب:
مسئله اصلی که باید به آن دقت شود، حمله فیشینگ اصلاح شده1 است. با پیشرفت سیستم و احتمالاً ایجاد قراردادهای بیشتر در مدیریت وثیقه و وام
یا ایجاد رابطهای کاربری بیشتر، احتمال اینکه کاربر توکنهای خود را از طریق یک قرارداد
نامعتبر که توکنها را به
vat
ارسال نمیکند، بلکه آنها را به یک قرارداد یا کیف پول دیگر ارسال میکند، وجود دارد.
✅ سناریوی صحیح: اصول مراقبت از دارایی خود در مقابل حملات فیشینگ را همیشه رعایت کنید
منابع و پیوستها
1 Well-executed Phishing Attack