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

قرارداد اسپات

مقدمه

قرارداد اسپات 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مدیریت می‌شود.

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

متغیرنوع دادهتوضیح
vatVatیک ردیف در ترازنامه مالی سیستم
pipPipداده خام قیمت
paruint256واحد عددی برای محاسبه قیمت، معادل یک ray
ilk.matuint256نسبت لیکویدیشن برای این ilk

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

دو تابع اصلی عملکردی این قرارداد سازنده آن و تابع poke هستند که در ادامه توضیح داده می‌شوند.

  • تابع سازنده این قرارداد، آدرس قرارداد ترازنامه مالی را می گیرد، مقدار ثابت par را مقداردهی کرده و در نهایت مجوز دسترسی live را برای اجرای توابع قرارداد اسئات صادر می کند.

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

تابع ()poke
  • ورودی‌ها: شناسه طرح صندوق bytes32 ilk
  • عملکرد: این تابع از نوع external است و به صورت زیر عمل می‌کند:
  1. ابتدا تابع peek برای طرح با شناسه ilk فراخوانی می‌شود و خروجی‌های val و has را مقداردهی می‌کند که در آن has یک داده باینری است که اگر در ماژول امنیتی اوراکل خطا وجود داشته باشد مقدار آن false است. فراخوانی تابع بعدی تنها در صورتی اتفاق می‌افتد که این مقدار true باشد.
  2. مقدارparدر اجرای دستور بعدی رابطه بین زر و یک واحد ارزش در قیمت را تعریف می‌کند. در این خط کد برای محاسبه قیمت دارایی ilkمقدار val بر par تقسیم شده و نتیجه بر ilk.mat تقسیم می‌شود. و در نتیجه این مقدار در متغیر spot مقداردهی می‌شود.
  3. پس از محاسبه spot تابع file از vat فراخوانی می‌شود تا قیمت دارایی در ترازنامه مالی به روزرسانی شود.

نکات فنی

  • محاسبات در تمام عملیات محاسبات ریاضی توابع این قرارداد سرریز و زیرریزشدن‌ها کنترل می شود.
  • پیچیدگی اجرای متدها تمام متدها در زمان ثابت اجرا می‌شوند.
  • امنیت وثیقه تنها کاربران مجاز می‌توانند هر متغیری را در این قرارداد به‌روز کنند.

ریسک‌ها و خطاهای احتمالی

توسعه‌دهندگانی که تصمیمی مبنی بر استفاده از قراردادهای پروتکل‌ زرگری دارند، برای استفاده از قرارداد spotter در توسعه خود به نکات زیر باید توچه داشته باشند.

خطاهای برنامه نویسی

❌ وجود هرگونه خطا در اسپات منجر به به‌روزرسانی نشدن قیمت‌ وثیقه‌ها خواهد شد. در این صورت، سیستم باید یک اسپات جدید را تأیید کند که در این صورت قادر خواهد بود قیمت‌ها را به‌روز کند. این مساله موجب اختلال در به روزرسانی قیمت‌ها خواهد شد اما فاجعه‌بار نیست. زیرا فقط باعث متوقف شدن تمام نوسانات قیمت برای مدت کوتاهی خواهد شد.

❌ هنگامی که poke در زمان‌های مناسبی فراخوانی نشود، قیمت اسپات در قرارداد مدیریت صندوق‌ها به روز نخواهد شد. این اتفاق ممکن است به دلایل مختلفی از جمله همکاری مشترک یا توطئه ماینرها اتفاق بیفتد و منجر به نتایج منفی مانند تسویه‌های نامناسب یا عدم دسترسی به تسویه‌هایی شود که باید امکان‌پذیر باشند.

1 Spot