函数定义、合约与面向对象(以太坊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实现
一、角点简介 角点通常指的是两条直线构成角时的交点。在更广泛的应用中,角点这一概念也被扩展到数字图像处理领域,其中角点被定义为图像中物体轮廓线的连接点,这些点在某方面属性特别突出,即在某些属性上强度最大或者最…...
TypeScript导学:从零开始
引言 TypeScript的背景 TypeScript是一种由微软开发的开源编程语言,它是JavaScript的一个超集,添加了可选的静态类型和基于类的面向对象编程。自2012年首次发布以来,TypeScript因其能够提高代码的可读性、可维护性和可扩展性而迅速获得了广…...
【BUG】已解决:IndexError: list index out of range
已解决:IndexError: list index out of range 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主…...
AWS-S3实现Minio分片上传、断点续传、秒传、分片下载、暂停下载
文章目录 前言一、功能展示上传功能点下载功能点效果展示 二、思路流程上传流程下载流程 三、代码示例四、疑问 前言 Amazon Simple Storage Service(S3),简单存储服务,是一个公开的云存储服务。Web应用程序开发人员可以使用它存…...
Selenium - 设置元素等待及加载策略
7月18日资源分享: 耿直哥三部曲全——机器学习,强化学习,深度学习 链接: https://pan.baidu.com/s/1c_eVVeqCZmB6zszHt6ZXiw?pwdtf2a 在使用Selenium进行网页自动化测试时,一个常见的问题是页面加载速度和元素的可见性问题。…...
【数据结构】线性结构——数组、链表、栈和队列
目录 前言 一、数组(Array) 1.1优点 1.2缺点 1.3适用场景 二、链表(Linked List) 2.1优点 2.2缺点 2.3适用场景 三、栈(Stack) 3.1优点 3.2缺点 3.3适用场景 四、队列(Queue) 4.1优点…...
json将列表字典等转字符串,然后解析又转回来
在 Python 中使用 json 模块来方便地在数据和 JSON 格式字符串之间进行转换,以便进行数据的存储、传输或与其他支持 JSON 格式的系统进行交互。 JSON 字符串通过 json.loads() 函数转换为 Python 对象。 pthon对象通过json.dumps()转为字符串 import jsonstr_list…...
记录|.NET上位机开发和PLC通信的实现
本文记录源自:B站视频 实验结果:跟视频做下来是没有问题的。能运行。 自己补充做了视频中未实现的读取和写入数据部分【欢迎小伙伴指正不对的地方】 目录 前言一、项目Step1. 创建项目Step2. 创建动态图片展示Step3. 创建图片型按钮Step4. 创建下拉框Ste…...
微服务实战系列之玩转Docker(二)
前言 上一篇,博主对Docker的背景、理念和实现路径进行了简单的阐述。作为云原生技术的核心之一,轻量级的容器Docker,受到业界追捧。因为它抛弃了笨重的OS,也不带Data,可以说,能够留下来的都是打仗的“精锐…...
Linux:信号的概念与产生
信号概念 信号是进程之间事件异步通知的一种方式 在Linux命令行中,我们可以通过ctrl c来终止一个前台运行的进程,其实这就是一个发送信号的行为。我们按下ctrl c是在shell进程中,而被终止的进程,是在前台运行的另外一个进程。因…...
云监控(华为) | 实训学习day2(10)
spring boot基于框架的实现 简单应用 - 用户数据显示 开发步骤 第一步:文件-----》新建---项目 第二步:弹出的对话框中,左侧选择maven,右侧不选任何内容. 第三步,选择maven后,下一步 第4步 :出现对话框中填写项目名称 第5步&…...
办公设备网站推广怎么做/网络游戏推广平台
导入tensorflow模块失败, with python2 pip show tensorflow 检查是否安装 python test.py 测试 with python3 pip3 show tensorflow 检查是否安装 python3 test.py 测试 test.py import tensorflow as tf import numpy as npc np.array([[3.,4], [5.,6], …...
不锈钢网站建设哪家好/海外网站推广的公司
使用tomcat搭建HTTP文件下载服务器 用简单的方法实战演练搭建http服务器(Windows上) 超简单——自己搭建ftp服务器(python nodejs)...
做网红用哪个网站/必应搜索引擎网站
16年元旦顶着大风来北京面试,一天6轮,在回去的高铁上感觉面试可能挂了,一个礼拜后收到了Offer。由于自身各方面的原因,18年元旦,选择离开微软。It is hard to say LEAVE, 这里整理了一下我在微软的两年经历,…...
网站换域名后需要多长时间才能收录恢复正常/今日新闻头条大事
微信小程序常用的功能之一就是:使用微信登录微信小程序,但是登录之后拿到用户信息之后,缺少用户的唯一标识。 通常使用openid作为微信用户的唯一主键。受限于微信小程序的限制,不能直接通过小程序前端拿到openid,具体…...
wordpress建立网站吗/小红书笔记关键词排名优化
通常情况 通常程序的UI不太复杂,我们会直接加载这些UI信息复杂的UI加载的元素就相对多一些。加载的数据相对多。因为UI元素和数据元素都比较多,加载的时间相对多。 可视者优先加载不是默认的加载顺序,而是有选择的加载一些首先用户看到的UI&a…...
期货贵金属网站源码建设/如何介绍自己设计的网页
1、用预编译指令符可以避免在多文件工程中调用文件的时候可能出现的重复定义的现象。比如:Main.cpp#include “Animal.h”#include “Fish.h”……Animal.hclass Animal(){}Fish.h#include “Animal.h”class Fish():public Animal{}因此在调用Main.cpp的时候先运行…...