本次较为重点,有两个文件,组合成本次的学习资料
文件一,也称为A,被调用的合约
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
contract jiajianfa {
uint public num;
//纯函数不传递参数测试,且公开
function jia() public {
num +=1;
}
//传递参数接口测试,外部调用
function jia2(uint x) external pure returns (uint){
return x+5;
}
}
文件二,称为B,发起调用的合约
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
//接口文件
//api这个相当于路由
//接口中必须使用 外部函数
interface api {
function jia() external;
function jia2(uint x) external pure returns (uint);
}
//这里是调用其他合约接口的核心逻辑部分
contract con {
uint public ppp;
uint public ppp2;
api public API;
constructor(address dizhi) {
API \= api(dizhi); //这里调用合约中的外部函数
}
//传入地址,表明调用的哪个合约
function fangfa(uint y) external {
ppp2 \= API.jia2(y);
}
function fangfa2() external {
API.jia(); //这里调用合约中的外部函数
}
}
//本期重点知识
/*
1. 被调用的合约暂时称为 A,调用者称为 B. 当B调用A时,A的合约方法,仅可以为public 和 external。且
A 合约中,有返回的也就是return声明词,在B合约中,接口书写中,也必须有return。
2. 部署方式有两种,第一种是直接部署API,这种是需要填写地址,相当于外部多一个合约去调用里面的方法
第二中是部署 本代码中名称为 con的合约,这种可以在调用的时候,增加自己的业务逻辑处理后进行调用
3. 有反馈的,可以使用定义变量来保存,没有返回的,相当于是直接在A合约中直接执行方法,方法处理的结果,在B合约中无法看见
只会看见是否调用成功,调用后的结果,要去A合约中查看结果
*/