合约之间调用-如何实现函数静态调用?

合约之间的函数调用

在这里插入图片描述

  • EOA,external owned account,外部账号,例如metamask
  • 调用最终总是由EOA发起的
  • 合约之间的调用使得一次完整的调用成为一个调用链条

合约间调用过程

  • 调用者须持有被调用合约的地址
  • 得到被调用合约的信息
  • 将地址重载为被调用合约,调用它的函数

最直接的调用方式(源文件内部)

  • 调用者直接将被调用合约的地址重载为合约的实例
  • 用合约实例调用合约函数
// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.2 <0.9.0;contract Callee {uint public x;function setX(uint _x)public{x = _x;}
}
contract Caller{address calleeAddress;constructor(address _calleeAddress){calleeAddress = _calleeAddress;}function setCalleeX(uint _x)public{Callee callee = Callee(calleeAddress);callee.setX(_x);}}
//0xd9145CCE52D386f254917e481eB44e9943F39138 // Callee合约实例的地址 先部署Callee合约获取地址作为Caller的构造参数

通过import调用合约函数(源文件之间)

  • import被调用合约的源文件
  • 调用者将被调用合约的地址重载为合约实例
  • 用合约实例调用合约函数

Callee.sol

// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.2 <0.9.0;contract Callee {uint public x;function setX(uint _x)public{x = _x;}
}

Caller.sol

// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.2 <0.9.0;
import "./Callee.sol";contract Caller{address calleeAddress;constructor(address _calleeAddress){calleeAddress = _calleeAddress;}function setCalleeX(uint _x)public{Callee callee = Callee(calleeAddress);callee.setX(_x);}}
// 0xd9145CCE52D386f254917e481eB44e9943F39138

通过接口的调用

  • 合约的接口等价于其ABI
  • 接的定义方法
  • 接口的使用方法

ICallee.sol

// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.2 <0.9.0;interface ICallee {function setX(uint _x) external;}

Callee.sol

// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.2 <0.9.0;
// import "./ICallee.sol"; // 柔性,不强制一定要is Icallee 只要实现是一致就行 // contract Callee is Icallee {
contract Callee {uint public x;uint public y;function setX(uint _x)public{x = _x;}function setY(uint _y)public {y=_y;}//.....
}

Caller.sol

// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.2 <0.9.0;interface ICallee {function setX(uint _x) external;function setY(uint _x) external;
}contract Caller{address calleeAddress;constructor(address _calleeAddress){calleeAddress = _calleeAddress;}function setCalleeX(uint _x)public{ICallee callee = ICallee(calleeAddress);callee.setY(_x);}}
// 0xd9145CCE52D386f254917e481eB44e9943F39138

面向接口

  • 与一般开发语言一样,面向接口而不是实现
  • 不要求被调用者语法上实现一个接口
  • 接口最小化(有必要的才放入接口)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/19041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用swagger2做测试,报java.lang.NumberFormatException: For input string: ““ 的异常

文章目录 一、问题描述二、原因分析三、解决方案3.1、方案一&#xff1a;手动添加example值&#xff08;费时费力不推荐&#xff09;3.2、方案二&#xff1a;导入1.5.21(及之后)版本的swagger-models&#xff08;推荐&#xff09; 本文基于swagger2.9.2进行讲解 <!--swagge…

HTTP Digest Access Authentication Schema

HTTP Digest Access Authentication Schema 背景介绍ChallengeResponse摘要计算流程总结参考 背景 本文内容大多基于网上其他参考文章及资料整理后所得&#xff0c;并非原创&#xff0c;目的是为了需要时方便查看。 介绍 HTTP Digest Access Authentication Schema&#xff…

基础—SQL—DQL(数据查询语言)基础查询

一、引言 1、介绍&#xff1a; 分类全称描述DQL英文全称&#xff1a;Data Query Language(数据查询语言)主要是学习对数据库表中的记录进行查询的语句 2、讲解 日常的开发中或者对于一个正常的业务系统中&#xff0c;对于查询的操作次数是远远多于数据的增删改的频次。例如…

哪里能下载到合适的衣柜3D模型素材?

室内设计师在进行家居设计时&#xff0c;衣柜3D模型素材是非常重要的工具。那么&#xff0c;哪里能下载到合适的衣柜3D模型素材呢? 一、建e网&#xff1a; ①建e网是一个专注于3D模型素材分享的平台&#xff0c;上面可以找到大量的衣柜3D模型。 ②该网站提供的模型种类丰富&am…

Remix IDE 创建和部署第一个合约HelloWorld

Remix IDE 地址 https://remix.ethereum.org/ 流程步骤&#xff1a; 创建一个新文件 输入文件名保存 在文件资源管理器中&#xff0c;点击新建文件图标创建一个新文件&#xff0c;并给它命名。在 Remix 中&#xff0c;默认的文件扩展名是 .sol &#xff0c;如果文件名没有…

外企如何有效面对日益严格的跨境数据传输法律?

在当今这个数据驱动的时代&#xff0c;随着全球化步伐的加快&#xff0c;企业跨国界的数据交流已成为常态。但随之而来的&#xff0c;是各国政府对跨境数据传输日益严格的规定和监管&#xff0c;这让众多外资企业&#xff08;简称“外企”&#xff09;在享受全球市场红利的同时…

