> For the complete documentation index, see [llms.txt](https://docs.rome.builders/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rome.builders/ar/almntjat/oracle-gateway.md).

# Oracle Gateway

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

## المشكلة

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

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

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

## الحل

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

1. قراءة بيانات الأسعار مباشرةً من حسابات Pyth أو Switchboard على سولانا (قراءات عبر الحالة المتقاطعة، وليس CPI)
2. تحليل البيانات على السلسلة
3. توحيد الأسعار إلى 8 منازل عشرية
4. إظهار واجهة Chainlink القياسية `AggregatorV3Interface`

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

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

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

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

```ts
import { getOracle } from "@rome-protocol/registry";
const solUsd = getOracle(200010).feeds["SOL/USD"].address;
// Hadrian اليوم: 0x76b92646D63FB1AFEa687C7Dac48b437bF99C1B4
```

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

[cardo](https://github.com/rome-protocol/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](https://oracle.testnet.romeprotocol.xyz/)، راجع [صفحة البوابة](/ar/alttbyqat-ala-rome/oracle-gateway.md) للاطلاع على ما تغطيه.

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

العناوين المعيارية لكل سلسلة (المصانع، تطبيقات المحوّلات، والخلاصات الحية) موجودة في [السجل](https://github.com/rome-protocol/rome-registry/tree/main/chains). أبرز المصانع:

| العقد                | 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 الحالية؛ وأي تغييرات في التخطيط تتطلب إعادة التحقق.

## ما التالي

* [بوابة Oracle Gateway](/ar/alttbyqat-ala-rome/oracle-gateway.md) — سجّل الخلاصات، واضبط المستهلكين
* [عناوين العقود](/ar/almrja/contract-addresses.md) — precompiles والعناوين الخاصة بكل سلسلة


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.rome.builders/ar/almntjat/oracle-gateway.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
