关于 pyth-price-feeds
pyth-price-feeds 是面向 Hedera 智能合约开发者的 Pyth 价格 Feed 实现与审查指南。它说明如何提交 Hermes 更新数据、读取有时效限制的价格,并校验置信度与指数。
主要功能
- 01通过 Hermes 提交价格更新数据
- 02支付更新费用后读取价格
- 03使用最大年龄限制读取价格
- 04校验价格与置信度
- 05按有符号指数归一化数值
适用场景
- 01在 Hedera 合约中更新 Pyth 价格
- 02读取满足最大时效要求的价格
- 03审查价格置信度与指数换算
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hedera-dev/ hedera-skills --skill pyth-price-feeds安装后在 Claude Code 中输入/pyth-price-feeds确认已加载。
附带文件references/examples.mdreferences/hedera-feeds.md
详细介绍
Pyth 价格馈送(Hedera)
拉取模式: Pyth 不是即发即弃的推送馈送。要读取最新价格,通常需要先在链上提交 Hermes 载荷(需支付费用),然后调用 getPriceNoOlderThan。
Hermes → updatePriceFeeds{value: fee}(updateData) → getPriceNoOlderThan(priceId, maxAge)
使用方可以通过本地接口封装 Pyth;这是可选的。请勿假设项目使用了特定的适配器名称。
快速参考
| 组成部分 | 作用 |
|---|---|
| Pyth 合约 | 网络的 IPyth 地址 |
| 价格 ID | bytes32 馈送 ID(不是聚合器地址) |
| 更新 | 使用 Hermes updateData 调用需支付费用的 updatePriceFeeds |
| 费用 | getUpdateFee(updateData) — msg.value 必须足以支付该费用 |
| 读取 | getPriceNoOlderThan(priceId, maxAge) |
| 置信度 | 当 conf > uint64(price) 时拒绝 |
| 缩放 | 有符号的 price 和 expo → 使用方的小数位数(通常为 18) |
Hedera 链 ID: 测试网为 296,主网为 295。
有关 Pyth 合约和价格 ID 的来源,请参阅 references/hedera-feeds.md。有关更新、读取和 expo 示例,请参阅 references/examples.md。
重要:读取最新价格前先更新
如果链上价格超出你的陈旧度上限,请获取 Hermes 更新数据并提交:
function updatePrice(bytes[] calldata updateData) external payable {
uint256 fee = PYTH.getUpdateFee(updateData);
if (msg.value < fee) revert UpdateFeeTooLow(msg.value, fee);
PYTH.updatePriceFeeds{ value: msg.value }(updateData);
}
Hedera 的 msg.value 通过 JSON-RPC 以 tinybar 为单位 — 附加足够的原生代币以支付 Pyth 费用。请勿将过期的 getPriceUnsafe 结果视为有效的交易价格。
重要:置信度与有符号 expo
调用 getPriceNoOlderThan 后:
| 检查 | 原因 |
|---|---|
publishTime != 0 | 数据不完整 |
price > 0 | 无效 / 非正数 |
conf > uint64(price) | 置信度大于价格 |
规范化 expo | expo 是有符号数;它与 ERC-20 小数位数不同 |
PythStructs.Price memory price = PYTH.getPriceNoOlderThan(priceId, maxStaleness);
if (price.publishTime == 0) revert IncompleteRound();
if (price.price <= 0) revert InvalidPrice();
if (price.conf > uint64(price.price)) revert InvalidConfidence();
检查清单
在 Hedera 上实现或审查 Pyth 时:
- Pyth 合约和价格 ID 来自 Pyth Hedera / Hermes 文档(而非 Ethereum 默认值)
- 在依赖最新价格前,提交 Hermes 载荷并附上足够的
msg.value - 读取时使用
getPriceNoOlderThan(或等效的最大期限 API),而非使用无期限限制的不安全价格进行交易 - 当置信度大于价格时回退
- 将有符号的
expo规范化为使用方的数值范围 - 链 ID 为
295或296(或项目文档中注明的 Hedera 网络)
参考资料
- references/examples.md — 更新、读取和 expo 示例
- references/hedera-feeds.md — Pyth 合约和价格 ID 的来源
- Pyth 价格馈送
- Pyth EVM 合约地址
- Hermes 价格馈送
评论
支持 Markdown