【问题标题】:call to FundMe.getVersion errored: VM execution error. Reverted 0x调用 FundMe.getVersion 出错:VM 执行错误。恢复 0x
【发布时间】:2021-11-21 11:44:51
【问题描述】:
// SPDX-License-Identifier: MIT

pragma solidity  >=0.6.0 <0.9.0 ;

interface AggregatorV3Interface {
  function decimals() external view returns (uint8);

  function description() external view returns (string memory);

  function version() external view returns (uint256);

  // getRoundData and latestRoundData should both raise "No data present"
  // if they do not have data to report, instead of returning unset values
  // which could be misinterpreted as actual reported values.
  function getRoundData(uint80 _roundId)
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
}

contract FundMe {
    
    mapping (address => uint256) public addressTotalAmountFunded;
        
    
    function fund() public payable {
        addressTotalAmountFunded[msg.sender] += msg.value;
    }
    
    
    function getVersion() public view returns (uint256){
        AggregatorV3Interface priceFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);
        return priceFeed.version();
        
   }        
}

您好,我想了解为什么在我想检查版本时会出现此错误 有什么想法吗?

【问题讨论】:

  • 您在哪个网络上部署合约并执行getVersion()? Remix VM 模拟器、以太坊 Ropsten 测试网、以太坊主网、BSC 主网,...
  • 在 Kovan 网络上混音虚拟机

标签: solidity


【解决方案1】:

在您的getVersion() 函数中硬编码的0x5f4e... 地址在 Kovan 测试网 (link) 上不包含任何智能合约。尽管它在主网上部署了合约,但这些环境是分开的。

当地址上没有智能合约时,没有任何东西可以发送对内部调用的响应。您的代码需要来自version() 调用的uint256 响应,以便它可以从getVersion() 返回它。

当它没有收到预期的响应时,它会抛出一个异常,有效地恢复“main”调用。


【讨论】:

    【解决方案2】:

    我遇到了同样的问题。问题在于网络选择。您从 Rinkby 网络上的钱包地址/合约请求价格信息。我尝试了 Kovan 网络上的钱包地址,这对我有用。

    这是我使用的 Kovan 地址 0x9326BFA02ADD2366b30bacB125260Af641031331 它找到了返回的 ETH/USD 价格信息。

    所以基本上你可以通过两种方式解决它:

    1. 转到您的元掩码并将您的网络更改为 Rinkby 并在您的函数中使用 rinkby ETH/USD 地址或
    2. 将您的网络保持在 Kovan 上并使用 Kovan ETH/USD 地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2015-02-06
      • 2016-03-12
      相关资源
      最近更新 更多