函数定义、合约与面向对象(以太坊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实现
一、角点简介 角点通常指的是两条直线构成角时的交点。在更广泛的应用中,角点这一概念也被扩展到数字图像处理领域,其中角点被定义为图像中物体轮廓线的连接点,这些点在某方面属性特别突出,即在某些属性上强度最大或者最…...
命令行与IM桥接工具:适配器模式实现统一消息通知
1. 项目概述与核心价值最近在折腾一个挺有意思的东西,一个叫tmwgsicp/im-cli-bridge的项目。光看这个名字,可能有点摸不着头脑,我来拆解一下。tmwgsicp大概率是作者的用户名或者组织名,im-cli-bridge才是核心。im是即时通讯&#…...
QT实战:利用QAxObject与QAxWidget实现Office文档自动化,从数据填充到格式定制
1. 为什么需要Office文档自动化? 在企业日常运营中,文档处理是绕不开的环节。我见过太多同事每天花几个小时手动复制粘贴数据到Word报告和Excel表格里,不仅效率低下,还容易出错。想象一下,财务部门每月要生成上百份报…...
缠论可视化插件:3个步骤让你的技术分析不再迷茫
缠论可视化插件:3个步骤让你的技术分析不再迷茫 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 你是否曾经面对复杂的K线图感到无从下手?缠论作为技术分析的重要理论,…...
深度评测:LeagueAkari如何用3项核心技术革新英雄联盟数据分析体验
深度评测:LeagueAkari如何用3项核心技术革新英雄联盟数据分析体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 作为一名长期关注…...
基于Azure AI Search与OpenAI构建企业级智能问答系统实战指南
1. 项目概述:当企业级搜索遇上生成式AI 如果你正在为如何让公司内部的知识库、产品文档或客服系统变得更“聪明”而头疼,那么你很可能已经听说过或将接触到这个项目: Azure-Samples/azure-search-openai-demo 。这不仅仅是一个简单的代码示…...
Display Driver Uninstaller:显卡驱动问题的终极解决方案
Display Driver Uninstaller:显卡驱动问题的终极解决方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstall…...
模板进阶(C++初阶结束)
1.非类型模板参数模板参数分为类型形参和非类型形参类型形参:出现在模板参数列表中,跟class或者typename之类的参数类型名称非类型形参:就是用一种常量作为类(函数)模板的一个参数,在类(函数&am…...
泛微OA ecology 9实战:手把手教你写一个能取表单数据的Java自定义接口
泛微OA Ecology 9深度开发:构建高效表单数据交互的Java接口实践 在当今企业数字化转型浪潮中,办公自动化系统(OA)作为核心支撑平台,其灵活性和扩展性直接影响着企业运营效率。泛微OA Ecology 9作为国内领先的协同办公平台,提供了丰…...
E-Hentai智能下载器:零成本漫画管理效率革命
E-Hentai智能下载器:零成本漫画管理效率革命 【免费下载链接】E-Hentai-Downloader Download E-Hentai archive as zip file 项目地址: https://gitcode.com/gh_mirrors/eh/E-Hentai-Downloader 你是否曾为下载漫画而烦恼?面对心爱的作品…...
感应照明技术:从工业到家用,一场技术降维的工程冒险
1. 项目概述:当感应照明技术走进寻常百姓家最近在整理一些老旧的行业资料时,翻到了2014年的一则新闻,讲的是当时一家初创公司“Finally Light Bulb Company”宣布要推出一款售价低于10美元的感应灯泡,用来替代传统的白炽灯。这让我…...
