【Solidity学习笔记】调用其它合约

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract OtherContract {

    uint256 private _x = 0;

    event Log(uint amount, uint gas);

    function getBalance() view public returns(uint){
        return address(this).balance;
    }

    function setX(uint256 x) external payable {
        _x = x;
        if (msg.value > 0) {
            emit Log(msg.value, gasleft());
        }
    }

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

contract CallContract {

    // 1.传入目标合约地址,生成目标合约的引用,然后调用目标函数
    function callSetX(address _Address, uint256 x) external {
        OtherContract(_Address).setX(x);
    }

    // 2.传入合约变量,把address类型变为目标合约名,OtherContract _Address底层类型仍然是address
     function callGetX(OtherContract _Address) external view returns(uint x){
        x = _Address.getX();
    }

    // 2.创建合约变量,可以创建合约变量,然后通过它来调用目标函数
    function callGetX2(address _Address) external view returns(uint x){
        // 给变量oc存储了OtherContract合约的引用
        OtherContract oc = OtherContract(_Address);
        x = oc.getX();
    }

    // 调用合约并发送eth
    function setXTransferETH(address otherContract, uint256 x) payable external{
        OtherContract(otherContract).setX{value: msg.value}(x);
    }
}

猜你喜欢

转载自blog.csdn.net/qq2942713658/article/details/129508290