繁体   English   中英

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

[英]Call deployed smart contract function from new smart contract via bytes.?

根据团结文件页面

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

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 {}
}

地址:'0x0aaaaaaaaaaaaaaaaaaaaaaaaaaaax

现在,我创建了另一个合约来执行baz方法。

pragma solidity ^0.4.16;

contract ResultUtil {
  function generateResult(address _foo, bytes _data) public {
   _foo.call(_data);   // call baz method.
  }
}

执行函数generateResult(“ 0x0aaaaaaaaaaaaaaaaaaaaaaaaaaaax”,“ 0xcdcd77c0000000000000000000000000000000000000000000000000000000000000000000000000004500000000000000000000000000000000000000000000000000000000000000000000000000”)

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

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

有关pure函数和view函数的更多信息,请参见Solidity文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM