mcpField
C
chainlink-data-feeds

chainlink-data-feeds

github.com/hedera-dev開発28464 回インストール8 週間前に更新
リポジトリ

chainlink-data-feeds について

chainlink-data-feedsは、Chainlink Data Feedsを使うHederaスマートコントラクト開発者向けの実装・レビューガイドです。ラウンドの検証、古いデータの制限、桁数の正規化を扱います。

主な機能

  1. 01AggregatorV3Interfaceによる価格取得
  2. 02ラウンド完了と更新時刻の検証
  3. 03ゼロ以下または古い価格の拒否
  4. 04目標スケールへの価格正規化
  5. 05Hedera専用Feedアドレスの使用

活用シーン

  1. 01Hederaコントラクトでの価格Feed読み取り
  2. 02価格データの完全性と鮮度の確認
  3. 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()

コンシューマーはフィードをローカルインターフェースでラップできますが、これは任意です。プロジェクト固有のアダプター名を前提にしないでください。

クイックリファレンス

要素役割
AggregatorV3InterfacelatestRoundData() + 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 ネットワーク)である

参考資料

コメント