在以太坊中,常常涉及到合约之间的相互调用,可以使用call(bytes4(keccak256(“被调用的函数原型”)来实现。
下面介绍,合约EthTwo通过call()方式,来调用合约EthOne里的setNum()方法。
1、编写合约EthOne
//EthOne.sol
pragma solidity ^0.4.18;
contract EthOne {
uint public num = 1;
function setNum(uint val) public returns(uint) {
num = val;
return num;
}
}
2、编写合约EthTwo
//EthTwo.sol
pragma solidity ^0.4.18;
contract EthTwo {
address ads;
constructor(address addr) public {
ads = addr;
}
function setNum(uint val) public returns(uint) {
require(ads.call(bytes4(keccak256("setNum(uint256)")),val));
return val;
}
}
3、部署合约
3.1 先部署合约EthOne
在Remix里先部署合约EthOne,得到Ethone的合约地址为:
0x98cacA17dc7eede98691d30703497cf0224F3A2c
3.2 部署合约EthTwo
拷贝Ethone的合约地址,复制到EthTwo的Deploy按钮旁边的输入框里,如图(1)所示:
点击[Deploy],得到EthTwo的合约地址为:0x691Ab2691293A60B3A3609b13fFab728743B2fC1
4、EthTwo调用EthOne
首先,在Remix部署页面的ETHONE栏目里,点击[num]得到num的初始值为num = 1,
然后,在ETHTWO栏目里,设置num值,比如,setNum(4) --> 点击[transact], 如图(2)所示:
最后,回到ETHONE栏目里,点击[num]发现num=4,即ETHTwo通过EthOne成功,也就是call()方法可以实现合约之间的调用。如图(3)所示: