پرش به مطلب اصلی

مدیریت وثیقه

قرارداد GemJoin وظیفه مدیریت وثیقه را برعهده دارد. هنگامی که یک کاربر رمزارزی را وثیقه می کند، این وثیقه در این قرارداد قفل و هنگام تسویه بدهی وام، برای آن کاربر آزاد می شود. برای این منظور دو تابع کلیدی join و exit در آن طراحی شده است که در آن به ترتیب وظیفه قفل نمودن وثیقه و آزادسازی آن برای کاربر را دارند. این قرارداد در فایل join.sol پیاده سازی شده است.

جزئیات فنی

مقدمه

در این قرارداد از دو رابط کاربری صندوق Vat وثیقه و Gem استفاده می شود. این قرارداد دارای 4 تابع عمومی join، exit، cage و constructor آن است. مانند همه قراردادها، سازنده این قرارداد هنگام مقداردهی اولیه قرارداد استفاده می‌شود و متغیرهای اصلی آن را تنظیم می‌کند. همانطور که از نامشان مشخص است، توابع join و exit برای اضافه (قفل) کردن و آزادسازی وثیقه استفاده می‌شوند.

مکانیسم‌ها و مفاهیم کلیدی

متغیرهای کلیدی

متغیرنوع دادهتوضیح
vatVatیک ردیف در ترازنامه مالی سیستم
ilkbytes32یک شناسه برای مشخص شدن طرح آن صندوق
gemGemتوکن وثیقه
zaraddressآدرس توکن زر
oneuint256مقدار عددی ثابت 27^10
liveuint256مقدار عددی 0 یا 1 به عنوان یک پرچم برای کنترل دسترسی ها در قرارداد
decuint256رقم اعشار توکن وثیقه

توابع اصلی و عملکرد

تابع ()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