美文网首页
14. Solidity:调用其他合约

14. Solidity:调用其他合约

作者: 泡泡龙吐泡泡 | 来源:发表于2023-10-07 08:25 被阅读0次

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

    相关文章

      网友评论

          本文标题:14. Solidity:调用其他合约

          本文链接:https://www.haomeiwen.com/subject/ekkcbdtx.html