در سیستم مالی سنتی (TradFi)، بانک های مرکزی نرخ های بهره را تعیین می کنند و عوامل بازار روی این نرخ ها تاثیر می گذارند. اما در دیفای (DeFi)، الگوریتم ها این نرخ ها را بر اساس میزان تقاضای وام و مقدار سرمایه تامین شده توسط وام دهندگان محاسبه می کنند. یکی از مهم ترین نمونه های این رویکرد، مدل نرخ بهره AAVE V3 و Compound V2 است که به طور کاملاً الگوریتمی و بر پایه عرضه و تقاضا، نرخ های بهره را تنظیم می کند.
این مقاله مفاهیم مربوط به نرخ بهره را از دیدگاه پروتکل AAVE — یکی از پیشروترین پروتکل های وام دهی و قرض گیری در شبکه اتریوم — بررسی می کند. مدل نرخ بهره در Compound V2 نیز تقریبا همین ساختار را دنبال می کند و تنها تفاوت های جزئی در پیاده سازی دارد. هنگام مقایسه با سایر پروتکل های وام دهی نیز می توان تفاوت هایی را در نحوه اجرای این مدل ها مشاهده کرد.
در پروتکل های وام دهی، قراردادهای هوشمند نقدینگی وام دهندگان را تجمیع می کنند. این نقدینگی در اختیار وام گیرندگان قرار می گیرد و آن ها می توانند با وثیقه گذاری، وام دریافت کنند. در این متن، واژه “نقدینگی” همان “سرمایه” یا “وجوه” است.
وام دهندگان (یا همان Suppliers) با تامین سرمایه، سود دریافت می کنند. وام گیرندگان نیز باید بهره وام خود را پرداخت کنند.
معمولا پروتکل های وام دهی بخشی از سرمایه تامین شده را به عنوان “فاکتور ذخیره” (reserve factor) کنار می گذارند. پروتکل این بخش از سرمایه را برای خود نگه می دارد و به آن سودی پرداخت نمی کند. در این حالت، پروتکل سود حاصل از این بخش را دریافت می کند. در برخی منابع، این سود را با عنوان “کارمزد مابه التفاوت” (spread) معرفی می کنند.
نحوه تعیین نرخ بهره در پروتکل های وام دهی دیفای
تقاضای وام (borrow demand) به طور مستقیم نرخ بهره را تحت تاثیر قرار می دهد. زمانی که درصد بیشتری از سپرده ها به وام اختصاص پیدا می کند، نرخ بهره افزایش می یابد.
برای سنجش میزان وام گیری، از شاخص “نرخ استفاده” (utilization) استفاده می کنیم. این شاخص نسبت میزان وام گرفته شده به کل سرمایه قابل وام دهی را نشان می دهد. اگر هیچ وامی وجود نداشته باشد، نرخ استفاده صفر درصد است. اما زمانی که کل سپرده ها به وام تبدیل شوند، این نرخ به صد درصد می رسد. در این مدل، نرخ استفاده تنها عامل تعیین کننده نرخ های بهره به شمار می رود.
نمودار زیر روند تعیین نرخ بهره را نمایش می دهد. مراحل این فرآیند به ترتیب عبارت اند از:
فرمول محاسبه نرخ استفاده (Utilization)
همانطور که پیش تر توضیح داده شد، میزان نرخ استفاده (Utilization) به طور مستقیم از تقاضای وام (borrow demand) به دست می آید:
فرمول محاسبه نرخ استفاده به شکل زیر است:
نکته مهم این است که تقاضای وام همواره به نسبت کل سپرده ها سنجیده می شود. بنابراین اگر میزان کل سپرده ها افزایش یابد اما تقاضای وام ثابت بماند، نرخ استفاده کاهش پیدا می کند.
تاثیر نرخ استفاده بر نرخ بهره وام
در گام بعدی، نرخ استفاده تعیین کننده نرخ بهره وام است:
در یک پروتکل که به درستی طراحی شده باشد، هر تغییری در نرخ استفاده باعث افزایش یا کاهش نرخ های بهره می شود. این فرآیند به صورت زیر عمل می کند:
زمانی که نرخ استفاده افزایش می یابد: (نشانه افزایش تقاضای وام)
-
نرخ بهره برای وام گیرندگان و نرخ سود برای وام دهندگان هر دو افزایش پیدا می کنند.
-
پروتکل با این کار، وام دهی را تشویق و وام گیری را کاهش می دهد.
-
در نتیجه، مقدار نقدینگی بیکار (Idle Liquidity) در سیستم بیشتر می شود و تقاضای وام کاهش پیدا می کند. این روند در نهایت باعث کاهش نرخ استفاده می شود.
زمانی که نرخ استفاده کاهش می یابد: (نشانه وجود نقدینگی بیکار بیش از حد)
-
نرخ بهره برای وام گیرندگان و نرخ سود برای وام دهندگان هر دو کاهش می یابند.
-
این کاهش نرخ، وام گیری را تشویق و وام دهی را محدود می کند.
-
در نتیجه، میزان نقدینگی بیکار کاهش می یابد و تقاضای وام افزایش پیدا می کند. این روند در نهایت منجر به افزایش نرخ استفاده می شود.
تابعی که نرخ استفاده را به نرخ بهره وام تبدیل می کند، از طریق مدل نرخ بهره (interest rate model) تعریف می شود. معمولاً پارامترهای این مدل را حاکمیت پروتکل (protocol governance) تعیین می کند.
محاسبه رابطه بین نرخ بهره وام و نرخ بهره وام دهندگان
در این بخش، به آخرین ارتباط موجود در زنجیره محاسبه نرخ ها می پردازیم:
این رابطه به شکل زیر تعریف می شود:
البته باید توجه کرد که همه پروتکل های وام دهی از این فرمول برای تعیین نرخ بهره وام دهندگان استفاده نمی کنند. به عنوان مثال، Compound V3 نرخ بهره وام دهندگان را مستقیماً به عنوان تابعی از نرخ استفاده محاسبه می کند و نرخ بهره وام را در این محاسبه دخالت نمی دهد.
مثال: یک پروتکل وام دهی را در نظر بگیرید که نرخ بهره وام در آن ۱۰ درصد است و نرخ استفاده ۵۰ درصد می باشد. در این حالت، نرخ بهره ای که وام دهندگان دریافت می کنند به صورت زیر محاسبه می شود:
نرخ بهره وام دهندگان = نرخ بهره وام × نرخ استفاده
نرخ بهره وام دهندگان = ۱۰٪ × ۵۰٪ = ۵٪
در این شرایط، وام دهندگان (سپرده گذاران) روی سپرده های خود ۵ درصد سود دریافت می کنند.
در نمودار زیر، رابطه بین نرخ بهره وام دهندگان و نرخ بهره وام به تصویر کشیده شده است. همانطور که مشاهده می شود، زمانی که نرخ استفاده صفر باشد، وام دهندگان هیچ سودی دریافت نمی کنند.
چرا نرخ بهره وام را در نرخ استفاده ضرب می کنیم؟
اما چرا این ضرب انجام می شود؟ هدف از این محاسبه چیست؟
فرض کنید ۵۰ درصد از کل سرمایه موجود در پروتکل به وام تبدیل شده است. یعنی فقط نیمی از سرمایه ای که وام دهندگان تامین کرده اند، وام داده شده است. حال اگر وام گیرنده بابت این بخش ۱۰ درصد بهره پرداخت کند، وام دهندگان به صورت موثر فقط روی نیمی از سرمایه شان سود دریافت می کنند. بنابراین نرخ سود موثر برای آن ها ۵ درصد خواهد بود.
اگر پروتکل بخواهد به وام دهندگان ۱۰ درصد سود روی کل سرمایه پرداخت کند، در حالی که فقط نیمی از آن سرمایه به وام داده شده است، با کسری مواجه می شود و نمی تواند تعهدات خود را عملی کند.
مثال عددی
فرض کنید وام دهندگان ۱۰۰ واحد سرمایه به پروتکل سپرده گذاری کرده اند.
از این مقدار، ۵۰ واحد به وام تبدیل شده است.
وام گیرندگان بابت این وام ۱۰ درصد بهره پرداخت می کنند، یعنی:
۵۰ واحد × ۱۰٪ = ۵ واحد سود برای پروتکل
اما اگر پروتکل بخواهد به وام دهندگان ۱۰ درصد سود روی کل ۱۰۰ واحد سرمایه پرداخت کند، باید:
۱۰۰ واحد × ۱۰٪ = ۱۰ واحد به وام دهندگان بپردازد
در این حالت، پروتکل تنها ۵ واحد درآمد از بهره وام دارد، اما باید ۱۰ واحد پرداخت کند، که عملاً امکان پذیر نیست.
به همین دلیل، نرخ بهره پرداختی به وام دهندگان با نرخ استفاده متناسب می شود. یعنی:
نرخ بهره وام دهندگان = نرخ بهره وام × نرخ استفاده
این محاسبه تناسب منطقی بین درآمد پروتکل و پرداختی به وام دهندگان ایجاد می کند و از ریسک کسری جلوگیری می کند.
افزودن فاکتور ذخیره: محاسبه کارمزد (Spread)
مثالی که در بخش قبل بررسی کردیم به درک بهتر موضوع کمک می کند، اما یک نکته مهم را در نظر نگرفته بود: کارمزد پروتکل یا همان spread که در ابتدای مقاله به آن اشاره شد. این بخش از سود به پروتکل تعلق می گیرد و می تواند به عنوان کارمزد، تامین خزانه (treasury) یا موارد دیگر مورد استفاده قرار بگیرد.
در این حالت، فرمول کامل نرخ بهره وام دهندگان به شکل زیر نوشته می شود:
در این فرمول، فاکتور ذخیره (reserve factor) مشخص می کند که چه بخشی از سود حاصل از بهره وام به پروتکل می رسد و چه بخشی بین سپرده گذاران توزیع می شود.
مثال عددی
فرض کنید یک پروتکل وام دهی داریم با شرایط زیر:
-
نرخ بهره وام: ۱۰٪
-
نرخ استفاده: ۵۰٪
-
فاکتور ذخیره: ۲۰٪
در این حالت، نرخ بهره ای که سپرده گذاران دریافت می کنند به صورت زیر محاسبه می شود:
نرخ بهره وام دهندگان = ۱۰٪ × ۵۰٪ × (۱ – ۲۰٪)
نرخ بهره وام دهندگان = ۵٪ × ۸۰٪ = ۴٪
همانطور که مشاهده می کنید، یک پنجم از بهره وام به پروتکل تعلق می گیرد و سپرده گذاران ۴٪ سود روی سپرده های خود دریافت می کنند.
مدل های واقعی نرخ بهره
برنامه های دیفای تلاش می کنند که نرخ استفاده را در یک بازه مشخص حفظ کنند؛ معمولا این بازه بین ۸۰٪ تا ۹۵٪ است. به این بازه “نرخ استفاده بهینه” (optimal utilization) گفته می شود.
رسیدن به ۱۰۰٪ نرخ استفاده یعنی تمام سرمایه موجود وام داده شده است که این وضعیت مطلوب نیست. در این شرایط، سپرده گذاران دیگر نمی توانند سرمایه خود را برداشت کنند. بنابراین، وقتی کل سرمایه به وام تبدیل می شود، پروتکل باید با مشوق های قوی، وام دهندگان را به افزایش سرمایه گذاری و وام گیرندگان را به بازگرداندن وام تشویق کند.
به همین دلیل، منحنی نرخ بهره معمولا به صورت قطعه ای و با یک شکست (kinked) طراحی می شود. در این مدل، نرخ بهره به آرامی افزایش می یابد تا به نقطه نرخ استفاده بهینه برسد و پس از آن با شیب بیشتری افزایش می یابد.
فرمول تابع شکست دار خطی
هر مدل نرخ بهره باید به صورت تابعی از نرخ استفاده (Utilization) تعریف شود، زیرا:
پروتکل AAVE از یک مدل نرخ بهره شکست دار خطی (piecewise linear kinked interest rate model) استفاده می کند که فرمول آن به صورت زیر تعریف می شود:
برای درک بهتر این فرمول، می توان معادله آن را به فرم ساده y = mx + c بازنویسی کرد:
در این ساختار، یک انیمیشن به خوبی توضیح می دهد که هر بخش از این فرمول چه نقشی ایفا می کند:
در اینجا باید توجه کرد که:
-
U (نرخ استفاده) متغیر مستقل است.
-
Rborrow (نرخ بهره وام) تابعی از نرخ استفاده و سایر پارامترهایی است که حاکمیت پروتکل آن ها را تعیین می کند.
بخشی از منحنی که شکست (kink) دارد، همان محدوده ای است که پروتکل آن را به عنوان “نرخ استفاده بهینه” در نظر می گیرد. زمانی که نرخ استفاده از این سطح فراتر می رود، نرخ های بهره به سرعت افزایش می یابند. هدف از این افزایش سریع، تشویق وام دهندگان به تامین سرمایه بیشتر و ترغیب وام گیرندگان به بازپرداخت وام ها است.
مثال DAI
در این بخش، مدل نرخ بهره DAI در پروتکل AAVE را بررسی می کنیم؛ مدلی که در قرارداد هوشمند DefaultReserveInterestRateStrategy در شبکه اتریوم تعریف شده است. این قرارداد هوشمند، چهار پارامتر اصلی مدل نرخ بهره را به صورت عمومی در دسترس قرار می دهد:
-
U_optimal (نرخ استفاده بهینه)
-
R_intercept (نرخ پایه)
-
R_slope1 (شیب نرخ بهره قبل از نقطه شکست)
-
R_slope2 (شیب نرخ بهره بعد از نقطه شکست)
می توانید آدرس قرارداد هوشمند را در این لینک مشاهده کنید:
مشاهده در Etherscan
بر اساس داده های موجود در بلاک چین، این پارامترها برای مدل نرخ بهره DAI به شرح زیر تعیین شده اند:
-
U_optimal (با فلش آبی مشخص شده) با نام متغیر OPTIMAL_USAGE_RATIO برابر ۰.۸۰
-
R_intercept (با فلش قرمز مشخص شده) با نام تابع عمومی getBaseVariableBorrowRate برابر ۰
-
R_slope1 (با فلش سبز مشخص شده) با نام تابع عمومی getVariableRateSlope1 برابر ۰.۰۴
-
R_slope2 (با فلش بنفش مشخص شده) با نام تابع عمومی getVariableRateSlope2 برابر ۰.۷۵
این مقادیر به صورت اعداد ثابت با دقت Ray (یعنی با ۲۷ رقم اعشار، به طوری که ۱ معادل 10^27 است) ذخیره شده اند.
توجه داشته باشید که این پارامترها در زمان نگارش مقاله دقیق هستند.
جمع بندی
نرخ های بهره در پروتکل های دیفای به نرخ استفاده از دارایی ها بستگی دارند. حاکمیت پروتکل شکل دقیق این تابع را تعیین می کند. از طرف دیگر، سودی که وام دهندگان دریافت می کنند، به دلیل وجود کارمزد پروتکل و فاکتور ذخیره، کمتر از سودی است که وام گیرندگان پرداخت می کنند.
درک صحیح این مدل ها برای توسعه دهندگان و علاقه مندان به آموزش برنامه نویسی اهمیت زیادی دارد، زیرا می توانند از این مفاهیم در طراحی و بهینه سازی قراردادهای هوشمند استفاده کنند.
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- انتشار: ۱۲ خرداد ۱۴۰۴
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- دوره های تخصصی برنامه نویسی
- رپورتاژ
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره آموزش Go
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس