MOAC实战 - 13. 合约调用合约

前言

合约调用合约,乍一听很高大上。

其实在使用过程中,很多地方会使用到。

主要是 solidity 里面的一些语法。

1. 声明跨合约的接口

例子:

如,A合约中有一个方法,名为 register 。我们想在 B 合约中调用。我们首先在B合约中声明接口。

接口定义了入参,和返回值等信息

1
2
3
interface InterfaceA {
function register(address _user, uint _amount) external returns(bool);
}

2. 实例化合约

这个写法也是走了很多的弯路才找到。

下面是在B合约文件中写的内容

1
2
3
4
5
address AddressA = 0xdddb8906d2e5c9e38b2e6e03150f9fec4102f6ec;  // 合约A的合约地址

InterfaceA Aconstructor = InterfaceA(AddressA); // 合约实例化

Aconstructor.register('xxx', 999); // 在此处即可直接调用A合约

补充说明:

  • 合约地址A,可以放在构造函数里面。在构造函数中触发。合约部署好即实例化。这样在下面所有函数中都可以调用。

  • 函数把合约地址当参数传入进来,有两种方式

    1
    2
    3
    4
    5
    function A(address add) public returns (bool) {
    InterfaceA Aconstructor = InterfaceA(add);
    Aconstructor.register(msg.sender, 888);
    return true;
    }
    1
    2
    3
    4
    function A(InterfaceA add) public returns (bool) {
    add.register(msg.sender, 888);
    return true;
    }

    这里比较推荐第一种,传入地址进来。在内部进行实例化。

    • 因为入参规范
    • 因为传入地址进来还可以做其他操作

结语

合约调用合约还是很常用了,用的好的话拓展性和上限都很高。

其实理解起来了并不困难,大家可以有空多了解了解

  • 版权声明: 本博客所有文章,未经许可,任何单位及个人不得做营利性使用!转载请标明出处!如有侵权请联系作者。
  • Copyrights © 2015-2020 翟天野

请我喝杯咖啡吧~