14. Solidity:调用其他合约

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}();

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容