CN113220704B - 在区块链中部署、查询和执行智能合约的方法及装置 - Google Patents
在区块链中部署、查询和执行智能合约的方法及装置 Download PDFInfo
- Publication number
- CN113220704B CN113220704B CN202110745674.4A CN202110745674A CN113220704B CN 113220704 B CN113220704 B CN 113220704B CN 202110745674 A CN202110745674 A CN 202110745674A CN 113220704 B CN113220704 B CN 113220704B
- Authority
- CN
- China
- Prior art keywords
- contract
- information
- intelligent
- intelligent contract
- description information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/389—Keeping log of transactions for guaranteeing non-repudiation of a transaction
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Accounting & Taxation (AREA)
- Computing Systems (AREA)
- Finance (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本说明书实施例中提供了一种在区块链中部署、查询和执行智能合约的方法及装置。部署智能合约的方法包括:获取智能合约的合约数据,以及获取智能合约的独立于所述合约数据的描述信息;创建合约文件,合约文件包括合约数据和描述信息;向区块链中的区块链节点发送用于部署智能合约的第一交易,第一交易中包括合约文件。
Description
技术领域
本说明书一个或多个实施例涉及计算机领域,尤其涉及一种在区块链中部署、查询和执行智能合约的方法及装置。
背景技术
终端可对部署到区块链上的智能合约进行调用,使区块链中的区块链节点执行该智能合约以实现预定事务,例如接收符合预定条件的输入参数、按照预定的处理逻辑结合输入参数执行处理逻辑。
智能合约被部署到区块链之后,用户可能期望通过获知该智能合约的描述信息,对该智能合约进行某些特定的处理,例如对智能合约进行更新。
因此,希望有一种新的技术方案,以期使用户能够更加方便的查询智能合约的描述信息。
发明内容
本说明书一个或多个实施例中提供了一种在区块链中部署、查询和执行智能合约的方法及装置。
第一方面,提供了一种在区块链中部署智能合约的方法,所述方法应用于终端。所述方法包括:获取智能合约的合约数据,以及获取所述智能合约的独立于所述合约数据的描述信息;创建合约文件,所述合约文件包括所述合约数据和所述描述信息;向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易中包括所述合约文件。由于已发布至区块链的智能合约的合约文件中同时包含智能合约的描述信息和合约数据,当用户需要查询智能合约的描述信息时,可以通过相应的终端从智能合约的合约文件中方便快捷的查询到智能合约的描述信息;而且,有利于实现在区块链节点无需执行智能合约的情况下,支持终端对智能合约的描述信息进行查询。
第二方面,提供了一种在区块链中查询智能合约的方法,所述区块链的状态数据库中存储有所述智能合约的合约文件,所述合约文件中包括独立于合约数据的描述信息,所述方法应用于所述区块链中的区块链节点。所述方法包括:响应于终端的查询所述智能合约的第一信息的请求,获取所述描述信息中的第一信息;向所述终端返回所述第一信息。
第三方面,提供了一种在区块链中执行智能合约的方法,所述区块链的状态数据库中存储有所述智能合约的合约文件,所述合约文件包括合约数据和独立于所述合约数据的描述信息,所述合约数据包括通过至少两个不同类型和/或版本的编译器分别对智能合约源文件进行编译所获得的至少两个可执行程序,所述方法应用于所述区块链中的区块链节点。所述方法包括:响应于调用所述智能合约的第三交易,基于所述描述信息和所述区块链节点中允许执行的可执行程序的类型,从所述至少两个可执行程序中选择第一可执行程序;获取所述第一可执行程序;执行所述第一可执行程序。智能合约的合约文件中包括通过多个不同类型和/或版本的编译器编译得到的可执行程序,区块链节点可以选择性的执行某个特定的可执行程序来完成对智能合约的执行,有利于支持同一区块链中的不同区块链节点的差异化,比如支持同一区块链中的不同区块链节点各自具有执行不同文件类型的可执行程序的能力。
第四方面,提供了一种在区块链中部署智能合约的方法,应用于终端。所述方法包括:获取智能合约的合约数据,所述合约数据包括所述智能合约的描述信息;向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易包括所述合约数据,所述智能合约用于在执行时返回所述描述信息。通过将智能合约的合约文件直接嵌入到智能合约的合约数据中,当用户需要查询智能合约的描述信息时,即可通过相应的终端调用智能合约,使执行智能合约的区块链节点通过对智能合约的执行,完成向终端返回智能合约的合约数据中所包含的智能合约的描述信息。
第五方面,提供了一种在区块链中查询智能合约的方法,所述方法应用于所述区块链中的区块链节点。所述方法包括:响应于调用所述智能合约的第三交易,获取所述区块链节点中存储的所述智能合约的合约数据,所述合约数据包括所述智能合约的描述信息;基于所述合约数据执行所述智能合约,以向终端发送所述智能合约的描述信息。
第六方面,提供了一种在区块链中部署智能合约的装置,所述装置部署在终端。所述装置包括:信息获取单元,配置为获取智能合约的合约数据,以及获取所述智能合约的独立于所述合约数据的描述信息;合约创建单元,配置为创建合约文件,所述合约文件包括所述合约数据和所述描述信息;交易发送单元,配置为向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易中包括所述合约文件。
第七方面,提供了一种在区块链中查询智能合约的装置,所述区块链的状态数据库中存储有所述智能合约的合约文件,所述合约文件中包括独立于合约数据的描述信息,所述装置部署在所述区块链节点。所述装置包括:信息查询单元,配置为响应于终端的查询所述智能合约的第一信息的请求,获取所述描述信息中的第一信息;信息返回单元,配置为向所述终端返回所述第一信息。
第八方面,提供了一种在区块链中执行智能合约的装置,所述区块链的状态数据库中存储有所述智能合约的合约文件,所述合约文件包括合约数据和独立于所述合约数据的描述信息,所述合约数据包括通过至少两个不同类型和/或版本的编译器分别对智能合约源文件进行编译所获得的至少两个可执行程序,所述装置部署在所述区块链中的区块链节点。所述装置包括:程序选择单元,配置为响应于调用所述智能合约的第三交易,基于所述描述信息和所述区块链节点中允许执行的可执行程序的类型,从所述至少两个可执行程序中选择第一可执行程序;程序获取单元,配置为获取所述第一可执行程序;合约执行单元,配置为执行所述第一可执行程序。
第九方面,提供了一种在区块链中部署智能合约的装置,所述装置部署在终端。所述装置包括:信息获取单元,配置为获取智能合约的合约数据,所述合约数据包括所述智能合约的描述信息;交易发送单元,配置为向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易包括所述合约数据,所述智能合约用于在执行时返回所述描述信息。
第十方面,提供了一种在区块链中查询智能合约的装置,所述装置部署在所述区块链中的区块链节点。所述装置包括:信息查询单元,配置为响应于调用所述智能合约的第三交易,获取所述区块链节点中存储的所述智能合约的合约数据,所述合约数据包括所述智能合约的描述信息;合约执行单元,配置为基于所述合约数据执行所述智能合约,以向终端发送所述智能合约的描述信息。
第十一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算设备中执行时,计算设备执行以上各方面中任一项所述的方法。
第十二方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序,实现以上各方面中任一项所述的方法。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本说明书实施例中提供的技术方案的系统框架;
图2为本说明书实施例中提供的一种在区块链中部署智能合约的方法的流程示意图;
图3为智能合约的合约文件的数据结构示意图;
图4为本说明书实施例中提供的一种在区块链中查询智能合约的方法的流程示意图;
图5为本说明书实施例中提供的一种在区块链中执行智能合约的方法的流程示意图;
图6为本说明书实施例中提供的另一种在区块链中部署智能合约的方法的流程示意图;
图7为本说明书实施例中提供的另一种在区块链中查询智能合约的方法的流程示意图;
图8为本说明书实施例中提供的一种在区块链中部署智能合约的装置的示意图;
图9为本说明书实施例中提供的一种在区块链中查询智能合约的装置的示意图;
图10为本说明书实施例中提供的一种在区块链中执行智能合约的装置的示意图;
图11为本说明书实施例中提供的另一种在区块链中部署智能合约的装置的示意图;
图12为本说明书实施例中提供的另一种在区块链中查询智能合约的装置的示意图。
具体实施方式
下面结合附图,对本说明书所提供的各个非限制性实施例进行详细描述。
图1为本说明书实施例中提供的技术方案的系统框架图。如图1所示,区块链10包括多个区块链节点101。终端102可与区块链节点101建立通信连接,或者终端102可以作为区块链节点101加入区块链网络10。用户可通过终端102进行与区块链10相关的各项业务,例如在区块链10中部署智能合约、查询智能合约的描述信息以及调用智能合约等。
图2为本说明书实施例中提供的一种在区块链中发布智能合约的方法的流程图。其中,该方法可以由终端102执行,该方法中所述的区块链可以是区块链10,该方法可以包括如下步骤201至步骤203。
首先,在步骤201,获取智能合约的合约数据,以及获取所述智能合约的独立于所述合约数据的描述信息。
在一个较为具体的示例中,可以通过单个特定类型和/或版本的编译器对智能合约的源文件进行编译,获得单个可执行程序作为智能合约的合约数据;或者,通过多个不同类型和/或版本的编译器分别对智能合约的源文件进行编译,获得多个可执行程序作为智能合约的合约数据。
前述示例中的合约数据还可以包括智能合约的源文件,或者该智能合约的源文件还可以独立的作为智能合约的合约数据。也就是说,合约数据可以包括用于执行智能合约的代码数据,其包括的具体内容可以由用户结合具体的业务场景进行灵活配置。在一个较为具体的示例中,智能合约的描述信息可以包括智能合约的版本号,以及后续即将创建的合约文件的文件类型。
当合约数据包含一个或多个可执行程序时,智能合约的描述信息还可以包括编译信息;其中,该编译信息可以包括以下各项信息中一项或多项:获得每个可执行程序时各自使用的编译器的类型和/或版本、每个可执行程序各自对应的编译时间。
此外,智能合约的描述信息还可以包括合约数据中的可执行程序的数量、每个可执行程序各自在合约文件中对应的分段编号以及每个可执行程序各自的长度等信息中的一项或多项。
接着,在步骤202,创建合约文件,所述合约文件包括所述合约数据和所述描述信息。
合约文件中在不同字段分别包括智能合约的合约数据和描述信息。通过将合约数据和描述信息置于合约文件的不同字段下,有利于在需要从合约文件中查询合约数据或描述信息时,快速实现对合约数据或描述信息的查询。
在一个较为具体的示例中,智能合约的合约数据包括单个可执行程序时,合约文件可以包括程序段和辅助段;其中该程序段中包括该可执行程序,该辅助段中包括智能合约的描述信息。举例来说,单个可执行程序可以是编码方式为WebAssembly(简称WASM)的可执行程序,包含该可执行程序的合约文件的文件类型记为WASM;文件类型为WASM的合约文件包括程序段和作为辅助段的自定义部分(custom section),编码方式为WASM的可执行程序位于程序段,智能合约的描述信息位于作为辅助段的自定义部分。
在一个较为具体的示例中,智能合约的合约数据包括一个或多个可执行程序时,合约文件可以包括文件头和每个可执行程序各自对应的分段,每个分段包括信息字段和程序字段。
该示例中,文件头中可以包括分段指示,分段指示用于指示合约数据所包括的可执行程序的数量,同时还用于指示合约文件中包含的分段的数量。此外,文件头中还可以包括智能合约的版本号以及合约文件的文件类型。
该示例中,对于合约文件中包括的任一分段,该分段的程序字段中包括其对应的可执行程序,该分段的信息字段中包括其对应的可执行程序的描述信息。其中,可执行程序的描述信息属于智能合约的描述信息,可执行程序的描述信息具体可以包括以下各项信息中的一项或多项:可执行程序在合约文件中对应的分段编号、可执行程序的长度,以及获得可执行程序时使用的编译器的类型和/或版本。
举例来说,通过两个不同类型和/或版本的编译器分别对智能合约的源文件进行编译,获得包含可执行程序1以及可执行程序2的合约数据,同时假定可执行程序1对应的分段编号为1、可执行程序2对应的分段编号为2,则步骤202中具体可以创建具有如图3所示数据结构的合约文件。请参考图3,智能合约的描述信息中,合约文件的文件类型、智能合约的版本号以及合约数据包含的可执行程序的数量(即分段指示)位于文件头中;智能合约的描述信息中,可执行程序1的描述信息位于分段1所包括的信息字段1中、可执行程序1位于分段1所包括的程序字段1中,可执行程序2的描述信息位于分段2所包括的信息字段2中、可执行程序2位于分段2所包括的程序字段2中。
需要说明的是,包含文件头和若干分段的合约文件还可以具有其它数据结构,例如同一个分段中所包含的信息字段和程序字段相连续。
接着,在步骤203,向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易中包括所述合约文件。
终端可以向其连接的区块链节点发送用于部署智能合约的第一交易,接收到第一交易的区块链节点可以向其连接的相邻区块链节点发送该第一交易。区块链中的任一区块链节点,还可以在第一交易被打包到新的区块之后,执行第一交易,并基于执行结果生成和存储该新的区块,该存储的新的区块中包括所述第一交易。其中,在执行第一交易的过程中,部署该智能合约,具体包括为该智能合约分配合约地址,并将合约文件保存在用于保存世界状态的状态数据库中与该合约地址对应的存储,从而完成对该智能合约的部署。其中,在所述状态数据库中,例如通过键-值对的形式将合约地址和合约文件关联地存储。
通过前述步骤201至步骤203完成在区块链中部署智能合约后,用户可以通过终端查询已部署到区块链中的智能合约的描述信息。
图4为本说明书实施例中提供的一种在区块链中查询智能合约的方法的流程图。其中,该方法可以由区块链10中的任一区块链节点101执行,区块链10的状态数据库中存储有智能合约的合约文件,合约文件中包括独立于合约数据的描述信息,该方法可以包括如下步骤401至步骤403。
在步骤401,获取来自终端的查询智能合约的第一信息的请求。
在步骤402,获取描述信息中的第一信息。
当用户期望查询智能合约的描述信息时,可以通过终端向其连接的区块链节点发送用于查询智能合约的请求,例如发送请求查询智能合约的第一信息的第二交易,接收到第二交易的区块链节点可将第二交易转发至其连接的相邻区块链节点。相应的,执行步骤401和步骤402的区块链节点具体可以从终端或者其连接的相邻区块链节点接收第二交易。
例如,通过终端发起的查询智能合约的第二交易格式如下:
Transaction (Tx)
From: Bob(0xf5e…)
To: SC (0x34Bas…)
Data: {getSCinformation()}
上述例子中,Bob发起第二交易,即交易的发起方from字段是Bob的账户地址(由0xf5e…表示)。该交易是调用合约的交易,由交易的to字段指明调用的智能合约的地址(由0x34Bas…表示)。部署的智能合约中,提供了getSCinformation()接口,即可以提供对该智能合约的描述信息的查询。
具体的,在getSCinformation()接口的调用中,可以指明查询的合约信息的类型,例如查询版本号、文件类型,以及编译信息等,这些可以通过在getSCinformation()接口通过参数来指明。例如,通过在getSCinformation()接口通过参数指明查询的是编译信息,则区块链节点响应该调用合约的查询请求时,可以获得诸如可执行程序使用的编译器的类型和/或版本、可执行程序的编译时间等,这些信息将会作为第一信息返回给发起查询的终端。在一种实施方式中,区块链节点可从状态数据库中读取智能合约的合约文件,从合约文件中获取第一信息。在另一种实施方式中,区块链节点的内存中缓存有所述智能合约的合约文件,区块链节点可从内存中读取所述合约文件。在另一种实施方式中,如参考图3所示,在该智能合约的合约文件具有预定字段,其中例如包括信息字段或者程序字段,不同的信息字段对应于不同的描述信息,因此,区块链节点可根据合约文件的格式,从状态数据库或内存中直接读取需要的信息,而不需要读取整个合约文件。需要说明的是,将返回给终端的第一信息还可以包括其它信息,例如还可以包括:合约数据包括的可执行程序的数量、每个可执行程序各自在合约文件中对应的分段编号以及每个可执行程序各自的长度等信息中的一项或多项。
或者,前述示例的第二交易中,Data字段中可以无需包括其它参数。区块链节点在接收到To字段包括智能合约的地址,并且Data字段并未包含其它参数的交易时,即可将该交易确定为用于查询相应智能合约的交易,然后基于To字段的合约地址将相应智能合约的描述信息全部作为待返回的第一信息。
再或者,终端可以向相连接的区块链节点发起本地交易(也称为localtransaction),这类交易适用于不对区块链的世界状态发生改变的情形,因此一般适用于查询交易。这类本地交易的特点是不需要经过共识,执行结果也不会被收录进区块中。
接着,在步骤403,向所述终端返回所述第一信息。
一般的,终端向相连接的区块链节点发起调用合约/查询合约的请求,以查询合约中的相关信息时,可以保持与相连区块链节点的长连接,从而该相连区块链节点可以通过该保持的长连接返回查询结果至所述终端。
此外,区块链节点接收到终端发来的查询请求后,可以将查询结果设置在该交易对应的收据中。进而,终端可以监听区块链收据信息,例如通过对特定主题的topic进行监听,从而在监听到符合自身预期topic的收据时,获得该收据。进而,终端可以从获得的收据中解析出其中包含的查询结果。
当终端请求查询的第一信息是智能合约的完整的描述信息时,区块链节点可以将智能合约的合约文件发送到终端;例如区块链节点在接收到前述示例的Data字段未包括其它参数的第二交易时,可以将包含描述信息的合约文件完整的发送到终端。终端可以基于合约文件的数据结构对合约文件进行解析,实现从合约文件中提取智能合约的描述信息,并且向用户展示智能合约的描述信息,使用户能够获知智能合约的描述信息。其中,仍然以合约文件具有如图3所示的数据结构为例,终端从合约文件中提取智能合约的描述信息具体可以包括:从文件头中提取合约文件的文件类型、智能合约的版本号和分段指示,从分段1包含的信息字段1中提取可执行程序1的描述信息,从分段2包含的信息字段2中提取可执行程序2的描述信息。这样,开发者可以基于查询的智能合约的描述进行某些特定的业务,比如基于描述信息中包含的智能合约的版本号以及编译信息,在更新智能合约的过程中增加或减少通过某些编译器编译得到的可执行程序、增加智能合约的版本号等。
通过前述步骤201至步骤203完成在区块链中部署智能合约后,用户还可以通过终端调用已部署到区块链中的智能合约。
图5为本说明书实施例中提供的一种在区块链中执行智能合约的方法的流程图。其中,该方法由区块链10中的任一区块链节点101执行,区块链10的状态数据库中存储有智能合约的合约文件,合约文件包括所述智能合约的合约数据和独立于所述合约数据的描述信息,所述合约数据包括通过至少两个不同类型和/或版本的编译器分别对智能合约源文件进行编译所获得的至少两个可执行程序,该方法可以包括如下步骤501至步骤503。
首先,在步骤501,获取用于调用所述智能合约的第三交易。
当用户期望调用该智能合约时,可以通过终端向其连接的区块链节点发送用于调用智能合约的第三交易,接收到第三交易的区块链节点可将第三交易转发至其连接的相邻区块链节点。相应的,执行步骤501的区块链节点具体可以从终端或者其连接的相邻区块链节点接收第三交易。
接着,在步骤502,响应于所述第三交易,基于所述描述信息和所述区块链节点中允许执行的可执行程序的类型,从所述至少两个可执行程序中选择第一可执行程序。
接着,在步骤503,获取所述第一可执行程序,并执行所述第一可执行程序。
当合约文件存储于区块链节点的非易失性存储器中而未被加载到内存时,通常需要由区块链节点将合约文件完整的加载的内存中,然后从已加载到内存的合约文件中按需选择可执行程序。当合约文件已经加载到内存时,则可以直接从已加载到内存的合约文件中按需选择可执行程序。
不同的可执行程序及其描述信息可以位于合约文件包含的不同分段中。与之相应的,区块链节点可以根据其自身允许执行的可执行程序的类型,确定出包含区块链节点所允许执行的可执行程序的描述信息的信息字段,其中可执行程序的类型例如通过编译得到该可执行程序时所使用的编译器的类型和/或版本进行描述;然后选择与该信息字段属于相同分段的程序字段中的可执行程序作为待执行的第一可执行程序;最后从与该信息字段属于相同分段的程序字段中读取第一可执行程序,并执行其读取的第一可执行程序。
仍然以合约文件具有如图3所示的数据结构为例,并且假设:可执行程序1的文件类型是“.class”,可执行程序1的描述信息中包括获得可执行程序1时使用的编译器的类型和/或版本,其能够指示可执行程序1的文件类型是“.class”;可执行程序2的文件类型是“.wasm”,可执行程序2的描述信息中包括获得可执行程序2时使用的编译器的类型和/或版本,其能够指示可执行程序2的文件类型是“.wasm”。如果区块链节点能够执行文件类型是“.wasm”的可执行程序,则其可以将其自身允许执行的可执行程序的类型,与信息字段1和信息字段2中的信息进行匹配,从而基于匹配结果从与信息字段2属于相同分段的程序字段2中读取可执行程序2,并执行可执行程序2。
图6为本说明书实施例中提供的另一种在区块链中部署智能合约的方法的流程图。其中,该方法可以由终端102执行,该方法中所述的区块链可以包括区块链10,该方法可以包括如下步骤601和步骤602。
首先,在步骤601,获取智能合约的合约数据,所述合约数据包括所述智能合约的描述信息。
在创建智能合约的源文件时,可以在智能合约的源文件中嵌入智能合约的描述信息。智能合约的合约数据可以是智能合约的源文件,也可以是通过编译器对智能合约的源文件进行编译以获得的可执行程序。
智能合约的描述信息可以包括智能合约的版本号,还可以包括智能合约的编译信息。其中,智能合约的编译信息可以包括但不限于:获得合约数据时所使用的编译器的类型和/或版本,以及编译时间。
接着,在步骤602,向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易包括所述合约数据,所述智能合约用于在执行时返回所述描述信息。
通过前述步骤601和步骤602完成在区块链中部署智能合约后,用户可通过终端调用已部署的智能合约,使得区块链节点执行所述智能合约并且由执行该智能合约的区块链节点向终端返回智能合约的描述信息。
图7为本说明书实施例中提供的一种在区块链中查询智能合约的方法的流程示意图。其中,该方法由区块链10中的任一区块链节点101执行,区块链节点10中部署有智能合约,该方法包括如下步骤701和步骤703。
首先,在步骤701,获取用于调用所述智能合约的第三交易。
接着,在步骤702,响应于所述第三交易,获取所述区块链节点中存储的所述智能合约的合约数据,所述合约数据包括所述智能合约的描述信息。
第三交易的接收字段可以包括智能合约的合约地址,区块链节点可以基于该合约地址从其维护的世界状态中获取该合约地址关联的合约数据。
接着,在步骤703,基于所述合约数据执行所述智能合约,以向终端发送所述智能合约的描述信息。
区块链节点基于合约数据执行智能合约时,至少实现向调用智能合约的终端返回智能合约的描述信息,还可以实现用户期望实现的其它预定事务。
在一个较为具体的示例中,合约数据包括用于在智能合约被执行时实现预定事务的第一合约代码,以及包括用于在智能合约被执行时实现向调用智能合约的终端返回描述信息的第二合约代码;其中描述信息可以嵌入在第二合约代码中。与此相应的,区块链节点基于合约数据执行智能合约可以包括:通过执行第一合约代码实现预定事务,以及通过执行第二合约代码实现向终端返回描述信息;或者,第三交易的数据字段包括用于指示需调用的代码为第二合约代码的指示信息,区块链节点基于该指示信息的指示执行第二合约代码,以实现向终端返回描述信息。
在一种实现方式中,所述智能合约中包括与第一合约代码对应的第一函数和与第二合约代码对应的第二函数,第三交易中通过调用该智能合约的第二函数,从而使得在执行第三交易的过程中执行所述智能合约的第二合约代码,以向终端返回描述信息。
例如,通过终端发起的调用智能合约的第三交易格式如下:
Transaction (Tx)
From: Bob(0xf5e…)
To: SC (0x34Bas…)
Data: {getSCinformation()}
上述例子中,Bob发起第二交易,即交易的发起方from字段是Bob的账户地址(由0xf5e…表示)。该交易是调用合约的交易,由交易的to字段指明被查询的智能合约的地址(由0x34Bas…表示),部署的智能合约中,通过getSCinformation()接口(即第二函数)提供对该智能合约的描述信息的查询。
具体地,在getSCinformation()接口中,可以通过在相应的参数指明查询的合约信息的类型,例如查询版本号、文件类型,以及编译信息等。例如,在getSCinformation()接口中通过相应的参数指明查询的是编译信息,则区块链节点想应该调用合约的交易时,可以获得诸如可执行程序使用的编译器的类型和/或版本、可执行程序的编译时间等,并返回给发起查询的终端。需要说明的是,向终端返回的信息还可以包括其它信息,例如还可以包括:合约数据包括的可执行程序的数量、每个可执行程序各自在合约文件中对应的分段编号以及每个可执行程序各自的长度等信息中的一项或多项。
与前述方法实施例基于相同的构思,本说明书实施例中还提供了一种在区块链中部署智能合约的装置,该装置部署在终端中。如图8所示,该装置包括:信息获取单元801,配置为获取智能合约的合约数据,以及获取所述智能合约的独立于所述合约数据的描述信息;合约创建单元802,配置为创建合约文件,所述合约文件包括所述合约数据和所述描述信息;交易发送单元803,配置为向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易中包括所述合约文件。
与前述方法实施例基于相同的构思,本说明书实施例中还提供了一种在区块链中查询智能合约的装置,所述区块链的状态数据库中存储有所述智能合约的合约文件,所述合约文件中包括独立于合约数据的描述信息,所述装置部署在所述区块链节点。如图9所示,所述装置包括:信息查询单元901,配置为响应于终端的查询所述智能合约的第一信息的请求,获取所述描述信息中的第一信息;信息返回单元903,配置为向所述终端返回所述第一信息。
与前述方法实施例基于相同的构思,本说明书实施例中还提供了一种在区块链中执行智能合约的装置,所述区块链的状态数据库中存储有所述智能合约的合约文件,所述合约文件包括合约数据和独立于所述合约数据的描述信息,所述合约数据包括通过至少两个不同类型和/或版本的编译器分别对智能合约源文件进行编译所获得的至少两个可执行程序,所述装置部署在所述区块链中的区块链节点。如图10所示,所述装置包括:程序选择单元1001,配置为响应于调用所述智能合约的第三交易,基于所述描述信息和所述区块链节点中允许执行的可执行程序的类型,从所述至少两个可执行程序中选择第一可执行程序;程序获取单元1002,配置为获取所述第一可执行程序;程序执行单元1003,配置为执行所述第一可执行程序。
与前述方法实施例基于相同的构思,本说明书实施例中还提供了一种在区块链中部署智能合约的装置,所述装置部署在终端中。如图11所示,所述装置包括:信息获取单元1101,配置为获取智能合约的合约数据,所述合约数据包括所述智能合约的描述信息;交易发送单元1102,配置为向所述区块链中的区块链节点发送用于部署所述智能合约的第一交易,所述第一交易包括所述合约数据,所述智能合约用于在执行时返回所述描述信息。
与前述方法实施例基于相同的构思,本说明书实施例中还提供了一种在区块链中查询智能合约的装置,所述区块链中部署有智能合约,所述装置部署在所述区块链中的区块链节点。如图12所示,所述装置包括:信息查询单元1201,配置为响应于调用所述智能合约的第三交易,获取所述区块链节点中存储的所述智能合约的合约数据,所述合约数据包括所述智能合约的描述信息;合约执行单元1203,配置为基于所述合约数据执行所述智能合约,以向终端发送所述智能合约的描述信息。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能所对应的计算机程序存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令/计算机程序进行传输,以便这些功能所对应的指令/计算机程序被计算机执行时,通过计算机实现本说明书任意一个实施例中所述的方法。
本说明书实施例中还提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算设备中执行时,计算设备执行本说明书任意一个实施例中提供的方法。
本说明书实施例中还提供了一种计算设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时,实现本说明书任意一个实施例中提供的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例中相同、相似的部分互相参见即可,每个实施例中重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (19)
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中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110745674.4A CN113220704B (zh) | 2021-07-01 | 2021-07-01 | 在区块链中部署、查询和执行智能合约的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110745674.4A CN113220704B (zh) | 2021-07-01 | 2021-07-01 | 在区块链中部署、查询和执行智能合约的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113220704A CN113220704A (zh) | 2021-08-06 |
CN113220704B true CN113220704B (zh) | 2022-04-26 |
Family
ID=77081069
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110745674.4A Active CN113220704B (zh) | 2021-07-01 | 2021-07-01 | 在区块链中部署、查询和执行智能合约的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113220704B (zh) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3542277A4 (en) * | 2016-11-19 | 2020-08-05 | Costanz, Mario A. | SYSTEM AND METHOD OF CONCILIATION OF INTERACTION OBJECTS IN A LARGE PUBLIC BOOK BLOCKCHAIN ENVIRONMENT |
CN108510389B (zh) * | 2018-03-30 | 2020-12-18 | 深圳前海微众银行股份有限公司 | 基于区块链的智能合约调用方法、设备及可读存储介质 |
CN108830720B (zh) * | 2018-06-21 | 2021-04-30 | 北京京东尚科信息技术有限公司 | 智能合约运行方法、装置、系统和计算机可读存储介质 |
CN109375899B (zh) * | 2018-09-25 | 2021-08-03 | 杭州趣链科技有限公司 | 一种形式验证Solidity智能合约的方法 |
CN110544097A (zh) * | 2019-09-06 | 2019-12-06 | 杭州复杂美科技有限公司 | 智能合约版本控制、调用和升级方法、设备及存储介质 |
-
2021
- 2021-07-01 CN CN202110745674.4A patent/CN113220704B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113220704A (zh) | 2021-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7451136B2 (en) | System and method for searching multiple disparate search engines | |
US8682998B2 (en) | Method and server cluster for map reducing flow services and large documents | |
CN103069385A (zh) | 动态加载基于图的计算 | |
CN110704064B (zh) | 编译和执行智能合约的方法及装置 | |
US8271622B2 (en) | Method and apparatus for a system management tool to adapt command interface and behavior based on installed features | |
CN112149169A (zh) | 一种应用访问方法、装置及计算机可读存储介质 | |
CN107977274B (zh) | Sdk调用的控制方法及装置 | |
CN110968296B (zh) | 一种数据获取方法、装置、设备及可读存储介质 | |
US20060122958A1 (en) | Matching client interfaces with service interfaces | |
CN111240772A (zh) | 一种基于区块链的数据处理方法、装置及存储介质 | |
US20080163167A1 (en) | Incorporating an arbitrary scripting language with native support for java objects | |
US6842905B2 (en) | Method and system for implementing collection program interface for accessing a collection of data associated with a legacy enumeration application interface | |
CN113220704B (zh) | 在区块链中部署、查询和执行智能合约的方法及装置 | |
CN111259042B (zh) | 一种动态查询方法及系统 | |
CN111324395B (zh) | 调用方法、装置和计算机可读存储介质 | |
CN102495757A (zh) | 一种适用于java远程调用对象传输的优化方法、装置 | |
CN115328679A (zh) | 异构函数库的自动化集成方法、计算设备及其系统 | |
CN113626071B (zh) | 函数注册方法、系统、电子设备及存储介质 | |
CN111966744B (zh) | 工作流部署方法、装置、计算机设备和存储介质 | |
CN103677846A (zh) | 一种SQLite数据库开发工具包及开发方法 | |
CN113918290A (zh) | 一种api调用方法以及装置 | |
CN112650512A (zh) | 硬件驱动方法及装置、终端、存储介质 | |
EP1122644A1 (en) | A method and system for dynamically dispatching function calls from a first execution environment to a second execution environment | |
KR20170130911A (ko) | Dds-dbms 연동 도구의 실시간 변경 데이터 발간 서비스 수행 방법 | |
CN111881220A (zh) | 列表存储下的数据操作方法、装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |