supra-push-oracle について
supra-push-oracleは、HederaでSupraのプッシュ型オラクルを利用するためのスキルです。価格の読み取りと検証に加え、タイムスタンプの単位、クォート資産、小数精度の扱いを説明します。
主な機能
- 01getSvalue(pairId)による価格取得
- 02ミリ秒タイムスタンプの秒への変換
- 03鮮度とゼロ値の検証
- 04decimalsに基づく価格精度の正規化
活用シーン
- 01HederaコントラクトへのSupra価格フィード導入
- 02価格取得処理の時刻処理レビュー
- 03古い価格や無効な価格の排除
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hedera-dev/ hedera-skills --skill supra-push-oracleインストール後、Claude Code で/supra-push-oracleを入力して読み込まれたか確認します。
同梱ファイルreferences/examples.mdreferences/hedera-feeds.md
詳細
Supra Push Oracle(Hedera)
Push S-Value パターン: Supra がオンチェーンフィードを更新し、読み取り側は getSvalue(pairId) を呼び出して、空、ゼロ、または古い価格を拒否する必要があります。
Supra push oracle → getSvalue(pairId) → consumer
コンシューマーはフィードをローカルインターフェースの背後にラップできますが、これは任意です。プロジェクト固有のアダプター名を前提にしないでください。
クイックリファレンス
| 構成要素 | 役割 |
|---|---|
| Push オラクル | ネットワーク用の不変な ISupraSValueFeed アドレス |
| ペア ID | 数値の Supra ペア ID(EVM アグリゲーターアドレスではありません) |
| 読み取り | getSvalue(pairId) → 価格、桁数、時刻 |
| 時刻 | Hedera ではミリ秒の場合がよくあります — time > 1e10 のときに変換してください |
| クオート資産 | Hedera のフィードは USD ではなく、USDT の場合がよくあります |
| 鮮度 | unix 秒を最大経過時間と比較します |
Hedera のチェーン ID: testnet 296、mainnet 295。
Push オラクルのアドレスとペア ID の取得元については、references/hedera-feeds.md を参照してください。読み取り例については、references/examples.md を参照してください。
重要:ミリ秒のタイムスタンプ
Hedera では、Supra の time がミリ秒であることがよくあります。> 10_000_000_000 の値はミリ秒として扱い、鮮度チェックの前に変換してください。
uint256 updatedAt = pf.time > 10_000_000_000 ? pf.time / 1_000 : pf.time;
if (block.timestamp - updatedAt > maxStaleness) revert StalePrice(updatedAt, maxStaleness);
ミリ秒のタイムスタンプを block.timestamp(秒)と比較すると、時刻が「未来」にあるように見えたり、鮮度チェックが正しく行われなかったりします。
重要:Hedera 上の USDT ペア
現在の Hedera Supra フィードは、USD ではなくUSDTをクオートすることがよくあります。ペアキー/シンボルは実際のクオート資産(HBAR/USDT、BTC/USDT)と一致させてください。USDT フィードを USD として表示しないでください。
完全性と無効な価格
次の場合はリバートしてください。
| 条件 | 理由 |
|---|---|
pf.time == 0 | 更新が成功していません |
pf.price == 0 | 無効な価格です |
| 秒に変換した後も古い | maxStaleness より古い値です |
| 不明なペア ID | ゼロを返さないでください |
pf.price を pf.decimals に基づいてコンシューマーのスケール(多くの場合 18)に正規化してください。
チェックリスト
Hedera 上で Supra の読み取りを実装またはレビューする際は、次を確認してください。
- Push オラクルのアドレスとペア ID は Ethereum ではなく、Supra Hedera のドキュメントから取得している
- ミリ秒のように見えるタイムスタンプは unix 秒に変換している
- ペアシンボルは実際のクオート資産(多くの場合 USDT)と一致している
- ゼロ/更新なしの場合はリバートする
- 鮮度の上限を秒単位で適用している
- 桁数をコンシューマーのスケールに正規化している
参考資料
- references/examples.md —
getSvalueとタイムスタンプの例 - references/hedera-feeds.md — Push オラクルのアドレスとペア ID の取得元
- Supra の Push オラクルネットワーク
- Supra データフィードのインデックス