当前位置:网站首页>第93篇 合约间调用(二)
第93篇 合约间调用(二)
2022-07-21 10:37:00 【wonderBlock】
本文环境:以太坊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
边栏推荐
猜你喜欢
随机推荐
Mongodb get started
绝地求生 吃鸡 f12 截图保存路径参考
Specific use examples of dotweenpath
简易Shader实践记录5-屏幕渐变
Simple shader practice record 5-Screen gradient
Elk+filebeat build distributed logs
Jenkins安装并配置加速器
怎样才能让需求无法如期顺利上线(四)集成测试阶段
Solution to the offset of Gaode map positioning on GeoServer layer
Go process string to legal file name
Go之数组/切片
C#加壳工具做代码加密保护
Simple shader practice record 4-streamer effect
百度地图、高德地图、腾讯地图三位一体地图定位开发
day 3
Gbdt frame
LeetCode402 移掉 K 位数字
学习基础-单词记忆
restTemplate返回字符乱码问题
How to make the demand unable to go online smoothly as scheduled (V) business acceptance stage