68990-智能合约开发实战(微课版)-教案_第1页
68990-智能合约开发实战(微课版)-教案_第2页
68990-智能合约开发实战(微课版)-教案_第3页
68990-智能合约开发实战(微课版)-教案_第4页
68990-智能合约开发实战(微课版)-教案_第5页
已阅读5页,还剩267页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深圳信息职业技术大学教案2025年/2026年第2学期专业大类电子与信息大类课程名称《智能合约开发实战》课程类别专业核心课教学模式混合式教学任课班级25区块链3-1任课教师所属院部计算机与软件学院二0二六年三月一日教学单元单元1初识智能合约周次1时数4授课班级25区块链3-1教学目的及要求:(一)知识目标1.使学生理解区块链的定义、核心特征(去中心化、链式结构、加密技术、不易篡改性、共识机制),明确区块链与传统中心化系统的区别。2.让学生掌握区块链五层架构(数据层、网络层、共识层、合约层、应用层)的各层功能及核心组成,理解各层协同工作的逻辑。3.帮助学生掌握区块链核心技术(哈希函数、默克尔树、数字签名、共识算法、P2P网络等)的基本原理及应用场景。4.使学生理解智能合约的定义、核心特点,明确其与区块链的依存关系,掌握智能合约的基本工作流程。(二)能力目标1.能准确解释区块链的核心特征及技术原理,能区分公有链、私有链、联盟链的差异及适用场景。2.能梳理区块链交易处理流程(交易创建、传播、验证、打包、区块传播),能说明加密技术(哈希函数、数字签名、默克尔树)如何保障数据安全与完整性。3.能简要阐述常见共识算法(如PoW、PoS)的核心逻辑,能解释区块链实现数据不易篡改的技术机理。4.能清晰描述智能合约与区块链的关系,能梳理智能合约的工作流程,为后续智能合约编写、部署奠定基础。(三)素养目标1.培养学生对区块链技术的认知兴趣,建立去中心化、安全可信的技术思维,树立数据安全与合规意识。2.培养学生的逻辑分析能力和问题探究能力,能结合所学知识分析区块链技术在实际场景中的应用价值。3.引导学生重视理论与实操的结合,养成严谨的技术学习习惯,为后续智能合约开发相关学习做好铺垫。教学重点:区块链的核心特征(去中心化、链式结构、加密技术、不易篡改性、共识机制)及五大架构各层的核心功能与组成教学难点:哈希函数、共识机制实验仪器及教具:计算机,Remix软件

教学过程备注一、教学导入(10分钟)以日常场景设问切入,引发学生思考:“我们平时转账需要通过银行中转,一旦银行系统出现故障或数据泄露,交易就可能出问题;签订电子合同,如何确保双方都无法反悔、合同内容不被篡改?”随后引出解决方案——区块链技术,进而导入本节课核心内容:认识区块链与智能合约,明确本节课将通过理论讲解+逻辑分析,解答“什么是区块链、如何保障安全、智能合约如何工作”等核心问题,为后续智能合约开发实操奠定理论基础,激发学生学习兴趣和探究欲。二、主要内容(110分钟)(一)区块链基础认知1.区块链定义:讲解区块链是基于去中心化网络的分布式账本技术,通过区块打包交易、加密链式连接,形成不易篡改的账本,对比传统中心化系统(如银行)与去中心化系统的核心差异,结合示意图帮助学生理解。2.区块链核心特征:逐一讲解去中心化、链式结构、加密技术、不易篡改性、共识机制五大特征,结合实例(如转账交易)说明各特征的具体体现,让学生理解其核心价值。3.区块链类型:简要介绍公有链、私有链、联盟链的定义、核心差异及适用场景,帮助学生区分不同区块链类型的应用边界。(二)区块链五层架构详解按数据层、网络层、共识层、合约层、应用层的顺序,讲解各层核心功能、组成及协同逻辑:1.数据层:核心讲解区块结构(区块头、区块体)、哈希函数(SHA-256特点及应用)、默克尔树(构建与验证过程)、数字签名(生成与验证流程、核心功能),说明其如何保障数据安全与完整性。2.网络层:讲解P2P网络架构、节点类型(全节点、轻节点、共识节点),以及交易传播、区块传播的流程与区别,说明验证机制(交易验证、区块验证)的核心作用。3.共识层:讲解共识机制的核心功能,重点演示PoW算法的计算过程,简要介绍PoS等其他共识算法,说明共识机制如何实现分布式节点的数据一致性。4.合约层:讲解合约层的核心功能与组成(虚拟机、编译器、存储机制、执行引擎),为后续智能合约讲解做好铺垫。5.应用层:介绍去中心化应用(DApps)、应用接口(API)的核心作用,说明应用层如何实现用户与区块链的交互。(三)区块链交易处理流程结合实例(A向B转账),完整梳理交易处理全流程:交易创建→初次传播→节点验证→交易打包→新区块生成→区块传播→全网同步,明确每个环节的核心操作与目的,呼应加密技术、共识机制的应用。(四)智能合约基础认知1.智能合约定义:讲解智能合约是运行在区块链上的自动化执行程序,基于预设规则自动履行条款,无需第三方介入。2.与区块链的关系:明确区块链为智能合约提供去中心化运行环境、数据安全保障,智能合约拓展区块链的应用场景,二者相互依存。3.智能合约工作流程:梳理“合约编写→合约部署→触发条件→自动执行→状态更新”的完整流程,结合简单案例说明其自动化、不可篡改的特点。三、课堂练习(30分钟)1.简述区块链的定义及五大核心特征,举例说明去中心化与中心化系统的区别。2.写出区块链五层架构的名称,并简要说明各层的核心功能。3.简要梳理PoW算法的计算过程,说明其如何在去中心化网络中实现节点共识,防止数据篡改。四、本节小结(10分钟)1.课程总结(8分钟)本节课围绕“区块链与智能合约”核心任务,系统讲解了区块链的定义、核心特征、五层架构、核心技术及交易处理流程。重点掌握区块链的核心特征、五层架构各层功能、哈希函数与数字签名的应用,理解共识机制实现节点共识的逻辑;难点在于深层理解哈希函数、默克尔树的工作原理,以及区块链各层的协同关系、智能合约与区块链的依存关系。通过本节课学习,学生需掌握核心知识点,形成完整的知识框架,树立去中心化、安全可信的技术思维,为后续智能合约编写、部署等实操任务奠定坚实的理论基础。2.布置作业(2分钟)课后作业:查阅资料,了解PoS共识算法的详细工作原理,对比PoW与PoS的优缺点,撰写200字左右的分析短文。

