39-Solidity8.0-合约调用其他合约

290 阅读1分钟

源码:

pragma solidity ^0.8.7;

contract CallTestContract {
    function setX(TestContract _test, uint _x) external {
        _test.setX(_x);
    }

    function getX(address _test) external view returns(uint x) {
        x = TestContract(_test).getX();
    }

    function setXandSendEther(address _test, uint _x) external payable {
        TestContract(_test).setXandReceiveEther{value: msg.value}(_x);
    }

    function getXandValue(address _test) external view returns(uint x, uint value) {
        (x, value) = 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 getXandValue() external view returns (uint, uint) {
        return (x, value);
    }

    function setXandReceiveEther(uint _x) external payable {
        x = _x;
        value = msg.value;
    }
}