【问题标题】:Call deployed smart contract function from new smart contract via bytes.?通过字节从新的智能合约调用部署的智能合约功能。?
【发布时间】:2018-09-23 10:55:25
【问题描述】:

根据solidity文档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 {}
}

地址:'0x0aaaaaaaaaaaaaaaaaaaaaaaaax'

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

pragma solidity ^0.4.16;

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

执行功能生成器(“0x0aaaaaaaaaaaaaaaaaaaaaaaaaaax”,“0xcdcd77c00000000000000000000000000/30000000000/300000000/30000000000/300000000/3000000000000/30000000000/300000000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c0000c600c600c600ci000000/30000/30000c0000c0000c0000cive0000c0000c600c600c600c800c600cive0000c600cive0000c600cive000000/30000/3000000/30000/30000c0000caw00000000/30000/>

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

【问题讨论】:

  • fyi,如果我调用函数(bytes4(sha3("baz(uint256,bool)")), 15, true),它工作成功。

标签: blockchain ethereum solidity abi smartcontracts


【解决方案1】:

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

有关pureview 函数的更多信息,请参阅Solidity documentation

【讨论】:

  • 谢谢亚当,它只是纯问题。我希望 Solidity 团队从文档中更新他们的示例。
猜你喜欢
  • 1970-01-01
  • 2022-12-06
  • 2022-08-05
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 2021-10-27
  • 2017-08-07
  • 2021-11-15
相关资源
最近更新 更多