(以下内容为选填,供线上课程及线上线下混合式课程填报)教学资源列表与访问路径备注/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug在线教学过程(学生自主学习指引)1、首先观看PPT,了解基本知识;2、观看教学视频。在线辅导与答疑安排1、学生可以通过微信\QQ在线辅导或者答疑。线上作业:/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug

教学单元单元1初识智能合约周次2时数4授课班级25区块链3-1教学目的及要求:(一)知识目标1.理解RemixIDE的定位、核心功能及开源特性,明确其作为以太坊智能合约入门开发工具的核心价值。2.掌握RemixIDE四大界面区域的名称及功能,熟悉各区域的操作逻辑与使用场景。3.理解智能合约编译、部署的核心原理,掌握ABI(应用程序二进制接口)。4.掌握Remix中合约开发部署的全流程步骤,区分只读函数与状态修改函数的调用差异及按钮标识。5.熟悉SimpleCalculator合约的代码结构、各函数功能及require语句的异常处理逻辑。(二)能力目标1.能独立完成RemixIDE的基础操作,包括新建Solidity文件、编写合规的合约代码、配置编译器并完成编译。2.能熟练将合约部署到RemixVM(虚拟机)环境,准确获取合约地址,区分并正确调用只读(蓝色按钮)与状态修改(橙色按钮)函数。3.能完成SimpleCalculator合约的实训任务,验证加减乘除功能及除零异常触发效果,能根据控制台日志排查基础编译、部署错误。(三)素养目标1.培养严谨的实操习惯,养成“先理解原理、再动手操作、最后验证结果”的技术实践思维,注重实操细节与步骤规范性。2.提升问题排查与逻辑分析能力,能结合编译日志、控制台信息定位并解决基础的代码语法、部署环境相关问题。3.建立“理论落地实操”的认知,重视代码编写规范与合约功能验证,为后续复杂智能合约开发、测试及实战项目奠定基础。教学重点:Remix实操全流程及ABI、字节码理解教学难点:编译错误排查及合约函数调用实验仪器及教具:计算机,Remix软件

教学过程备注一、教学导入:(10分钟)承接上一任务“认识区块链与智能合约”的理论基础,以“实操落地”为核心切入点,引发学生思考:“我们已经了解了智能合约的定义和工作原理,但写好的Solidity代码如何编译、如何部署到区块链网络?如何验证合约功能是否符合预期?”随后展示RemixIDE官方界面,点明本节课核心任务——从零掌握Remix工具的使用,完成智能合约“新建→编辑→编译→部署→调用”的全流程实操,同时预告将通过Counter基础合约演示流程、SimpleCalculator实训合约巩固技能,让学生明确学习目标,激发动手实操的兴趣,衔接理论与实操的断层。二、主要内容:(110分钟)(一)RemixIDE核心认知1.2.1Remix介绍Remix是基于浏览器的以太坊智能合约开发工具,由以太坊社区维护,免费开源、开箱即用,无需本地安装,是智能合约入门的首选工具。其核心功能包括5点:(1)编写智能合约:内置Solidity编辑器,支持语法高亮、自动缩进、代码提示,简化代码编写流程,降低语法错误概率。(2)编译智能合约:可将Solidity代码编译为EVM(以太坊虚拟机)字节码,支持选择不同编译器版本,提供详细编译日志,保障合约正确性。(3)调试智能合约:配备强大调试器,支持设置断点、监视变量值,帮助逐行排查代码逻辑错误,提升合约可靠性。(4)部署智能合约:支持部署到本地开发网络(如RemixVM)、以太坊测试网、主网,可根据开发需求选择合适网络。(5)测试智能合约:提供测试框架,可编写单元测试,验证合约功能是否符合预期,提升合约稳定性。1.2.2Remix界面打开Remix官方网站即可进入IDE,界面分为四大核心区域,各区域功能明确、协同工作:1.功能切换区:位于界面左侧,包含多个功能图标(文件管理、编译器、部署&交易等),点击图标可切换中间功能操作区的显示内容,是实操的核心入口。2.功能操作区:位于界面中间,对应功能切换区所选模块,可进行文件管理、编译配置、合约部署、函数调用等操作,是实操的核心区域。3.文件编辑区:位于界面右侧上方,用于编写、修改Solidity代码,右上角可切换语言(默认英文,可切换为中文),支持代码格式调整。4.控制台/日志区:位于界面右侧下方,用于显示编译结果、交易详情、函数调用返回值及调试信息,是排查问题、验证结果的关键区域。(二)Remix实操全流程演示以Counter基础合约为例,分步演示智能合约“新建→编辑→编译→部署→调用”的完整流程,讲解每一步的操作细节与注意事项。三、课堂练习(30分钟)1.简述RemixIDE的主要用途。2.什么是ABI,在Remix中编译合约时为什么需要ABI?3.完整完成SimpleCalculator合约的实训任务,验证所有函数功能及除零异常,记录异常触发时的控制台报错信息,规范整理实操步骤。四、本节小结(10分钟)1.课程总结(8分钟)本节课围绕“使用Remix工具开发和部署智能合约”的核心任务,完成了理论讲解与实操训练的结合,核心知识点与实操要点如下:1.核心理论:掌握了RemixIDE的定位、五大核心功能及四大界面区域的用途,理解了ABI、字节码的定义及在合约部署、交互中的核心作用,明确了只读函数与状态修改函数的差异。2.实操流程:熟练掌握了智能合约“新建→编辑→编译→部署→调用”的全流程,能独立使用RemixVM环境完成合约部署与功能验证,能排查基础的编译、部署错误。3.实训重点:完成了SimpleCalculator合约的实操,掌握了Solidity基础代码编写、require语句的异常处理逻辑,能验证合约功能的正确性。本节课的核心重点是Remix实操全流程及ABI、字节码的理解,难点是编译错误排查、合约函数调用逻辑的区分。通过本节课学习,学生已具备智能合约开发与部署的基础实操能力,衔接了上一任务的理论知识,为后续复杂合约开发、测试及实战项目奠定了坚实的实操基础。2.布置作业(2分钟)课后作业:尝试修改SimpleCalculator合约,增加一个power函数(实现两个数的幂运算),完成编译、部署与调用验证,记录函数代码与调用结果。

