Skip to content

Latest commit

 

History

History
52 lines (45 loc) · 1.41 KB

File metadata and controls

52 lines (45 loc) · 1.41 KB

调用其他合约

调用其他合约四种写法:

// 写一个OtherContract供其他合约调用
contract OtherContract {
    uint256 private _x = 0; // 状态变量_x
    // 收到eth的事件,记录amount和gas
    event Log(uint256 amount, uint256 gas);

    // 返回合约ETH余额
    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }

    // 可以调整状态变量_x的函数,并且可以往合约转ETH (payable)
    function setX(uint256 x) external payable {
        _x = x;
        // 如果转入ETH,则释放Log事件
        if (msg.value > 0) {
            emit Log(msg.value, gasleft());
        }
    }

    // 读取_x
    function getX() external view returns (uint256 x) {
        x = _x;
    }
}

contract CallContract {
    // 1. 传入合约地址
    function setOneX(address _address, uint256 x) external payable {
        OtherContract(_address).setX(x);
    }
    // 2. 传入合约变量
    function setTowX(OtherContract _address, uint256 x) external payable {
        _address.setX(x);
    }
    // 3. 创建合约变量
    function setThreeX(address _address, uint256 x) external payable {
        OtherContract oc = OtherContract(_address);
        oc.setX(x);
    }
    // 4.调用合约并发送ETH
    function setFourX(address _address, uint256 x) external payable {
        OtherContract(_address).setX{value: msg.value}(x);
    }
}