实现合约间的接口 / 学习智能合约#42
一个合约想调用另一个合约的方法时,尽量用接口来调用,不要用call和 delegatecall(这两个方法比较底层,容易出错)。注意:两个合约间通过接口会相互改变状态变量。
接口有点类似抽象合约的功能,可用于两个合约间的调用。是非侵入式接口,也就是不用显式的调用接口。
注意:B中引用A的接口,A的函数仍会在A的环境中执行。
接口示意图
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);
}
}