Oracle Gateway

Oracle Gateway mengekspos feed harga native Solana (Pyth Network, Switchboard V3) melalui AggregatorV3Interface. Protokol Ethereum yang dipindahkan ke Rome dapat menggunakan kode integrasi oracle yang sudah ada tanpa perubahan.

Masalah

Protokol DeFi Ethereum mengharapkan AggregatorV3Interface:

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

Solana memiliki penyedia oracle yang berbeda (Pyth, Switchboard) dengan format data yang berbeda. Tanpa adaptasi, setiap protokol Ethereum akan membutuhkan integrasi oracle kustom.

Solusi

Oracle Gateway V2 menerapkan kontrak adapter ringan yang:

  1. Membaca data harga dari akun Pyth atau Switchboard di Solana melalui CPI

  2. Mem-parsing data on-chain yang dienkode Borsh

  3. Menormalkan harga ke 8 tempat desimal

  4. Mengekspos Chainlink standar AggregatorV3Interface

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

// Antarmuka yang sama seperti Chainlink di Ethereum
IAggregatorV3 priceFeed = IAggregatorV3(ORACLE_ADAPTER_ADDRESS);
(, int256 price,,,) = priceFeed.latestRoundData();
// harga = SOL/USD pada 8 desimal (misalnya, 15000000000 = $150,00)

Arsitektur

OracleAdapterFactory

Menerapkan dan mengelola adapter oracle:

Factory memvalidasi bahwa akun tersebut benar-benar dimiliki oleh program Pyth/Switchboard sebelum menerapkan.

Jenis Adapter

PythPullAdapter โ€” Membaca PriceUpdateV2 akun. Mendukung harga, interval kepercayaan, harga EMA, dan waktu publikasi.

SwitchboardV3Adapter โ€” Membaca Switchboard AggregatorAccountData akun. Mendukung harga dan timestamp. EMA tidak tersedia.

Kedua adapter menggunakan clone proxy minimal EIP-1167 untuk deployment yang hemat gas.

Antarmuka

Antarmuka yang Diperluas

Pembaca Batch

Baca beberapa feed dalam satu panggilan:

Perlindungan Staleness

Adapter menerapkan parameter maxStaleness Jika block.timestamp - publishTime > maxStaleness, pemanggilan akan gagal dengan StalePriceFeed(). Default: 60 detik.

Pemilik factory dapat menyesuaikan staleness per adapter atau secara global:

Alamat yang Dideploy (Devnet)

Kontrak
Alamat

OracleAdapterFactory

0xa4647955a16b72d15f13b51b5277036755d297be

PythPullAdapter (impl)

0x4fd11aed44ee5f71df22fb804cfcbb4c50535db9

SwitchboardV3Adapter (impl)

0xb57e3589b880aa3f6b66ce2df6aa42cd9c36925e

BatchReader

0x70da375e5680f84032f5b15d35ba0e6f9871d3fd

SOL/USD (Switchboard)

0xF0864572019c295407CF2ed46e6FD3615e10E19d

Lihat Alamat Contract untuk daftar lengkap.

Batasan

  • Tidak ada data round historis โ€” getRoundData(roundId) gagal dengan HistoricalRoundsNotSupported()

  • EMA Switchboard tidak didukung โ€” latestEMAData() gagal pada adapter Switchboard

  • Offset parser divalidasi secara empiris โ€” harus memvalidasi ulang dengan skrip validasi sebelum redeploy terhadap versi Pyth/Switchboard yang baru

  • Normalisasi harga โ€” harga Pyth dinormalisasi sebagai price * 10^(expo - (-8)); Switchboard sebagai (mantissa * 10^8) / 10^scale

Status

V1 Dirilis (2026-04-01) โ€” V2 sedang dikembangkan dengan perlindungan staleness, pembacaan batch, adapter Switchboard, clone EIP-1167.

Berikutnya

Terakhir diperbarui

Apakah ini membantu?