通过字节从新的智能合约调用已部署的智能合约功能。

时间:2018-04-13 06:50:12

标签: blockchain ethereum solidity abi smartcontracts

根据可靠性文件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

1 个答案:

答案 0 :(得分:1)

您将自己的功能标记为pure,这意味着它不会改变状态。您无法更改合同的状态并在一种方法中返回值。使用一种方法更改合同的状态(未标记为pureview),然后使用其他函数返回值(将为pureview )。

有关pureview功能的详情,请参阅Solidity documentation