mcpField
S
supra-push-oracle

supra-push-oracle

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

关于 supra-push-oracle

supra-push-oracle 是面向 Hedera 的 Supra 推送式预言机集成技能,指导合约读取并校验价格数据。它着重说明时间戳单位、报价资产、数据有效性及精度处理。

主要功能

  1. 01通过 getSvalue(pairId) 读取报价
  2. 02将毫秒时间戳转换为秒
  3. 03校验报价时效性及非零值
  4. 04按 decimals 规范化价格精度

适用场景

  1. 01在 Hedera 合约中接入 Supra 价格源
  2. 02审查价格读取中的时间戳处理
  3. 03防止使用过期或无效报价

安装

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

$npx skills add https://github.com/hedera-dev/hedera-skills --skill supra-push-oracle

安装后在 Claude Code 中输入/supra-push-oracle确认已加载。

附带文件references/examples.mdreferences/hedera-feeds.md

详细介绍

Supra 推送预言机(Hedera)

推送式 S-Value 模式: Supra 更新链上数据源;读取方调用 getSvalue(pairId),并且必须拒绝空值、零值或过期报价。

Supra push oracle → getSvalue(pairId) → consumer

消费者可以在数据源外封装一个本地接口;这不是必需的。不要假设存在特定于项目的适配器名称。

快速参考

部分作用
推送预言机网络的不可变 ISupraSValueFeed 地址
Pair IDSupra 数字 Pair ID(不是 EVM 聚合器地址)
读取getSvalue(pairId) → 价格、精度、小数位
时间Hedera 上通常为毫秒——当 time > 1e10 时进行转换
报价资产Hedera 数据源通常使用 USDT,而非 USD
有效期将 Unix 秒与最大过期时长进行比较

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

请参阅 references/hedera-feeds.md,了解推送预言机地址和 Pair ID 的来源。请参阅 references/examples.md,查看读取示例。

重要:毫秒时间戳

Hedera 上 Supra 的 time 通常以毫秒为单位。将 > 10_000_000_000 的值视为毫秒,并在过期检查前进行转换:

uint256 updatedAt = pf.time > 10_000_000_000 ? pf.time / 1_000 : pf.time;
if (block.timestamp - updatedAt > maxStaleness) revert StalePrice(updatedAt, maxStaleness);

将毫秒时间戳与 block.timestamp(秒)比较,会导致时间看起来“在未来”,或错误地跳过过期检查。

重要:Hedera 上的 USDT 交易对

当前 Hedera Supra 数据源通常使用 USDT 报价,而非 USD。Pair 键/符号必须与实际报价资产一致(HBAR/USDT、BTC/USDT)。不要将 USDT 数据源标记为 USD。

数据完整性与无效价格

以下情况应回滚:

条件原因
pf.time == 0没有成功更新
pf.price == 0价格无效
转换为秒后已过期超过 maxStaleness
未知 Pair ID不要返回零值

使用 pf.decimals 将 pf.price 标准化为消费者所需的精度(通常为 18 位)。

检查清单

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

  • 推送预言机地址和 Pair ID 来自 Supra Hedera 文档(不是 Ethereum 文档)
  • 时间戳看起来是毫秒时,将其转换为 Unix 秒
  • Pair 符号与实际报价资产一致(通常为 USDT)
  • 对零值/缺失的更新进行回滚
  • 以秒为单位强制执行过期时长限制
  • 将精度标准化为消费者所需的精度

参考资料

评论

支持 Markdown