Spring Cache自定义缓存key和过期时间

一、自定义全局缓存key和双冒号替换 使用 Redis的客户端 Spring Cache时&#xff0c;会发现生成 key中会多出一个冒号&#xff0c;而且有一个空节点的存在。 查看源码可知&#xff0c;这是因为 Spring Cache默认生成key的策略就是通过两个冒号来拼接。 同时 Spring Cache缓存…

Kong网关的负载均衡

安装java环境 查询 java安装包 196 yum list java* 安装java8197 yum install -y java-1.8.0-openjdk.x86_64 检验java8是否安装成功。198 java -version2个tomcat准备 另外一个tomcat区别在于&#xff1a;配置文件。conf/server.xml 启动tomcat [rootlocalhost bin]# ./…

C++之单链表与双链表逆序实例(二百七十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

拥塞控制的微观行为与力学解释

本文以 tcptrace 图为基&#xff0c;描述传输的微观行为&#xff0c;并给出一个初中几何描述的压水井模型。 统计复用网络的拥塞控制&#xff0c;宏观看 inflight&#xff0c;微观看 pacing rate&#xff0c;宏观大方向不对&#xff0c;微观再正确也不行。 而网络的统计动力学…

AI 驱动的低代码平台-网易CodeWave 低代码平台 AI 智能化实践

一、实践背景&#xff1a; 随着低代码赛道的蓬勃发展&#xff0c;越来越多的低代码产品如雨后般春笋涌出开始进入市场&#xff0c;面对市场的考验&#xff0c;低代码平台也在面临两大问题&#xff1a; 定制开发的使用门槛太高&#xff0c;效率太低。低代码产品进入到企业当中…

决策树模型-预测用户是否购买某母婴产品

1&#xff0c;场景描述 假设我们是京东的数据分析师&#xff0c;负责分析母婴产品的购买行为。我们想预测用户是否会购买一款新上线的母婴产品。为了进行预测&#xff0c;我们将利用用户的历史购买数据、浏览行为和其他特征&#xff0c;通过决策树模型进行分析&#xff0c;并提…

猫狗分类识别模型建立②模型建立

一、导入依赖库 pip install opencv-python pip install numpy pip install tensorflow pip install keras 二、模型建立 pip install opencv-python pip install numpy pip install tensorflow pip install kerasimport os import xml.etree.ElementTree as ETimpor…

NSSCTF-Web题目4

[SWPUCTF 2021 新生赛]hardrce 1、题目 2、知识点 rce&#xff1a;远程代码执行、url取反编码 3、解题思路 打开题目 出现一段代码&#xff0c;审计源代码 题目需要我们通过get方式输入变量wllm的值 但是变量的值被过滤了&#xff0c;不能输入字母和\t、\n等值 所以我们需…

【教学类-59-】专注力视觉训练01(圆点百数图)

背景需求&#xff1a; 视觉训练的神奇效果&#xff0c;让你的宝贝成为焦点 - 小红书魔法视觉追踪-视觉训练—— &#x1f50d;视觉训练&#x1f50d; &#x1f539;想要提高宝宝的专注力&#xff0c;视觉训练是个绝佳方法&#xff01; &#x1f539;让宝宝仔细观察数字的路线&a…

OrangePi AIpro 快速上手初体验——接口、样例和目标检测

​ 一、 开发板简介 OrangePi AIpro开发板是香橙派联合华为精心打造的高性能 AI 开发板&#xff0c;其搭载了昇腾 AI 处理器&#xff0c;可提供 8TOPS INT8 的计算能力&#xff0c;内存提供了 8GB 和 16GB两种版本。可以实现图像、视频等多种数据分析与推理计算&#xff0c;可…

【已解决】使用token登录机制,token获取不到,blog_list.html界面加载不出来

Bug产生 今天使用token完成用户登录信息的存储的时候被卡了大半天。 因为登录的功能写的已经很多了&#xff0c;所以今天就没有写一点验一点&#xff0c;而是在写完获取博客列表功功能&#xff0c;验证完它的后端后&#xff0c;了解完令牌的基本使用以及Jwt的基本使用方式——…

4.共享文件夹的设置

注&#xff1a;设置共享文件夹&#xff1a;首先要先关机 一、点击 编辑虚拟机设置 二、点击 选项 选项卡 三、点击 共享文件夹 四、在本地建立一个共享文件夹后选择路径 五、Linux系统文件夹中的共享文件夹路径 六、在Linux系统中查看共享文件夹 Ubuntushare是共享文件夹&…

【简单介绍下idm有那些优势】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

国内加密软件排行榜,每一款加密软件都是精品

在数字化快速发展的今天&#xff0c;数据安全和隐私保护已成为企业和个人关注的焦点。加密软件作为保护数据安全的重要手段&#xff0c;其重要性日益凸显。以下是根据权威机构的评测和用户反馈&#xff0c;整理的国内加密软件排行榜及其特点概述。 1、加密软件安企神免费试用7天…