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

価格の読み取り方

PriceFeed コントラクトアドレスを見つけ、Chainlink インターフェースで接続し、 適切なバリデーションを行って現在の価格を読み取る。

ステップ 1: Oracle アドレスを見つける

指定されたペアの PriceFeed コントラクトアドレスを見つける方法は 3 つあります。

  • Price Oracle Tracker(開発中に最も簡単): price-oracle-tracker.vercel.app — デプロイ済みのすべてのペア、ライブ価格、decimals、heartbeat、アドレスを表示します。

  • オンチェーンで OracleFactory を使う: pairToOracle(string pair) を呼び出します。ペアシンボルは大文字で渡す必要があります(例: "PSG/USDT")。ファクトリーは読み取り時に入力を正規化しません。

  • OracleFactoryReader でまとめてオンチェーン取得: getActiveOracles() を呼び出して、すべてのアクティブなペアとそのアドレスを 1 回の呼び出しで取得します。

interface IOracleFactory {
    function pairToOracle(string memory pair) external view returns (address);
    function getOracleCount() external view returns (uint256);
}

function resolveFeed(address factory, string memory pair)
    external view returns (address)
{
    // Pair symbol must be passed in uppercase (e.g. "PSG/USDT").
    return IOracleFactory(factory).pairToOracle(pair);
}

ステップ 2: インターフェースで接続する

PriceFeed コントラクトは標準の Chainlink IAggregatorV3Interface を実装しており、ヘルス状態や一時停止ステータスのための Chiliz 固有の拡張機能も備えています。

ステップ 3: 価格を読み取る

主要な関数は latestRoundData() で、現在の価格と round およびタイムスタンプのメタデータを返します。

プロトコルが 18 decimals に正規化せず feed のネイティブ decimals を使う場合:

過去のデータ

Oracle はすべての過去の round データをオンチェーンに保存します。価格が更新されるたびに、インクリメントする roundId を持つ新しい round が作成されます。

Chiliz feed が公開しているその他のヘルパービュー:

関数
返り値

latestAnswer()

最新の価格。データがない場合は 0

latestTimestamp()

最新の updatedAt。データがない場合は 0

latestRound()

現在の round ID

getAnswer(uint80 roundId)

指定された round の価格。データがない場合は 0

getTimestamp(uint80 roundId)

指定された round のタイムスタンプ。データがない場合は 0

getRoundsData(uint80[] roundIds)

まとめて RoundData 配列を返す

roundExists(uint80 roundId)

updatedAt > 0 の場合に true

イベント

PriceFeed コントラクトは以下を発行します。

  • AnswerUpdated(int256 indexed current, uint80 indexed roundId, uint256 updatedAt): 価格が更新されるたびに発行されます。価格または round でフィルタリングできます。

  • NewRound(uint80 indexed roundId, address indexed startedBy, uint256 startedAt): 新しい round が始まるときに発行されます。round または開始したアドレスでフィルタリングできます。

検索関数(OracleFactoryReader)

関数
説明

getActiveOracles()

すべてのアクティブなペアと oracle アドレスを返す

getAllOracles()

非アクティブなものも含めすべての oracle を返す

getOraclesByPairs(string[] pairs)

複数のペア名を oracle アドレスに 1 回の呼び出しで解決する

getOracleHealthStatus(address oracle)

単一の oracle のヘルス状態

getAllOracleHealthStatus()

システム内すべての oracle のヘルス状態

最終更新

役に立ちましたか?