Solidity进阶:调用其他合约

文章展示了如何创建一个简单的智能合约TargetContract,它包含设置和获取状态变量_x的功能,以及接收ETH和触发事件的机制。另一个合约CallTargetContract用于调用TargetContract的函数,演示了如何在Solidity中进行合约间的交互和函数调用。
摘要由CSDN通过智能技术生成

我们先写一个简单的合约TargetContract来调用。

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

contract TargetContract{
    uint256 private _x = 0;
    
    event Log(uint value, uint gas);
    function setX(uint256 x) external payable{
        _x = x;
        emit Log(msg.value, gasleft());
    }

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

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

这个合约包含一个状态变量_x,一个事件Log在收到ETH时触发,三个函数:

  • setX(): external payable函数,可以设置_x的值,并向合约发送ETH。
  • getBalance(): 返回合约ETH余额。
  • getX(): 读取_x的值。

我们可以利用合约的地址和合约代码(或接口)来创建合约的引用:ContractName(_Address),其中ContractName是合约名,_Address是合约地址。然后用合约的引用来调用它的函数:ContractName(_Address).f(),其中f()是要调用的函数。

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

contract CallTargetContract {
	// _target是TargetContract部署的合约地址
    function setX(address _target, uint256 _x) external payable{
        TargetContract(_target).setX{value: msg.value}(_x);
    }

    function getBalance(address _target) view public returns(uint) {
        return TargetContract(_target).getBalance();
    }
	
	// _target的类型TargetContract底层也是address类型
    function getX(TargetContract _target) external view returns(uint x){
        x = _target.getX();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值