做家务的男人网站,东莞市纺织服装学校,vps amh wordpress,做麻将网站合约之间的函数调用 EOA#xff0c;external owned account#xff0c;外部账号#xff0c;例如metamask调用最终总是由EOA发起的合约之间的调用使得一次完整的调用成为一个调用链条
合约间调用过程
调用者须持有被调用合约的地址得到被调用合约的信息将地址重载为被调用合…合约之间的函数调用 EOAexternal owned account外部账号例如metamask调用最终总是由EOA发起的合约之间的调用使得一次完整的调用成为一个调用链条
合约间调用过程
调用者须持有被调用合约的地址得到被调用合约的信息将地址重载为被调用合约调用它的函数
最直接的调用方式源文件内部
调用者直接将被调用合约的地址重载为合约的实例用合约实例调用合约函数
// SPDX-License-Identifier: GPL-3.0pragma solidity 0.8.2 0.9.0;contract Callee {uint public x;function setX(uint _x)public{x _x;}
}
contract Caller{address calleeAddress;constructor(address _calleeAddress){calleeAddress _calleeAddress;}function setCalleeX(uint _x)public{Callee callee Callee(calleeAddress);callee.setX(_x);}}
//0xd9145CCE52D386f254917e481eB44e9943F39138 // Callee合约实例的地址 先部署Callee合约获取地址作为Caller的构造参数通过import调用合约函数源文件之间
import被调用合约的源文件调用者将被调用合约的地址重载为合约实例用合约实例调用合约函数
Callee.sol
// SPDX-License-Identifier: GPL-3.0pragma solidity 0.8.2 0.9.0;contract Callee {uint public x;function setX(uint _x)public{x _x;}
}
Caller.sol
// SPDX-License-Identifier: GPL-3.0pragma solidity 0.8.2 0.9.0;
import ./Callee.sol;contract Caller{address calleeAddress;constructor(address _calleeAddress){calleeAddress _calleeAddress;}function setCalleeX(uint _x)public{Callee callee Callee(calleeAddress);callee.setX(_x);}}
// 0xd9145CCE52D386f254917e481eB44e9943F39138通过接口的调用
合约的接口等价于其ABI接的定义方法接口的使用方法
ICallee.sol
// SPDX-License-Identifier: GPL-3.0pragma solidity 0.8.2 0.9.0;interface ICallee {function setX(uint _x) external;}Callee.sol
// SPDX-License-Identifier: GPL-3.0pragma solidity 0.8.2 0.9.0;
// import ./ICallee.sol; // 柔性不强制一定要is Icallee 只要实现是一致就行 // contract Callee is Icallee {
contract Callee {uint public x;uint public y;function setX(uint _x)public{x _x;}function setY(uint _y)public {y_y;}//.....
}Caller.sol
// SPDX-License-Identifier: GPL-3.0pragma solidity 0.8.2 0.9.0;interface ICallee {function setX(uint _x) external;function setY(uint _x) external;
}contract Caller{address calleeAddress;constructor(address _calleeAddress){calleeAddress _calleeAddress;}function setCalleeX(uint _x)public{ICallee callee ICallee(calleeAddress);callee.setY(_x);}}
// 0xd9145CCE52D386f254917e481eB44e9943F39138面向接口
与一般开发语言一样面向接口而不是实现不要求被调用者语法上实现一个接口接口最小化有必要的才放入接口