【问题标题】:Attn: call to FundMe.getVersion errored: VM execution error. Reverted 0xAttn:调用 FundMe.getVersion 错误:VM 执行错误。恢复 0x
【发布时间】:2021-12-03 00:03:00
【问题描述】:

我该如何解决这个问题?

在您的 getVersion() 函数中硬编码的 0x5f4e... 地址在 Kovan 测试网上不包含任何智能合约(链接)。尽管它在主网上部署了合约,但这些环境是分开的。
当地址上没有智能合约时,没有任何东西可以向内部调用发送响应。您的代码需要来自 version() 调用的 uint256 响应,以便它可以从 getVersion() 返回它。

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

/ SPDX-License-Identifier: MIT

pragma solidity >=0.6.6 <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 addressToAmountFunded;

    function fund() public payable {
        addressToAmountFunded[msg.sender] += msg.value;
        //What the eth --> usd conversion rate
    }

    function getVersion() public view returns (uint256) {
        AggregatorV3Interface priceFeed = AggregatorV3Interface(0x8A753747A1Fa494EC906cE90E9f37563A8AF630e);
        return priceFeed.version();
    }
}

【问题讨论】:

    标签: function get virtual-machine version


    【解决方案1】:
        AggregatorV3Interface priceFeed = AggregatorV3Interface(0x8A753747A1Fa494EC906cE90E9f37563A8AF630e);
    

    我检查了你在这里使用的地址“0x8A753747A1Fa494EC906cE90E9f37563A8AF630e”,在 4 个不同的链中找到。

    Rinkeby、Kovan、Ropsten、BscScan。看起来您的元掩码已连接到 Kovan,但合同未部署到 Kovav。在 Metamask 中验证您的合约连接到哪个链并连接到该网络

    【讨论】:

      【解决方案2】:

      一旦检查合同选择正确,如果您选择 AggregationV3Interface 合同并部署它会引发此错误,请选择您正在处理的 sol 文件并尝试 XD

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多