Blockchain 通过字节从新智能合约调用部署的智能合约函数。?

Blockchain 通过字节从新智能合约调用部署的智能合约函数。?,blockchain,ethereum,solidity,abi,smartcontracts,Blockchain,Ethereum,Solidity,Abi,Smartcontracts,根据坚固性文件 我创建并部署了以下合同: 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[]) p

根据坚固性文件

我创建并部署了以下合同:

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.
  }
}
正在执行函数GenerateResult0x0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaax,0xCDCDD77C0000000000000000000000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000001


函数已成功执行,但结果值仍为0

您将函数标记为纯函数,这意味着它不会改变状态。您不能在一个方法中改变合同的状态并返回值。使用一种方法更改未标记为pure或view的合同状态,然后使用不同的函数返回pure或view的值


有关pure和view函数的更多信息,请参阅。

fyi,如果我调用函数bytes4sha3bazuint256,bool,15,true,则它工作正常。感谢Adam,它只是pure的问题。我希望solidity团队根据文档更新他们的示例。