بوابة الأوراكل

يكشف Oracle Gateway موجّهات الأسعار الأصلية لـ Solana (Pyth Network، Switchboard V3) عبر AggregatorV3Interface الخاصة بـ Chainlink. يمكن للبروتوكولات على Ethereum التي تنتقل إلى Rome استخدام كود تكامل أوراكلها الحالي دون تغيير.

المشكلة

تتوقع بروتوكولات Ethereum DeFi واجهة Chainlink AggregatorV3Interface:

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

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

الحل

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

  1. قراءة بيانات الأسعار من حسابات Pyth أو Switchboard على Solana عبر CPI

  2. تحليل البيانات المشفّرة بصيغة Borsh على السلسلة

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

  4. تعرض واجهة Chainlink القياسية AggregatorV3Interface

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

// نفس الواجهة كما في Chainlink على Ethereum
IAggregatorV3 priceFeed = IAggregatorV3(ORACLE_ADAPTER_ADDRESS);
(, int256 price,,,) = priceFeed.latestRoundData();
// السعر = SOL/USD بدقة 8 منازل عشرية (مثلًا، 15000000000 = ‎$150.00)

البنية المعمارية

OracleAdapterFactory

تنشر وتدير محوّلات الأوراكل:

يتحقق المصنع من أن الحساب مملوك فعليًا لبرنامج Pyth/Switchboard قبل النشر.

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

PythPullAdapter — يقرأ Pyth PriceUpdateV2 الحسابات. يدعم السعر، ونطاق الثقة، وسعر EMA، ووقت النشر.

SwitchboardV3Adapter — يقرأ Switchboard AggregatorAccountData الحسابات. يدعم السعر والطابع الزمني. EMA غير متاح.

كلا المحوّلين يستخدمان نسخًا بديلة مصغّرة وفق EIP-1167 للنشر بكفاءة في استهلاك الغاز.

الواجهات

واجهة موسّعة

قارئ الدُفعات

اقرأ عدة موجّهات في استدعاء واحد:

الحماية من التقادم

يفرض المحوّلان معلمة maxStaleness . إذا كان block.timestamp - publishTime > maxStaleness، فسيؤدي الاستدعاء إلى فشل مع StalePriceFeed(). القيمة الافتراضية: 60 ثانية.

يمكن لمالك المصنع تعديل حدّ التقادم لكل محوّل أو على مستوى عام:

العناوين المنشورة (Devnet)

العقد
العنوان

OracleAdapterFactory

0xa4647955a16b72d15f13b51b5277036755d297be

PythPullAdapter (impl)

0x4fd11aed44ee5f71df22fb804cfcbb4c50535db9

SwitchboardV3Adapter (impl)

0xb57e3589b880aa3f6b66ce2df6aa42cd9c36925e

BatchReader

0x70da375e5680f84032f5b15d35ba0e6f9871d3fd

SOL/USD (Switchboard)

0xF0864572019c295407CF2ed46e6FD3615e10E19d

انظر عناوين العقود للاطلاع على القائمة الكاملة.

القيود

  • لا توجد بيانات تاريخية للجولاتgetRoundData(roundId) يفشل مع HistoricalRoundsNotSupported()

  • EMA الخاص بـ Switchboard غير مدعومlatestEMAData() يفشل على محوّلات Switchboard

  • تم التحقق تجريبيًا من إزاحات المحلّل — يجب إعادة التحقق باستخدام نصوص التحقق قبل إعادة النشر مقابل إصدارات Pyth/Switchboard الجديدة

  • تطبيع الأسعار — تُطبَّع أسعار Pyth على أنها price * 10^(expo - (-8))؛ وSwitchboard على أنها (mantissa * 10^8) / 10^scale

الحالة

تم إطلاق V1 (2026-04-01) — الإصدار V2 قيد التنفيذ مع حماية من التقادم، وقراءة دفعات، ومحوّل Switchboard، ونسخ EIP-1167 البديلة.

ما التالي

آخر تحديث

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