版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
深入理解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项目成果学习了So
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年土木工程师《岩土专业案例》考前冲刺模拟及答案详解(名师系列)
- 2026年水利安全生产考核b证练习试题含答案详解【B卷】
- 2026年国开电大金融营销基础形考模拟考试高能及答案详解(易错题)
- 2026年卫生招聘《临床医学专业》试卷及答案详解(必刷)
- 2026年【生态学】智慧树网课章节通关考试题库(重点)附答案详解
- 2026年双防安全培训内容答题模板
- 2026年【普通昆虫学】智慧树网课章节模拟题库讲解及参考答案详解一套
- 2026年假期复工安全培训内容实操要点
- 2026年参加旅游培训心得体会核心要点
- 2026年眼光视光技术押题宝典模考模拟试题附参考答案详解(夺分金卷)
- 科技新赋能智护帕全程2026世界帕金森病日科普与义诊指南
- 2026年春川教版(新教材)小学信息技术四年级下册(全册)教学设计(附目录P66)
- 2026年高考作文备考之多则材料类型作文审题立意指导
- 2026散装液态食品灌装设备选型及智能化改造报告
- 三 长方形和正方形 单元教学课件 2026人教版数学三年级下册
- 海绵城市监理实施细则样本
- 白血病药物护理实践指南(2025年版)
- 物业客服部催费培训课件
- GB/T 15171-1994软包装件密封性能试验方法
- 诊断学查体相关实验
- 《高等教育法规概论》练习题及答案(合集)
评论
0/150
提交评论