我试图从其他协定中调用一个函数,但是由于异常运行而不断进入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()一个视图,则编译时会发生此错误。
我在询问之前尝试搜索,但是找不到解释它的帖子(至少不是以我的理解)。
为什么会发生这种情况,有什么办法可以解决它,以便代码按我的预期去做?
答案 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!";
}
}