قرارداد اسپات
مقدمه
قرارداد اسپات 1 نقطه ارتباط بین اوراکل و قراردادهای اصلی زرگری برای تعیین قیمت دارایی های دیجیتال در زربان است. قرارداد اسپات قیمت دارایی های دیجیتال شامل ارز وثیقه را به صورت مرتب از منابع قیمتی بلاکچین می گیرد و در بخش ترازنامه مالی به روزرسانی می کند. تا ارزش وثیقه و سایر پارامترهای وابسته محاسبه شوند.
جزئیات فنی
در این قرارداد از دو رابط کاربری
pip
برای محاسبه قیمت و
vat
برای دسترسی به ثبت آن در ترازنامه مالی استفاده می شود.
عمل میکند و تنها متغیر اصلی این قرارداد یک داده از نوع
struct
بنام
Ilk
به صورت
struct Ilk {
PipLike pip; // Price Feed
uint256 mat; // Liquidation ratio [ray]
}
است که در آن مقدار
pip
از قرارداد
pip
فراخوانی می شود و مقدار
mat
نسبتی است که در محاسبه قیمت به صورت ذیل استفاده می شود.
مکانیسم و مفاهیم کلیدی
مکانیسم محاسبه قیمت در اسپات به این صورت است که یک کاربر یا پروتکل، تابع poke
از قراردادspotter
را فراخوانی میکند. این قرارداد تابع peek
از قرارداد pip
را فراخوانی میکند تا از مراجع مناسب بلاکچینی قیمت به روز شده را تهیه کند. پس از محاسبه قیمت، این مقدار را با تابع file
به قرارداد vat
میفرستد تا قیمت آن دارایی در ترازنامه مالی ثبت شود. مقدار قیمت دارایی برابر مقدار val/mat
است که در آن val
قیمت فراخوانی شده از pip
است.
در این تعاملات از دو رابط کاربری pip
و vat
استفاده میشود. برای مدیریت دادهها نیز یک ساختار داده ilk
در قرارداد spot
وجود دارد که در آن قیمت و نرخ نقدشوندگی وثیقه به ترتیب در مقادیر pip
و mat
مدیریت میشود.
متغیرهای کلیدی
متغیر | نوع داده | توضیح |
---|---|---|
vat | Vat | یک ردیف در ترازنامه مالی سیستم |
pip | Pip | داده خام قیمت |
par | uint256 | واحد عددی برای محاسبه قیمت، معادل یک ray |
ilk.mat | uint256 | نسبت لیکویدیشن برای این ilk |
توابع اصلی و عملکرد
دو تابع اصلی عملکردی این قرارداد سازنده آن و تابع poke
هستند که در ادامه توضیح داده میشوند.
- تابع سازنده
این قرارداد، آدرس قرارداد ترازنامه مالی را می گیرد، مقدار ثابت
par
را مقداردهی کرده و در نهایت مجوز دسترسیlive
را برای اجرای توابع قرارداد اسئات صادر می کند.
توابع اصلی و عملکرد
تابع ()poke
- ورودیها: شناسه طرح صندوق
bytes32 ilk
- عملکرد: این تابع از نوع
external
است و به صورت زیر عمل میکند:
- ابتدا تابع
peek
برای طرح با شناسهilk
فراخوانی میشود و خروجیهایval
وhas
را مقداردهی میکند که در آنhas
یک داده باینری است که اگر در ماژول امنیتی اوراکل خطا وجود داشته باشد مقدار آنfalse
است. فراخوانی تابع بعدی تنها در صورتی اتفاق میافتد که این مقدارtrue
باشد. - مقدار
par
در اجرای دستور بعدی رابطه بین زر و یک واحد ارزش در قیمت را تعریف میکند. در این خط کد برای محاسبه قیمت داراییilk
مقدارval
برpar
تقسیم شده و نتیجه برilk.mat
تقسیم میشود. و در نتیجه این مقدار در متغیرspot
مقداردهی میشود. - پس از محاسبه
spot
تابعfile
ازvat
فراخوانی میشود تا قیمت دارایی در ترازنامه مالی به روزرسانی شود.
نکات فنی
- محاسبات در تمام عملیات محاسبات ریاضی توابع این قرارداد سرریز و زیرریزشدنها کنترل می شود.
- پیچیدگی اجرای متدها تمام متدها در زمان ثابت اجرا میشوند.
- امنیت وثیقه تنها کاربران مجاز میتوانند هر متغیری را در این قرارداد بهروز کنند.
ریسکها و خطاهای احتمالی
توسعهدهندگانی که تصمیمی مبنی بر استفاده از قراردادهای پروتکل زرگری دارند، برای استفاده از قرارداد spotter
در توسعه خود به نکات زیر باید توچه داشته باشند.
خطاهای برنامه نویسی
❌ وجود هرگونه خطا در اسپات منجر به بهروزرسانی نشدن قیمت وثیقهها خواهد شد. در این صورت، سیستم باید یک اسپات جدید را تأیید کند که در این صورت قادر خواهد بود قیمتها را بهروز کند. این مساله موجب اختلال در به روزرسانی قیمتها خواهد شد اما فاجعهبار نیست. زیرا فقط باعث متوقف شدن تمام نوسانات قیمت برای مدت کوتاهی خواهد شد.
❌ هنگامی که
poke
در زمانهای مناسبی فراخوانی نشود، قیمت اسپات در قرارداد مدیریت صندوقها به روز نخواهد شد. این اتفاق ممکن است به دلایل مختلفی از جمله همکاری مشترک یا توطئه ماینرها اتفاق بیفتد و منجر به نتایج منفی مانند تسویههای نامناسب یا عدم دسترسی به تسویههایی شود که باید امکانپذیر باشند.
1 Spot