关于 chainlink-data-feeds
chainlink-data-feeds 是面向 Hedera 智能合约开发者的 Chainlink Data Feeds 实现与审查指南。它重点说明价格轮次校验、陈旧数据限制及精度归一化。
主要功能
- 01读取 AggregatorV3Interface 价格
- 02校验轮次完整性与更新时间
- 03拒绝非正价格和过期数据
- 04按目标精度归一化价格
- 05使用 Hedera 专用 Feed 地址
适用场景
- 01在 Hedera 合约中读取价格 Feed
- 02审查价格数据的完整性与时效性
- 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;这并非必需。不要假定项目使用了特定的适配器名称。
快速参考
| 部分 | 作用 |
|---|---|
AggregatorV3Interface | latestRoundData() + 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 网络)
参考资料
- references/examples.md —
latestRoundData和归一化示例 - references/hedera-feeds.md — Hedera 聚合器地址的来源
- Chainlink Data Feeds
- Hedera 价格 Feed 地址
评论
支持 Markdown