如何使用Chainlink预言机将价格喂价从ETH/USD切换为BUSD/USD并解决Kovan测试网报错
问题修复指南
触发回滚的根本原因
- Kovan测试网已正式下线,Chainlink官方已于2022年全面停止Kovan链上所有Price Feed服务的节点支持,调用已下线的喂价接口会直接触发VM执行回滚,这是你切换任意代币都报错的核心原因。
- 代码存在地址不匹配错误:注释中标注的Kovan ETH/USD喂价地址为
0x9326BFA02ADD2366b30bacB125260Af641031331,但构造函数中实际传入的是另一个地址,即使Kovan可用,喂价地址填写错误也会导致调用失败。
具体修复步骤
- 替换测试网:切换到Chainlink当前支持的活跃测试网,推荐使用Sepolia测试网。
- 替换对应喂价地址:Sepolia测试网可用的喂价地址如下,根据你需要的交易对替换构造函数中的地址即可:
- BUSD/USD:
0x9331b55D9830EF609A2aA09d3131B7734EE0f7Ce - ETH/USD:
0x694AA1769357215DE4FAC081bf1f309aDC325306
- 原业务逻辑无需修改,调整参数后即可正常调用。
修复后代码示例(Sepolia + BUSD/USD)
// SPDX-License-Identifier: MIT pragma solidity ^0.6.7; import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol"; contract PriceConsumerV3 { AggregatorV3Interface internal priceFeed; /** * Network: Sepolia * Aggregator: BUSD/USD * Address: 0x9331b55D9830EF609A2aA09d3131B7734EE0f7Ce */ constructor() public { priceFeed = AggregatorV3Interface(0x9331b55D9830EF609A2aA09d3131B7734EE0f7Ce); } /** * Returns the latest price */ function getLatestPrice() public view returns (int) { ( uint80 roundID, int price, uint startedAt, uint timeStamp, uint80 answeredInRound ) = priceFeed.latestRoundData(); return price; } }
内容的提问来源于stack exchange,提问作者khunachik
相关产品推荐
相关产品推荐

