mcpField
P
pyth-price-feeds

pyth-price-feeds

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

关于 pyth-price-feeds

pyth-price-feeds 是面向 Hedera 智能合约开发者的 Pyth 价格 Feed 实现与审查指南。它说明如何提交 Hermes 更新数据、读取有时效限制的价格,并校验置信度与指数。

主要功能

  1. 01通过 Hermes 提交价格更新数据
  2. 02支付更新费用后读取价格
  3. 03使用最大年龄限制读取价格
  4. 04校验价格与置信度
  5. 05按有符号指数归一化数值

适用场景

  1. 01在 Hedera 合约中更新 Pyth 价格
  2. 02读取满足最大时效要求的价格
  3. 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 地址
价格 IDbytes32 馈送 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)置信度大于价格
规范化 expoexpo 是有符号数;它与 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 网络)

参考资料

评论

支持 Markdown