(以下内容为选填,供线上课程及线上线下混合式课程填报)教学资源列表与访问路径备注/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug在线教学过程(学生自主学习指引)1、首先观看PPT,了解基本知识;2、观看教学视频。在线辅导与答疑安排1、学生可以通过微信\QQ在线辅导或者答疑。线上作业:/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug教学单元单元1初识智能合约周次3时数4授课班级25区块链3-1教学目的及要求:(一)知识目标1.理解Truffle框架的定位、核心功能及优势,明确其在以太坊智能合约开发中的作用。2.掌握Ganache网络的核心特点、作用,理解其与Truffle框架的协同关系。3.熟悉Ubuntu环境下Truffle、Ganache及依赖(Node.js、npm)的安装步骤,掌握核心命令。4.掌握Truffle项目目录结构、核心命令(truffleinit、trufflemigrate、truffleconsole)的用途及使用场景。5.理解迁移脚本的作用、编写规范,掌握truffle-config.js配置文件的核心配置项(网络、编译器版本)。(二)能力目标1.能在Ubuntu环境下完成Node.js、npm、Truffle、Ganache的安装与验证,排查基础安装错误。2.能独立完成Truffle项目初始化,编写智能合约、迁移脚本,配置truffle-config.js文件。3.能启动Ganache本地网络,使用trufflemigrate命令编译、部署合约,获取合约部署状态。4.能通过Truffle控制台调用合约函数,实现合约状态的读取与修改,验证合约功能正确性。(三)素养目标1.培养规范的框架开发习惯,熟悉命令行操作规范,注重实操步骤的连贯性与细节把控。2.提升问题排查能力,能结合命令行报错信息,排查安装、编译、部署中的常见问题(如版本不匹配、网络配置错误)。教学重点:Truffle项目实操全流程及核心命令、配置使用教学难点:迁移脚本编写、truffle-config.js配置及安装报错排查实验仪器及教具:计算机,Remix软件

教学过程备注一、教学导入(10分钟)承接上一任务“使用Remix工具开发部署合约”的浏览器端实操,以“高效开发进阶”为切入点引发思考:“Remix适合入门实操,但面对复杂智能合约项目,如何实现自动化编译、部署和测试?如何搭建本地可控的区块链开发环境?”随后引出Truffle框架与Ganache网络,点明本节课核心任务——在Ubuntu环境下安装Truffle框架和Ganache,掌握Truffle项目从初始化、合约编写、迁移部署到控制台调用的全流程,通过HelloWorld演示、SimpleStorage实训,实现智能合约开发从“入门”到“规范”的过渡,明确学习目标,激发学生对框架开发的兴趣。二、主要内容(110分钟)(一)核心工具认知(Truffle+Ganache)1.3.1Truffle框架介绍Truffle是以太坊智能合约开发的一站式框架,提供开发环境、测试框架和资产管道,核心优势的是自动化、高效化,其主要功能包括:1.自动编译与部署:无需手动编译合约,支持批量部署,节省开发时间。2.测试框架支持:可使用JavaScript编写测试用例,通过Mocha框架运行,验证合约正确性。3.多网络支持:兼容本地开发网络(Ganache)、测试网、主网,适配不同开发阶段需求。4.便捷开发工具:提供合约迁移、脚本执行、链上交互等功能,提升开发效率。1.3.2Ganache网络介绍Ganache是以太坊区块链模拟器,为Truffle提供本地可控的开发测试环境,核心特点:1.快速启动:启动后自动创建10个测试账户,每个账户初始拥有1000ETH,无需真实资产。2.完全可控:可设置交易确认时间、Gas费用,支持重置区块链状态,便于反复测试。3.模拟真实环境:模拟区块生成、交易执行,速度远快于真实网络,适合调试。4.无缝集成:与Truffle完美兼容,默认访问地址:8545,无需额外配置即可连接。(二)Ubuntu环境下工具安装按步骤演示Ubuntu22.04环境下Truffle、Ganache及依赖的安装,强调命令规范与注意事项:1.安装Node.js和npm(Truffle依赖)(1)安装curl(若未安装):sudoapt-getupdate&&sudoapt-getinstall-ycurl(2)下载安装脚本:curl-fsSL/setup_22.x-onodesource_setup.sh(3)运行脚本:sudo-Ebashnodesource_setup.sh(4)安装Node.js和npm:sudoapt-getinstall-ynodejs(5)验证安装:node-v、npm-v(显示版本号即为成功)2.安装Truffle和Ganache(1)设置阿里云镜像源(加速安装):npmconfigsetregistry(2)全局安装Truffle:sudonpminstall-gtruffle(3)全局安装Ganache:sudonpminstall-gganache(4)启动Ganache:输入ganache命令,保持终端运行(不可关闭,否则本地网络失效)。(三)Truffle核心基础(命令+目录结构)1.truffleinit命令(项目初始化)(1)操作命令:cd~&&mkdirtruffleTest&&cdtruffleTest&&truffleinit(2)项目目录结构(核心):-contracts/:存放智能合约文件(.sol格式);-migrations/:存放迁移脚本(用于部署合约);-test/:存放测试脚本;-truffle-config.js:项目配置文件(网络、编译器版本等)。2.trufflemigrate命令(合约部署)(1)核心功能:自动编译合约、执行迁移脚本,将合约部署到指定网络,记录部署状态,避免重复部署。(2)执行流程:启动命令→编译合约→检查合约更改→执行迁移脚本→部署合约→初始化合约→记录状态→部署完成。3.truffleconsole命令(合约交互)启动交互式JavaScript控制台,用于与已部署合约交互,支持调用合约函数、查看合约状态,是调试合约的核心工具。三、课堂练习(30分钟)1.复现HelloWorld合约全流程实操,记录每一步关键命令及输出结果,截图保存3-5张关键步骤(项目初始化、合约编写、部署成功、控制台调用)。2.完整完成SimpleStorage合约实训任务,严格按照实训步骤操作,记录部署状态、控制台交互结果,排查可能出现的安装、编译、部署错误,整理实操笔记。四、本节小结(10分钟)1.课程总结(8分钟)本节课围绕“使用Truffle框架开发和部署合约”的核心任务,完成了理论讲解与实操训练的深度结合,核心知识点与实操要点如下:核心理论:掌握了Truffle框架的定位、核心功能,Ganache网络的作用及特点,理解了两者的协同关系;熟悉了Ubuntu环境下工具安装的核心步骤,掌握了Truffle项目目录结构、核心命令及配置文件的用途。实操流程:熟练掌握了Truffle项目“初始化→编写合约→编写迁移脚本→配置项目→编译部署→控制台调用”的全流程,能独立完成HelloWorld、SimpleStorage合约的开发与部署,排查基础的安装、编译、部署错误。2.布置作业(2分钟)课后作业:修改SimpleStorage合约,增加一个累加函数(increment),编写迁移脚本并完成编译、部署,通过控制台验证函数功能,提交函数代码及调用结果截图。(以下内容为选填,供线上课程及线上线下混合式课程填报)教学资源列表与访问路径备注/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug在线教学过程(学生自主学习指引)1、首先观看PPT,了解基本知识;2、观看教学视频。在线辅导与答疑安排1、学生可以通过微信\QQ在线辅导或者答疑。线上作业:/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug

