关于 supra-push-oracle
supra-push-oracle 是面向 Hedera 的 Supra 推送式预言机集成技能,指导合约读取并校验价格数据。它着重说明时间戳单位、报价资产、数据有效性及精度处理。
主要功能
- 01通过 getSvalue(pairId) 读取报价
- 02将毫秒时间戳转换为秒
- 03校验报价时效性及非零值
- 04按 decimals 规范化价格精度
适用场景
- 01在 Hedera 合约中接入 Supra 价格源
- 02审查价格读取中的时间戳处理
- 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 ID | Supra 数字 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)
- 对零值/缺失的更新进行回滚
- 以秒为单位强制执行过期时长限制
- 将精度标准化为消费者所需的精度
参考资料
- references/examples.md —
getSvalue和时间戳示例 - references/hedera-feeds.md — 推送预言机地址和 Pair ID 的来源
- Supra 推送预言机网络
- Supra 数据源索引
评论
支持 Markdown