mcpField
C
chainlink-data-feeds

chainlink-data-feeds

github.com/hedera-dev开发28464 次安装8 周前更新
代码仓库

关于 chainlink-data-feeds

chainlink-data-feeds 是面向 Hedera 智能合约开发者的 Chainlink Data Feeds 实现与审查指南。它重点说明价格轮次校验、陈旧数据限制及精度归一化。

主要功能

  1. 01读取 AggregatorV3Interface 价格
  2. 02校验轮次完整性与更新时间
  3. 03拒绝非正价格和过期数据
  4. 04按目标精度归一化价格
  5. 05使用 Hedera 专用 Feed 地址

适用场景

  1. 01在 Hedera 合约中读取价格 Feed
  2. 02审查价格数据的完整性与时效性
  3. 03统一 Feed 与合约使用的价格精度

安装

复制下面的命令,在终端中运行。

$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)

**推送式 Feed 模式:**Chainlink 聚合器在链下更新;链上读取方调用 latestRoundData(),并且必须拒绝不完整、非正数或过期的轮次。

Chainlink DON → AggregatorV3Interface feed → consumer latestRoundData()

消费者可以通过本地接口封装 Feed;这并非必需。不要假定项目使用了特定的适配器名称。

快速参考

部分作用
AggregatorV3InterfacelatestRoundData() + decimals()
轮次完整性answeredInRound >= roundId 且 updatedAt != 0
价格answer > 0(Feed 通常为有符号 int256)
时效性将 block.timestamp - updatedAt 与最大过期时长比较
精度将 Feed 的小数位数归一化为消费者使用的精度(通常为 18)
交易对标识如果对交易对键进行哈希,优先使用规范的大写符号(HBAR、USD)

**Hedera 链 ID:**测试网为 296,主网为 295。

有关 Hedera Feed 地址的来源,请参阅 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);

关键:使用 Hedera Feed,而非 Ethereum 地址

不要将 Ethereum 主网聚合器地址复制到 Hedera。应查找链 295 / 296 对应的 Hedera 专用 Data Feed 地址,并在部署到主网前重新核对文档。

如果使用交易对映射,除非项目明确支持部署后的更新,否则应仅在构造函数中设置。

小数位归一化

feed.decimals() 通常为 8。在进行运算前,应将其转换为应用使用的精度:

uint256 price = normalizeToScale(uint256(answer), feed.decimals(), /* target */ 18);

明确处理转换时的舍入(通常向下取整)。不要混用原始聚合器单位和 18 位小数的金额。

检查清单

在 Hedera 上实现或审查 Chainlink 读取逻辑时:

  • Feed 地址来自 Hedera Data Feeds 文档(而非 Ethereum)
  • 使用 answer 前先检查 latestRoundData 的完整性
  • 非正数价格会回退
  • 强制执行过期时长限制
  • 将小数位归一化为消费者使用的精度
  • 链 ID 为 295 或 296(或项目文档中注明的 Hedera 网络)

参考资料

评论

支持 Markdown