函数定义、合约与面向对象(以太坊solidity合约)
函数定义、合约与面向对象(以太坊solidity合约)
- 1-函数定义、构造与多态
- 2-事件日志
- 3-面向对象特征
1-函数定义、构造与多态
创建合约就是创建类,部署合约就是实例化
合约的方法还支持多态
还能使用第三方的库进行开发
整个合约部署后,函数就是代码的执行单元
https://learnblockchain.cn/docs/solidity/structure-of-a-contract.html#structure-functions
函数也是一种类型是值类型
pragma solidity >=0.6.1 <0.7.0;// function (<parameter types>) {public private internal(默认)|external} [view|pure] [payable] [returns (<return types>)]
// 合约的函数支持多态(函数名称相同,参数类型或者数量不同)
contract FnDemo{string _name; // 引用类型 + storageuint _age; // 值类型不存在Data Location// 构造函数,合约在部署时自动调用,一般用来初始化状态变量
//deploy部署时,需要输入两个参数constructor(string memory name,uint age) public{_name = name;_age =age;}// private 仅仅在合约内部使用(所以合约部署后无法显示进行调用)// constant 0.4的版本使用,没有修改状态变量时可以设置,0.5版本使用View,Pure代替// view: 对状态变量(storage),只读但是不能写(状态变量部署会在账本,消耗gas)function getAll() private view returns (string storage,uint){return (_name,_age);}// public: 公共函数(当前、其它、继承的子合约都能调用), 如果参数引用类型必须设置内存变量memory
//从理论上将每个智能合约只能修改自己的状态变量,而不能修改别人的,即自己的storage不能让别人修改,所以设置为memory
// pure: 对状态变量不可读也不可写,在此函数中既没有操作状态变量,也没有读取function getAll(string memory name,uint age) public pure returns (string memory,uint){return (name,age+1);}// internal 受保护的函数,只能当前合约或者子合约调用// payable: 说明此方法有转账的操作,后面金额转账的操作比较多function getAll(string storage name) internal{getAll(); // 调用自己的private合约}}
2-事件日志
Solidity无打印功能,调试不便
使用事件event和log日志
https://learnblockchain.cn/docs/solidity/structure-of-a-contract.html#event
通过事件写入日志
间接使用事件实现打印的功能
pragma solidity >=0.6.1 <0.7.0;// solidity没有print,console.log方法,因此增加了调试的难度 ==> event + log来解决contract LogTest{// 事件名称采用驼峰命名法event LogData(string,uint);event LogData(string,string);function show(string memory name,uint age) public{age = age + 1;// 此处实现业务操作emit LogData(name,age);}function show(string memory name,string memory age) public{emit LogData(name,age);}
}
这些日志也会随着合约的调用存储到分布式账本
如支付宝转账有备注,此日志也具有此功能,后续进行调用转账函数的时候,可以写日志的,一旦交易成功会跟随数据一起写入分布式账本中,交易往来
单机一个区块
有交易,合约交易(合约的创建、调用、销毁(以后合约不能再使用))
https://cn.etherscan.com/txsInternal?block=12548200
一般众筹完毕不再接受新的众筹金币,合约就会销毁
只要每笔交易确认,当前交易日志就会写到分布式账本(测试时解决打印难题)
3-面向对象特征
https://learnblockchain.cn/docs/solidity/contracts.html
Solidity多继承,python单继承
抽象合约,函数只有声明没有实现,交给自合约实现,抽象合约无法编译
https://learnblockchain.cn/docs/solidity/contracts.html#abstract-contract
库在后续课程实战调用第三方的库
好的需求,可维护,设计
pragma solidity >=0.6.0 <0.7.0;// 手机OOP实现// 每个手机都有一样的开机与关机功能// 每个手机都有闹钟功能,但不同品牌的手机闹钟设计不同// 品牌手机实现Wifi与BlueTooth,但有些老年机只实现Wifi或者BlueTooth.interface Wifi{// external 说明当前函数只能被外界调用function wifi() external returns (string memory);
}interface BlueTooth{// external 说明当前函数只能被外界调用function blue() external returns (string memory);
}abstract contract Phone{ // 手机的父类(完成开机关机子)event ShowCall(string);//事件方式调用手机开机功能function start() internal{emit ShowCall('调用手机开机功能');}function close() internal{emit ShowCall('调用手机关机功能');}function alarm() virtual internal;//只有声明无实现(闹钟函数只能设计成抽象,每台手机对闹钟的实现各有不同,virtual 代表函数为抽象函数,solidity6)
}继承抽象合约phone
contract Mi is Phone,Wifi{//internal 不能被外界访问function alarm() internal override(Phone){emit ShowCall('小米实现闹钟功能');}function wifi() external override(Wifi) returns (string memory){return "小米实现wifi功能";}
}contract Iphone is Phone,Wifi,BlueTooth{function alarm() internal override(Phone){emit ShowCall('华为实现闹钟功能');}function wifi() external override(Wifi) returns (string memory){return "华为实现wifi功能";}function blue() external override(BlueTooth) returns (string memory){return "华为实现blueTooth功能";}function callAlarm() public{alarm();}
}
需要再回来好好的看看
返回华为实现了wifi功能
接口、抽象函数、抽象方法、乃至于实现
相关文章:

