Oracle Gateway

Das Oracle Gateway stellt Solana-native Preisfeeds (Pyth Network, Switchboard V3) über Chainlinks AggregatorV3Interface. Ethereum-Protokolle, die nach Rome portiert werden, können ihren bestehenden Oracle-Integrationscode unverändert verwenden.

Das Problem

Ethereum-DeFi-Protokolle erwarten Chainlinks AggregatorV3Interface:

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

Solana hat andere Oracle-Anbieter (Pyth, Switchboard) mit unterschiedlichen Datenformaten. Ohne Anpassung müsste jedes Ethereum-Protokoll eine benutzerdefinierte Oracle-Integration implementieren.

Die Lösung

Oracle Gateway V2 stellt leichte Adapterverträge bereit, die:

  1. Preis-Daten aus Pyth- oder Switchboard-Konten auf Solana per CPI lesen

  2. Die on-chain in Borsh kodierten Daten parsen

  3. Preise auf 8 Nachkommastellen normalisieren

  4. Die standardmäßige Chainlink AggregatorV3Interface

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

// Gleiche Schnittstelle wie Chainlink auf Ethereum
IAggregatorV3 priceFeed = IAggregatorV3(ORACLE_ADAPTER_ADDRESS);
(, int256 price,,,) = priceFeed.latestRoundData();
// Preis = SOL/USD mit 8 Dezimalstellen (z. B. 15000000000 = 150,00 $)

Architektur

OracleAdapterFactory

Stellt Oracle-Adapter bereit und verwaltet sie:

Die Factory validiert, dass das Konto tatsächlich dem Pyth-/Switchboard-Programm gehört, bevor es bereitgestellt wird.

Adapter-Typen

PythPullAdapter — Liest Pyth PriceUpdateV2 Konten. Unterstützt Preis, Konfidenzintervall, EMA-Preis und Veröffentlichungszeit.

SwitchboardV3Adapter — Liest Switchboard AggregatorAccountData Konten. Unterstützt Preis und Zeitstempel. EMA nicht verfügbar.

Beide Adapter verwenden EIP-1167-Minimal-Proxy-Klone für eine gas-effiziente Bereitstellung.

Schnittstellen

Erweiterte Schnittstelle

Batch-Reader

Mehrere Feeds in einem Aufruf lesen:

Schutz vor Veraltbarkeit

Adapter erzwingen einen maxStaleness Parameter. Wenn block.timestamp - publishTime > maxStaleness, wird der Aufruf mit StalePriceFeed()abgebrochen. Standard: 60 Sekunden.

Der Factory-Besitzer kann die Veraltbarkeit pro Adapter oder global anpassen:

Bereitgestellte Adressen (Devnet)

Vertrag
Adresse

OracleAdapterFactory

0xa4647955a16b72d15f13b51b5277036755d297be

PythPullAdapter (Impl.)

0x4fd11aed44ee5f71df22fb804cfcbb4c50535db9

SwitchboardV3Adapter (Impl.)

0xb57e3589b880aa3f6b66ce2df6aa42cd9c36925e

BatchReader

0x70da375e5680f84032f5b15d35ba0e6f9871d3fd

SOL/USD (Switchboard)

0xF0864572019c295407CF2ed46e6FD3615e10E19d

Siehe Contract-Adressen für die vollständige Liste.

Einschränkungen

  • Keine historischen RundendatengetRoundData(roundId) führt zu einem Revert mit HistoricalRoundsNotSupported()

  • Switchboard-EMA nicht unterstütztlatestEMAData() führt bei Switchboard-Adapter-Reverts zu

  • Parser-Offsets empirisch validiert — vor einer erneuten Bereitstellung gegen neue Pyth-/Switchboard-Versionen mit Validierungsskripten erneut validieren

  • Preisnormalisierung — Pyth-Preise normalisiert als price * 10^(expo - (-8)); Switchboard als (mantissa * 10^8) / 10^scale

Status

V1 ausgeliefert (2026-04-01) — V2 in Arbeit mit Schutz vor Veraltbarkeit, Batch-Lesungen, Switchboard-Adapter, EIP-1167-Klone.

Was kommt als Nächstes

Zuletzt aktualisiert

War das hilfreich?