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

ベストプラクティス

Chiliz Chain の price feed を安全に利用するためのバリデーションパターン、 ヘルス状態 API、staleness チェック、および統合チェックリスト。

価格を使用する前に必ずバリデーションを行う

latestRoundData() は round が存在しない場合に NoDataAvailable() でリバートしますが、staleness や一時停止のチェックは行いません。保存された値をそのまま返します。価格値を消費する前に、常に以下の 3 つのチェックを実施してください。

  1. 一時停止チェック: paused() を呼び出し、feed が一時停止中であれば拒否する。

  2. 正の値チェック: answer > 0 を要求する。

  3. Staleness チェック: getHealthStatus().isHealthy でゲート処理を行う。

価格の読み取り方getSafePrice() の例がこの 3 つすべてを実装しています。

Health Status API

PriceFeed は 1 回の呼び出しで鮮度情報を集約した getHealthStatus() ビューを公開しています。

function getHealthStatus()
    external view
    returns (
        uint256 lastUpdateTimestamp,
        uint256 totalRounds,
        uint256 timeSinceLastUpdate,
        bool isHealthy
    );
フィールド
説明

lastUpdateTimestamp

最新の round の updatedAt

totalRounds

書き込まれた round の総数

timeSinceLastUpdate

block.timestamp - lastUpdateTimestamp(データがない場合は block.timestamp

isHealthy

timeSinceLastUpdate <= updateInterval × healthFactor の場合に true

health factor はデフォルトで 2 に初期化されていますが、oracle 管理者が setHealthFactor() を通じて feed ごとに設定可能です。2 をハードコードしないでください。コントラクトから直接読み取ってください。

health ウィンドウは updateInterval × healthFactor で、どちらも feed ごとに設定されます。updateInterval は小さなオンチェーンの最小間隔であり、heartbeat ではありません。feed によって異なります。CHZ/USDC は 5s × 720 = 1時間のウィンドウ、PEPPER/CHZ は 10s × 720 = 2時間のウィンドウを使用し、オフチェーンパイプラインは約 1 時間の heartbeat でプッシュします。staleness の基準として updateInterval 単独で使用しないでください。isHealthy でゲート処理を行ってください。完全なパターンについては価格の読み取り方getSafePrice() を参照してください。

システム内のすべての feed を一度に監視するには OracleFactoryReadergetAllOracleHealthStatus() を使用してください。オフチェーンのダッシュボードやアラートに役立ちます。

decimals() をキャッシュする

各ペアには独自の小数点精度があります。価格値を解釈する前に必ず decimals() を呼び出して確認してください。decimals はデプロイ時に設定され変更されないため、価格を読み取るたびではなく、コントラクトの初期化時に一度だけ読み取ってください。

一時停止状態を適切に処理する

緊急時に oracle 管理者は feed を一時停止できます。不正な値をサイレントに消費するのではなく、発生するリバートをクリーンに処理してください。

開発中はトラッカーを活用する

Price Oracle Tracker では、オンチェーン価格を CoinMarketCap および CoinGecko とリアルタイムで比較できるため、統合中に feed の精度を検証しやすくなります。また、すべてのペアのライブヘルス状態、heartbeat パラメーター、個別のコントラクトアドレスも表示されます。

統合チェックリスト

最終更新

役に立ちましたか?