欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > solidity-21-call_contract

solidity-21-call_contract

2025/4/2 14:21:55 来源:https://blog.csdn.net/qq_54384621/article/details/142259789  浏览:    关键词:solidity-21-call_contract

调用其他合约

练笔时刻,首先创建一个合约用于被其他合约调用

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;contract othercontract{// 定义一个只有自己能访问的参数uint256 private _x = 0;event log(uint amount,uint gas);function getbalance() public view returns (uint _balance){_balance = address(this).balance;}// 消息会携带value 所以需要标注为payablefunction setx(uint256 x) external payable {_x = x;if(msg.value > 0){emit log(msg.value, gasleft());} }// 返回这个_x,私有参数可以通过方法进行访问但不能直接访问function get_x() public view returns(uint x){x = _x;}
}

那么如何调用这个合约呢?
我们可以利用合约的地址和合约代码(或接口)来创建合约的引用:_Name(_Address),其中_Name是合约名,应与合约代码(或接口)中标注的合约名保持一致,_Address是合约地址。然后用合约的引用来调用它的函数:_Name(_Address).f(),其中f()是要调用的函数。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;contract othercontract{// 定义一个只有自己能访问的参数uint256 private _x = 0;event log(uint amount,uint gas);function getbalance() public view returns (uint _balance){_balance = address(this).balance;}// 消息会携带value 所以需要标注为payablefunction setx(uint256 x) external payable {_x = x;if(msg.value > 0){emit log(msg.value, gasleft());} }// 返回这个_x,私有参数可以通过方法进行访问但不能直接访问function get_x() public view returns(uint x){x = _x;}
}contract Callcontract{function callsetx(address add,uint256 x) external {// 调用的这个合约的名称和地址都需要自己来找othercontract(add).setx(x);}function callgetx(address add) external view returns (uint256 x){othercontract c = othercontract(add);x = c.get_x();}function callgetx2(othercontract add) external view returns (uint256) {return add.get_x();}function setxtransfereth(address add,uint256 x) external payable{// 这种payable方法可以通过这种方式为消息携带币种// msg.value是调用方携带的币种数量othercontract(add).setx{value:msg.value}(x);}
}

可以通过这种方式去间接调用合约。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词