教学单元单元2设计与实现会员积分合约周次4时数4授课班级25区块链3-1教学目的及要求:(一)知识目标​1.理解Solidity合约的定义、命名规则及基本结构,掌握合约与面向对象编程中“类”的对应关系。​2.掌握Solidity核心数据类型:整数类型(uint/int)、地址类型(address)、映射类型(mapping)的定义与使用场景。​3.熟悉状态变量的特性(全局可访问、永久存储),掌握映射类型存储键值对(地址→积分)的核心用法。​4.掌握Solidity函数的基础定义,理解mint(领取积分)、send(发送积分)函数的实现逻辑,熟悉msg.sender的含义与应用。​5.了解Solidity代码注释的三种类型(单行、多行、文档注释)规范,掌握基础注释写法。​6.熟悉RemixIDE的使用流程,掌握合约编写、编译、部署(RemixVM环境)及函数调用的操作步骤。​(二)能力目标​1.能独立编写符合命名规范的Solidity合约,正确定义状态变量(映射、整数、地址),规范编写函数及注释。​2.能熟练使用RemixIDE,完成合约的编写、编译(排查基础语法错误)、部署到RemixVM环境。​3.能正确调用合约函数(mint、send),实现积分的发放、转移,通过balances映射查询积分余额,验证合约功能。​4.能完成StorageContract实训任务,补全合约代码,部署并调用函数验证功能,排查基础编程错误。​(三)素养目标​1.培养规范的Solidity编程习惯,注重合约命名、代码注释、语法格式的规范性,提升代码可读性。​2.提升逻辑思维能力,能将“积分管理”实际需求转化为合约代码,理解函数与状态变量的联动逻辑。​3.培养问题排查能力,能结合Remix编译报错信息,排查语法错误、变量定义错误、函数调用错误。​4.建立“代码即合约”的思维,理解区块链合约的去中心化、透明性特点,树立严谨的编程态度。教学重点:Solidity基础语法及Coin积分合约编写教学难点:映射类型的理解与使用实验仪器及教具:计算机,Remix软件

