pragma solidity 0.6.2;
/*
合約調(diào)用合約,并解析返回參數(shù)
*/
contract ContractCallContract{
event Call(bytes k1,uint256 k2,uint256 k3);
function callContractByEncodeWithSelector(address contractAddress,uint256 a,uint256 b) public {
(bool success, bytes memory data) = contractAddress.call(abi.encodeWithSelector(getSelector(),a,b));
require(success,"call A is fail");
(uint256 c,uint256 d) = abi.decode(data,(uint256,uint256));
emit Call(data,c,d);
}
function callContractByEncodeWithSignature(address contractAddress,uint256 a,uint256 b) public {
(bool success, bytes memory data) = contractAddress.call(abi.encodeWithSignature("add(uint256,uint256)",a,b));
require(success,"call A is fail");
// 解析data
(uint256 c,uint256 d) = abi.decode(data,(uint256,uint256));
emit Call(data,c,d);
}
function callA(bytes4 b4,uint256[] memory list,address contractAddress) public {
(bool success, bytes memory data) = contractAddress.call(abi.encodeWithSelector(b4,list));
require(success,"call A is fail");
// 解析data
(uint256 a,uint256 b) = abi.decode(data,(uint256,uint256));
emit Call(data,a,b);
}
function getSelector() public pure returns(bytes4){
return bytes4(keccak256(bytes('add(uint256,uint256)')));
}
function getAddSelector() public pure returns(bytes4){
return bytes4(keccak256(bytes('add(uint256[])')));
}
}
contract A{
function add(uint256 a,uint256 b) public pure returns(uint256,uint256){
return (a+b,a-b);
}
function add(uint256[] memory a) public pure returns(uint256,uint256){
return (a[0]+a[1],a[0]-a[1]);
}
}
ContractCallContract
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 版本:ios 1.2.1 亮點: 1.app角標(biāo)可以實時更新天氣溫度或選擇空氣質(zhì)量,建議處女座就不要選了,不然老想...