VM Out of Gas Exception试图调用属于另一个合约的函数

时间:2018-12-06 11:34:43

标签: solidity

我试图从其他协定中调用一个函数,但是由于异常运行而不断进入VM。

我正在使用Oraclize提供的IDE来测试以下代码。

pragma solidity ^0.4.22;

contract ContractA {
    ContractB contractB;

    constructor() public {
        contractB = new ContractB();
    }

    function saySomething() external returns(string) {
        return contractB.retunsAString();
    }
}

contract ContractB {
    function retunsAString() public pure returns(string) {
        return "Hello to you all!";
    }
}

如果我尝试使函数说出soSomething()一个视图,则编译时会发生此错误。

我在询问之前尝试搜索,但是找不到解释它的帖子(至少不是以我的理解)。

为什么会发生这种情况,有什么办法可以解决它,以便代码按我的预期去做?

1 个答案:

答案 0 :(得分:0)

您的代码很好(只需在saySomething函数中添加view)。 因此,首先,从以太坊-http://remix.ethereum.org进入官方IDE。

右上角转到Run标签,然后选择:环境-JavaScript VM(如果您具有metamask-注入的web3)。粘贴此代码,然后按deploy

pragma solidity ^0.5.1;

contract ContractA {
    ContractB contractB;

    constructor() public {
        contractB = new ContractB();
    }

    function saySomething() external view returns(string memory) {
        return contractB.retunsAString();
    }
}

contract ContractB {
    function retunsAString() public pure returns(string memory) {
        return "Hello to you all!";
    }
}