通过字节从新的智能合约调用已部署的智能合约功能。?
Call deployed smart contract function from new smart contract via bytes.?
根据 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 {}
}
地址:'0x0aaaaaaaaaaaaaaaaaaaaaaaaaax'
现在我已经创建了另一个合约来执行 baz 方法。
pragma solidity ^0.4.16;
contract ResultUtil {
function generateResult(address _foo, bytes _data) public {
_foo.call(_data); // call baz method.
}
}
执行函数generateresult(“ 0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX”
函数执行成功但结果值为0
您将函数标记为 pure
,这意味着它不会改变状态。您不能在一种方法中更改合同状态和 return 值。使用一种方法更改合约的状态(未标记为 pure
或 view
),然后使用不同的函数 return 值(将是 pure
或 view
).
有关 pure
和 view
函数的更多信息,请参阅 Solidity documentation。
根据 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 {}
}
地址:'0x0aaaaaaaaaaaaaaaaaaaaaaaaaax'
现在我已经创建了另一个合约来执行 baz 方法。
pragma solidity ^0.4.16;
contract ResultUtil {
function generateResult(address _foo, bytes _data) public {
_foo.call(_data); // call baz method.
}
}
执行函数generateresult(“ 0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX”
函数执行成功但结果值为0
您将函数标记为 pure
,这意味着它不会改变状态。您不能在一种方法中更改合同状态和 return 值。使用一种方法更改合约的状态(未标记为 pure
或 view
),然后使用不同的函数 return 值(将是 pure
或 view
).
有关 pure
和 view
函数的更多信息,请参阅 Solidity documentation。