函数定义、合约与面向对象(以太坊solidity合约)
函数定义、合约与面向对象(以太坊solidity合约) 1-函数定义、构造与多态2-事件日志3-面向对象特征 1-函数定义、构造与多态 创建合约就是创建类,部署合约就是实例化 合约的方法还支持多态 还能使用第三方的库进行开发 整个合约部署后&…...

微服务:nacos
Nacos 由Alibaba推出的集成于SpringCloudAlibaba中的一款开源注册中心框架 主要功能: 注册中心 配置管理 nacos的安装和部署 nacos默认访问端口8848 docker pull nacos/nacos-server:1.2.0 docker run --env MODEstandalone --name nacos --restartalways -d -p 8848:8…...
前端css常用笔记
文章目录 一、样式二、vue笔记2.1、组件之间的通信2.1.1 子组件调用父组件的方法2.1.2 父组件调用子组件的方法2.1.3 孙组件调用祖父组件方法的实现 2.2、使用若依时,node_nodules越来越大的问题2.3、echart笔记 一、样式 1 文字与图标对不齐的解决方法 /**给icon加上这个样式即…...

WINUI或WPF灵活使用样式、控件模板、自定义控件、用户控件
在WINUI与WPF 中,控件模板(ControlTemplate)、样式(Style)、自定义控件(CustomControl)和用户控件(UserControl)都是构建复杂和灵活用户界面的重要工具,但它们…...

如何用EXCEL自动解方程/方程组?利用 矩阵乘法X=A-*B,X=mmult(minverse(A), B)
目录 问题的由来 1 数据 → 模拟分析 → 单变量求解 1.1 找一个单元格填入公式 1.2 功能入口 1.3 选择单变量求解,分别填入内容 1.4 求解 1.5 这个感觉用处不大 2 重点介绍,用EXCEL进行矩阵运算解方程的操作 2.1 运用EXCEL进行矩阵运算&…...

ComfyUI进阶:Comfyroll插件 (二)
前言: 学习ComfyUI是一场持久战,而Comfyroll Studio 是一款功能强大的自定义节点集合,专为 ComfyUI 用户打造,旨在提供更加丰富和专业的图像生成与编辑工具。借助这些节点,用户可以在静态图像的精细调整和动态动画的复…...

Spring Boot集成Activity7实现简单的审批流
由于客户对于系统里的一些新增数据,例如照片墙、照片等,想实现上级逐级审批通过才可见的效果,于是引入了Acitivity7工作流技术来实现,本文是对实现过程的介绍讲解,由于我是中途交接前同事的这块需求,所以具…...
自动驾驶,革了谁的命
概述 从AI 的出现开始,到现在已经慢慢地开始改变着周遭的世界。 从对话聊天,到当前的看图识文,图片转动效等等,慢慢地在与实体结合后,其发挥的威力是巨大的。 科技将会是改变世界的核心驱动力之一,已经深…...

在线实习项目|泰迪智能科技企业级项目学习,暑期大数据人工智能学习
在线实习介绍 实习时间:每个项目周期七周左右 面向对象:大数据、计算机相关专业学生;大三、大四毕业年度学生 在线实习收获 1、获得项目实战技能,积累项目经验 2、获得在线实习证明 项目特点…...

【BUG】已解决:To update, run: python.exe -m pip install --upgrade pip
To update, run: python.exe -m pip install --upgrade pip 目录 To update, run: python.exe -m pip install --upgrade pip 【常见模块错误】 解决办法: 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰&…...
Lua 运算符
Lua 运算符 Lua 是一种轻量级的编程语言,广泛用于游戏开发、脚本编写和其他应用程序。它具有一套丰富的运算符,用于执行各种数学和逻辑操作。本文将详细介绍 Lua 中的运算符,包括算术运算符、关系运算符、逻辑运算符和其他特殊运算符。 算术…...

园区道路车辆智能管控视频解决方案,打造安全畅通的园区交通环境
一、背景需求分析 随着企业园区的快速发展和扩张,道路车辆管理成为了保障园区秩序、提升运营效率及确保员工安全的重要任务。针对这一需求,旭帆科技TSINGSEE青犀提出了一种企业园区道路车辆管控的解决方案,通过整合视频监控、智能识别等技术…...

MATLAB R2023b下载安装教程汉化中文版设置
MATLAB R2023b下载安装教程汉化中文版设置 Matlab 是一款功能强大的商业数学软件 Matlab(Matrix Labortory)即矩阵实验室,它在数值计算、数据分析、算法开发、建模与仿真等众多领域都发挥着重要作用。 Matlab 具有以下显著特点和优势&…...

Java二十三种设计模式-工厂方法模式(2/23)
工厂方法模式:设计模式中的瑞士军刀 引言 在软件开发中,工厂方法模式是一种常用的创建型设计模式,它用于处理对象的创建,将对象的实例化推迟到子类中进行。这种模式不仅简化了对象的创建过程,还提高了代码的可维护性…...

【iOS】OC类与对象的本质分析
目录 前言clang常用命令对象本质探索属性的本质对象的内存大小isa 指针探究 前言 OC 代码的底层实现都是 C/C代码,OC 的对象都是基于 C/C 的数据结构实现的,实际 OC 对象的本质就是结构体,那到底是一个怎样的结构体呢? clang常用…...

【机器学习】使用Python的dlib库实现人脸识别技术
🔥 个人主页:空白诗 文章目录 一、引言二、传统人脸识别技术1. 基于几何特征的方法2. 基于模板匹配的方法3. 基于统计学习的方法 三、深度学习在脸识别中的应用1. 卷积神经网络(CNN)2. FaceNet和ArcFace 四、使用Python和dlib库实…...

GitHub 令牌泄漏, Python 核心资源库面临潜在攻击
TheHackerNews网站消息,软件供应链安全公司 JFrog 的网络安全研究人员称,他们发现了一个意外泄露的 GitHub 令牌,可授予 Python 语言 GitHub 存储库、Python 软件包索引(PyPI)和 Python 软件基金会(PSF&…...
【面试题】Golang 锁的相关问题(第七篇)
目录 1.Mutex 几种状态 1. 锁定状态(Locked) 2. 未锁定状态(Unlocked) 3. 唤醒状态(Woken) 4. 饥饿状态(Starving) 5. 等待者计数(Waiters Count) 总结…...
深入剖析CommonJS modules和ECMAScript modules
目录 前言CommonJS:服务器端模块化的先驱背景与起源语法与机制 ECMAScript Modules:现代前端的基石背景与起源语法与机制 比较与权衡语法差异加载机制编译时与运行时运行时行为构建第三方库现代开发环境 结论 前言 在 JavaScript 生态系统中,…...

角点检测及MATLAB实现
一、角点简介 角点通常指的是两条直线构成角时的交点。在更广泛的应用中,角点这一概念也被扩展到数字图像处理领域,其中角点被定义为图像中物体轮廓线的连接点,这些点在某方面属性特别突出,即在某些属性上强度最大或者最…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...