第93篇 合约间调用
Posted wonderBlock
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第93篇 合约间调用相关的知识,希望对你有一定的参考价值。
本文环境:以太坊POA联盟链 + MetaMask + Remix
1.方法
上篇介绍“接口直接调用法”,实现合约对合约的调用;只能调用固定的接口,不够灵活。
本文介绍“通用型调用法”,实现合约对合约的调用;
通用型调用一般直接使用 call 方法调用。这种方式调用较灵活,缺点是容易出现 bug 。使用中请明确风险。
注意: 生成环境中一定要处理call的返回值!
pragma solidity ^0.5.10;
contract CallContract
/**
* @dev 无限制调用指定合约的方法。
* @param _contract address 被调用的合约的部署地址
* @param _func string 方法的声明
* @param _args string 方法的参数
*/
function callFunc(address _contract, string memory _func, string memory _args)
public
returns(bytes memory)
// 1. 获取函数的签名
bytes4 selector = bytes4(keccak256(abi.encodePacked(_func)));
// 2. 把函数签名和参数通过 encodeWithSelector 压缩成一个 bytes
bytes memory _calldata = abi.encodeWithSelector(selector, _args);
// 3. 调用函数的方法
(bool succe
以上是关于第93篇 合约间调用的主要内容,如果未能解决你的问题,请参考以下文章
第97篇 笔记-solidity中的抽象(Abstract)