实现合约间的接口 / 学习智能合约#42

in STEEM CN/中文3 months ago

一个合约想调用另一个合约的方法时,尽量用接口来调用,不要用call和 delegatecall(这两个方法比较底层,容易出错)。注意:两个合约间通过接口会相互改变状态变量。

接口有点类似抽象合约的功能,可用于两个合约间的调用。是非侵入式接口,也就是不用显式的调用接口。
注意:B中引用A的接口,A的函数仍会在A的环境中执行。

interface.jpg
接口示意图

eg:

// SPDX-License-Identifier: GPL-3.0  //开源协议

pragma solidity >=0.7.0 <0.8.0;  //申明版本

interface FuncAdd {
    function add(uint x, uint y) external returns(uint);
}

contract TestAdd {
    //用合约地址来实例化接口
    FuncAdd t = FuncAdd(0x3dA5048CE9384a35fF4F3AAF0B4804114e584039);
    
    function test(uint x, uint y) public returns(uint){
        return t.add(x, y);
    }
}