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

قرارداد توکن سپرده

مقدمه

توکن‌ سپرده zToken پس از واریز و برداشت، ضرب و یا سوزانده می‌شوند. ارزش آن با نسبت 1:1 به ارزش دارایی سپرده شده‌ی مربوطه برابر می شود و می توان آن را با خیال راحت ذخیره، انتقال یا معامله کرد. تمام سود جمع آوری شده توسط ذخایر zToken بین دارندگان این توکن و مستقیم با افزایش موجودی کیف پول آنها توزیع می شود.

عملکردهای کلیدی

این توکن‌ بر اساس EIP2612 نوشته شده است و در آن تمام توابع کلیدی استاندارد ERC20 شامل balanceOf، transfer transferFrom، approve و totalSupply پیاده سازی شده است. طبق پروپوزال EIP2612 ، علاوه بر این توابع، تابع‌های زیر نیز به این پیاده‌سازی اضافه شده‌اند:

  • permit: به کاربر اجازه می دهد تا به یک حساب (یا قرارداد) دیگر اجازه دهد از وجوه خود با استفاده از یک پیام امضا شده استفاده کند. این کار تراکنش های بدون کارمزد و تراکنش های تایید/انتقال تکی را فراهم می کند.
  • nonces: مقدار نانس معتبر بعدی را برای ارسال در هنگام فراخوانی permit را برمی گرداند.

سایر توابع کلیدی این قرارداد به صورت زیر می‌باشد:

  • UNDERLYING_ASSET_ADDRESS: دارایی وثیقه شده تحت توکن سپرده را نشان می‌دهد.
  • RESERVE_TREASURY_ADDRESS: آدرس مخزن ذخیره توکن سپرده را می‌دهد.
  • POOL: آدرس قرارداد استخر نظیر توکن سپرده را می‌دهد.
  • scaledBalanceOf: مقدار موجودی مقیاس شده را به صورت داده uint256 میدهد.
  • getScaledUserBalanceAndSupply: موجودی مقیاس شده کاربر و کل عرضه اصلی را برمی‌گرداند.
  • ‍‍‍‍scaledTotalSupply: کل عرضه مقیاس شده توکن سپرده را به عنوان ‍uint256 برمی گرداند.

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

موجودی مقیاس شده، مانده دارایی وثیقه کاربر (مبلغ سپرده شده) بر شاخص نقدینگی جاری در لحظه است که به‌روز‌رسانی شده است. در واقع این عدد زمانی را نشان می‌دهد که کاربر در مخزن ذخیره سپرده گذاشته است، و می‌توان از آن برای محاسبه موجودی ترکیبی فعلی توکن zToken کاربران استفاده شود. یک مثال برای آن به صورت زیر است:

  • کاربر اول 1000 زر با شاخص نقدینگی 1.1 سپرده گذاری می کند
  • کاربر دوم مبلغ دیگری را به همان استخر واریز می کند
  • شاخص نقدینگی را اکنون 1.2 در نظر می‌گیریم.
  • بنابراین برای محاسبه موجودی توکن مرکب فعلی کاربر اول، عملیات معکوس باید به صورت زیر انجام شود:

zTokenBalance = scaledBalance * currentLiquidityIndex