You are viewing a single comment's thread from:

RE: Solidity开发指南

in #starnote3 days ago

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

interface.jpg

一个合约想调用另一个合约的方法时,尽量用接口来调用,不要用call, delegatecall。
注意:两个合约间通过接口会相互改变状态变量。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface MyInterface {
    function add(uint m, uint n) external returns(uint);
    function mul(uint m, uint n) external returns(uint);
    
}


contract MyContract is MyInterface {
    function add(uint m, uint n) public override returns(uint) {
        return m + n;
    }
    function mul(uint m, uint n) public override returns(uint) {
        return m * n;
    }
}


contract NewContract {
    MyInterface my = new MyContract();
    function calc(uint m, uint n) public returns(uint) {
        return my.add(m,n) + my.mul(m,n);
    }
}