在solididity和Remix中恢复执行



我写了一个简单的代码,通过使用Chainlink接口获取ETH价格,如下所示:

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
contract ABI {
AggregatorV3Interface internal priceFeed;
constructor() public {
priceFeed = AggregatorV3Interface(0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c);
}
function latestPrice() public view returns (int256) {
(, int256 answer,,,) = priceFeed.latestRoundData();
return answer;
}
}

问题是当被Remix编译时,它没有问题,但执行后它抛出以下错误:

呼叫ContractNameFunctionName错误:执行已还原

你认为问题是什么?

因为你的问题没有指定在哪个网络上运行脚本,我假设你正在使用Remix VM模拟器。

指定的Chainlink合约仅在以太坊主网上可用。任何其他网络(包括模拟器)都不会在此地址上部署此合约。

要在Remix中使用数据馈送合同,您可以创建主网的本地分支,然后在IDE中连接到本地网络。

在Remix IDE中将ENVIRONMENT更改为Injected Web3,并连接metamask。例如,如果您正在使用Kovan网络,请使用文档中提到的地址。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
contract PriceConsumerV3 {
AggregatorV3Interface internal priceFeed;
/**
* Network: Kovan
* Aggregator: ETH/USD
* Address: 0x9326BFA02ADD2366b30bacB125260Af641031331
*/
constructor() {
priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);
}
/**
* Returns the latest price
*/
function getLatestPrice() public view returns (int) {
(
/*uint80 roundID*/,
int price,
/*uint startedAt*/,
/*uint timeStamp*/,
/*uint80 answeredInRound*/
) = priceFeed.latestRoundData();
return price;
}
}

相关内容

  • 没有找到相关文章

最新更新