版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
区块链和分布式记账技术智能合约生命周期管理技术规范2023-12-28发布国家标准化管理委员会GB/T43579—2023前言 I Ⅱ 2规范性引用文件 3术语和定义 4概述 25通用技术要求 25.1设计开发 25.2编译部署 35.3触发执行 45.4维护管理 66通用评估方法 76.1设计开发 76.2编译部署 86.3触发执行 86.4维护管理 附录A(资料性)常见智能合约漏洞 参考文献 IGB/T43579—2023本文件按照GB/T1.1—2020《标准化工作导则第1部分:标准化文件的结构和起草规则》的规定起草。请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别专利的责任。本文件由中华人民共和国工业和信息化部提出。本文件由全国区块链和分布式记账技术标准化技术委员会(SAC/TC590)归口。本文件起草单位:蚂蚁区块链科技(上海)有限公司、中国电子技术标准化研究院、众安信息技术服务有限公司、深圳市前海智慧版权创新发展研究院、上海万向区块链股份公司、四川长虹电器股份有限公司、南京鑫智链科技信息有限公司、湖南天河国云科技有限公司、西南林业大学、蚂蚁科技集团股份有限公司、杭州趣链科技有限公司、深圳市腾讯计算机系统有限公司、复旦大学、工银科技有限公司、西安交通大学、南方电网大数据服务有限公司、国家应用软件产品质量检验检测中心、上海分布信息科技有限公司、达闼机器人股份有限公司、腾讯云计算(北京)有限责任公司、北京大数据先进技术研究院、上海阵方科技有限公司、浙商银行股份有限公司、上海零数众合信息科技有限公司、广州南方投资集团有限公司、永旗控股(北京)有限公司、研祥智能科技股份有限公司、京东科技信息技术有限公司、中移动信息技术有限公司、北京泰尔英福科技有限公司、工业和信息化部电子第五研究所、联通数字科技有限公司、国家工业信息安全发展研究中心、华为云计算技术有限公司、华为技术有限公司、北京大学计算与数字经济研究院、神州数码信息服务股份有限公司、国网区块链科技(北京)有限公司、上海奥若拉信息科技集团有限公司、北京微芯区块链与边缘计算研究院、中国民航信息网络股份有限公司、浙江大学、香港理工大学、广州赛西标准检测研究院有限公司、敏于行(北京)科技有限公司、恒宝股份有限公司、北京合思信息技术有限公司、深圳江行联加智能科技有限公司、深圳博思互联科技有限公司、北京国金汇德工程管理有限公司、浙江出彩智能科技有限公司、江西开创数码科技有限公司、中国信息通信研究院。Ⅱ近年来,在产业政策、法律法规、技术进步、市场发展等多方面推动下,区块链技术正加速“脱虚向实”,助力实体经济高速发展。智能合约是存储在分布式记账技术系统中的计算机程序,该程序的任何执行结果都记录在分布式账本上。智能合约将区块链带入了可编程,智能化时代。然而,随着智能合约日益广泛地应用,不规范的设计、开发、测试及维护带来了许多风险问题,造成了严重损失。为了给应用区块链联结的各行业、各企业和相关组织提供可实施的标准,本文件对区块链智能合约的生命周期进行了深入的分析,梳理了智能合约生命周期各阶段,包括设计开发、编译部署、触发执行和维护管理。在生命周期的各个阶段,本文件提炼需要遵循的相关要求,从而构建出一套可实施的,能够避免智能合约可能出现风险的执行流程,为区块链联结的各个行业提供可操作、具有指导意义的智能合约实施规范。1区块链和分布式记账技术智能合约生命周期管理技术规范1范围述了各环节的评估方法。本文件适用于区块链相关方开展智能合约的建设、应用和审计。2规范性引用文件本文件没有规范性引用文件。3术语和定义下列术语和定义适用于本文件。使用密码链接将共识确认过的区块按顺序追加形成的分布式账本。存储在分布式记账技术系统中的计算机程序,该程序的任何执行结果都记录在分布式账本中。注:智能合约可以在法律上代表合同条款,并在适用司法管辖区的法律下产生可强制执行的义务。规定数据结构的数据对象的经定义的集合和一组许可的运算,在这些运算中任何一个执行时,其中数据对象都当作运算数。形式化验证formalverification通过对算法逻辑的数学形式化表达,验证智能合约程序确定性和完备性的方法。使用分布式记账技术系统外部数据更新分布式账本的服务。2图灵完备turingcomplete在可计算性理论中,一系列操作数据的规则(如指令集、编程语言、细胞自动机)按照一定的顺序计算并解决所有可计算的问题。当智能合约从构思开始至不可使用为止的时间周期。4概述智能合约的全生命周期包含设计开发、编译部署、触发执行和维护管理,如图1所示。a)智能合约的设计开发是指从业务需求出发完成智能合约的功能和安全等设计,然后通过智能合约编程语言构造出智能合约。b)智能合约的编译部署是将智能合约代码转换成可执行的格式,然后部署到区块链节点的智能合约运行时环境中。c)智能合约的触发执行是将符合条件的事件推送到待验证的队列中,区块链上的验证节点对交易进行全面认证并达成共识。区块链执行该交易,并将交易和执行结果记入区块链中。d)智能合约的维护管理是指智能合约部署上线后,因需要修正错误,提升性能,或其他问题而导设计开发设计开发编译部署触发执行维护管理图1智能合约生命周期管理示意图5通用技术要求5.1设计开发5.1.1智能合约设计在编写智能合约之前,需设计智能合约的结构功能,规避对外的交互和安全风险,符合如下要求:a)应收集、分析、细化并核实智能合约的功能需求,编写智能合约需求文档;b)应设计智能合约对外交互的接口和流程,最小化地暴露交互接口;c)应对智能合约的使用权限、时序逻辑进行合理设计,权限粒度要做到尽量小,按最低要求分配权限,对时序逻辑要严格验证,避免时序逻辑导致的安全性问题,如条件竞争等;d)宜进行类图、用例图、时序图、数据流图、流程图、架构图、部署图等设计,并且保留相应的设计图;e)应设计安全威胁模型,制定智能合约安全风险分析与风险管理规划,制定相应的应对措施;f)应具备设计智能合约的处理或补救错误的能力,包括且不限于提前终止或线上更新能力。在编写智能合约代码时,符合如下要求:3b)对所有公共成员变量与函数的引用对象,应进行对外暴露的风险分析;c)对所有条件选择语句和交易步骤进行完备性检查,应符合条件动作描述的完备要求;d)应避免逻辑漏洞和逻辑错误,如转账前余额未校验,未检查返回值的调用,整数溢出等;e)智能合约和函数应模块化、逻辑简洁,应避免使用过时的语法或用法,如分母为零,数组越界访问等;f)宜采用条件保护语句,如Solidity语言中require(condition,message)条件语句,当condition5.1.3智能合约语言智能合约语言符合如下要求:a)支持的数据类型应包含string(字符串)、int(整型)、boolean(布尔型)以及基本类型的数组类型;b)支持的数据类型宜包含byte(字节型)、char(字符型)、short(短整型)、long(长整型)、float(单精度浮点型)、double(双精度浮点型)、map(映射)、vector(向量)自定义类型等;c)支持的计算类型应包含算术运算、关系运算、逻辑运算、条件运算、赋值运算等;d)支持的计算类型宜包含位运算、数据类型转换、哈希运算等;e)对于支持图灵完备的语言,控制结构应包含顺序结构、分支结构和循环结构等;f)对于支持图灵完备的语言,控制结构宜包含异常结构处理、递归结构处理;g)应支持区块数据和当前状态数据的访问能力;h)宜支持历史状态数据的访问能力和统一的数据访问模型;i)应支持数据的读写能力和遍历能力,宜支持数据的查询能力,如条件查询、范围查询、线索查询等;j)宜支持带有业务属性的简单支付验证的生成。5.1.4智能合约调试智能合约需要进行必要的调试时,符合如下要求:a)应提供智能合约调试流程和方案;b)应提供智能合约的单步调试能力,包括断点设置,stepinto(单步跳入)、stepout(单步跳出)、stepover(单步跳过)及callstack(调用栈)查询,断点处变量查询等能力;c)应对智能合约的业务逻辑、业务流程,以及代码是否符合业务需求进行测试;d)应支持对智能合约进行静态安全扫描、动态安全扫描,避免如附录A所示的漏洞;e)宜支持对智能合约进行形式化验证。5.2编译部署5.2.1智能合约编译智能合约编译是将智能合约代码转换成运行环境可执行的格式的过程,此过程应符合如下要求:a)选择主流的安全编译工具;b)支持智能合约在区块链平台上编译检测,保证在编译之后字节码的安全性;c)明确智能合约编译工具名称及版本信息,编译工具依赖环境信息;d)编程语言的编译器确保一致性,智能合约源码在编译成字节码后前后逻辑一致;e)编译完成后,明确智能合约接口描述文件和编译结果文件后缀。4智能合约部署是将智能合约代码部署到区块链节点的智能合约运行时环境中的过程,此过程符合如下要求:a)智能合约部署应需要链上节点达成共识;b)宜校验智能合约部署的完整性;c)应校验智能合约的部署权限;d)部署完应返回智能合约的部署状态;e)智能合约部署完后应确定其唯一标识,如地址、智能合约名等。5.3触发执行5.3.1智能合约调用智能合约调用是触发智能合约业务的执行,包含直接调用、智能合约间调用、预言机调用和链上随机数调用。直接调用是通过区块链接口,从外部直接触发调用,符合如下要求:a)应支持智能合约的部署、状态查询和接口调用;c)接口名称应明确接口功能,具有标识性,在直接调用接口的时候应能够执行规定的智能合约调用流程;d)直接调用的接口名称不存在时,应有明确的默认结构被调用,或者提供明确的错误信息供调用者修改错误;e)直接调用的接口参数错误时(参数类型错误等),应有明确的错误参数转换规则,或者提供明确的错误信息供调用者修改错误。智能合约间调用是指智能合约之间进行链上调用的过程,符合如下要求:a)应符合安全性规则(如防重入),明确调用内容上下文是本智能合约还是代理智能合约;b)智能合约间的调用参数应具有参数校验,避免调用的实际接口与预期不相符合;c)应对智能合约接口的最小暴露性原则、智能合约权限原则等进行严格的测试与检查。智能合约通过调用预言机相关接口触发预言机,符合如下要求:a)接口名称、输入参数、返回数据应符合应用程序接口规范;b)接口描述文件应采用预言机提供的结构化描述语言;c)接口协议应包含安全传输协议;d)预言机应保证源数据完整未被篡改;e)数据由指定的数据源产生时,应能够提供数据源的有效证明;f)宜采用分布式预言机的方式提高服务可用性和安全性,不同的预言机节点应具备唯一的身份标识;5g)预言机提供的外部数据源的影响范围应仅限于智能合约范围内,不应影响系统的整体运行。智能合约通过调用链上随机数相关接口触发随机数,符合如下要求:a)随机数在不同的节点获取,要保证确定性执行语义;b)不同区块及相同区块中的不同交易,获取到的随机数需要保证随机性;c)随机数需要保证不可预测性,随机数算法需要有密码学证明。5.3.2智能合约执行智能合约的执行是运行智能合约代码完成预定功能,符合如下要求:a)应符合可执行终止性原理、确定性执行结果原理,一般可采用解释执行或JIT编译到机器指令执行两种方式;b)智能合约执行结果应具备事务一致性,若调用失败,支持回滚到执行交易之前的状态或者有明确的错误返回值;c)应支持智能合约状态保存在区块链网络上,如作为智能合约账户的属性;d)在执行之前,应检查该智能合约和链上智能合约的哈希值的一致性;e)支持在智能合约执行的过程中,将事件推送给已订阅的客户端;f)应具备正确处理异常的能力,支持实时监测和状态回滚。5.3.3智能合约运行时外部交互智能合约在执行过程中会与外部进行交互,符合如下要求:a)外部用户或应用与智能合约的交互应支持部署、查询、调用等;b)应支持通过智能合约获取外部数据,如预言机;c)智能合约应对外提供准确的接口描述,同时对外部的输入做严格检查;d)智能合约与外部数据交互时,外部数据应只影响本智能合约的状态。5.3.4智能合约执行环境智能合约的执行环境符合如下要求:a)应保证智能合约运行环境与外部隔离,调用智能合约不会对区块链状态外的外部环境造成影响,也不会导致区块链系统失败;b)运行环境应具备执行无二义性,能处理异常事件,当发生异常时,能够对事件进行回滚;c)应保证在相同的输入和相同的历史状态下,不同的节点执行相同的交易可获得一致的结果;d)宜支持可信执行环境,提供隐私保护的技术环境;e)应具备可信性,不应泄漏信息,具有可信追溯的特性;f)当智能合约调用出现错误时,应提供智能合约回退功能,恢复该次调用对区块链状态造成的影响。5.3.5智能合约事件智能合约事件指由外部账号调用智能合约过程中产生的,被打包到当前区块中可被永久访问的事a)智能合约事件应支持被监听,业务方通过监听事件可得到事件名称、事件参数、区块高度等详6细信息;b)智能合约事件类型应包含正常业务事件、异常业务事件;c)智能合约事件应包含事件名称和事件参数;d)事件名称应是智能合约内事件的唯一标识,并体现事件的业务类型。正常业务事件指在调用智能合约执行完正常业务流程后,触发一个事件,记录业务完成正常流a)应记录引起业务状态变更的相关方,业务的类型、内容等;b)事件名称宜使用能代表业务的名字,如Transfer;c)事件参数应为记录的业务数据。异常业务事件指在调用智能合约接口执行过程中,进入了业务异常处理的判断逻辑,抛出一个异常事件,以便业务端知道出错原因,符合如下要求:a)应记录引起异常业务事件的发起方,异常的原因;b)应记录引起异常业务事件的智能合约接口及传参内容;c)事件名称宜使用能代表业务异常的类型;d)事件参数应包含错误异常类型和错误者异常的原因。事件接口结构为调用方提供接口的规范化说明,事件接口包含:a)唯一的声明事件接口,如关键字;b)唯一的调用事件接口,如关键字;c)将智能合约传进来的数据上链,打包进当前区块,并回调给业务调用方。5.4维护管理5.4.1智能合约版本维护智能合约的每次修改即为独立版本,版本的维护方式分为:a)在源代码中定义版本号;b)在配置文件中定义版本号,该配置文件应与智能合约代码一同部署;c)在部署或升级操作时定义版本号。5.4.2智能合约升级约束智能合约的升级操作由客户端发起,以接口调用的方式在区块链中提交,达成共识后生效,符合如下要求:a)应支持智能合约的在线升级;b)应支持区块链平台升级后,智能合约仍能稳定运行;c)升级操作宜记录在区块中,符合区块链中交易要求、遵从交易执行的流程;d)智能合约升级后,应保留历史版本;e)智能合约升级失败时,应能回滚到原来的智能合约;f)智能合约应具备版本控制功能,在智能合约升级到新版本后,宜向前兼容旧版本智能合约。75.4.3智能合约冻结和解冻智能合约冻结和解冻是对智能合约调用功能进行停止和重新开放的过程,符合如下要求:a)应支持冻结功能,当发现智能合约存在漏洞时可停止使用;b)应支持解冻功能,当智能合约中的漏洞修复后可恢复使用;c)调用智能合约冻结和解冻功能时,应进行权限访问控制。5.4.4智能合约废止智能合约废止是废止已部署的智能合约的过程,且不可逆,符合如下要求:a)应支持通过交易的方式实现智能合约的废止功能,且智能合约废止后数据仍然存在,保存被终止版本的智能合约代码,并且不能再次被启动执行;b)调用智能合约废止程序时,应有权限访问控制,只有管理员或者相应权限用户才有权利废止智能合约;c)可被废止的智能合约在部署时宜设置显式声明;d)智能合约废止时,应有相应的处置措施,保障智能合约参与用户的权利与资产安全。6通用评估方法6.1设计开发6.1.1智能合约设计6.1.1.1智能合约设计评估方法如下:a)核查智能合约需求文档中需求和功能的说明;b)核查智能合约需求文档中接口交互和流程的说明;c)核查智能合约需求文档中使用权限、时序逻辑的说明,并调用智能合约复现;d)核查智能合约需求文档中的设计图;e)核查智能合约需求文档中的安全风险分析和应急措施;f)核查智能合约需求文档中的处理或补救错误能力,并调用智能合约复现。6.1.1.2智能合约设计实际评估结果达到了5.1.1的相关要求则判定为符合,其他情况判定为不符合。6.1.2智能合约编程6.1.2.1智能合约编程评估方法如下:a)核查智能合约语言的类型、版本信息;b)核查智能合约所有公共成员变量与函数的引用对象是否有对外暴露的风险;c)核查智能合约所有条件动作和交易步骤的完备性;d)核查智能合约是否存在逻辑漏洞或逻辑错误;e)核查智能合约和函数的编写风格,是否采用过时的语法或用法;f)核查智能合约在条件不符合时是否具有条件保护功能。6.1.2.2智能合约编程实际评估结果达到5.1.2的相关要求则判定为符合,其他情况判定为不符合。6.1.3智能合约语言6.1.3.1智能合约语言评估方法如下:a)核查智能合约语言支持的数据类型;8b)核查智能合约语言支持的计算类型;c)对于支持图灵完备的语言,核查智能合约语言支持的控制结构;d)核查智能合约支持的数据访问模型;e)核查智能合约的数据读写、遍历以及查询能力;f)核查智能合约的带有业务属性的简单支付验证的生成。6.1.3.2智能合约语言实际评估结果达到5.1.3的相关要求则判定为符合,其他情况判定为不符合。6.1.4.1智能合约调试的评估方法如下:a)核查智能合约的调试流程和调试方案;b)核查是否支持智能合约的单步调试能力,包括断点设置,stepinto(单步跳入)、stepout(单步跳出)、stepover(单步跳过)及callstack(调用栈)查询,断点处变量查询等能力;c)核查是否有文档、工具等,对智能合约的业务逻辑、业务流程,以及代码是否符合业务需求进行测试和评估;d)核查是否有文档描述、代码、工具等对智能合约进行静态安全扫描、动态安全扫描;e)核查是否有文档描述、代码、工具等对智能合约进行形式化验证;f)核查智能合约的运行结果和安全性。6.1.4.2智能合约调试实际评估结果达到5.1.4的相关要求则判定为符合,其他情况判定为不符合。6.2编译部署6.2.1智能合约编译6.2.1.1智能合约编译的评估方法如下:a)核查系统使用的智能合约的编译工具;b)核查智能合约在区块链平台上的编译检测;c)核查智能合约编译工具名称及版本信息,编译工具依赖环境信息;d)核查编程语言的编译器一致性,在智能合约源码编译成字节码后,核查字节码与源码逻辑一致性;e)编译完成后,核查智能合约接口描述文件和编译结果文件后缀。6.2.1.2智能合约编译实际评估结果达到5.2.1的相关要求则判定为符合,其他情况判定为不符合。6.2.2智能合约部署6.2.2.1智能合约部署的评估方法如下:a)智能合约部署后,分别在随机的不同节点上查找部署的智能合约实例;b)比较部署前编译的字节码和部署后的字节码;c)分别使用有部署权限和无部署权限的两组用户进行智能合约部署;d)智能合约部署完后,检查部署操作的返回值。6.2.2.2智能合约部署实际评估结果达到5.2.2的相关要求则判定为符合,其他情况判定为不符合。6.3触发执行6.3.1智能合约调用6.3.1.1.1智能合约调用基本要求的评估方法为:核查智能合约触发类型,支持直接调用、智能合约间9调用、预言机调用和链上随机数调用。6.3.1.1.2智能合约调用实际评估结果达到5.3.1.1的相关要求则判定为符合,其他情况判定为不符合。环境变量查询等;b)核查接口名称的标识性,能够直接明确接口功能,检查在直接调用接口时,能够执行规定的智能合约调用流程;c)核查当接口名称不存在时,应有明确的默认结构被调用,或者提供明确的错误信息供调用者修改错误;d)核查直接调用的接口参数错误(参数类型错误等),应有明确的错误参数转换规则,或者明确错误信息供调用者修改错误;e)核查直接调用接口执行出现错误时,有明确的错误参数转换规则,或者明确错误信息供调用者修改错误。6.3.1.2.2直接调用实际评估结果达到5.3.1.2的相关要求则判定为符合,其他情况判定为不符合。6.3.1.3智能合约间调用6.3.1.3.1智能合约间调用的评估方法如下:a)核查智能合约间调用的安全性规则,智能合约间调用是否符合安全性规则,明确调用上下文是本智能合约还是代理智能合约;b)核查智能合约间的调用参数校验,避免调用的实际接口与预期不相符合;c)核查智能合约接口,智能合约接口是否符合最小暴露性原则、智能合约权限原则等。6.3.1.3.2智能合约间调用实际评估结果达到5.3.1.3的相关要求则判定为符合,其他情况判定为不符合。6.3.1.4.1预言机调用的评估方法如下:a)核查调用接口,预言机的调用接口名称、输入参数、返回数据是否符合应用程序接口规范;b)核查接口描述文件,采用预言机提供的结构化描述语言;c)核查接口协议,包含安全传输协议;d)核查源数据,保证源数据完整未被篡改;e)核查数据源的有效证明,数据由指定的数据源产生时,能够提供数据源的有效证明;f)核查身份标识,不同的预言机节点具备唯一的身份标识;g)核查影响范围,预言机提供的外部数据源的影响范围仅限于智能合约范围内,不应影响系统的整体运行。6.3.1.4.2预言机调用实际评估结果达到5.3.1.4的相关要求则判定为符合,其他情况判定为不符合。6.3.1.5.1链上随机数调用的评估方法如下:a)在不同的区块链节点中的相同区块的相同交易中分别调用链上随机数接口;b)在不同的区块和相同区块的不同交易中分别调用链上随机数接口。6.3.1.5.2链上随机数调用实际评估结果达到5.3.1.5的相关要求则判定为符合,其他情况判定为不符合。6.3.2智能合约执行6.3.2.1智能合约执行的评估方法如下:a)核查智能合约的可终止性原理,一般可采用解释执行或JIT编译到机器指令执行两种方式;b)智能合约执行结果应具备事务一致性,若调用失败,支持回滚到执行交易之前的状态或者有明确的错误返回值;c)核查智能合约账户和智能合约内容,支持智能合约状态作为智能合约账户的属性保存在区块链网络上;d)核查该智能合约和链上智能合约的哈希值,在执行之前,两者应保持一致;e)核查事件推送,在智能合约执行的过程中应将事件推送给已订阅的客户端;f)核查正确处理异常的能力,支持实时监测和状态回滚。6.3.2.2智能合约执行实际评估结果达到5.3.2的相关要求则判定为符合,其他情况判定为不符合。6.3.3智能合约运行时外部交互6.3.3.1智能合约运行时外部交互的评估方法如下:a)核查外部用户或应用与智能合约交互的形式,包括部署、升级、查询、调用等;b)核查智能合约的外部交互功能,支持通过智能合约获取外部数据,如预言机;c)核查智能合约的接口,智能合约对外提供准确的接口描述,同时对外部的输入做严格检查;d)核查智能合约与外部数据交互时的影响范围,外部数据应只影响本智能合约的状态。6.3.3.2智能合约运行时外部交互实际评估结果达到5.3.3的相关要求则判定为符合,其他情况判定为不符合。6.3.4智能合约执行环境6.3.4.1智能合约执行环境的评估方法如下:a)核查智能合约运行环境与外部的隔离,确保调用智能合约不会对区块链状态外的外部环境造成影响,也不会导致区块链系统失败;b)核查运行环境,运行环境应具备执行无二义性,能处理异常事件,当发生异常时,能够对事件进行回滚;c)核查智能合约执行结果,保证在相同的输入和相同的历史状态下,不同的节点执行相同的交易可获得一致的结果;d)核查可信性,应具备可信性;e)不泄漏信息,具有可信追溯的特性;f)核查智能合约调用出现错误时,应提供智能合约回退功能,恢复该次调用对区块链状态造成的影响。6.3.4.2智能合约执行环境实际评估结果达到5.3.4的相关要求则判定为符合,其他情况判定为不符合。6.3.5智能合约事件6.3.5.1.1智能合约事件约束的评估方法如下:a)核查智能合约事件的监听,业务方通过监听应可得到事件名称、事件参数、区块高度等详细信息;b)核查智能合约事件类型,包含正常业务事件、异常业务事件,且正常业务事件、异常业务事件应通过测评;c)核查智能合约事件包含事件名称和事件参数;d)核查事件名称,事件名称是智能合约内事件的唯一标识,简短概要,体现事件的业务类型。6.3.5.1.2智能合约事件约束实际评估结果达到5.3.5.1的相关要求则判定为符合,其他情况判定为不符合。6.3.5.2.1正常业务事件的评估方法如下:a)核查正常业务事件记录了引起业务状态变更的相关方,业务的类型、内容;b)核查事件名称,使用能代表业务的名字,如Transfer;c)核查事件参数,事件参数为记录的业务数据,标识业务的执行结果。6.3.5.2.2正常业务事件实际评估结果达到5.3.5.2的相关要求则判定为符合,其他情况判定为不符合。6.3.5.3.1异常业务事件的评估方法如下:a)核查异常业务事件记录引起异常业务事件的发起方,异常的原因;b)核查异常业务事件记录引起异常业务事件的智能合约接口及传参内容;c)核查事件名称,使用能代表业务异常的类型,如Transfer_Error;d)核查事件参数,包含错误异常类型和错误者异常的原因,异常类型宜使用ENUM。6.3.5.3.2异常业务事件实际评估结果达到5.3.5.3的相关要求则判定为符合,其他情况判定为不符合。6.3.5.4.1事件接口结构的评估方法如下:a)核查事件接口包含唯一的声明事件接口关键字;b)核查事件接口包含唯一的调用事件接口关键字;c)核查事件接口包含应将智能合约执行过程中的事件上链,打包进当前区块,并回调给业务调用方。6.3.5.4.2事件接口结构实际评估结果达到5.3.5.4的相关要求则判定为符合,其他情况判定为不符合。6.4维护管理6.4.1智能合约版本维护6.4.1.1智能合约版本维护的评估方法如下:a)核查智能合约发生修改之后的版本,是否能够在源代码中通过区块链平台指定方式定义版b)核查智能合约发生修改之后的版本,是否能够在配置文件中定义版本号,该配置文件是否能够与智能合约代码一同部署;c)核查智能合约在部署或升级时,是否能够在部署或升级操作时定义版本号。6.4.1.2智能合约版本维护实际评估结果达到5.4.1的相关要求则判定为符合,其他情况判定为不符合。6.4.2智能合约升级6.4.2.1智能合约升级的评估方法如下:a)核查智能合约的升级,是否能够在线升级;b)核查智能合约的升级,是否能够在区块链平台升级后,仍能稳定运行;c)核查智能合约的升级,是否能够将升级操作记录在区块中,并符合区块链中交易要求、遵从交易执行的流程;d)核查智能合约的升级,是否能够保留历史版本;e)核查智能合约的升级,是否支持智能合约升级失败时,回滚到原来的智能合约;f)核查智能合约的升级,是否支持智能合约具备版本控制功能,在智能合约升级到新版本后,也兼容旧版本智能合约。6.4.2.2智能合约升级实际评估结果达到5.4.2的相关要求则判定为符合,其他情况判定为不符合。6.4.3智能合约冻结和解冻6.4.3.1智能合约冻结和解冻的评估方法如下:a)核查智能合约的冻结,是否能够在发现智能合约存在漏洞时,可以停止智能合约调用功能;b)核查智能合约的解冻,是否能够在智能合约的漏洞修复后,可以恢复智能合约调用功能;c)核查智能合约权限访问控制,是否能够在调用智能合约冻结和解冻功能时,进行权限访问控制。6.4.3.2智能合约冻结和解冻实际评估结果达到5.4.3的相关要求则判定为符合,其他情况判定为不符合。6.4.4.1智能合约废止的评估方法如下:a)核查智能合约的废止,是否能够通过交易的方式实现智能合约的废止功能,且智能合约废止后数据仍然存在,保存被终止版本的智能合约代码,并且不能再次被启动执行;b)核查智能合约的废止,是否能够在调用智能合约废止时,有权限访问控制,只有管理员或者响应权限用户才有权利废止智能合约;c)核查智能合约的废止,是否能够在可被废止的智能合约部署时设置显式声明;d)核查智能合约的废止,是否能够有相应的处置措施,保障智能合约参与用户的权利与资产安全。6.4.4.2智能合约废止实际评估结果达到5.4.4的相关要求则判定为符合,其他情况判定为不符合。(资料性)常见智能合约漏洞常见智能合约漏洞如表A.1所示。表A.1常见智能合约漏洞漏洞名简要说明防范措施整型溢出整型的加减导致数值溢出等问题使用相应的safeMath包来完成整型的计算重入漏洞攻击者会诱导业务智能合约调用恶意智能合约的回调函数,回调函数再次调用业务智能合约的各类方法造成循环调用,将业务智能合约的通证全部转移或造成其他损失a)对可能调用恶意智能合约的方法加锁,禁止循环调用;b)evm类智能合约使用transfer方法,减少单次调用的gas费用访问控制缺陷各类智能合约对于条件判断的关键词不够清晰导致条件判断执行了相反的逻辑。如require所需条件必须为true,而if类权限判断所需条件一般为falsea)提高代码可读性,减少误判可能性;b)增加代码评审及智能合约审计特权功能暴露如智能合约销毁方法、智能合约所有者设置方法、智能合约核心参数设置方法等敏感操作,未设置权限增加代码评审及智能合约审计拒绝服务攻击者控制智能合约权限,使智能合约无法致智能合约状态无法更新;或攻击者不断给智能合约添加状态变量导致某些函数因gas费超量而无法调用,导致智能合约状态无法更新a)谨慎使用外部调用进入新状态的业务b)完善代码对错误场景的处理短地址攻击现有交易编码方式一般为:4字节函数编码+32字节地址+32字节转账数据组成或类似方式,如碰撞出地址后边包含0的地址,如0xaabbcc00,在发起转账交易时,如果传入地址为0xaabbcc,数量为1,实际交易执行时会将后续补齐,最终交易结果为给0xaabbcc00转入256个代币需要对地址长度进行校验交易指向者漏洞(tx.origin漏洞)在智能合约调用的权限判断时,谨慎使用交易发起者、上层调用者等角色参数。tx.origin指向最初
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年神皖能源人员招聘参考题库及答案详解
- 2026年首钢伊犁钢铁有限公司人员招聘考试题库及答案详解
- 2026年河南机械装备投资集团有限责任公司人员招聘考试参考试题及答案详解
- 2026年山东国欣颐养健康产业发展集团有限公司人员招聘考试备考题库及答案详解
- 2026年山东中烟工业有限责任公司人员招聘考试参考试题及答案详解
- 2026年中石化燃料油公司人员招聘笔试参考题库及答案详解
- 2026年其他家用纺织制成品制造行业产业研究报告及未来五至十年政策驱动与市场机遇展望
- 2026年纸浆制造行业政策研究报告及未来五至十年专精特新与隐形冠军
- 2026年林木育种行业发展趋势报告及未来五至十年产业升级与格局演变
- 2026安化县人力资源培训考试中心(安化县技工学校)公开选调事业单位工作人员2人考试模拟试题及答案解析
- 电力工程建设与管理指南(标准版)
- 2026中级消防监控证考试题目及答案
- 2025年新版中控证考试题及答案
- 进户门安装合同协议书
- 村卫生室标准化建设课件
- TD/T 1023-2010市(地)级土地利用总体规划编制规程
- 《农机安全生产重大事故隐患判定标准(试行)》解读与培训
- 客服基础考试试题及答案
- 评判性思维在临床中的应用
- 中小学人工智能课程教学指南
- 《低钾血症》课件
评论
0/150
提交评论