14.1 编写测试合约
首先编写一个测试合约,用于被其他合约调用:
contract TestContract {
uint public x;
// 设置状态变量
function setX(uint _x) external {
x = _x;
}
// 获取状态变量的值
function getX() external view returns (uint){
return x;
}
// 用于接收ETH
function receiveETH() external payable {}
// 获取合约余额
function getBalance() external view returns (uint) {
return address(this).balance;
}
}
测试合约有一个状态变量x,同时有以下几个函数:
-
setX()
:设置状态变量x -
getX()
:获取状态变量x的值 -
receiveETH()
:用于接收ETH -
getBalance()
:用于获取合约余额
14.2 编写调用测试合约的合约
再编写一个合约,用于对测试合约进行调用:
contract CallTestContract {
// 调用测试合约方法一
function getX(TestContract _t) external view returns (uint){
return _t.getX();
}
//调用测试合约方法二
function setX(address _t, uint _x) external {
TestContract(_t).setX(_x);
}
// 调用测试合约接收ETH方法
function receiveETH(TestContract _t) external payable {
_t.receiveETH{value: msg.value}();
}
}
合约包含三个函数:
-
setX()
:调用测试合约设置状态变量x -
getX()
:调用测试合约获取状态变量x的值 -
receiveETH()
:调用测试合约的receiveETH()
,将收到的ETH转入测试合约
调用其他合约有两种方式:
方式一:
函数中传入的参数直接是测试合约类型:TestContract _t
,这样可以直接通过_t调用测试合约的函数:_t.getX();
。
方式二:
函数中传入的参数是测试合约的地址:address _t
,需要将地址类型转换成测试合约类型,再调用测试合约的函数:TestContract(_t).setX(_x);
。
将收到的ETH全部转入测试合约中的方法如下:
_t.receiveETH{value: msg.value}();