当前位置: 首页 > news >正文

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);}
}

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


http://www.mrgr.cn/news/26844.html

相关文章:

  • SOLIDWORKS链阵列功能详解—快速设计链条
  • 高性能计算应用优化之代码实现调优(二)
  • 异构仿真:打造更可靠的综合化航空电子软件
  • windows server 下 布置服务器常用技巧
  • 性能测试-性能分析与调优原理总结
  • electron多标签页模式更像客户端
  • 为什么企业可以通过数据产品实现商业价值
  • springboot共享办公空间管理系统-计算机毕业设计源码78033
  • 基于微信小程序的垃圾分类(lw+演示+源码+运行)
  • 一个新目标:开始每日练习打字
  • SQL 基础知识
  • o1系列亮相!OpenAI的AI新高度,解锁复杂推理能力
  • Halo 开发者指南——容器私有化部署
  • 软件测试入门指南
  • 解密AI创作:提升Prompt提示词的提问技巧
  • Redis——常用数据类型Zset
  • yjs03——matplotlib的介绍与使用(一个图里面画折线)
  • Java:处理crontab定时任务的最简单方法
  • ComfyUI中用wget下载、安装节点
  • PMP--一模--解题--51-60