教学过程备注一、教学导入:(10分钟)以“实际应用场景”为切入点引发思考:“日常生活中的会员积分管理,如何通过区块链实现公平透明、不可篡改?如何用Solidity编写合约,实现积分的发放、转移和查询?”随后引出本节课核心任务——编写Coin会员积分合约,掌握Solidity基础语法(合约、状态变量、映射、函数),学会使用RemixIDE完成合约的编写、编译、部署与调用,通过实操理解区块链积分管理的核心逻辑,明确学习目标,激发学生对Solidity编程的兴趣。二、主要内容:(110分钟)(一)Solidity核心基础语法2.1.1合约类型(核心)合约(Contract)是Solidity的核心数据类型,类似于面向对象编程中的“类”,用于定义智能合约的状态和行为,基本语法:contract合约名{//状态变量、函数、注释等内容}重点讲解合约命名规则(核心考点):1.避免冲突:不与Solidity保留关键字(如uint、address、function)、现有合约/库名冲突(参考表2-1保留关键字)。2.驼峰命名法:每个单词首字母大写(如Coin、StorageContract),提升可读性。3.禁止特殊字符:仅包含字母、数字、下划线,不允许空格、连字符,不建议以数字开头。4.区分大小写:Coin与coin视为两个不同合约,保持命名一致性。代码示例:结合例2-1,讲解合约结构、状态变量与函数的关系,明确合约的基本组成。2.1.2核心数据类型聚焦合约开发常用类型,结合积分管理场景,讲解定义、用途及示例:1.整数类型:积分数量为非负数,重点讲解无符号整数uint(最常用uint256),补充有符号整数int的区别。-示例:uintamount;//存储积分数量,非负整数-补充:整数运算(+、-、*、/)。2.地址类型(address):用于表示会员账户地址,固定20字节,以0x开头,是映射的常用键类型。-示例:addressreceiver;//积分接收者地址3.映射类型(mapping):核心用于存储“会员地址→积分余额”的键值对,类似字典,语法:mapping(键类型=>值类型)可见性映射名;-重点:键类型常用address,值类型常用uint;public修饰的映射,合约会自动生成查询函数。-示例:mapping(address=>uint)publicbalances;//存储每个会员的积分余额-操作:设置值(balances[addr]=amount)、获取值(balances[addr]),结合积分管理场景讲解。2.1.3代码注释讲解三种注释类型,强调规范注释的重要性,结合Coin合约代码示例演示:1.单行注释://注释内容,用于简短说明(如变量、函数功能)。2.多行注释:/*注释内容*/,用于复杂逻辑说明。3.文档注释(Natspec):/**注释内容*/,用于生成文档,常用标签@title、@dev、@param、@return,重点讲解函数注释写法。三、课堂练习(30分钟)1.复现Coin会员积分合约全流程:编写Coin.sol合约(含注释),在Remix中编译、部署,完成积分发放、转移、查询操作,截图保存3-5张关键步骤(合约编写、编译成功、部署成功、函数调用、余额查询)。2.完成StorageContract实训任务:补全合约代码,部署到RemixVM,调用store(50)和retrieve()函数,验证功能,记录操作步骤与结果。四、本节小结(10分钟)1.课程总结(8分钟)在本次课程中,我们学习了如何使用Remix和Truffle框架来部署会员积分合约。这是一个非常实用的案例,可以帮助我们理解和应用区块链技术。通过Remix网页版,我们可以轻松地编写和测试Solidity合约。我们学会了如何定义合约变量、创建用户结构体、编写状态变更函数等。使用Remix的编译器和调试工具,我们可以快速发现并修复合约中的错误。而使用Truffle框架,则可以更加方便地管理和部署合约。我们学会了如何初始化一个Truffle单元、编写合约代码、配置部署环境等。通过Truffle的网络管理和迁移功能,我们能够将合约部署到不同的网络上,并与其他系统进行集成。在实际练习中,我们创建了一个简单的会员积分合约,并实现了增加和减少积分的功能。通过调用合约函数,我们可以对积分进行操作,并验证结果是否符合预期。通过本次课程,我们不仅掌握了Remix和Truffle的基本用法,还加深了对区块链合约开发的理解。我们了解了智能合约的基本结构和语法,学会了使用工具进行合约编写、部署和测试。2.布置作业(2分钟)课后作业:补全SimpleBank合约代码,实现存款、取款、查询余额功能,代码如下:pragmasolidity^0.6.10;contractSimpleBank{//记录每个地址的余额mapping(address=>uint)privatebalances;//存款到银行账户functiondeposit(uintamount)public{//(1)存款功能:给调用者地址增加对应金额____________________}//从银行账户取款functionwithdraw(uintamount)public{//(2)取款功能:从调用者地址减少对应金额___________________}//检查账户余额functioncheckBalance()publicviewreturns(uint){//(3)查询余额功能:返回调用者地址的余额return________________}}

(以下内容为选填,供线上课程及线上线下混合式课程填报)教学资源列表与访问路径备注/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug在线教学过程(学生自主学习指引)1、首先观看PPT,了解基本知识;2、观看教学视频。在线辅导与答疑安排1、学生可以通过微信\QQ在线辅导或者答疑。线上作业:/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug教学单元单元2设计与实现会员积分合约周次5时数4授课班级25区块链3-1教学目的及要求:(一)知识目标1.理解Truffle控制台的核心功能,掌握其启动方法及与智能合约交互的基本逻辑。2.掌握迁移脚本的定义、存储目录、命名规则及基本结构,理解artifacts.require、deployer对象的作用。3.熟悉deployed方法的用法,理解await关键字在合约部署、实例获取中的作用。4.了解try...catch语句的语法及作用,掌握其在Truffle迁移脚本中处理异常的方法。5.掌握Truffle项目的创建、初始化流程,熟悉truffle-config.js文件的核心配置(网络、编译器版本)。6.掌握Truffle框架下合约编译、部署的命令,以及通过控制台与合约交互的关键步骤。(二)能力目标1.能独立创建并初始化Truffle项目,正确配置truffle-config.js(网络、编译器版本)。2.能编写符合规范的迁移脚本,正确导入合约、部署合约,灵活使用deployer对象。3.能熟练启动Truffle控制台,获取已部署合约实例,调用合约函数(mint、send),验证合约功能。4.能在迁移脚本中使用try...catch语句处理部署异常,排查合约部署、交互中的基础错误。(三)素养目标1.培养规范的框架使用习惯,注重项目目录结构、迁移脚本命名、配置文件编写的规范性。2.提升实操能力和逻辑思维,能将合约部署、交互需求转化为Truffle框架下的具体操作。3.培养异常处理意识和问题排查能力,能通过控制台报错、日志信息排查部署、交互中的错误。4.理解框架在智能合约开发中的高效价值,树立“工具赋能开发”的思维,提升开发效率意识。教学重点:Truffle控制台与合约的交互教学难点:deployed方法与await关键字实验仪器及教具:计算机,Remix软件教学过程备注一、教学导入(10分钟)承接上一任务“Coin会员积分合约代码开发”的基础,引出核心问题:“编写好的Solidity合约,如何通过框架高效部署到区块链网络?如何便捷地与已部署的合约进行交互、测试功能?”随后介绍Truffle框架的核心价值——作为以太坊智能合约开发的一站式工具,可简化合约部署、测试与交互流程,进而引出本节课核心任务:掌握Truffle控制台使用、迁移脚本编写,完成Coin合约的Truffle部署与交互,通过实操理解框架在智能合约开发中的高效性,明确学习目标,激发学生对框架应用的兴趣。二、主要内容(110分钟)(一)Truffle核心工具与基础语法2.2.1Truffle控制台Truffle控制台是交互式JavaScript控制台,核心用于与已部署的智能合约进行交互,是合约测试、调试的核心工具,重点讲解其功能与使用方法:1.核心功能(贴合实操场景):-合约交互:调用已部署合约的函数(如mint、send),获取合约状态(如balances),发送交易。-测试调试:在本地/测试网络中调试合约功能,排查函数调用、交易发送中的错误。-合约部署:可直接在控制台中部署新的智能合约(补充实操场景)。-交易发送:实现账户之间的ETH转账,辅助合约交互测试。2.启动方法(核心操作):必须在Truffle项目目录下,运行以下命令启动控制台:truffleconsole说明:启动后可直接输入JavaScript代码,与合约进行交互,后续结合实操详细演示。2.2.2迁移脚本(核心重点)迁移脚本是Truffle框架中用于自动化部署合约的JavaScript文件,核心作用是定义合约部署逻辑,规范部署流程,重点讲解其结构、用法及核心语法:1.基础规范:-存储目录:统一放在项目的migrations/目录下。-命名规则:文件名以数字开头(表示执行顺序),后续跟描述,如1_deploy_Coin.js(第一个执行的脚本)。2.基本结构(逐行讲解,结合代码示例):constMyContract=artifacts.require("MyContract");module.exports=function(deployer){deployer.deploy(MyContract,param1,param2);};逐句解析:-artifacts.require("MyContract"):导入已编译的智能合约,返回合约对象,用于后续部署和交互。补充:前面的MyContract是变量名(自定义),括号内的"MyContract"是合约名称(与.sol文件名、合约内名称一致)。-module.exports=function(deployer):导出部署函数,Truffle执行迁移时会自动调用该函数。补充:deployer是Truffle提供的核心对象,专门负责管理合约部署过程。-deployer.deploy(MyContract,param1,param2):部署合约的核心语句,MyContract是要部署的合约对象,param1、param2是合约构造函数的参数(无构造函数可省略)。deployed方法与await关键字deployed方法用于获取最新一次部署的合约实例,是合约交互的前提,重点讲解其用法及await的作用:1.基本语法:constinstance=awaitMyContract.deployed();2.核心说明:-await关键字:合约部署、获取实例、调用函数是顺序执行的操作,await确保前一步完成后再执行下一步,避免因合约未部署完成就调用函数导致错误。-应用场景(分两种,重点演示):(1)在迁移脚本中使用:部署合约后,获取实例并调用函数初始化数据,示例代码:constMyContract=artifacts.require("MyContract");module.exports=asyncfunction(deployer){awaitdeployer.deploy(MyContract);//等待合约部署完成constinstance=awaitMyContract.deployed();//获取合约实例awaitinstance.setValue(42);//调用合约函数初始化letvalue=awaitinstance.getValue();//读取合约状态console.log("Value:",value.toString());//打印结果};(2)在Truffle控制台中使用:启动控制台后,获取实例并交互,后续实操详细演示。try...catch异常处理try...catch是JavaScript异常处理语句,用于捕获合约部署、函数调用中的错误,避免程序崩溃,重点讲解其语法及在Truffle中的应用:1.基本语法:try{//可能抛出错误的代码(如合约部署、函数调用)}catch(error){//错误处理代码(如打印错误信息)}2.核心解析:-try块:放置可能出错的代码(如deployer.deploy(MyContract)),无错误则正常执行,有错误则跳转至catch块。-catch块:捕获错误,error参数包含错误详情,可通过console.error打印错误信息,方便排查。3.Truffle中的应用示例(迁移脚本中):constMyContract=artifacts.require("MyContract");module.exports=asyncfunction(deployer){try{awaitdeployer.deploy(MyContract);console.log("MyContractdeployedsuccessfully");}catch(error){console.error("FailedtodeployMyContract:",error);}};三、课堂练习(30分钟)1.复现Coin合约Truffle部署与交互全流程:创建Truffle项目、编写合约与迁移脚本、配置项目、编译部署、控制台交互(发放、转移积分),截图保存4-5张关键步骤(项目初始化、合约编写、迁移脚本、部署成功、控制台交互结果)。2.完成Storage合约实训任务:创建项目、编写合约与迁移脚本、部署合约,通过控制台调用store(100)和retrieve()函数,验证功能,记录操作步骤、命令及结果。四、本节小结(10分钟)1.课程总结(8分钟)本节课围绕“Truffle框架部署与合约交互”的核心任务,完成了Truffle框架核心工具、语法与实操的深度结合,核心知识点与实操要点如下:核心理论:掌握了Truffle控制台的核心功能与启动方法;熟练掌握了迁移脚本的结构、命名规则及核心语法(artifacts.require、deployer对象);理解了deployed方法与await关键字的作用,掌握了try...catch异常处理的用法;熟悉了Truffle项目的目录结构与truffle-config.js的核心配置。实操流程:熟练掌握了Truffle项目的创建、初始化流程;能独立编写合约、迁移脚本,配置项目参数;掌握了trufflemigrate部署合约的命令;能通过Truffle控制台获取合约实例,调用合约函数,验证合约功能;完成了Storage合约的实训任务,巩固了框架使用技能。2.布置作业(2分钟)课后作业:在Coin合约的迁移脚本中添加try...catch语句,捕获部署异常,部署测试并查看控制台输出。

(以下内容为选填,供线上课程及线上线下混合式课程填报)教学资源列表与访问路径备注/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug在线教学过程(学生自主学习指引)1、首先观看PPT,了解基本知识;2、观看教学视频。在线辅导与答疑安排1、学生可以通过微信\QQ在线辅导或者答疑。线上作业:/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug

教学单元单元3设计与实现发票合约周次6时数4授课班级25区块链3-1教学目的及要求:(一)知识目标1.熟练掌握Solidity函数的基本语法、可见性修饰符(public、private等)、pure/view修饰符及返回值定义,理解不同类型函数的区别与适用场景。2.理解构造函数的作用、语法及使用场景,掌握合约状态变量的初始化方法。3.掌握require语句的语法与作用,能运用其进行条件校验和错误处理。4.理解布尔类型的声明、初始化及运算逻辑,掌握其在条件判断中的应用。5.掌握函数修饰器(带参数、不带参数)的定义与使用,能运用修饰器实现权限控制(如onlyOwner)。(二)能力目标1.能独立定义Solidity合约,合理声明状态变量(映射、布尔值、地址等),完成合约初始化。2.能编写符合规范的函数,正确设置可见性、修饰符及返回值,实现指定功能。3.能运用函数修饰器实现权限控制,运用require语句进行条件校验,提升合约安全性。(三)素养目标1.培养规范的Solidity编程习惯,注重代码命名、注释、结构的规范性,提升代码可维护性。2.提升逻辑思维能力,能将实际业务需求(发票管控)转化为智能合约的代码逻辑。3.树立安全编程意识,理解权限控制、条件校验在智能合约中的重要性,避免合约漏洞。4.培养问题排查能力,能通过语法提示、逻辑分析,解决合约开发中的常见问题,提升自主学习能力。教学重点:函数(可见性、修饰符、返回值)、构造函数、require语句、函数修饰器教学难点:函数修饰器实验仪器及教具:计算机,Remix软件

教学过程备注一、教学导入:(10分钟)智能合约作为区块链技术的核心应用,已广泛渗透到金融、税务等多个领域,其中区块链发票凭借不可篡改、可追溯的特性,成为税务信息化升级的重要方向。本节课将聚焦发票合约的实际开发,从Solidity语言的核心语法出发,带领大家从零搭建一个可实现企业登记、发票管理、发票分配的完整发票合约。在正式进入代码开发前,大家可以思考:如何通过代码实现合约的权限管控?如何确保发票登记、分配的合法性和安全性?带着这些问题,我们开启本节课的学习,掌握将Solidity语法转化为实际合约开发能力的方法,为后续复杂合约开发筑牢基础。二、主要内容:(110分钟)(一)Solidity核心语法讲解结合任务要求,重点讲解发票合约开发所需的Solidity核心语法,结合示例代码,兼顾理论与实操,为合约开发奠定基础:3.1.1函数函数是Solidity合约的核心,定义合约的行为,重点讲解其基本语法、各组成部分及适用场景:1.基本语法结构:function函数名(参数类型参数名,...)可见性[payable][pure|view][returns(返回类型)]{//函数体}2.核心组成部分解析(结合示例,贴合发票合约场景):(1)函数命名:采用驼峰命名法,如registerCompany、prepareInvoice。(2)参数列表:根据功能需求定义,如发票登记函数需传入发票编号、金额等参数。(3)可见性修饰符(重点):-public:合约内外均可调用(如查询发票函数)。-private:仅合约内部可调用(如发票池映射的操作函数)。-internal:合约内部及子合约可调用,本节课暂不涉及。-external:仅合约外部可调用,本节课暂不涉及。(4)pure/view修饰符:-view:仅读取合约状态,不修改(如查询发票信息函数)。-pure:不读取、不修改合约状态,仅执行计算(如辅助计算函数)。(5)返回值:通过returns指定,多返回值用逗号分隔,如查询发票信息可返回金额、所属企业。3.示例代码(贴合发票合约):pragmasolidity^0.6.10;contractDemo{//模拟发票金额存储mapping(uint=>uint)privateinvoiceAmount;//public函数,修改合约状态(登记发票金额)functionsetInvoiceAmount(uintinvoiceNo,uintamount)public{invoiceAmount[invoiceNo]=amount;}//view函数,读取合约状态(查询发票金额)functiongetInvoiceAmount(uintinvoiceNo)publicviewreturns(uint){returninvoiceAmount[invoiceNo];}//pure函数,仅执行计算functioncalculateTotal(uinta,uintb)publicpurereturns(uint){returna+b;}}3.1.2构造函数构造函数是特殊函数,仅在合约部署时执行一次,核心用于初始化合约状态变量,重点讲解:1.基本语法:constructor(参数类型参数名,...)public{//初始化状态变量}2.核心说明:-无返回值,无需指定returns。-部署合约时自动执行,仅执行一次。-msg.sender:全局变量,表示当前调用者地址,构造函数中msg.sender为合约部署者(即发票合约中的税务局)。3.示例代码(贴合发票合约):pragmasolidity^0.6.10;contractInvoice{//合约所有者(税务局)地址addressprivateowner;//构造函数,初始化owner为部署者地址constructor()public{owner=msg.sender;}}3.1.3require语句用于运行时条件校验,不满足条件则终止合约执行并抛出错误,是合约安全的核心,重点讲解:1.基本语法:require(条件表达式,"错误提示信息");2.核心应用场景(贴合发票合约):-权限校验:判断调用者是否为合约所有者。-参数校验:判断发票编号、金额是否合法(如金额大于0)。-状态校验:判断企业是否已登记、发票是否已存在。3.示例代码://校验调用者是否为所有者require(msg.sender==owner,"Onlyownercanoperate");//校验发票金额是否合法require(amount>0,"Invoiceamountmustbegreaterthan0");3.1.4布尔类型用于表示逻辑真假(true/false),核心用于条件判断、状态标记,重点讲解:1.声明与初始化:boolisRegistered;//默认值为falseboolisActive=true;2.核心应用:标记企业是否为试点企业(如mapping(address=>bool)companies)。3.逻辑运算:&&(与)、||(或)、!(非),用于多条件校验。3.1.5函数修饰器用于封装可复用的逻辑,在函数执行前/后自动执行,重点讲解不带参数的修饰器(贴合发票合约权限控制):1.基本语法(不带参数):modifier修饰器名(){//函数执行前的逻辑(如权限校验)_;//占位符,代表被修饰的函数体//函数执行后的逻辑(可选)}2.核心应用:onlyOwner修饰器,限制只有合约所有者(税务局)可执行关键操作(如登记企业、分配发票)。3.示例代码(贴合发票合约):pragmasolidity^0.6.10;contractInvoice{addressprivateowner;constructor()public{owner=msg.sender;}//定义onlyOwner修饰器,校验调用者是否为所有者modifieronlyOwner(){require(msg.sender==owner,"Onlyownercancallthisfunction");_;}//被修饰的函数,仅所有者可调用functionregisterCompany(addresscompany)publiconlyOwner{//登记企业逻辑}}三、课堂练习(30分钟)(1)简述Solidity中function的可见性修饰符有哪些,各自的适用场景是什么?(2)require语句的作用是什么?在发票合约中,哪些地方需要使用require语句进行校验?(3)函数修饰器onlyOwner的作用是什么?其实现逻辑是什么?四、本节小结(10分钟)1.课程总结(8分钟)本节课围绕“发票合约代码开发”的核心任务,完成了Solidity核心语法与合约开发的深度结合,核心知识点与实操要点如下:核心理论:熟练掌握了Solidity函数的语法、可见性修饰符、pure/view修饰符的应用;理解了构造函数的作用与初始化逻辑;掌握了require语句的条件校验用法;学会了函数修饰器(onlyOwner)的定义与权限控制逻辑;理解了布尔类型、映射在合约中的应用。2.布置作业(2分钟)课后作业:补全以下构造函数,实现owner变量的初始化:addressprivateowner;constructor()public{_______________;//将owner设为合约部署者}(2)补全以下onlyOwner修饰器的代码:modifieronlyOwner(){require(_______________,"Onlyownercanoperate");_;}(3)补全prepareInvoice函数中的校验逻辑,确保发票未被重复登记:functionprepareInvoice(uintinvoiceNo,uintamount)publiconlyOwner{require(invoiceNo!=0,"Invalidinvoicenumber");require(amount>0,"Invoiceamountmustbegreaterthan0");require(_______________,"Invoicealreadyregistered");invoicePool[invoiceNo]=address(0);invoiceValue[invoiceNo]=amount;}

(以下内容为选填,供线上课程及线上线下混合式课程填报)教学资源列表与访问路径备注/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug在线教学过程(学生自主学习指引)1、首先观看PPT,了解基本知识;2、观看教学视频。在线辅导与答疑安排1、学生可以通过微信\QQ在线辅导或者答疑。线上作业:/teacher/v2/directaccess/courseIndex?courseId=0c3eee452aae4898a322792997971053_mi&id=0c3eee452aae4898a322792997971053_mi&noLoginUserId=vkiajutlphfkfeeaqmp6w&noLoginSchoolId=gph-aewnly1ehnirgnnxug教学单元单元3设计与实现发票合约周次7时数4授课班级25区块链3-1教学目的及要求:(一)知识目标1.熟练掌握Solidity合约的定义方法,理解合约文件的基本结构(版本声明、合约关键字)。2.掌握状态变量(地址、映射)的声明与使用,理解映射在合约中的核心应用场景(发票池、企业登记)。3.理解构造函数的作用、语法及使用场景,掌握合约管理员(owner)的初始化方法。4.熟练掌握函数修饰器(带/不带参数)的定义与应用,尤其是onlyOwner修饰器实现权限控制的逻辑。5.掌握require语句的语法与作用,能运用其进行权限、参数、状态等多场景的条件校验和错误处理。(二)能力目标1.能独立创建Solidity文件,分步实现发票合约的定义、变量声明、修饰器、构造函数及核心函数编写。2.能运用函数修饰器实现权限控制,运用require语句进行多场景校验,提升合约安全性。3.能完成会员积分合约的代码补全(构造函数、修饰器、require校验),实现权限控制与数据验证。4.能独立完成简单银行合约的开发,实现账户管理、存取款、冻结解冻等核心功能。5.能通过Truffle控制台与智能合约进行交互,完成合约部署、功能测试等实操操作。6.能排查代码中的基础语法错误、逻辑错误,结合训练单巩固知识点,提升问题解决能力。(三)素养目标1.培养规范的Solidity编程习惯,注重代码命名、注释、结构的规范性,提升代码可维护性和可读性。2.提升逻辑思维能力,能将实际业务需求(发票管控、银行账户管理)转化为智能合约的代码逻辑。3.树立安全编程意识,理解权限控制、条件校验在智能合约中的重要性,避免合约漏洞。教学重点:发票合约的代码编写教学难点:发票合约的代码编写实验仪器及教具:计算机,Remix软件

教学过程备注一、教学导入(10分钟)上一节课我们已经系统介绍了Solidity语言的核心语法知识,包括构造函数、函数修饰器、require语句、映射等关键内容,为本节课的实操开发奠定了坚实基础。本节课的核心任务,就是将上节课所学的语法知识灵活运用到实际场景中,通过分步实现发票合约开发,把理论语法转化为实操能力。我们将围绕发票合约的核心业务需求,逐一运用已学语法编写代码,同时结合实训任务和训练单,巩固语法应用、强化实操技巧,解决“如何用所学语法实现合约权限管控、数据验证”的核心问题,确保大家既能熟练运用语法知识,也能独立完成发票合约开发,为后续复杂合约学习筑牢基础。二、主要内容(110分钟)(一)核心任务:发票合约代码分步实现以“Invoice.sol”为目标文件,按照“合约定义→变量/修饰器/构造函数→核心函数”的步骤,分步实现发票合约开发,每一步结合Solidity语法讲解,明确代码逻辑与注意事项:步骤1:定义合约创建一个新的Solidity文件,命名为Invoice.sol,编写合约基础结构,指定Solidity版本(^0.6.10),定义合约名称:pragmasolidity^0.6.10;contractInvoice{}讲解:pragmasolidity^0.6.10;用于指定合约兼容的Solidity版本,避免版本不兼容导致的语法错误;contract关键字用于定义合约,合约名称需与文件名保持一致(首字母大写,符合命名规范)。步骤2:定义合约变量、修饰器和构造函数在合约内部,声明私有状态变量owner(存储合约创建者地址),定义onlyOwner修饰器(限制权限),编写构造函数(初始化owner)://合约创建者地址(私有变量,仅合约内部可访问)addressprivateowner;//定义修饰器,限制函数只能由合约创建者调用modifieronlyOwner(){//要求调用该函数的用户必须是合约创建者,否则抛出错误require(msg.sender==owner,"Onlyownercancallthisfunction");_;//占位符,代表被修饰的函数体,执行完校验后继续执行函数}/**@dev构造函数,初始化合约创建者为部署合约的账户*/constructor()public{owner=msg.sender;//msg.sender为全局变量,代表当前调用者地址,部署时即为合约创建者}讲解:owner变量设为private,确保合约安全性,避免被外部随意修改;onlyOwner修饰器通过require语句实现权限校验,后续核心函数添加该修饰器,即可限制只有合约创建者(税务局)可操作;构造函数仅在合约部署时执行一次,用于初始化owner变量。步骤3:编写将发票添加到发票池的函数定义映射invoicePool(存储发票池,键为发票编号,值为企业地址,0地址表示未认领),编写prepareInvoice函数,实现发票添加功能,仅合约创建者可调用://发票池,发票编号=>企业账户,账户为0表示还未认领(public修饰,可外部查询)mapping(uint256=>address)publicinvoicePool;/**@dev税务局将发票放入发票池@paraminvoiceId发票编号(参数为uint256类型,确保编号范围足够)*/functionprepareInvoice(uint256invoiceId)publiconlyOwner{//校验发票编号对应的账户为0,即未被认领,避免重复添加require(invoicePool[invoiceId]==address(0),"InvalidinvoiceID.");//将发票编号对应的账户设置为合约创建者(标记为已添加到发票池,未分配)invoicePool[invoiceId]=owner;}讲解:invoicePool映射设为public,方便外部查询发票所属企业;prepareInvoice函数添加onlyOwner修饰器,限制权限;require语句校验发票状态,避免重复添加,确保发票池数据的准确性。步骤4:编写添加试点企业的函数定义映射companies(标记试点企业,键为企业地址,值为布尔值),编写registerCompany函数,实现试点企业登记功能,仅合约创建者可调用://是否为试点企业,企业账户=>bool值(public修饰,可外部查询)mapping(address=>bool)publiccompanies;/**@dev添加试点企业@paramcompany试点企业的账户地址*/functionregisterCompany(addresscompany)publiconlyOwner{//将试点企业的账户地址添加到试点企业列表中,标记为truecompanies[company]=true;}讲解:companies映射用于记录合法试点企业,后续发票分配时需校验企业是否在列表中;registerCompany函数仅合约创建者可调用,确保试点企业登记的合法性。步骤5:编写将发票分配给指定企业的函数编写assignInvoiceTo函数,实现发票分配功能,仅合约创建者可调用,分配时需进行多重校验(发票有效、企业合法):/**@dev将发票分配给指定的企业@paraminvoiceId发票编号@paramcompany企业账户地址*/functionassignInvoiceTo(uint256invoiceId,addresscompany)publiconlyOwner{//要求发票编号对应的账户不为0,即已添加到发票池require(invoicePool[invoiceId]!=address(0),"InvalidinvoiceID.");//检查企业地址是否在已注册的试点企业列表中require(companies[company]==true,"Invalidcompany.");//将发票编号对应的账户设置为指定的企业账户地址,完成分配invoicePool[invoiceId]=company;}讲解:该函数通过双重require校验,确保发票已添加到发票池、企业为合法试点企业,避免无效分配;分配后更新invoicePool中发票对应的企业地址,完成发票分配流程。(二)任务实训:会员积分合约优化基于会员积分合约(Coin),添加构造函数、修饰符和require语句,实现权限控制和数据验证,增强合约安全性,分步讲解补全思路:1.实训目的(1)学习使用修饰符、require语句等增强合约的安全性,掌握权限控制和数据验证的核心方法。(2)学习如何编写易于维护和扩展的智能合约代码,规范代码结构和注释。2.实训内容(代码补全)原合约框架:pragmasolidity^0.6.10;contractCoin{//存储每个地址对应的会员积分余额mapping(address=>uint)publicbalances;//定义合约管理员

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论