第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篇 合约间调用的主要内容,如果未能解决你的问题,请参考以下文章

第126篇 合约间调用方法

第126篇 合约间调用方法

第94篇 合约间调用

第97篇 笔记-solidity中的抽象(Abstract)

第97篇 笔记-solidity中的抽象(Abstract)

第158篇 合约安全-selfdestruct