版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
认识区块链与智能合约目录CONTENTS区块链与以太坊基础智能合约概念开发环境与工具实践操作与案例区块链与以太坊基础01PART区块链是一种去中心化的分布式账本技术,通过密码学方法确保数据难以篡改和伪造。它由区块组成,每个区块包含交易记录和哈希值,按顺序连接形成链。区块链分为公有链、联盟链和私有链。公有链如以太坊,完全开放;联盟链由多个组织管理,适合多方协作场景;私有链由单一组织控制,注重保密性。区块链的工作原理包括交易发起、节点验证、交易打包、共识机制和新区块添加。共识机制如PoW、PoS等确保网络一致性。010203区块链定义工作原理区块链类型区块链概述以太坊是支持智能合约的开源区块链平台,具备图灵完备的虚拟机(EVM),允许开发者创建复杂应用。其Gas机制激励矿工参与网络维护。以太坊特点以太坊由VitalikButerin于2013年提出,2015年正式上线。它经历了多次技术升级,从PoW到PoS共识机制,推动了区块链技术的广泛应用。发展历程以太坊简介智能合约概念02PART定义与优势智能合约是自动执行的计算机程序,部署在区块链上,无需中介即可管理合同条款。其优势在于透明性、不可篡改性和自动执行。应用领域智能合约广泛应用于金融服务、供应链管理、物联网等领域,通过代码逻辑自动执行合同条款,提高效率和安全性。0102智能合约概念执行过程部署流程智能合约的部署包括编写合约代码、编译生成字节码和ABI接口,然后将字节码发布到区块链上,生成合约地址。当满足合约预设条件时,智能合约自动执行相应操作,并将结果写入区块链,确保交易的不可更改性和永久性记录。Gas机制Gas是以太坊网络中衡量计算资源的单位,用户需支付Gas费用以执行合约。Gas机制限制交易工作量并激励矿工。运行机制开发环境与工具03PART界面与功能Remix是基于浏览器的Solidity智能合约开发环境,提供合约创建、编译、部署和执行等功能。其界面分为侧面板、主面板、插件面板和终端控制台。插件管理Remix支持多种插件,如单元测试插件和调试器插件,帮助开发者进行合约测试和调试,提升开发效率。编译与部署在Remix中,开发者可选择编译器版本进行合约编译。编译成功后,可在RemixVM、WalletConnect或外部节点上部署合约。Remix开发环境01环境搭建VSCode是一款功能强大的开源代码编辑器,通过安装Solidity插件,可支持智能合约开发。开发者需配置Solidity编译器环境,选择合适的编译器版本。02编写与调试在VSCode中编写智能合约时,可利用代码补全、语法高亮等功能。通过集成的调试工具,开发者可跟踪合约运行过程,排查问题。VSCode开发环境实践操作与案例04PART01在Remix中创建Hello.sol合约文件,编写简单合约代码,定义字符串变量和相关函数,实现基本功能。编写Hello.sol合约02选择合适的Solidity编译器版本对合约进行编译,编译成功后点击“部署”按钮,将合约部署到RemixVM上,测试合约功能。编译与部署Remix合约部署在Ubuntu虚拟机上部署WeBase平台,安装依赖环境,配置相关参数,启动服务,为智能合约开发提供稳定的运行环境。在WeBase-Front上创建合约文件,选择编译器版本进行编译。部署合约后,通过调用合约接口,验证合约功能是否正常运行。环境搭建编译与调用WeBase-Front合约部署谢谢大家开启Solidity编程之旅01Solidity语言概述02Solidity基础语法03变量与数据类型目录CONTENTS04控制语句05实践案例06项目小结Solidity语言概述01PowerPointdesignPART创始人及时间Solidity语言由加文·伍德于2014年提出,是专为以太坊平台设计的智能合约开发语言,后逐渐扩展到其他区块链平台。应用场景Solidity广泛应用于以太坊等区块链平台,用于开发智能合约,如投票系统、金融合约等,是区块链应用开发的核心语言之一。语言起源与发展Solidity基础语法02PART文件命名与结构Solidity文件以.sol为后缀,文件名需与合约名一致,建议使用大驼峰命名法,如SimpleTest.sol,文件可包含多个合约,但需有一个与文件名同名的合约。SPDX许可证标识符SPDX许可证标识符位于文件首行,如//SPDX-License-Identifier:MIT,用于声明代码的版权许可,虽不影响运行,但在Remix编译时缺少会警告。文件编写规则关键字pragma用于指定编译器版本,如pragmasolidity^0.6.0;contract定义合约主体;constant和immutable分别用于定义编译时和部署时不可变的变量。注释Solidity支持//单行注释和/**/多行注释,注释内容不会被编译,用于解释代码逻辑,便于开发者理解。0102基础关键字与注释变量与数据类型03PART常量与不可变量基本变量变量定义需指定数据类型,如inta;,命名需符合规则,不能以数字开头,不能使用保留关键字,区分大小写。常量使用constant定义,如intconstantABC=10,值不可变;immutable变量在部署时确定值,可在构造函数中赋值,如uintimmutabledecimals=10。变量定义与使用包括布尔类型bool、整数类型int和uint、地址类型address、字节数组bytes和字符串类型string等,每种类型有特定的运算和使用规则。包括数组、结构体和映射,数组分定长和动态数组,结构体用于组合不同类型数据,映射用于存储键值对数据,如mapping(uint=>string)。基本数据类型复合数据类型数据类型控制语句04PARTif语句用于根据条件执行代码,如if(a>b){res="大于";},可嵌套使用,支持if...else和if...elseif结构。if语句Solidity不支持switch语句,条件判断主要依赖if系列语句完成。switch语句条件语句for循环while循环while循环在条件满足时执行循环体,如while(i<10){i++;sum+=i;},先判断条件,再执行循环体。for循环常用于遍历数组等,如for(i=0;i<10;i++){sum+=i;},可省略初始化、条件或迭代语句,但需保留分号。循环语句实践案例05PART任务目标编写findPrime()函数,查找1到100之间的所有质数,存储到状态数组primeNums中,通过循环和条件判断实现。实现逻辑使用两层for循环,外层循环变量i从2到100,内层循环变量j从2到i,判断i是否能被j整除,若不能则i为质数,加入数组。质数查找任务目标实现vote()函数,接收候选人名字,判断是否合法,合法则增加得票数,使用数组和映射完成投票统计。01实现逻辑使用for循环遍历候选人数组,通过keccak256比较字符串,判断名字是否合法,合法则更新映射votes中的票数。02投票统计任务目标定义读者和图书结构体,实现添加读者、添加图书和查询图书借阅信息的函数,构建借书管理系统的基础功能。实现逻辑定义Reader和Book结构体,使用映射存储读者和图书信息,通过函数操作映射,实现添加和查询功能,如addReader()和getBookInfo()。借书管理项目小结06PART本项目学习了Solidity的基本语法,包括变量定义、数据类型、控制语句等,通过实践案例加深了对语法的理解和应用。语法要点Solidity作为区块链智能合约开发语言,具有独特的语法和特性,如pragma指令、immutable变量等,与其他编程语言有明显区别。语言特色知识总结编程体验通过完成质数查找、投票统计和借书管理等任务,初步掌握了Solidity编程的技巧,感受到智能合约开发的逻辑性和严谨性。应用展望Solidity编程是区块链应用开发的基础,掌握其语法和逻辑,为后续开发更复杂的智能合约和区块链应用奠定了坚实基础,如金融合约、供应链管理等。实践体会谢谢大家深入理解Solidity函数/CATALOGUE目录010203函数基础概念函数修饰器特殊函数040506函数重载转账函数加密与编码函数函数基础概念01PART””定义语法参数与返回值函数参数声明类似普通变量,未使用参数可省略名称。引用类型参数需添加位置声明。返回值可有多个,可通过returns关键字指定类型和变量名,也可在函数体中使用return语句返回数据。02Solidity中定义函数使用关键字function,需指定函数名、参数列表、函数修饰符及返回值列表。函数修饰符包括可见性与可变性等。例如functionadd(uinta,uintb)privatepurereturns(uint)定义了一个私有纯函数,用于计算两个数的和。01函数定义内部调用是在合约内对函数调用,外部调用是在合约外调用或通过this实现。内部调用直接使用函数名,外部调用需通过合约实例或this关键字。内部调用与外部调用Solidity支持类json形式传参,将参数名作为键,参数值作为值,参数顺序可调整,但参数名不需加引号。类json形式传参函数调用函数修饰器02PART修饰器定义函数修饰器用于声明函数的某些特性,可减少代码冗余。定义修饰器使用modifier关键字,语法为modifier修饰器名{条件体_;},其中_是占位符,用于插入函数体。修饰器分类不带参数的修饰器如onlyOwner,用于限制函数调用者权限。带参数的修饰器如checkValue,用于检查函数参数是否满足特定条件。函数修饰器概念使用修饰器时,在函数定义的参数列表后添加修饰器名称。修饰器与函数可见性及可变性修饰符的位置无先后顺序要求。使用方法例如functionchangeOwner(addressnewOwner)publiconlyOwner,只有合约的owner才能调用该函数修改owner。使用案例修饰器的使用特殊函数03PART构造函数是合约部署时自动运行的函数,用于初始化合约状态变量。每个合约最多只能有一个构造函数,其名字为constructor,不能有function关键字,可见性必须是public或internal。构造函数概念02构造函数可以带参数或不带参数。带参数的构造函数在部署合约时,需在部署按钮右侧的输入框中输入参数值。构造函数参数01构造函数自毁函数概念自毁函数用于销毁区块链上部署的智能合约。执行自毁函数后,合约账户中的余额会发送给指定的地址,合约中的状态和功能访问会失效。自毁函数使用自毁函数有固定的名称selfdestruct和一个用于接收合约余额的账户地址参数。例如selfdestruct(owner)将合约余额转账给owner并销毁合约。自毁函数函数重载04PARTSolidity中函数重载是指在一个合约中,允许定义多个具有相同名称但参数列表不同的函数。参数列表包括参数类型、个数或顺序必须不同。01重载定义函数重载常用于实现功能类似的函数,使用相同的函数名,既减少了代码的复杂性,也提高了程序的可读性。02重载意义函数重载概念调用匹配在调用重载函数时,编译器会把输入的实际参数和函数参数的变量类型做匹配。如果出现多个匹配的重载函数,则会报错,需要明确指明是调用的哪个函数。匹配案例例如functionf(uint8a)和functionf(uinta)是重载函数,调用f(10)会报错,因为存在多个匹配函数,需使用f(uint(10))显式转换参数类型来指明调用的函数。函数重载使用转账函数05PART转账定义转账是指向指定账户发送一定数量的以太,通过智能合约可以实现不同账户之间的转账操作。接收方如果是合约账户时,需要有payable类型的函数方可接收此转账。转账费用每笔交易都收取一定数量的Gas,目的是限制执行交易所需要的工作量和为交易支付的手续费。转账概念receive()函数是合约默认用来接收转账的函数,合约中最多只能有一个receive()函数,其定义语法为receive()externalpayable{函数体},函数体中不能有修改状态变量等消耗较多Gas的语句。receive()函数fallback()函数在receive()函数不存在时,会被调用来接收以太。其声明语法为fallback()externalpayable{函数体},如果转账时msg.data不为空则调用fallback()函数。fallback()函数0201接收以太的函数send方法send方法发送以太的语法是接收地址.send(以太数),该函数返回转账是否成功的布尔量,转账出错不会抛出异常,且费用消耗限制为不能超过2300个Gas。transfer方法transfer方法的语法是接收地址.transfer(以太数),转账出错时会抛出异常,并且在本次交易中的修改都会回滚,因此transfer相比send使用起来更安全,同样也有最多2300个Gas消耗的限制。call方法call方法的语法是接收地址.call{value:以太数}(附加数据),该函数有两个返回值,第一个返回值为布尔类型,代表转账是否成功;第二个返回值为bytes类型,是接收方返回的消息数据。该方法没有Gas限制。010203发送以太的函数加密与编码函数06PART01Solidity中的加密函数使用了哈希算法,可以对输入的任意长度的内容进行加密,生成固定长度的加密数据。常用加密函数包括keccak256、sha256、ripemd160等。哈希算法02加密函数常用于数据验证,将需要验证的数据进行加密计算,将结果与正确数据的加密结果进行比较,从而判断两个数据是否一致。加密应用加密函数在Solidity中,编码是指将数据结构转换为字节流,以便在区块链上进行存储和传输。所有数据传输和操作都依赖于ABI编码规则。编码概念Solidity提供了abi.encode、abi.encodePacked、abi.encodeWithSignature、abi.encodeWithSelector等内置函数用于处理编码和解码。编码函数解码是将字节流转化为智能合约可以理解的原始数据类型的过程。Solidity中的解码函数通常是abi.decode(),用于解码abi.encode生成的二进制编码。解码函数编码函数谢谢大家探索合约继承与接口的使用抽象合约与接口02项目任务实践04合约继承基础01Solidity库03项目总结与展望05CATALOGUE目录合约继承基础01PART010203继承与派生定义继承是子类拥有父类特性,派生是子类对父类特性的限制或扩展。Solidity中合约继承类似Java、C++的类继承,用于扩展合约功能。继承的语法成员继承规则Solidity中用is关键字表示继承,支持单继承和多继承。单继承是继承单个合约,多继承是继承多个合约,需按先父后子顺序排序。子合约自动继承父合约的public及internal成员,包括方法和状态变量,也继承external函数,但不继承private成员。合约继承的概念重写的基本要求子合约中重写父合约函数需与父合约函数名称、参数列表、修饰符及返回值相同。solidity0.6.0后,父合约函数需用virtual修饰,子合约用override修饰。多继承中的重写多继承时,若父合约有相同virtual函数,子合约需重写该函数,调用时会调用继承列表中最右边父合约的函数。调用重载函数子合约中调用重载函数默认调用本合约函数,调用父合约函数需用"super.函数名"或"父合约名称.函数名"。函数重写机制子合约实例化时,父合约构造函数先被调用,再调用子合约构造函数。父合约构造函数有参数时,子合约需传参。01构造函数的调用顺序父合约构造函数参数可在is关键字时传,也可在子合约构造函数中传。多继承时,需给出所有父合约构造函数参数。02参数传递方式构造函数继承修饰器的继承父合约中的函数修饰器会被子合约继承,子合约函数可使用父合约修饰器。修饰器的重写子合约想覆盖父合约修饰器功能,需在父合约中用virtual修饰,子合约中用override重写。修饰器的继承与重写抽象合约与接口02PART抽象合约的定义抽象合约是特殊合约,含抽象函数,无法被实例化或部署,通常作为父合约被继承,需实现抽象函数。抽象合约定义接口规范,规定继承合约需遵循的函数和事件,提高合约互操作性。抽象合约的作用抽象合约的语法抽象合约定义时用abstract关键字,抽象函数需有virtual关键字,派生合约实现时需加override关键字。抽象合约接口的定义接口合约类似抽象合约,但不能含已实现函数,只能有external类型的未实现函数,且默认是virtual类型。接口与抽象合约的区别抽象合约可含状态变量和构造函数,接口不能;抽象合约可含已实现函数,接口不能。接口的定义语法接口定义用interface关键字,可继承其他接口,合约继承接口需实现所有函数,否则需声明为抽象合约。通过接口调用合约对于已部署合约,可通过定义接口调用其外部函数,即使不知道合约完整定义。01020304Solidity接口Solidity库03PARTSolidity中的库是特殊合约,为其他合约提供可复用代码,促进代码复用,减少冗余,降低Gas消耗。库的作用01库中不能有状态变量,不能接收以太,不能继承或被继承,不能有构造函数,函数通常为internal类型。库的限制02库合约介绍库的声明与调用声明库用library关键字,调用库函数可通过"库名.函数名"或"using库名for数据类型"两种方式。库函数的调用方式直接调用库函数或通过数据类型调用库函数,需注意数据类型与库函数参数匹配。库的使用方法项目任务实践04PART实现用户管理接口合约,包含添加、删除、获取用户列表等函数,通过接口规范用户管理功能。任务目的定义接口合约IUser,实现接口功能的IUserImpl合约,编写测试合约UserTest,测试接口功能。任务步骤用户管理接口任务目的编写统计学生成绩的库合约,封装数据处理和统计功能,提高代码复用性。任务步骤定义库合约ArrayLib,实现统计函数stat,编写测试合约Test,调用库函数进行数据统计。统计学生成绩使用面向对象思路,对借书管理系统进行封装,提高代码可维护性和复用性。任务目的新建库BookLib,定义图书管理合约BookMgr、读者管理合约ReaderMgr,重写借书管理合约BookManage,实现系统功能。任务步骤借书管理封装项目总结与展望05PART项目成果学习了Solidity面向对象编程技巧,包括合约继承、函数重写、抽象合约、接口和库合约的使用,通过任务案例掌握了相关语法和编程流程。学习收获提高了智能合约开发能力,理解了面向对象编程在智能合约中的应用,为开发复杂区块链应用奠定了基础。项目总结技术发展随着区块链技术的发展,Solidity语言和面向对象编程将在智能合约开发中发挥更大作用,需持续关注技术动态。应用拓展将所学知识应用到更多区块链应用场景中,如金融、供应链、物联网等,推动区块链技术的创新和发展。展望未来谢谢大家智能合约异常与错误处理CONTENTS目录01020304异常处理基础异常处理方式异常处理函数对比异常处理实践05项目总结与展望异常处理基础01PART异常定义异常是合约运行中无法预料的非法情况,如除零、数组越界等,会导致合约执行中断及交易数据回滚。错误定义错误是程序执行中不符合预期的情况,如运行条件不满足、用户输入不合法等。异常与错误概念异常处理方式02PARTrequire()通过条件表达式检查要求是否满足,不满足则抛出错误信息并退出事务,常用于检查函数传入参数等。require函数assert()用于检查内部错误,条件不成立时抛出异常,一般用于程序调试。assert函数revert()用于复杂逻辑处理场景,可抛出错误信息,适用于条件验证。revert函数抛出异常try/catch用于捕获外部调用时的异常,防止交易失败,可接收外部调用的返回值及异常时的返回数据。try/catch语法try/catch可捕获require()、assert()和revert()函数抛出的异常,通过catch的不同子句捕获错误信息。主动抛出异常捕获捕获异常异常处理函数对比03PARTassert函数Solidity0.8.0之前,assert()抛出异常时消耗所有剩余Gas,之后版本会退还剩余Gas。1require与revert函数require()和revert()函数在抛出异常时会退还剩余Gas。2Gas开销require函数适用于验证用户输入、函数返回值、交易前条件等,通常放在函数开头。revert函数适用于复杂逻辑处理场景,结合if/else条件语句使用。assert函数适用于检查整数溢出、数据异常等不应出现的错误,通常放在函数结尾。适用场景异常处理实践04PART任务目的编写猜数字游戏合约,使用异常处理函数对用户输入数据进行检查。任务步骤完成start()、guess()、viewNumber()函数,通过require()等函数对游戏逻辑进行异常处理。猜数游戏任务分析Bank合约漏洞,编写攻击合约展示漏洞后果,并修复漏洞。任务目的任务步骤编写攻击合约Attack,通过修改转账方法、调整余额修改顺序或使用互斥锁修复漏洞。重入攻击漏洞修复任务任务目的在借书管理系统中增加异常处理,对参数传递、权限判断等情况进行处理。任务步骤在BookMgr、ReaderMgr、BookManage合约中增加require()等异常处理函数,确保系统运行安全。借书管理系统任务项目总结与展望05PART学习成果本项目学习了Solidity合约编程中异常处理的方法,包括异常抛出、捕获及函数对比,通过任务案例加深了对异常处理的理解。重要性掌握异常处理方法有助于编写安全稳定的智能合约,保障用户利益和区块链生态健康发展。0102项目总结技术发展随着区块链技术发展,智能合约的异常处理将更加智能化、自动化。安全意识开发者需持续增强安全意识,关注合约潜在风险,及时发现并修复漏洞。未来展望谢谢大家正确使用事件和日志Catalogue目录1.项目背景能力目标2.思政聚焦3.项目相关知识4.项目任务5.项目小结6.项目背景01PART事件的作用事件是智能合约与外部应用交互的重要方式,通过事件可以将合约运行状态和交易信息传递给前端应用,方便前端及时更新数据。日志用于记录智能合约的运行过程,便于调试和查看合约执行情况,同时为区块链的透明性和可追溯性提供支持。日志的功能智能合约中的事件与日志能力目标02PART01.02.使用event关键字定义事件,事件可以有参数,参数可加indexed标记以便快速检索。事件定义使用emit关键字触发事件,事件触发后会生成日志记录在区块链上。触发事件掌握事件定义和触发使用Solidity内置的log函数记录日志,日志会显示在Remix控制台终端上。日志记录通过日志查看功能,可以浏览和过滤日志中的信息,方便调试和查看合约运行结果。信息输出日志记录和信息输出思政聚焦03PART事件和日志确保了链上操作的透明性和可追溯性,增强了区块链交易系统的公平公正性。透明性和可追溯性通过日志记录,任何人都可以验证合约交易和操作的执行过程,减少了人为操控和不公正行为的可能。信任度提升事件和日志的意义项目相关知识04PARTRemix控制台日志Remix控制台终端显示合约部署或函数调用时的日志信息,包括交易状态、Gas消耗及函数的输入输出等。Solidity中的日志函数Solidity提供了log0到log3等日志函数,用于记录不同数量参数的日志信息。日志处理事件是智能合约发出的通知,可以被外部监听者通过RPC接口订阅,用于记录交易和与前端应用交互。事件的概念在合约中先定义事件,再在函数中触发事件,事件触发后会以日志条目形式记录在区块链中。事件的使用事件处理项目任务05PART任务目的练习枚举、结构体、映射、异常处理、事件处理等知识点,完成影评管理系统的合约编写。任务步骤编写addFilm、postReview和getReviews函数,实现新增电影、发布影评和查询影评的功能,并在Remix上部署和测试。电影评价管理在借书管理系统中增加事件处理机制,记录添加图书、添加读者、借阅图书、归还图书、缴纳罚金等操作。任务目的在相应合约中定义和触发事件,完成系统功能的完善,并在Remix上进行测试。任务步骤借书管理:五项目小结06PART0102事件记录交易数据通过定义和触发事件,可以将合约运行过程中的交易信息或状态变化记录到日志,并广播到区块链上。事件与前端交互事件为合约与DApp等前端应用的交互提供了机制,方便前端应用程序及时处理合约运行数据。事件处理方法谢谢大家学习智能合约的测试方法01智能合约测试概述05项目实践03使用Truffle进行合约测试目录CONTENTS02测试方法与工具06项目小结04Remix中的单元测试智能合约测试概述01PART01测试的必要性智能合约运行在区块链上,代码一旦部署难以修改,因此测试是确保合约安全性和可靠性的重要环节,可以提前发现潜在问题,避免损失。02测试的分类测试分为自动化测试和手动测试,自动化测试效率高、可重复性强,手动测试可针对特殊情况,两者结合能全面评估合约。测试的重要性测试方法与工具02PART单元测试针对合约的单个函数或模块进行测试,验证其是否按预期工作,如Truffle中使用Mocha和Chai编写测试用例。边界值测试测试合约在边界条件下的行为,如最大值、最小值、空值等,确保合约能正确处理这些情况。集成测试测试多个合约之间的交互,确保数据传递和状态更新正确,模拟真实场景进行测试。异常测试模拟网络故障、节点故障等异常情况,验证合约能否正确处理异常。检查合约是否存在安全漏洞,如重入攻击、整数溢出等,确保合约安全运行。安全性测试使用工具生成覆盖率报告,确保测试用例覆盖所有代码分支,提高测试质量。覆盖率测试测试方法Truffle是流行的以太坊智能合约开发和测试框架,提供编写、部署和测试合约的工具,支持多种区块链环境。TruffleGanache是Truffle套件中的区块链模拟器,用于本地开发和测试,提供测试账户和快速部署环境。Ganache测试工具使用Truffle进行合约测试03PART安装Node.js是使用Truffle的前提,安装完成后可通过命令行验证版本。安装Node.js安装Truffle安装Ganache下载并安装Ganache,启动后可查看测试账户信息,用于合约部署和测试。使用npm安装Truffle,安装后可通过命令行查看版本,确保安装成功。测试环境搭建创建项目使用truffleinit命令创建Truffle项目,项目目录包含合约、迁移脚本和测试脚本等文件夹。修改配置文件配置truffle-config.js文件,设置区块链网络地址和合约编译器版本,确保与Ganache设置一致。编写部署脚本在migrations目录下编写部署脚本,使用deployer.deploy()方法部署合约到区块链。编写测试脚本在test目录下编写测试脚本,使用Mocha和Chai编写测试用例,验证合约功能。编写合约在contracts目录下编写智能合约代码,如HelloWorld合约,定义合约的功能和逻辑。编译合约使用trufflecompile命令编译合约,生成编译后的JSON文件,为部署和测试做准备。部署合约使用trufflemigrate命令执行部署脚本,将合约部署到Ganache测试链上。执行测试使用truffletest命令执行测试脚本,查看测试结果,确保合约按预期工作。Truffle测试步骤Remix中的单元测试04PART在Remix的插件管理面板中启用SolidityUnitTesting插件,以便使用单元测试功能。插件管理01启用单元测试插件使用Remix提供的Assert库编写测试用例,如检查合约部署后的初始值或调用合约方法后的结果。编写测试用例在Remix中执行测试文件,查看测试结果,验证合约功能是否正确。执行测试单元测试方法项目实践05PART测试投票合约的投票功能和查询功能,确保合法投票成功,非法投票失败。测试目的创建Truffle项目,编写投票合约,修改配置文件,编写部署脚本和测试脚本,执行测试。测试步骤投票合约测试测试目的测试影评管理合约的添加电影、发布影评等功能,确保权限控制和事件触发正确。测试步骤创建Truffle项目,编写影评管理合约,修改配置文件,编写部署脚本和测试脚本,执行测试。影评管理合约测试项目小结06PART掌握了Truffle框架和Ganache工具的使用方法,学会了编写部署脚本和测试脚本,完成了投票合约和影评管理合约的测试。学习成果通过本项目的学习,为后续使用Truffle框架进行DApp应用开发打下基础,可进一步探索更复杂的合约测试和开发场景。未来展望0102项目总结谢谢大家Web3.js的使用与实践/Contents目录010203Web3.js概述Web3.js安装与测试使用Web3.js访问智能合约040506浏览器页面中的合约交互项目实践项目小结Web3.js概述01PARTWeb3.js定义Web3.js模块Web3.js是一个用于以太坊应用开发的JavaScript库,允许前端应用程序与以太坊区块链进行交互,包括调用智能合约、发送交易、查询区块信息等。Web3.js包含多个模块,如web3.eth用于与以太坊区块链和智能合约交互,web3.utils提供数据转换和格式化功能,web3.shh用于Whisper协议通信,web3.bzz用于与Swarm交互。Web3.js简介Web3.js安装与测试02PART在项目目录下,通过npm命令npminstallweb3安装Web3.js。安装完成后,项目目录下会生成node_modules目录,其中包含Web3.js及其依赖包。安装步骤使用npmlist命令查看已安装的软件包及其版本号,确认Web3.js安装成功。验证安装0102Web3.js安装01编写一个简单的JavaScript脚本testweb3.js,使用Web3.js连接Ganache私有测试链,获取账户列表并打印。测试脚本编写02在终端中运行nodetestweb3.js,验证Web3.js是否能正常连接Ganache并获取账户信息。测试脚本执行Web3.js测试使用Web3.js访问智能合约03PARTABI接口获取ABI是智能合约的接口描述,可通过Remix编译、Truffle编译或使用solcjs编译器生成。01合约实例创建使用合约的ABI和部署地址,通过web3.eth.Contract方法创建合约实例,然后调用合约中的方法。02调用合约方法使用call方法调用合约中的只读函数,使用send方法调用合约中的状态更改函数。03通过脚本访问智能合约在合约中触发事件,通过监听脚本接收并打印事件中的参数。事件触发与接收02编写JavaScript脚本,使用web3.eth.Contract().events模块监听合约中的事件,并通过回调函数处理事件数据。事件监听脚本编写01监听合约中的事件使用web3.eth.sendTransaction函数,指定转出账户、转入账户和转账金额,完成账户之间的转账。向外部账户转账可通过web3.eth.sendTransaction函数向合约账户转账,或调用合约中的payable修饰的函数进行转账。向合约账户转账通过Web3.js进行转账浏览器页面中的合约交互04PART使用VSCode快速创建HTML文件,搭建页面的基本框架。HTML框架搭建在HTML文件中通过<script>标签引入Web3.js库,以便在页面中使用Web3.js。Web3.js引入HTML页面创建在HTML页面中,通过合约的ABI和部署地址初始化合约实例。通过按钮、输入框等控件,调用合约中的方法,实现页面与智能合约的交互。合约实例初始化页面控件与合约交互合约交互实现页面展示使用VSCode的“OpenInDefaultBrowser”插件,在浏览器中打开HTML页面,查看页面效果。交互测试在页面中进行投票、查询得票数、猜数等操作,测试页面与智能合约的交互功能。页面展示与测试项目实践05PART编写投票合约及与合约交互的HTML页面,实现投票、查询得票数等功能。任务目的创建Truffle项目,编写投票合约,部署合约到Ganache,编写HTML页面实现与合约的交互。任务步骤投票合约HTML页面开发任务目的编写猜数游戏合约及与合约交互的HTML页面,实现开始游戏、猜数、查看目标数等功能。任务步骤创建Truffle项目,编写猜数游戏合约,部署合约到Ganache,编写HTML页面实现与合约的交互。0102猜数游戏HTML页面开发项目小结06PART开发流程回顾回顾Web3.js开发库的使用方法,包括合约部署、前端页面编写、Web3.js库函数调用等流程。应用案例分析分析投票合约、猜数游戏等应用案例,总结Web3.js
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- QC/T 1258-2025汽车用蜗杆传动式软管夹箍弹簧内衬补偿型
- 井冈山大学《康复评定技术》2025-2026学年期末试卷
- 中国医科大学《写作学概论》2025-2026学年期末试卷
- 漳州城市职业学院《马克思主义政治经济学》2025-2026学年期末试卷
- 滁州城市职业学院《外贸单证实务》2025-2026学年期末试卷
- 仰恩大学《泵与泵站》2025-2026学年期末试卷
- 福建幼儿师范高等专科学校《金融信托与租赁》2025-2026学年期末试卷
- 上饶师范学院《媒介素养》2025-2026学年期末试卷
- 伊春职业学院《宠物美容》2025-2026学年期末试卷
- 广州初一历史试题及答案
- 2022年10月自考00041基础会计学试题及答案
- 职业指导培训笔记
- 滴滴代驾管理制度
- 不良金融资产转让合同(适用于批量转让)
- 压力弹簧力度计算器及计算公式
- 钢结构施工主要施工机械设备表
- 煤炭矿井制图标准
- 行政办事员(政务服务综合窗口办事员)国家职业技能标准(2020年版)(word精排版)
- GB/T 12916-1991船用金属螺旋桨技术条件
- FZ/T 72001-2009涤纶针织面料
- FZ/T 62033-2016超细纤维毛巾
评论
0/150
提交评论