Solidity FundMe合约调用Chainlink getVersion报execution reverted错误求助
问题排查与解决方案
错误触发原因
- 核心原因:Rinkeby测试网已被以太坊基金会正式停止维护,链上所有服务包括Chainlink喂价节点均已下线,你调用的Rinkeby链上喂价地址现在无有效响应,因此触发交易回滚。
- 次要排查点:你导入的Chainlink接口版本、喂价地址和Solidity版本存在不匹配的可能性,也会导致调用失败。
修复步骤
- 切换测试网络
将你的MetaMask等钱包从Rinkeby切换至当前活跃的以太坊测试网(如Sepolia),并领取对应测试网的ETH用于部署和交互。 - 替换喂价地址
将代码中写死的喂价合约地址替换为对应测试网的Chainlink官方喂价地址,例如Sepolia网络的ETH/USD喂价地址为0x694AA1769357215DE4FAC081bf1f309aDC325306。 - 匹配接口版本
如果你使用0.8及以上版本的Solidity,将导入语句替换为对应版本的Chainlink接口:
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
修改后的参考代码如下:
pragma solidity >=0.8.0 <0.9.0; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; contract FundMe { mapping(address => uint256) public addressToAmountFunded; function fund() public payable { addressToAmountFunded[msg.sender] += msg.value; } function getVersion() public view returns(uint256) { // Sepolia ETH/USD 喂价地址 AggregatorV3Interface priceFeed = AggregatorV3Interface(0x694AA1769357215DE4FAC081bf1f309aDC325306); return priceFeed.version(); } }
- 重新部署
在Remix中切换Injected Web3到对应新测试网,重新编译部署合约后再调用相关方法即可正常返回结果。
内容的提问来源于stack exchange,提问作者Devdeep Ghosh
相关产品推荐
相关产品推荐

