For the complete documentation index, see llms.txt. This page is also available as Markdown.

Oracle Gateway

موجزات أسعار Pyth وSwitchboard خلف واجهة Chainlink's AggregatorV3Interface.

تُعرِض Oracle Gateway خلاصات أسعار أصلية من سولانا (Pyth وSwitchboard V3) عبر AggregatorV3Interface، لذا فإن بروتوكولات إيثريوم التي تُنقَل إلى Rome تحتفظ بكود تكامل أوراكلها الحالي. Oracle Gateway V2 متاحة الآن على كل سلسلة عامة، مع keeper يضمن حداثة الخلاصة وبوابة عملاء للتسجيل. تتم تغطية المحوّلات وfactory ونموذج keeper في rome-oracle-gateway مستودع.

المشكلة

تتوقع DeFi على إيثريوم AggregatorV3Interface:

(, int256 price,,,) = priceFeed.latestRoundData();

لدى مزوّدي الأوراكل في سولانا (Pyth وSwitchboard) صيغ بيانات مختلفة. من دون التكييف، سيحتاج كل بروتوكول مُنقول إلى كود أوراكل مخصص.

الحل

تنشر Oracle Gateway V2 عقود محوّل خفيفة الوزن تقوم بما يلي:

  1. قراءة بيانات الأسعار مباشرةً من حسابات Pyth أو Switchboard على سولانا (قراءات عبر الحالة المتقاطعة، وليس CPI)

  2. تحليل البيانات على السلسلة

  3. توحيد الأسعار إلى 8 منازل عشرية

  4. إظهار واجهة Chainlink القياسية AggregatorV3Interface

import {IAggregatorV3Interface} from "@rome-protocol/rome-solidity/contracts/oracle/IAggregatorV3Interface.sol";

// نفس الواجهة مثل Chainlink على إيثريوم
(, int256 price,,,) = IAggregatorV3Interface(ADAPTER).latestRoundData();
// السعر = SOL/USD عند 8 منازل عشرية (مثلًا 15000000000 = ‎150.00$)

استهلك خلاصة في ثلاث خطوات

  1. استدعِ عنوان المحوّل من السجل — لا تُضمِّنه صراحةً أبدًا:

  1. اقرأه بالواجهة التي يستخدمها بروتوكولك بالفعل — IAggregatorV3Interface(solUsd).latestRoundData(). إن الخلاصة المتقادمة أو غير المُهيأة تتراجع بدلاً من تقديم سعر مُجمَّد.

  2. عدة خلاصات دفعة واحدة؟ BatchReader.getLatestPrices(adapters[]) (Hadrian: 0x306d670dff7f51ae33f263f5122bd2b18d98adc7) — و getFeedHealth(adapters[]) قبل أن تعتمد عليها. تجعل المحوّلات المخبأة كل مستهلك يقرأ SLOADبسيطًا، لذا تظل معاملات تعدد الخلاصات (اقتراض متعدد الضمانات، عرض محفظة) منخفضة التكلفة.

cardo تستهلك هذه الخلاصات في الإنتاج اليوم. ولأن الواجهة مطابقة تمامًا AggregatorV3Interface، فإن بروتوكولات من فئة Compound وAave قابلة للإدراج المباشر — وجّه إعدادات خلاصات الأسعار لديها إلى عناوين المحوّلات؛ ولا يحتاج كود الأوراكل لديهم إلى أي تغييرات.

أنواع المحوّلات

  • PythPullAdapter — يقرأ حسابات أسعار Pyth (السعر، الثقة، EMA، وقت النشر).

  • SwitchboardV3Adapter — يقرأ حسابات المُجمِّع في Switchboard (السعر، الطابع الزمني؛ لا يوجد EMA).

  • CachedPyth / CachedFeed adapters — نسخ متراكبة ومخبأة لقراءات فعّالة من حيث وحدات الحساب.

تُنشر المحوّلات كنسخ minimal-proxy وفق EIP-1167 بواسطة OracleAdapterFactory وتوفّر واجهة موسعة إلى جانب AggregatorV3Interface (latestPriceData, maxStaleness, oracleType، و metadata() (واجهة تُستخدم لفحوصات الصحة).

الحداثة — oracle-keeper

تفرض المحوّلات maxStaleness نافذة: إذا كان block.timestamp - publishTime > maxStaleness، فإن القراءات تتراجع. على الشبكة الرئيسية في سولانا، يشغّل Pyth محافظ إنتاج. وعلى devnet في سولانا (حيث توجد السلاسل العامة)، يكون إرسال Pyth أفضل جهد ممكن، لذا يشغّل Rome oracle-keeper المرافِق للحفاظ على حداثة حسابات Pyth الأساسية. تتم مراقبة الحداثة وتنبيه الفريق عند حدوث أي مشكلة.

تحقّق من صحة الخلاصة باستخدام BatchReader.getFeedHealth (الذي يقرأ metadata()لكل محوّل)، وليس فقط latestRoundData — قد تكون الخلاصة قابلة للوصول لكنها متقادمة.

بوابة العملاء

سجّل الخلاصات واضبط المستهلكين لكل سلسلة عبر بوابة Oracle Gateway، راجع صفحة البوابة للاطلاع على ما تغطيه.

العناوين المنشورة

العناوين المعيارية لكل سلسلة (المصانع، تطبيقات المحوّلات، والخلاصات الحية) موجودة في السجل. أبرز المصانع:

العقد
Hadrian
Martius

OracleAdapterFactory

0xe68e7bc697010c73f1798b356f8ae2f0ba1319db

0xbc06fe9603a02ff4aead265c253f5c6303ee5fbb

BatchReader

0x306d670dff7f51ae33f263f5122bd2b18d98adc7

0xc5e6d932bfd2b4da27643848063905f46861fae8

القيود

  • لا توجد بيانات دورات تاريخيةgetRoundData(roundId) يتراجع؛ فقط latestRoundData() مدعوم.

  • EMA الخاص بـ Switchboard غير مدعوم — بيانات EMA خاصة بـ Pyth فقط.

  • القدم الزمني لكل سلسلةmaxStaleness يُضبط لكل بيئة عند الإطلاق: المحولات المباشرة (التي تقرأ من Pyth) يكون الافتراضي فيها نحو 60 ثانية؛ أما المحوّلات المخبأة فافتراضيها 3600 ثانية (ويعمل keeper على التحديث بوتيرة أعلى بكثير — نحو 25 ثانية على devnet/testnet اليوم).

  • إزاحات المحلّل تُتحقق منها مقابل تخطيطات Pyth/Switchboard الحالية؛ وأي تغييرات في التخطيط تتطلب إعادة التحقق.

ما التالي

آخر تحديث

هل كان هذا مفيدا؟