chainlink-data-feeds について
chainlink-data-feedsは、Chainlink Data Feedsを使うHederaスマートコントラクト開発者向けの実装・レビューガイドです。ラウンドの検証、古いデータの制限、桁数の正規化を扱います。
主な機能
- 01AggregatorV3Interfaceによる価格取得
- 02ラウンド完了と更新時刻の検証
- 03ゼロ以下または古い価格の拒否
- 04目標スケールへの価格正規化
- 05Hedera専用Feedアドレスの使用
活用シーン
- 01Hederaコントラクトでの価格Feed読み取り
- 02価格データの完全性と鮮度の確認
- 03Feedとコントラクト間の桁数調整
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hedera-dev/ hedera-skills --skill chainlink-data-feedsインストール後、Claude Code で/chainlink-data-feedsを入力して読み込まれたか確認します。
同梱ファイルreferences/examples.mdreferences/hedera-feeds.md
詳細
Chainlink Data Feeds(Hedera)
プッシュフィードパターン: Chainlink アグリゲーターはオフチェーンで更新されます。オンチェーンのリーダーは latestRoundData() を呼び出し、不完全なラウンド、正でない値、または古いラウンドを拒否する必要があります。
Chainlink DON → AggregatorV3Interface feed → consumer latestRoundData()
コンシューマーはフィードをローカルインターフェースでラップできますが、これは任意です。プロジェクト固有のアダプター名を前提にしないでください。
クイックリファレンス
| 要素 | 役割 |
|---|---|
AggregatorV3Interface | latestRoundData() + decimals() |
| ラウンドの完全性 | answeredInRound >= roundId および updatedAt != 0 |
| 価格 | answer > 0(フィードは通常、符号付き int256 です) |
| 鮮度 | block.timestamp - updatedAt と最大許容経過時間を比較します |
| スケール | フィードの小数桁数をコンシューマーのスケール(多くの場合 18)に正規化します |
| ペアの識別 | ペアキーをハッシュする場合は、標準の大文字シンボル(HBAR、USD)を優先します |
Hedera のチェーン ID: テストネットは 296、メインネットは 295 です。
Hedera フィードのアドレスの取得元については、references/hedera-feeds.md を参照してください。読み取りと正規化のスケッチについては、references/examples.md を参照してください。
重要:鮮度の確認より先に完全性を確認
欠落または未完了のラウンドから価格を返してはいけません。次の場合はリバートしてください。
| 条件 | 理由 |
|---|---|
answeredInRound < roundId | アグリゲーターがこのラウンドを完了していません |
updatedAt == 0 | 成功した更新がありません |
answer <= 0 | 価格が無効、または正の値ではありません |
block.timestamp - updatedAt > maxStaleness | このコンシューマーにとって価格が古くなっています |
(uint80 roundId, int256 answer,, uint256 updatedAt, uint80 answeredInRound) =
feed.latestRoundData();
if (answeredInRound < roundId || updatedAt == 0) revert IncompleteRound();
if (answer <= 0) revert InvalidPrice();
if (block.timestamp - updatedAt > maxStaleness) revert StalePrice(updatedAt, maxStaleness);
重要:Ethereum のアドレスではなく Hedera のフィードを使う
Ethereum メインネットのアグリゲーターアドレスを Hedera にコピーしてはいけません。チェーン 295/296 用の Hedera 固有の Data Feed アドレスを調べ、メインネットの前にドキュメントを再確認してください。
ペアマップを使う場合は、プロジェクトがデプロイ後の更新を明示的にサポートしていない限り、コンストラクターでのみ設定してください。
小数桁数の正規化
feed.decimals() は 8 であることがよくあります。演算の前に、アプリで使用するスケールに変換してください。
uint256 price = normalizeToScale(uint256(answer), feed.decimals(), /* target */ 18);
変換時の丸め方法を明確にしてください(通常は切り捨てます)。アグリゲーターの生の単位と小数桁数 18 の値を混在させないでください。
チェックリスト
Hedera で Chainlink の読み取りを実装またはレビューする際は、次を確認してください。
- フィードアドレスは Hedera Data Feeds のドキュメントから取得している(Ethereum ではない)
-
answerを使用する前にlatestRoundDataの完全性を確認している - 正でない価格はリバートする
- 鮮度の上限を適用している
- 小数桁数をコンシューマーのスケールに正規化している
- チェーン ID は
295または296(またはプロジェクトのドキュメントに記載された Hedera ネットワーク)である
参考資料
- references/examples.md —
latestRoundDataと正規化のスケッチ - references/hedera-feeds.md — Hedera アグリゲーターアドレスの取得元
- Chainlink Data Feeds
- Hedera の価格フィードアドレス