Chainlink 价格为什么大了八个数量级:核对 Feed proxy、decimals 与时间
链小知 · 进阶 · 核验 · 依官方文档整理
从现有只读返回值检查数据含义、精度、更新时间和应用接受条件,不把任意 Feed 当交易报价。
开始前准备
- 准备官方选定网络的 Feed proxy 地址,以及 description、decimals、latestRoundData 的已有读取结果。
- 仅针对 EVM AggregatorV3Interface 读取;CCIP、VRF、MVR 和其他平台接口是不同产品。
1. 固定网络与 proxy 地址
从所选网络官方 Feed 信息确认 proxy,再核对 description。相同资产对在不同链的地址可能不同;优先通过 proxy 使用 AggregatorV3Interface,不能把某个 aggregator 的历史地址作为永久入口。
检查结果:网络、proxy 和 description 的资产/计价方向一致。
2. 按 decimals 换算 answer
读取 decimals 后以 answer / 10^decimals 显示。不能统一假定 8 位:例如原始值 123450000、精度 6 的示例应显示 123.45,这是自拟算术示例,不是真实报价。保留整数用于审阅,避免浮点误差。
检查结果:原始整数、精度和显示值能够回算。
3. 检查返回数据是哪类 Feed
latestRoundData.answer 随 Feed 可能是资产价格、储备或其他数据,不一定都是美元价格。description、类型与使用目的需一致;exchange rate feed 也不能等同二级市场可成交价格。
检查结果:数据单位和业务用途有明确依据。
4. 用 updatedAt 判断数据年龄
保存 roundId、updatedAt 和观察时间,先检查时间戳可解析,再按该 Feed 的更新行为与应用允许的数据年龄审阅。answeredInRound 已被官方标为 deprecated,不能把旧教程里的通用比较规则当所有 Feed 的必需验收条件。
检查结果:更新时间、数据年龄和接受条件分列。
5. 识别无数据、停用与应用拒绝
latestRoundData 报错或无数据应保持未知,停用 Feed 可能直接 revert;不能把失败读取填成价格零。低风险分类也不免除应用的数据质量检查和熔断责任。链外只读无需发交易,RPC 用量按服务商计费;不由此推断 CCIP/VRF 的费用条件。
检查结果:诊断能区分单位错误、过旧数据、无数据和类型不匹配。
怎样确认完成
- 形成网络、proxy、单位、answer、更新时间的核对表。
- 数据不合格原因和适用产品范围清楚。
常见错误与边界
- 所有 answer 固定除以 10^8。
- 旧 aggregator 地址当永久 proxy。
- 将调用失败填成零价格,Feed 读取当可成交报价。