第93篇 合约间调用(二)

本文介绍了以太坊POA联盟链上通用型合约调用方法,通过call方法实现合约间的灵活调用。详细阐述了如何获取函数签名、打包签名和参数,以及调用合约和处理返回值的步骤。并提供了示例合约A和合约C,演示了调用过程。注意在生成环境中必须处理call返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文环境:以太坊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
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wonderBlock

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值