在区块链中部署、查询和执行智能合约的方法及装置转让专利
申请号 : CN202110745674.4
文献号 : CN113220704B
文献日 : 2022-04-26
发明人 : 张磊 , 郭学鹏
申请人 : 支付宝(杭州)信息技术有限公司
摘要 :
权利要求 :
1.一种在区块链中部署智能合约的方法,应用于终端,包括:获取智能合约的合约数据,以及获取所述智能合约的独立于所述合约数据的描述信息,所述描述信息包括所述智能合约的编译信息,所述合约数据中包括至少两个可执行程序,所述编译信息包括以下各项信息中的一项或多项:获得所述合约数据中的每个可执行程序时各自使用的编译器的类型、获得所述合约数据中的每个可执行程序时各自使用的编译器的版本;
创建合约文件,所述合约文件包括所述合约数据和所述描述信息;
向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易中包括所述合约文件。
2.根据权利要求1所述的方法,其中,所述描述信息还包括以下各项信息中的至少一项:所述合约文件的文件类型以及所述智能合约的版本号。
3.根据权利要求1所述的方法,其中,所述合约文件中在不同字段分别包括所述合约数据和所述描述信息。
4.根据权利要求1至3中任一所述的方法,其中,获取智能合约的合约数据,包括:对所述智能合约的源文件进行编译,获得可执行程序作为所述智能合约的合约数据。
5.根据权利要求4所述的方法,其中,所述合约文件包括辅助段和程序段,所述辅助段包括所述描述信息,所述程序段包括所述可执行程序。
6.根据权利要求1至3中任一所述的方法,其中,获取智能合约的合约数据,包括:通过至少两个不同类型和/或版本的编译器分别对所述智能合约的源文件进行编译,获得至少两个可执行程序作为所述智能合约的合约数据。
7.根据权利要求6所述的方法,其中,所述合约文件包括文件头和所述至少两个可执行程序各自对应的分段,所述文件头包括所述描述信息中的用于指示所述至少两个可执行程序的数量的分段指示,每个所述分段包括信息字段和程序字段,所述程序字段中包括对应的可执行程序,所述信息字段中包括所述描述信息中的所述对应的可执行程序的描述信息。
8.根据权利要求7所述的方法,其中,所述对应的可执行程序的描述信息还包括以下各项信息中的至少一项:分段编号、所述对应的可执行程序的长度。
9.一种在区块链中查询智能合约的方法,所述区块链的状态数据库中存储有所述智能合约的合约文件,所述合约文件中包括独立于合约数据的描述信息,所述合约数据中包括至少两个可执行程序,所述描述信息包括所述智能合约的编译信息,所述编译信息包括以下各项信息中的一项或多项:获得所述合约数据中的每个可执行程序时各自使用的编译器的类型、获得所述合约数据中的每个可执行程序时各自使用的编译器的版本,所述方法应用于所述区块链中的区块链节点,包括:响应于终端的查询所述智能合约的第一信息的请求,获取所述描述信息中的第一信息;
向所述终端返回所述第一信息。
10.一种在区块链中执行智能合约的方法,所述区块链的状态数据库中存储有所述智能合约的合约文件,所述合约文件包括合约数据和独立于所述合约数据的描述信息,所述合约数据包括通过至少两个不同类型和/或版本的编译器分别对智能合约源文件进行编译所获得的至少两个可执行程序,所述描述信息包括所述智能合约的编译信息,所述编译信息包括以下各项信息中的一项或多项:获得所述合约数据中的每个可执行程序时各自使用的编译器的类型、获得所述合约数据中的每个可执行程序时各自使用的编译器的版本,所述方法应用于所述区块链中的区块链节点,所述方法包括:响应于调用所述智能合约的第三交易,基于所述描述信息和所述区块链节点中允许执行的可执行程序的类型,从所述至少两个可执行程序中选择第一可执行程序;
获取所述第一可执行程序;
执行所述第一可执行程序。
11.一种在区块链中部署智能合约的方法,应用于终端,包括:获取智能合约的合约数据,所述合约数据包括所述智能合约的描述信息以及至少两个可执行程序,所述描述信息包括所述智能合约的编译信息,所述编译信息包括以下各项信息中的一项或多项:获得所述合约数据中的每个可执行程序时各自使用的编译器的类型、获得所述合约数据中的每个可执行程序时各自使用的编译器的版本;
向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易包括所述合约数据,所述智能合约用于在执行时返回所述描述信息。
12.一种在区块链中查询智能合约的方法,所述方法应用于所述区块链中的区块链节点,包括:
响应于调用所述智能合约的第三交易,获取所述区块链节点中存储的所述智能合约的合约数据,所述合约数据包括所述智能合约的描述信息以及至少两个可执行程序,所述描述信息包括所述智能合约的编译信息,所述编译信息包括以下各项信息中的一项或多项:获得所述合约数据中的每个可执行程序时各自使用的编译器的类型、获得所述合约数据中的每个可执行程序时各自使用的编译器的版本;
基于所述合约数据执行所述智能合约,以向终端发送所述智能合约的描述信息。
13.一种在区块链中部署智能合约的装置,所述装置部署在终端,包括:信息获取单元,配置为获取智能合约的合约数据,以及获取所述智能合约的独立于所述合约数据的描述信息,所述描述信息包括所述智能合约的编译信息,所述合约数据中包括至少两个可执行程序,所述编译信息包括以下各项信息中的一项或多项:获得所述合约数据中的每个可执行程序时各自使用的编译器的类型、获得所述合约数据中的每个可执行程序时各自使用的编译器的版本;
合约创建单元,配置为创建合约文件,所述合约文件包括所述合约数据和所述描述信息;
交易发送单元,配置为向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易中包括所述合约文件。
14.一种在区块链中查询智能合约的装置,所述区块链的状态数据库中存储有所述智能合约的合约文件,所述合约文件中包括独立于合约数据的描述信息,所述合约数据中包括至少两个可执行程序,所述描述信息包括所述智能合约的编译信息,所述编译信息包括以下各项信息中的一项或多项:获得所述合约数据中的每个可执行程序时各自使用的编译器的类型、获得所述合约数据中的每个可执行程序时各自使用的编译器的版本,所述装置部署在所述区块链中的区块链节点,包括:信息查询单元,配置为响应于终端的查询所述智能合约的第一信息的请求,获取所述描述信息中的第一信息;
信息返回单元,配置为向所述终端返回所述第一信息。
15.一种在区块链中执行智能合约的装置,所述区块链的状态数据库中存储有所述智能合约的合约文件,所述合约文件包括合约数据和独立于所述合约数据的描述信息,所述合约数据包括通过至少两个不同类型和/或版本的编译器分别对智能合约源文件进行编译所获得的至少两个可执行程序,所述描述信息包括所述智能合约的编译信息,所述编译信息包括以下各项信息中的一项或多项:获得所述合约数据中的每个可执行程序时各自使用的编译器的类型、获得所述合约数据中的每个可执行程序各自使用的编译器的版本,所述装置部署在所述区块链中的区块链节点,所述装置包括:程序选择单元,配置为响应于调用所述智能合约的第三交易,基于所述描述信息和所述区块链节点中允许执行的可执行程序的类型,从所述至少两个可执行程序中选择第一可执行程序;
程序获取单元,配置为获取所述第一可执行程序;
程序执行单元,配置为执行所述第一可执行程序。
16.一种在区块链中部署智能合约的装置,所述装置部署在终端,包括:信息获取单元,配置为获取智能合约的合约数据,所述合约数据包括所述智能合约的描述信息以及至少两个可执行程序,所述描述信息包括所述智能合约的编译信息,所述编译信息包括以下各项信息中的一项或多项:获得所述合约数据中的每个可执行程序时各自使用的编译器的类型、获得所述合约数据中的每个可执行程序各自使用的编译器的版本;
交易发送单元,配置为向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易包括所述合约数据,所述智能合约用于在执行时返回所述描述信息。
17.一种在区块链中查询智能合约的装置,所述装置部署在所述区块链中的区块链节点,包括:
信息查询单元,配置为响应于调用所述智能合约的第三交易,获取所述区块链节点中存储的所述智能合约的合约数据,所述合约数据包括所述智能合约的描述信息以及至少两个可执行程序,所述描述信息包括所述智能合约的编译信息,所述编译信息包括以下各项信息中的一项或多项:获得所述合约数据中的每个可执行程序时各自使用的编译器的类型、获得所述合约数据中的每个可执行程序时各自使用的编译器的版本;
合约执行单元,配置为基于所述合约数据执行所述智能合约,以向终端发送所述智能合约的描述信息。
18.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算设备中执行时,计算设备执行权利要求1‑12中任一项所述的方法。
19.一种计算设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时,实现权利要求1‑12中任一项所述的方法。
说明书 :
在区块链中部署、查询和执行智能合约的方法及装置
技术领域
背景技术
输入参数执行处理逻辑。
发明内容
描述信息;创建合约文件,所述合约文件包括所述合约数据和所述描述信息;向所述区块链
中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易中包括所述合约文
件。由于已发布至区块链的智能合约的合约文件中同时包含智能合约的描述信息和合约数
据,当用户需要查询智能合约的描述信息时,可以通过相应的终端从智能合约的合约文件
中方便快捷的查询到智能合约的描述信息;而且,有利于实现在区块链节点无需执行智能
合约的情况下,支持终端对智能合约的描述信息进行查询。
所述方法应用于所述区块链中的区块链节点。所述方法包括:响应于终端的查询所述智能
合约的第一信息的请求,获取所述描述信息中的第一信息;向所述终端返回所述第一信息。
的描述信息,所述合约数据包括通过至少两个不同类型和/或版本的编译器分别对智能合
约源文件进行编译所获得的至少两个可执行程序,所述方法应用于所述区块链中的区块链
节点。所述方法包括:响应于调用所述智能合约的第三交易,基于所述描述信息和所述区块
链节点中允许执行的可执行程序的类型,从所述至少两个可执行程序中选择第一可执行程
序;获取所述第一可执行程序;执行所述第一可执行程序。智能合约的合约文件中包括通过
多个不同类型和/或版本的编译器编译得到的可执行程序,区块链节点可以选择性的执行
某个特定的可执行程序来完成对智能合约的执行,有利于支持同一区块链中的不同区块链
节点的差异化,比如支持同一区块链中的不同区块链节点各自具有执行不同文件类型的可
执行程序的能力。
中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易包括所述合约数
据,所述智能合约用于在执行时返回所述描述信息。通过将智能合约的合约文件直接嵌入
到智能合约的合约数据中,当用户需要查询智能合约的描述信息时,即可通过相应的终端
调用智能合约,使执行智能合约的区块链节点通过对智能合约的执行,完成向终端返回智
能合约的合约数据中所包含的智能合约的描述信息。
链节点中存储的所述智能合约的合约数据,所述合约数据包括所述智能合约的描述信息;
基于所述合约数据执行所述智能合约,以向终端发送所述智能合约的描述信息。
立于所述合约数据的描述信息;合约创建单元,配置为创建合约文件,所述合约文件包括所
述合约数据和所述描述信息;交易发送单元,配置为向所述区块链中的区块链节点发送用
于部署所述智能合约的第一交易,所述第一交易中包括所述合约文件。
所述装置部署在所述区块链节点。所述装置包括:信息查询单元,配置为响应于终端的查询
所述智能合约的第一信息的请求,获取所述描述信息中的第一信息;信息返回单元,配置为
向所述终端返回所述第一信息。
的描述信息,所述合约数据包括通过至少两个不同类型和/或版本的编译器分别对智能合
约源文件进行编译所获得的至少两个可执行程序,所述装置部署在所述区块链中的区块链
节点。所述装置包括:程序选择单元,配置为响应于调用所述智能合约的第三交易,基于所
述描述信息和所述区块链节点中允许执行的可执行程序的类型,从所述至少两个可执行程
序中选择第一可执行程序;程序获取单元,配置为获取所述第一可执行程序;合约执行单
元,配置为执行所述第一可执行程序。
合约的描述信息;交易发送单元,配置为向所述区块链中的区块链节点发送用于部署所述
智能合约的第一交易,所述第一交易包括所述合约数据,所述智能合约用于在执行时返回
所述描述信息。
三交易,获取所述区块链节点中存储的所述智能合约的合约数据,所述合约数据包括所述
智能合约的描述信息;合约执行单元,配置为基于所述合约数据执行所述智能合约,以向终
端发送所述智能合约的描述信息。
附图说明
本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它
的附图。
具体实施方式
区块链节点101加入区块链网络10。用户可通过终端102进行与区块链10相关的各项业务,
例如在区块链10中部署智能合约、查询智能合约的描述信息以及调用智能合约等。
括如下步骤201至步骤203。
类型和/或版本的编译器分别对智能合约的源文件进行编译,获得多个可执行程序作为智
能合约的合约数据。
的代码数据,其包括的具体内容可以由用户结合具体的业务场景进行灵活配置。在一个较
为具体的示例中,智能合约的描述信息可以包括智能合约的版本号,以及后续即将创建的
合约文件的文件类型。
使用的编译器的类型和/或版本、每个可执行程序各自对应的编译时间。
一项或多项。
述信息时,快速实现对合约数据或描述信息的查询。
约的描述信息。举例来说,单个可执行程序可以是编码方式为WebAssembly(简称WASM)的可
执行程序,包含该可执行程序的合约文件的文件类型记为WASM;文件类型为WASM的合约文
件包括程序段和作为辅助段的自定义部分(custom section),编码方式为WASM的可执行程
序位于程序段,智能合约的描述信息位于作为辅助段的自定义部分。
序字段。
括智能合约的版本号以及合约文件的文件类型。
的描述信息属于智能合约的描述信息,可执行程序的描述信息具体可以包括以下各项信息
中的一项或多项:可执行程序在合约文件中对应的分段编号、可执行程序的长度,以及获得
可执行程序时使用的编译器的类型和/或版本。
段编号为1、可执行程序2对应的分段编号为2,则步骤202中具体可以创建具有如图3所示数
据结构的合约文件。请参考图3,智能合约的描述信息中,合约文件的文件类型、智能合约的
版本号以及合约数据包含的可执行程序的数量(即分段指示)位于文件头中;智能合约的描
述信息中,可执行程序1的描述信息位于分段1所包括的信息字段1中、可执行程序1位于分
段1所包括的程序字段1中,可执行程序2的描述信息位于分段2所包括的信息字段2中、可执
行程序2位于分段2所包括的程序字段2中。
链节点,还可以在第一交易被打包到新的区块之后,执行第一交易,并基于执行结果生成和
存储该新的区块,该存储的新的区块中包括所述第一交易。其中,在执行第一交易的过程
中,部署该智能合约,具体包括为该智能合约分配合约地址,并将合约文件保存在用于保存
世界状态的状态数据库中与该合约地址对应的存储,从而完成对该智能合约的部署。其中,
在所述状态数据库中,例如通过键‑值对的形式将合约地址和合约文件关联地存储。
有智能合约的合约文件,合约文件中包括独立于合约数据的描述信息,该方法可以包括如
下步骤401至步骤403。
第二交易的区块链节点可将第二交易转发至其连接的相邻区块链节点。相应的,执行步骤
401和步骤402的区块链节点具体可以从终端或者其连接的相邻区块链节点接收第二交易。
0x34Bas…表示)。部署的智能合约中,提供了getSCinformation()接口,即可以提供对该
智能合约的描述信息的查询。
通过参数来指明。例如,通过在getSCinformation()接口通过参数指明查询的是编译信
息,则区块链节点响应该调用合约的查询请求时,可以获得诸如可执行程序使用的编译器
的类型和/或版本、可执行程序的编译时间等,这些信息将会作为第一信息返回给发起查询
的终端。在一种实施方式中,区块链节点可从状态数据库中读取智能合约的合约文件,从合
约文件中获取第一信息。在另一种实施方式中,区块链节点的内存中缓存有所述智能合约
的合约文件,区块链节点可从内存中读取所述合约文件。在另一种实施方式中,如参考图3
所示,在该智能合约的合约文件具有预定字段,其中例如包括信息字段或者程序字段,不同
的信息字段对应于不同的描述信息,因此,区块链节点可根据合约文件的格式,从状态数据
库或内存中直接读取需要的信息,而不需要读取整个合约文件。需要说明的是,将返回给终
端的第一信息还可以包括其它信息,例如还可以包括:合约数据包括的可执行程序的数量、
每个可执行程序各自在合约文件中对应的分段编号以及每个可执行程序各自的长度等信
息中的一项或多项。
交易确定为用于查询相应智能合约的交易,然后基于To字段的合约地址将相应智能合约的
描述信息全部作为待返回的第一信息。
用于查询交易。这类本地交易的特点是不需要经过共识,执行结果也不会被收录进区块中。
该保持的长连接返回查询结果至所述终端。
听,从而在监听到符合自身预期topic的收据时,获得该收据。进而,终端可以从获得的收据
中解析出其中包含的查询结果。
它参数的第二交易时,可以将包含描述信息的合约文件完整的发送到终端。终端可以基于
合约文件的数据结构对合约文件进行解析,实现从合约文件中提取智能合约的描述信息,
并且向用户展示智能合约的描述信息,使用户能够获知智能合约的描述信息。其中,仍然以
合约文件具有如图3所示的数据结构为例,终端从合约文件中提取智能合约的描述信息具
体可以包括:从文件头中提取合约文件的文件类型、智能合约的版本号和分段指示,从分段
1包含的信息字段1中提取可执行程序1的描述信息,从分段2包含的信息字段2中提取可执
行程序2的描述信息。这样,开发者可以基于查询的智能合约的描述进行某些特定的业务,
比如基于描述信息中包含的智能合约的版本号以及编译信息,在更新智能合约的过程中增
加或减少通过某些编译器编译得到的可执行程序、增加智能合约的版本号等。
能合约的合约文件,合约文件包括所述智能合约的合约数据和独立于所述合约数据的描述
信息,所述合约数据包括通过至少两个不同类型和/或版本的编译器分别对智能合约源文
件进行编译所获得的至少两个可执行程序,该方法可以包括如下步骤501至步骤503。
区块链节点。相应的,执行步骤501的区块链节点具体可以从终端或者其连接的相邻区块链
节点接收第三交易。
选择可执行程序。当合约文件已经加载到内存时,则可以直接从已加载到内存的合约文件
中按需选择可执行程序。
允许执行的可执行程序的描述信息的信息字段,其中可执行程序的类型例如通过编译得到
该可执行程序时所使用的编译器的类型和/或版本进行描述;然后选择与该信息字段属于
相同分段的程序字段中的可执行程序作为待执行的第一可执行程序;最后从与该信息字段
属于相同分段的程序字段中读取第一可执行程序,并执行其读取的第一可执行程序。
和/或版本,其能够指示可执行程序1的文件类型是“.class”;可执行程序2的文件类型是
“.wasm”,可执行程序2的描述信息中包括获得可执行程序2时使用的编译器的类型和/或版
本,其能够指示可执行程序2的文件类型是“.wasm”。如果区块链节点能够执行文件类型是
“.wasm”的可执行程序,则其可以将其自身允许执行的可执行程序的类型,与信息字段1和
信息字段2中的信息进行匹配,从而基于匹配结果从与信息字段2属于相同分段的程序字段
2中读取可执行程序2,并执行可执行程序2。
以包括如下步骤601和步骤602。
文件进行编译以获得的可执行程序。
和/或版本,以及编译时间。
节点向终端返回智能合约的描述信息。
约,该方法包括如下步骤701和步骤703。
信息的第二合约代码;其中描述信息可以嵌入在第二合约代码中。与此相应的,区块链节点
基于合约数据执行智能合约可以包括:通过执行第一合约代码实现预定事务,以及通过执
行第二合约代码实现向终端返回描述信息;或者,第三交易的数据字段包括用于指示需调
用的代码为第二合约代码的指示信息,区块链节点基于该指示信息的指示执行第二合约代
码,以实现向终端返回描述信息。
行第三交易的过程中执行所述智能合约的第二合约代码,以向终端返回描述信息。
(由0x34Bas…表示),部署的智能合约中,通过getSCinformation()接口(即第二函数)提
供对该智能合约的描述信息的查询。
接口中通过相应的参数指明查询的是编译信息,则区块链节点想应该调用合约的交易时,
可以获得诸如可执行程序使用的编译器的类型和/或版本、可执行程序的编译时间等,并返
回给发起查询的终端。需要说明的是,向终端返回的信息还可以包括其它信息,例如还可以
包括:合约数据包括的可执行程序的数量、每个可执行程序各自在合约文件中对应的分段
编号以及每个可执行程序各自的长度等信息中的一项或多项。
置为获取智能合约的合约数据,以及获取所述智能合约的独立于所述合约数据的描述信
息;合约创建单元802,配置为创建合约文件,所述合约文件包括所述合约数据和所述描述
信息;交易发送单元803,配置为向所述区块链中的区块链节点发送用于部署所述智能合约
的第一交易,所述第一交易中包括所述合约文件。
合约文件中包括独立于合约数据的描述信息,所述装置部署在所述区块链节点。如图9所
示,所述装置包括:信息查询单元901,配置为响应于终端的查询所述智能合约的第一信息
的请求,获取所述描述信息中的第一信息;信息返回单元903,配置为向所述终端返回所述
第一信息。
合约文件包括合约数据和独立于所述合约数据的描述信息,所述合约数据包括通过至少两
个不同类型和/或版本的编译器分别对智能合约源文件进行编译所获得的至少两个可执行
程序,所述装置部署在所述区块链中的区块链节点。如图10所示,所述装置包括:程序选择
单元1001,配置为响应于调用所述智能合约的第三交易,基于所述描述信息和所述区块链
节点中允许执行的可执行程序的类型,从所述至少两个可执行程序中选择第一可执行程
序;程序获取单元1002,配置为获取所述第一可执行程序;程序执行单元1003,配置为执行
所述第一可执行程序。
1101,配置为获取智能合约的合约数据,所述合约数据包括所述智能合约的描述信息;交易
发送单元1102,配置为向所述区块链中的区块链节点发送用于部署所述智能合约的第一交
易,所述第一交易包括所述合约数据,所述智能合约用于在执行时返回所述描述信息。
块链节点。如图12所示,所述装置包括:信息查询单元1201,配置为响应于调用所述智能合
约的第三交易,获取所述区块链节点中存储的所述智能合约的合约数据,所述合约数据包
括所述智能合约的描述信息;合约执行单元1203,配置为基于所述合约数据执行所述智能
合约,以向终端发送所述智能合约的描述信息。
能所对应的计算机程序存储在计算机可读介质中或者作为计算机可读介质上的一个或多
个指令/计算机程序进行传输,以便这些功能所对应的指令/计算机程序被计算机执行时,
通过计算机实现本说明书任意一个实施例中所述的方法。
方法。
提供的方法。
实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施
例的部分说明即可。
执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺
序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可
以的或者可能是有利的。
的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应
包括在本发明的保护范围之内。