一种检测合约升级的兼容性的方法和装置制造方法及图纸

技术编号:35913726 阅读:12 留言:0更新日期:2022-12-10 10:54
本说明书一个或多个实施例提供一种检测合约升级的兼容性的方法和装置及客户端,应用于区块链领域。一种检测合约升级的兼容性的方法,包括:生成升级前后合约的抽象语法树;解析生成的抽象语法树,顺序提取每个抽象语法树的节点信息中的基础信息;比较升级前后的抽象语法树的节点信息中的基础信息,得到兼容性结论。论。论。

【技术实现步骤摘要】
一种检测合约升级的兼容性的方法和装置


[0001]本说明书实施例属于区块链
,尤其涉及一种检测合约升级的兼容性的方法和装置。

技术介绍

[0002]区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。

技术实现思路

[0003]本专利技术的目的在于提供一种检测合约升级的兼容性的方法和装置,包括:
[0004]一种检测合约升级的兼容性的方法,包括:
[0005]生成升级前后合约的抽象语法树;
[0006]解析生成的抽象语法树,顺序提取每个抽象语法树的节点信息中的基础信息;
[0007]比较升级前后的抽象语法树的节点信息中的基础信息,得到兼容性结论。
[0008]一种合约升级的兼容性的检测装置,包括:
[0009]抽象语法树生成单元,用于生成升级前后合约的抽象语法树;
[0010]提取单元,用于解析生成的抽象语法树,并顺序提取每个抽象语法树的节点信息中的基础信息;
[0011]比较单元,用于比较升级前后的抽象语法树的节点信息中的基础信息,得到兼容性结论。
[0012]一种客户端,包括:
[0013]处理器,
[0014]存储器,存储有程序,其中在所述处理器执行所述程序时,执行上述方法。
[0015]升级的合约写法需要满足一定的规范才能使得升级前后兼容,即升级后的新合约中的状态,需要保持能够读取旧合约中相同状态的值的能力。用户在编写升级的合约时,往往忽略这些规范,从而导致升级后的合约出现数据丢失、错乱等严重问题。通过上述例子,可以实现基于抽象语法树的solidity等类型的合约升级存储数据兼容性检测方案。
附图说明
[0016]为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0017]图1是一实施例中部署智能合约的示意图;
[0018]图2是一实施例中调用智能合约的示意图;
[0019]图3是一实施例中区块存储结构的示意图;
[0020]图4是一实施例中区块存储结构的示意图;
[0021]图5是一实施例中MPT树的示意图;
[0022]图6是一实施例中交易处理过程中涉及的模块及CPU、内存和磁盘关系的示意图;
[0023]图7是一实施例中交易处理过程中涉及的EVM虚拟机模块的示意图;
[0024]图8是一实施例中slot结构的示意图;
[0025]图9是一实施例中slot结构的示意图;
[0026]图10是一实施例中检测合约升级的兼容性的方法的流程图;
[0027]图11是一实施例中slot结构的示意图;
[0028]图12是一实施例中slot结构的示意图。
具体实施方式
[0029]为了使本
的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
[0030]区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(Private Blockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(体现为参与者在区块链上的节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
[0031]不论是公有链、私有链还是联盟链,除了可以支持账户间转移区块链上的原生资产,还可以提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。
[0032]智能合约支持用户在区块链网络中创建并调用一些复杂的逻辑,这是可编程的区块链区别于原有区块链技术的最大挑战。作为一个可编程区块链的核心是虚拟机(EVM),每个区块链节点都可以运行EVM。EVM是一个图灵完备的虚拟机,这意味着可以通过它实现各种复杂的逻辑。用户在区块链中发布和调用智能合约就是在EVM上运行的。实际上,虚拟机直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”)。部署在区块链上的智能合约可以是字节码的形式。
[0033]例如图1所示,Bob将一个包含创建智能合约信息的交易发送到区块链网络后,节点1的EVM可以执行这个交易并生成对应的合约实例。图1中的“0x6f8ae93
…”
代表了这个合
约的地址,交易的data字段保存的可以是字节码,交易的to字段为一个空的账户。节点间通过共识机制达成一致后,这个合约成功创建,后续用户可以调用这个合约。
[0034]合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址,合约代码和账户存储将保存在该合约账户中。智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储(Storage)的虚拟账户。
[0035]前述提到,包含创建智能合约的交易的data字段保存的可以是该智能合约的字节码。字节码由一连串的字节组成,每一字节可以标识一个操作。基于开发效率、可读性等多方面考虑,开发者可以不直接书写字节码,而是选择一门高级语言编写智能合约代码。高级语言编写的智能合约代码,经过编译器编译,生成字节码,进而该字节码可以部署到区块链上。区块链支持的高级语言很多,如Solidity、Serpent、LLL语言等。
[0036]以Solidity语言为例,用其编写的合约与面向对象编程语言中的类(Class)很相似,在一个合约中可以声明多种成员,包括状态变量、函数、函数修改器、事件等。状态变量是存储在智能合约的账户存储中的值,用于保本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种检测合约升级的兼容性的方法,包括:生成升级前后合约的抽象语法树;解析生成的抽象语法树,顺序提取每个抽象语法树的节点信息中的基础信息;比较升级前后的抽象语法树的节点信息中的基础信息,得到兼容性结论。2.如权利要求1所述的方法,所述解析生成的抽象语法树,顺序提取每个抽象语法树的节点信息中的基础信息,包括:解析生成的抽象语法树,对于节点信息中状态变量为真的,顺序提取每个抽象语法树的节点信息中的基础信息。3.如权利要求1所述的方法,所述生成升级前后合约的抽象语法树,包括:对升级前后的智能合约代码根据抽象语法树进行词法/语法分析,生成升级前后的合约的抽象语法树。4.如权利要求1所述的方法,所述基础信息包括抽象语法树的节点顺序,进一步还包括状态变量名和/或类型。5.如权利要求1所述的方法,所述比较升级前后的抽象语法树的节点信息中的基础信息,包括:比较升级前后的抽象语法树中相同节点编号的节点信息中的基础信息。6.如权利要求5所述的方法,按照节点编号顺序,比较升级前后的抽象语法树中相同节点编号的节点信息中的基础信息。7.如权利要求5或6所述的方法,如果比较得到状态变量名不同,则不兼容;或,如果比较得到状态变量类型不同,则不兼容;或,如果状态变量名和状态变量类型均不同,则不兼容。8.如权利要求5或6所述的方法,升级后的状态变量是在升级前状态变量之后追加新的状态变量的,判断为兼容。9.如权利要求1所述的方法,所述解析生成的抽象语法树,顺序提取每个抽象语法树的节点信息中的基础信息,包括:对于复合结构,解析生成的抽象语法树,顺序并递归的提取每个抽象语法树的节点信息中的基础信息。10.如权利要求1所述的方法,如果不兼容,还包括反馈冲突的slot位置的基础信息/节点信息。11.一种合约升级的兼容性的检测装置,包括:抽象语法树生成单元,用于生成升级前后合约的抽象语法树;...

【专利技术属性】
技术研发人员:曹蓉
申请(专利权)人:蚂蚁区块链科技上海有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1