41调用其他函数

调用其他合约的函数

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

contract CallTestContract{
    function setX(address _test,uint _x) external {
        TestContract(_test).setX(_x);
    }
    // 另一种写法
    function setX1(TestContract _test,uint _x) external {
        _test.setX(_x);
    }
    function getX(address _test) external view  returns (uint){
        return TestContract(_test).getX();
    }
}

contract TestContract{
    uint public x;
    uint public value=123;

    function setX(uint _x) external {
        x=_x;
    }

    function getX() external view returns (uint){
        return x;
    }

}

调用其他合约的函数(带主币)

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

contract CallTestContract{

    function setXandSendEther(address _test,uint _x) external payable {
        TestContract(_test).setXandReceiveEther(_x);
    }
    function getXandValue(address _test) external view  returns (uint,uint){
        return TestContract(_test).getXandValue();
    }
}

contract TestContract{
    uint public x;
    uint public value=123;

    function setX(uint _x) external {
        x=_x;
    }

    function getX() external view returns (uint){
        return x;
    }

    function setXandReceiveEther(uint _x) external payable {
        x=_x;
        value=msg.value;
    }
    function getXandValue() external view returns (uint,uint){
        return (x,value);
    }
}