solidity-21-call_contract

server/2024/9/21 8:51:42/

调用其他合约

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

// 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.ppmy.cn/server/119739.html

相关文章

linux命令行快捷键

第一章 linux之帮助命令 第二章 linux命令行快捷键 文章目录 linux命令行快捷键 linux命令行快捷键 Tab 命令补全或文件补全Ctrlu 删除或剪切光标之前的命令Ctrla 将光标移动到命令行开头Ctrle 将光标移动到命令行结尾ctrlc 终止当前命令ctrll 清屏ctrly 粘贴ctrlu的内容 参考…

使用注意力机制可以让你的模型更加灵活,但是需要额外的计算资源。rnn lstm bilstm attension

确实,使用注意力机制可以使模型更加灵活,但也确实需要额外的计算资源。注意力机制允许模型在处理序列数据时,能够动态地关注不同位置的重要性,从而更好地捕捉长依赖关系。下面是一个简单的注意力机制实现示例,可以帮助…

基于VUE的学生信息系统的设计与实现,包含学籍,成绩,课程选择选课,成绩分析统计百度图表echarts等功能

学生信息系统是一种用于管理学校学生信息的电子化系统,可以方便学校管理者和教师对学生的信息进行录入、查询和统计等操作,提高学校管理效率。本文将介绍学生信息系统的设计与实现。 首先,学生信息系统应该具备以下功能: 学生信息…

904.水果成篮

目录 题目介绍解题方法 题目介绍 解题方法 题目翻译成人话就是 :找包含两种元素的最长子串,返回其长度,和2958题的区别是:本题是找种类最多为2,上题是单个种类个数最多为k。 法一: class Solution {publ…

JavaSE--集合总览02:单列集合Collection的体系之一:List

Collection体系的特点 分为 list 和set集合,这篇文章主要讲述List,下篇讲述Set。 简单认识单列集合collection集合的特点 : list集合的特点: 有序 可重复 有索引 set集合的特点:无序 不重复 无索引 其中LinkedHashSet有序 TreeS…

大数据处理技术:MapReduce综合实训

目录 1 实验名称 2 实验目的 3 实验内容 4 实验原理 5 实验过程或源代码 5.1 WordCount词频统计 5.2 HDFS文件读写 5.3 倒排索引 5.4 网页排序——PageRank算法 6 实验结果 6.1 WordCount词频统计 6.2 HDFS文件读写 6.3 倒排索引 6.4 网页排序——PageRank算法 1…

Spring 源码解读:手动实现Spring事件机制

引言 事件驱动的编程模式是现代软件架构中的一个重要概念,它允许不同组件之间通过发布事件和监听事件来实现松耦合。在Spring框架中,事件机制基于ApplicationEvent和ApplicationListener,为开发者提供了一种简洁而强大的事件发布和监听方式。…

【云原生监控】Prometheus之Alertmanager报警

Prometheus之Alertmanager报警 文章目录 Prometheus之Alertmanager报警概述资源列表基础环境一、部署Prometheus服务1.1、解压1.2、配置systemctl启动1.3、监控端口 二、部署Node-Exporter2.1、解压2.2、配置systemctl启动2.3、监听端口 三、配置Prometheus收集Exporter采集的数…