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

一个合约想调用另一个合约的方法时,尽量用接口来调用,不要用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);
}
}