根据可靠性文件page
我按照合同创建并部署:
pragma solidity ^0.4.16;
contract Foo {
uint public result;
function bar(bytes3[2]) public pure {}
function baz(uint32 x, bool y) public pure returns (bool r) { result = x; return y; }
function sam(bytes, bool, uint[]) public pure {}
}
地址:' 0x0aaaaaaaaaaaaaaaaaaaaaaaaaax'
现在我已经创建了另一个执行baz方法的合约。
pragma solidity ^0.4.16;
contract ResultUtil {
function generateResult(address _foo, bytes _data) public {
_foo.call(_data); // call baz method.
}
}
执行函数generateResult(" 0x0aaaaaaaaaaaaaaaaaaaaaaaaaax"," 0xcdcd77c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001");
函数执行成功但结果值仍为0
答案 0 :(得分:1)
您将自己的功能标记为pure
,这意味着它不会改变状态。您无法更改合同的状态并在一种方法中返回值。使用一种方法更改合同的状态(未标记为pure
或view
),然后使用其他函数返回值(将为pure
或view
)。
有关pure
和view
功能的详情,请参阅Solidity documentation。