CN114358936A - 一种基于微服务区块链的智能合约运行方法 - Google Patents
一种基于微服务区块链的智能合约运行方法 Download PDFInfo
- Publication number
- CN114358936A CN114358936A CN202111657375.1A CN202111657375A CN114358936A CN 114358936 A CN114358936 A CN 114358936A CN 202111657375 A CN202111657375 A CN 202111657375A CN 114358936 A CN114358936 A CN 114358936A
- Authority
- CN
- China
- Prior art keywords
- target
- data
- intelligent contract
- executor
- transaction
- 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.)
- Pending
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
一种基于微服务区块链的智能合约运行方法,其中,所述微服务区块链中包括用于控制交易执行序列的控制器、用于原生运行第一类智能合约且能识别第二类智能合约的执行器、用于运行第二类智能合约的容器;所述方法包括:所述控制器将目标智能合约的调用交易发送至所述执行器,若所述目标智能合约为第二类智能合约,初始化对应所述目标智能合约的目标运行时;所述目标容器通过与所述执行器之间的目标数据流与所述执行器通信,以使所述目标容器中的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务;所述执行器将所述相关业务的执行结果反馈至所述控制器。该方案可实现智能合约的兼容运行。
Description
技术领域
本说明书涉及区块链技术领域,尤其涉及一种基于微服务区块链的智能合约运行方法。
背景技术
区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的技术。智能合约,则通常指区块链上可以被交易触发执行的、通过代码的形式定义的合约。对于可编程区块链而言,通常支持用户在区块链网络中创建并调用一些复杂的逻辑。通常,这类可编程区块链中每个区块链节点都可以运行区块链虚拟机,如果上述区块链虚拟机是图灵完备的虚拟机,则用户就可以通过它实现各种传统程序代码所能实现的逻辑。换言之,用户在区块链中发布和调用智能合约的过程,也就是在区块链虚拟机上部署并运行对应程序代码的过程。
但是,在实际应用中,不同的智能合约通常只能在对应的区块链中原生运行,假设A型区块链只能运行aa型智能合约,B型区块链只能运行bb型智能合约,那么如果想在A型区块链上实现bb型智能合约的功能,就只能对bb型智能合约进行分析后,使用aa型智能合约重新编写一遍。
因此,业界亟需一种智能合约的兼容运行方案,以解决重复开发带来的人工和时间成本问题。
发明内容
有鉴于此,本说明书公开了一种基于微服务区块链的智能合约运行方法。
根据本说明书实施例的第一方面,公开了一种基于微服务区块链的智能合约运行方法,其中,所述微服务区块链的架构中至少包括用于控制交易执行序列的控制器、用于原生运行第一类智能合约且能识别第二类智能合约的执行器、以及用于运行第二类智能合约的容器;所述方法包括:
所述控制器将用于调用目标智能合约的调用交易发送至所述执行器;
所述执行器解析所述调用交易,在确定所述调用交易所指示的所述目标智能合约为第二类智能合约的情况下,初始化与所述目标智能合约对应的目标运行时,并查找用于运行所述目标智能合约的目标容器与所述执行器之间的目标数据流;
所述目标容器通过所述目标数据流与所述执行器通信,以使所述目标容器中运行的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务;
所述执行器将所述相关业务的执行结果作为所述调用交易的执行结果,反馈至所述控制器。
可选的,所述控制器将用于调用目标智能合约的调用交易发送至所述执行器,包括:
所述控制器获取用于调用目标智能合约的调用交易并打包成目标块;
将所述目标块在所述区块链上完成共识;
调用所述执行器的执行服务,引用完成共识的所述目标块。
可选的,所述目标容器中运行的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务,包括:
所述目标容器中运行的目标智能合约响应于所述调用交易,向所述目标数据流中发送数据获取请求,以使对接到所述目标数据流的目标运行时从数据缓存中查找、并通过所述目标数据流向所述目标智能合约反馈所述数据获取请求指示的业务数据;以及,
向所述目标数据流中发送数据写入请求,以使对接到所述目标数据流的目标运行时向所述数据缓存中写入所述数据写入请求指示的业务数据。
可选的,所述数据缓存包括对接到levelDB的KV存储的数据缓存和/或对接到CouchDB的文档型存储的数据缓存;
在所述数据缓存中无法查找到所述数据获取请求指示的业务数据的情况下,所述方法还包括:从所述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中,查找所述数据获取请求指示的业务数据;
在向所述数据缓存中写入所述数据写入请求指示的业务数据之后,所述方法还包括:向所述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中写入所述数据写入请求指示的业务数据。
可选的,所述第二类智能合约包括Chaincode智能合约;所述目标数据流包括目标双向gRPC数据流;
所述目标容器通过所述目标数据流与所述执行器通信,包括:
所述执行器基于所述调用交易携带的信息构建ChaincodeMessage,并将所述ChaincodeMessage发送至所述目标双向gRPC数据流;其中,所述调用交易携带的信息至少包括Chaincode名称、相关方法名称、调用参数;
目标容器从所述目标双向gRPC数据流中,获取所述ChaincodeMessage。
根据本说明书实施例的第二方面,公开了一种基于微服务区块链的智能合约运行***,包括:用于控制交易执行序列的控制器、用于原生运行第一类智能合约且能识别第二类智能合约的执行器、以及用于运行第二类智能合约的容器;
所述控制器还用于,将用于调用目标智能合约的调用交易发送至所述执行器;
所述执行器还用于,解析所述调用交易,在确定所述调用交易所指示的所述目标智能合约为第二类智能合约的情况下,初始化与所述目标智能合约对应的目标运行时,并查找用于运行所述目标智能合约的目标容器与所述执行器之间的目标数据流;
所述目标容器还用于,通过所述目标数据流与所述执行器通信,以使所述目标容器中运行的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务;
所述执行器还用于,将所述相关业务的执行结果作为所述调用交易的执行结果,反馈至所述控制器。
可选的,所述控制器进一步用于:
获取用于调用目标智能合约的调用交易并打包成目标块;
将所述目标块在所述区块链上完成共识;
调用所述执行器的执行服务,引用完成共识的所述目标块。
可选的,所述目标容器中运行的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务,包括:
所述目标容器中运行的目标智能合约响应于所述调用交易,向所述目标数据流中发送数据获取请求,以使对接到所述目标数据流的目标运行时从数据缓存中查找、并通过所述目标数据流向所述目标智能合约反馈所述数据获取请求指示的业务数据;以及,
向所述目标数据流中发送数据写入请求,以使对接到所述目标数据流的目标运行时向所述数据缓存中写入所述数据写入请求指示的业务数据。
可选的,所述数据缓存包括对接到levelDB的KV存储的数据缓存和/或对接到CouchDB的文档型存储的数据缓存;
所述执行器还用于,在所述数据缓存中无法查找到所述数据获取请求指示的业务数据的情况下,从所述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中,查找所述数据获取请求指示的业务数据;
所述执行器还用于,在向所述数据缓存中写入所述数据写入请求指示的业务数据之后,向所述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中写入所述数据写入请求指示的业务数据。
可选的,所述第二类智能合约包括Chaincode智能合约;所述目标数据流包括目标双向gRPC数据流;
所述通过所述目标数据流与所述执行器通信,包括:
所述执行器基于所述调用交易携带的信息构建ChaincodeMessage,并将所述ChaincodeMessage发送至所述目标双向gRPC数据流;其中,所述调用交易携带的信息至少包括Chaincode名称、相关方法名称、调用参数;
目标容器从所述目标双向gRPC数据流中,获取所述ChaincodeMessage。
根据本说明书实施例的第三方面,公开了一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现上述任一方面实施例所述的方法。
根据本说明书实施例的第四方面,公开了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一方面实施例所述的方法。
以上技术方案中,由于上述用于原生运行第一类智能合约的执行器能够识别第二类智能合约,因此可以将接收到的、对应第二类智能合约的调用交易通过目标运行时以及目标数据流发送至目标容器,从而实现在目标容器中完成上述调用交易的执行,且能够通过读写上述目标运行时中的数据缓存的方式完成具体的相关业务,最后将执行的结果反馈至上述控制器,实现在原生运行第一类智能合约的执行器基础上对第二类智能合约的兼容运行,解决了人工改写智能合约类型带来的成本问题。
另一方面,由于该方案在兼容运行第二类智能合约时,调用交易从控制器发送到执行器的过程,以及执行结果从执行器反馈到控制器的过程,与执行第一类智能合约的流程相似,因此该兼容方案更加便于管理和调试。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书文本一同用于解释原理。
图1是本说明书示出的一种创建智能合约和调用智能合约的示意图;
图2是本说明书示出的一种基于微服务区块链的智能合约运行方法的流程示例图;
图3是本说明书示出的一种通过兼容模式运行第二类智能合约的情景示例图;
图4是本说明书示出的一种基于微服务区块链的智能合约运行***的结构示例图;
图5是本说明书示出的一种用于基于微服务区块链的智能合约运行的计算机设备的结构示例图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书一个或多个实施例中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是一部分实施例,而不是全部的实施例。基于本说明书一个或多个实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与本说明书的一些方面相一致的***和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的技术。智能合约,则通常指区块链上可以被交易触发执行的、通过代码的形式定义的合约。对于可编程区块链而言,通常支持用户在区块链网络中创建并调用一些复杂的逻辑。通常,这类可编程区块链中每个区块链节点都可以运行区块链虚拟机,如果上述区块链虚拟机是图灵完备的虚拟机,则用户就可以通过它实现各种传统程序代码所能实现的逻辑。换言之,用户在区块链中发布和调用智能合约的过程,也就是在区块链虚拟机上部署并运行对应程序代码的过程。
请参见图1,图1是本说明书示出的一种创建智能合约和调用智能合约的示意图。在该示例中,智能合约具体以字节码的形式存在于区块链上,因此区块链中要创建一个智能合约,可以经过编写智能合约、变成字节码、部署到区块链等过程。在区块链中调用智能合约时,可以发起一笔指向智能合约地址的交易,并由区块链上各个节点的虚拟机可以分别执行该交易,将智能合约代码分布式地运行在区块链网络中每个节点的虚拟机中。
但是,在实际应用中,不同的智能合约通常只能在对应的区块链中原生运行;例如,假设有aa型智能合约,只能在A型区块链运行,又有bb型智能合约,只能在B型区块链运行,那么如果想在A型区块链上实现bb型智能合约的功能,就只能对bb型智能合约进行分析后,使用aa型智能合约的规范重新加以实现,显然过程极其繁琐且容易出错。
因此,业界亟需一种智能合约的兼容运行方案,以解决重复开发带来的人工和时间成本问题。
基于此,本说明书提出一种通过双向数据流将执行器与兼容第二类智能合约的容器相连接,使执行器将收到的、对应第二类的目标智能合约的调用交易转发至运行有目标智能合约的容器中,实现对于第二类智能合约的兼容运行,再将运行的结果反馈至控制器的技术方案。
在实现时,在上述执行器中可以建立与上述目标智能合约对应的目标运行时,以使上述目标容器能够通过数据流与该目标运行时沟通;另外,还可以在该目标运行时中设立数据缓存,以便上述目标容器能够通过读写改数据缓存的方式利用区块链中的数据数据。
以上技术方案中,由于上述用于原生运行第一类智能合约的执行器能够识别第二类智能合约,因此可以将接收到的、对应第二类智能合约的调用交易通过目标运行时以及目标数据流发送至目标容器,从而实现在目标容器中完成上述调用交易的执行,且能够通过读写上述目标运行时中的数据缓存的方式完成具体的相关业务,最后将执行的结果反馈至上述控制器,实现在原生运行第一类智能合约的执行器基础上对第二类智能合约的兼容运行,解决了人工改写智能合约类型带来的成本问题。
另一方面,由于该方案在兼容运行第二类智能合约时,调用交易从控制器发送到执行器的过程,以及执行结果从执行器反馈到控制器的过程,与执行第一类智能合约的流程相似,因此该兼容方案更加便于管理和调试。
下面通过具体实施例并结合具体的应用场景对本说明书进行描述。
请参考图2,图2是本说明书一实施例提供的一种基于微服务区块链的智能合约运行方法的流程示例图;其中,上述微服务区块链的架构中可以至少包括用于控制交易执行序列的控制器、用于原生运行第一类智能合约且能识别第二类智能合约的执行器、以及用于运行第二类智能合约的容器;上述方法可以应用于区块链的节点设备,包括以下步骤:
S201,所述控制器将用于调用目标智能合约的调用交易发送至所述执行器;
S202,所述执行器解析所述调用交易,在确定所述调用交易所指示的所述目标智能合约为第二类智能合约的情况下,初始化与所述目标智能合约对应的目标运行时,并查找用于运行所述目标智能合约的目标容器与所述执行器之间的目标数据流;
S203,所述目标容器通过所述目标数据流与所述执行器通信,以使所述目标容器中运行的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务;
S204,所述执行器将所述相关业务的执行结果作为所述调用交易的执行结果,反馈至所述控制器。
上述区块链,可以包括满足上述架构描述的任意形式的区块链;在本领域中,区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(Private Blockchain)和联盟链(Consortium Blockchain)。此外,还可以有上述多种类型的结合,比如私有链+联盟链、联盟链+公有链等。其中,去中心化程度最高的是公有链,私有链则可以为一个弱中心化***,其对节点具有严格限制且节点数量较少,联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。本领域技术人员可以根据具体的业务需求自行选择具体使用的区块链类型,本说明书对此不作详细限定。
上述区块链的节点设备,可以包括类型或形态的节点设备;从功能角度上划分,区块链节点设备可以包括全功能节点、只读节点、轻量化节点等等,其中全功能节点可以参与共识、智能合约逻辑计算、数据存储等等业务,而只读节点则通常不参与共识投票,仅提供数据保存的功能,用于提高区块链的稳定性,轻量化节点则可以仅存储有最新的若干个区块的数据,其能够处理的业务也相对受限,但能够降低节点设备所需付出的存储成本。从形态角度上划分,区块链节点设备可以包括独立运行区块链节点客户端的个人计算机、智能手机等物理设备,也可以指运行在云服务器中的区块链节点虚拟机;当然可以理解的是,通过云原生引擎运行多个区块链节点的云计算集群,亦可以视为一种节点设备,但在讨论区块链节点个体时,则指上述云计算集群中相对独立运行的各个区块链节点进程。
上述第一类智能合约与第二类智能合约,可以是采用不同编程语言编写的智能合约,也可以是运行规范不同的智能合约;对于本说明书所关注的情景而言,主要的需求是在原生支持第一类智能合约的区块链环境下兼容运行第二类智能合约。
在本说明书中,上述控制器可以将用于调用目标智能合约的调用交易发送至上述执行器;具体而言,在本说明书所述的区块链中,采用的是微服务架构,其中控制器可以用于控制交易执行序列,而执行其则可以用于具体执行交易;也就是说,本说明书所述的方案是针对于运行和排序解耦合设计的区块链的。在此种架构下,上述控制器可以将待执行的交易(例如,上述用于调用目标智能合约的调用交易)发送至执行器以待执行。
当然可以理解的是,软件应用组件之间的信息交流方式可以根据具体情况自行设计,本说明书无需进行详细列举。
在示出的一种实施方式中,上述控制器将用于调用目标智能合约的调用交易发送至上述执行器的过程,可以包括:上述控制器首先获取用于调用目标智能合约的调用交易并打包成目标块;再将上述目标块在上述区块链上完成共识;最后调用上述执行器的执行服务,引用完成共识的上述目标块。通常认为,区块链可以是先共识后执行,也可以是先执行后共识;如果上述区块链是先共识后执行类型的区块链,就可以先将上述调用交易打包成目标快,通过共识确定执行顺序等执行条件之后,再通过调用上述执行器的执行服务、引用上述目标块来执行上述目标块所包含的调用交易。
在本说明书中,上述执行器可以解析上述调用交易,在确定上述调用交易所指示的上述目标智能合约为第二类智能合约的情况下,初始化与上述目标智能合约对应的目标运行时,并查找用于运行上述目标智能合约的目标容器与上述执行器之间的目标数据流;在本领域中,运行时runtime可以被理解为一种进程级别的虚拟机,或者理解为一个程序或一段代码所依赖的环境和数据;初始化目标运行时的过程,也就是在上述执行器中初始化一个用于与上述目标容器沟通的临时存储空间,以便实现上述目标容器内外的数据沟通。举例来说,如果运行在上述目标容器中的代码需要使用区块链中的某一个值,那么这个值就可以被预先映射在上述运行时中,以便目标容器获取。
对于一个区块链节点而言,为了支持运行多个或者多种非第一类的智能合约的运行,可以搭载有多个容器,因此上述执行器在解析上述调用交易、确定上述调用交易所指示的目标智能合约的类型之后,可以从其对接的若干个容器中查找与目标智能合约相对应的目标容器,进而找到用于连接执行器和目标容器的数据流;在实现时,可以通过表示目标智能合约的类型的标识符等方式进行识别和查找,本领域技术人员可以自行根据具体的业务需求进行设计。
举例而言,假设上述节点搭载了X、Y、Z三个容器分别对应xx、yy、zz三种需要兼容运行的智能合约,那么如果上述调用交易被解析后确定其对应的目标智能合约的类型为yy型智能合约,那么就可以确定目标容器为容器Y。当然可以理解的是,如果当前节点仅需要考虑兼容运行第二类智能合约,那么其搭载的、用于兼容运行的容器的数量也可以只有一个,上述查找过程也可直接得出结果。
在本说明书中,上述目标容器可以通过上述目标数据流与上述执行器通信,以使上述目标容器中运行的目标智能合约响应于上述调用交易,通过读写上述目标运行时中的数据缓存的方式完成相关业务;如前所述,上述目标容器是由执行器搭载的,其与执行器中的目标运行时进行数据沟通时,就可以使用上述数据流完成;具体数据流的注册和使用的方式,可以由本领域技术人员参考数据流的设计规范自行完成,本说明书无需进行更多限定。
在示出的一种实施方式中,上述目标容器中运行的目标智能合约响应于上述调用交易,通过读写上述目标运行时中的数据缓存的方式完成相关业务的过程具体可以包括:上述目标容器中运行的目标智能合约响应于上述调用交易,向上述目标数据流中发送数据获取请求,以使对接到上述目标数据流的目标运行时从数据缓存中查找、并通过上述目标数据流向上述目标智能合约反馈上述数据获取请求指示的业务数据;以及,向上述目标数据流中发送数据写入请求,以使对接到上述目标数据流的目标运行时向上述数据缓存中写入上述数据写入请求指示的业务数据。当然可以理解的是,对于用于原生运行第一类智能合约的执行器、与能够运行第二类智能合约的容器而言,彼此之间进行数据交互时可能需要进行数据结构的适配或者转换,本领域技术人员可以利用结构化数据处理的方式,将上述目标数据流作为上述目标容器与上述执行器之间的“翻译”进行实实现。
在本说明书中,上述执行器可以将上述相关业务的执行结果作为上述调用交易的执行结果,反馈至上述控制器。如前所述,本说明书实现的、对第二类智能合约的兼容运行方案可以做到与第一类智能合约的原生运行方案重合度较高,就是因为两者在交易下发和结果反馈的流程上相统一。上述执行器在通过上述目标数据流与上述容器通信、完成上述目标智能合约的调用、进而完成相关的业务之后,就可以将得到的执行结果从上述执行器中反馈至上述控制器。至此,对于第二类智能合约类型的目标智能合约的调用环节完成。
在示出的一种实施方式中,上述数据缓存,可以具体指对接到区块链的数据库的数据缓存,例如,对接到levelDB的KV存储的数据缓存和/或对接到CouchDB的文档型存储的数据缓存;在上述数据缓存中无法查找到上述数据获取请求指示的业务数据的情况下,上述方法就还可以包括从数据库中调取数据的步骤;例如,从上述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中,查找上述数据获取请求指示的业务数据;在向上述数据缓存中写入上述数据写入请求指示的业务数据之后,为了保证执行结果能够被区块链记录下来,上述方法就还可以包括:向上述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中写入上述数据写入请求指示的业务数据。
在示出的一种实施方式中,上述第二类智能合约可以包括Chaincode智能合约;上述目标数据流可以包括目标双向gRPC数据流。Chaincode智能合约是一种被Fabric支持的、可以通过Fabric提供的SDK使用多种编程语言编写的智能合约,其开发更加灵活,但适用范围通常仅限于Fabric区块链,而不被其他区块链所支持;而在本说明书公开的技术方案中,则可以通过将能够运行Chaincode智能合约的容器通过数据流挂载到执行器上的方式,实现Chaincode智能合约的兼容运行。具体而言,上述目标容器通过上述目标数据流与上述执行器通信,可以包括:上述执行器基于上述调用交易携带的信息构建ChaincodeMessage,并将上述ChaincodeMessage发送至上述目标双向gRPC数据流;其中,上述调用交易携带的信息至少可以包括Chaincode名称、相关方法名称、调用参数;而目标容器则可以从上述目标双向gRPC数据流中,获取上述ChaincodeMessage。
图3是本说明书示出的一种通过兼容模式运行第二类智能合约的情景示例图;以一个第二类智能合约计数合约Counter为例,上述合约中假设存放有一个value变量,该value变量被初始化为0,该合约还提供一个Incr方法,该Incr方法被设计为,读取当前的value的值,自增1后存回value。
假设向上述区块链上发送一笔调用上述Counter合约的Incr方法的交易,那么该交易会被控制器打包成块,完成共识,控制器调用执行器的执行服务执行上述块;而执行器收到块后,读取这笔交易,从交易中解析出调用的合约名称Counter,并识别到合约Counter是一个第二类智能合约,即可将调用的方法Incr打包成ChaincodeMessage发往上述Counter合约对应的gRPC流。
上述Chaincode容器在收到上述ChaincodeMessage后,从中获取调用的方法Incr,执行Incr;Incr方法要求读取当前value的变量,Chaincode容器通过gRPC流,往执行器的Chaincode运行时发送GetState请求;而Chaincode运行时收到GetState请求后,读出要读取的Key,可以将上述Key和Chaincode的名编码在一起作为向KV数据库请求的Key;待Chaincode运行时收到数据库返回的值后,运行时可以将上述值作为结果返回给Chaincode容器,Chaincode容器由此得知当前value的值,并对value自增1后,向执行器的Chaincode运行时发送PutState请求,请求更新value的值;Chaincode运行时收到PutState请求后,可以将新的value的值视为执行结果缓存在写集,并通知Chaincode容器写入完成。
至此,Chaincode容器中的Counter合约完成了方法Incr的调用,该容器即可向Chaincode运行时报告完成信息,Chaincode运行时则可以响应于该完成信息,将缓存的写集写入数据库中,至此,视为交易执行完成。
最后,执行器在完成整个块的交易执行后,可以将执行结果汇报给控制器,待控制器完成当前块的处理,即可进行下一轮的出块。
上述内容即为本说明书针对所述基于微服务区块链的智能合约运行方法的全部实施例。基于以上实施例可知,应用本说明书所述的技术方案,不仅实现了在原生运行第一类智能合约的执行器基础上对第二类智能合约的兼容运行,解决了人工改写智能合约类型带来的成本问题,还更加便于管理和调试。
本说明书还提供了对应的基于微服务区块链的智能合约运行***的实施例如下:
请参见图4,图4是本说明书提出的一种基于微服务区块链的智能合约运行***的结构示例图,该***可以包括:用于控制交易执行序列的控制器401、用于原生运行第一类智能合约且能识别第二类智能合约的执行器402、以及用于运行第二类智能合约的容器403;
所述控制器401还用于,将用于调用目标智能合约的调用交易发送至所述执行器;
所述执行器402还用于,解析所述调用交易,在确定所述调用交易所指示的所述目标智能合约为第二类智能合约的情况下,初始化与所述目标智能合约对应的目标运行时,并查找用于运行所述目标智能合约的目标容器与所述执行器之间的目标数据流;
所述目标容器还用于,通过所述目标数据流与所述执行器通信,以使所述目标容器中运行的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务;
所述执行器402还用于,将所述相关业务的执行结果作为所述调用交易的执行结果,反馈至所述控制器。
在示出的一种实施方式中,上述控制器401进一步可以用于:获取可以用于调用目标智能合约的调用交易并打包成目标块;将上述目标块在上述区块链上完成共识;调用上述执行器402的执行服务,引用完成共识的上述目标块。
在示出的一种实施方式中,上述目标容器中运行的目标智能合约响应于上述调用交易,通过读写上述目标运行时中的数据缓存的方式完成相关业务,可以包括:上述目标容器中运行的目标智能合约响应于上述调用交易,向上述目标数据流中发送数据获取请求,以使对接到上述目标数据流的目标运行时从数据缓存中查找、并通过上述目标数据流向上述目标智能合约反馈上述数据获取请求指示的业务数据;以及,向上述目标数据流中发送数据写入请求,以使对接到上述目标数据流的目标运行时向上述数据缓存中写入上述数据写入请求指示的业务数据。
在示出的一种实施方式中,上述数据缓存可以包括对接到levelDB的KV存储的数据缓存和/或对接到CouchDB的文档型存储的数据缓存;上述执行器402还可以用于,在上述数据缓存中无法查找到上述数据获取请求指示的业务数据的情况下,从上述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中,查找上述数据获取请求指示的业务数据;上述执行器402还可以用于,在向上述数据缓存中写入上述数据写入请求指示的业务数据之后,向上述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中写入上述数据写入请求指示的业务数据。
在示出的一种实施方式中,上述第二类智能合约可以包括Chaincode智能合约;上述目标数据流可以包括目标双向gRPC数据流;上述通过上述目标数据流与上述执行器402通信的过程可以具体包括:上述执行器402基于上述调用交易携带的信息构建ChaincodeMessage,并将上述ChaincodeMessage发送至上述目标双向gRPC数据流;其中,上述调用交易携带的信息至少可以包括Chaincode名称、相关方法名称、调用参数;目标容器从上述目标双向gRPC数据流中,获取上述ChaincodeMessage。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述的基于微服务区块链的智能合约运行方法。
图5示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作***和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的基于微服务区块链的智能合约运行方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。
Claims (12)
1.一种基于微服务区块链的智能合约运行方法,其中,所述微服务区块链的架构中至少包括用于控制交易执行序列的控制器、用于原生运行第一类智能合约且能识别第二类智能合约的执行器、以及用于运行第二类智能合约的容器;所述方法包括:
所述控制器将用于调用目标智能合约的调用交易发送至所述执行器;
所述执行器解析所述调用交易,在确定所述调用交易所指示的所述目标智能合约为第二类智能合约的情况下,初始化与所述目标智能合约对应的目标运行时,并查找用于运行所述目标智能合约的目标容器与所述执行器之间的目标数据流;
所述目标容器通过所述目标数据流与所述执行器通信,以使所述目标容器中运行的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务;
所述执行器将所述相关业务的执行结果作为所述调用交易的执行结果,反馈至所述控制器。
2.根据权利要求1所述的方法,所述控制器将用于调用目标智能合约的调用交易发送至所述执行器,包括:
所述控制器获取用于调用目标智能合约的调用交易并打包成目标块;
将所述目标块在所述区块链上完成共识;
调用所述执行器的执行服务,引用完成共识的所述目标块。
3.根据权利要求1所述的方法,所述目标容器中运行的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务,包括:
所述目标容器中运行的目标智能合约响应于所述调用交易,向所述目标数据流中发送数据获取请求,以使对接到所述目标数据流的目标运行时从数据缓存中查找、并通过所述目标数据流向所述目标智能合约反馈所述数据获取请求指示的业务数据;以及,
向所述目标数据流中发送数据写入请求,以使对接到所述目标数据流的目标运行时向所述数据缓存中写入所述数据写入请求指示的业务数据。
4.根据权利要求3所述的方法,所述数据缓存包括对接到levelDB的KV存储的数据缓存和/或对接到CouchDB的文档型存储的数据缓存;
在所述数据缓存中无法查找到所述数据获取请求指示的业务数据的情况下,所述方法还包括:从所述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中,查找所述数据获取请求指示的业务数据;
在向所述数据缓存中写入所述数据写入请求指示的业务数据之后,所述方法还包括:向所述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中写入所述数据写入请求指示的业务数据。
5.根据权利要求1所述的方法,所述第二类智能合约包括Chaincode智能合约;所述目标数据流包括目标双向gRPC数据流;
所述目标容器通过所述目标数据流与所述执行器通信,包括:
所述执行器基于所述调用交易携带的信息构建ChaincodeMessage,并将所述ChaincodeMessage发送至所述目标双向gRPC数据流;其中,所述调用交易携带的信息至少包括Chaincode名称、相关方法名称、调用参数;
目标容器从所述目标双向gRPC数据流中,获取所述ChaincodeMessage。
6.一种支持多类型智能合约的微服务区块链***,包括:用于控制交易执行序列的控制器、用于原生运行第一类智能合约且能识别第二类智能合约的执行器、以及用于运行第二类智能合约的容器;
所述控制器还用于,将用于调用目标智能合约的调用交易发送至所述执行器;
所述执行器还用于,解析所述调用交易,在确定所述调用交易所指示的所述目标智能合约为第二类智能合约的情况下,初始化与所述目标智能合约对应的目标运行时,并查找用于运行所述目标智能合约的目标容器与所述执行器之间的目标数据流;
所述目标容器还用于,通过所述目标数据流与所述执行器通信,以使所述目标容器中运行的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务;
所述执行器还用于,将所述相关业务的执行结果作为所述调用交易的执行结果,反馈至所述控制器。
7.根据权利要求6所述的***,所述控制器进一步用于:
获取用于调用目标智能合约的调用交易并打包成目标块;
将所述目标块在所述区块链上完成共识;
调用所述执行器的执行服务,引用完成共识的所述目标块。
8.根据权利要求6所述的***,所述目标容器中运行的目标智能合约响应于所述调用交易,通过读写所述目标运行时中的数据缓存的方式完成相关业务,包括:
所述目标容器中运行的目标智能合约响应于所述调用交易,向所述目标数据流中发送数据获取请求,以使对接到所述目标数据流的目标运行时从数据缓存中查找、并通过所述目标数据流向所述目标智能合约反馈所述数据获取请求指示的业务数据;以及,
向所述目标数据流中发送数据写入请求,以使对接到所述目标数据流的目标运行时向所述数据缓存中写入所述数据写入请求指示的业务数据。
9.根据权利要求8所述的***,所述数据缓存包括对接到levelDB的KV存储的数据缓存和/或对接到CouchDB的文档型存储的数据缓存;
所述执行器还用于,在所述数据缓存中无法查找到所述数据获取请求指示的业务数据的情况下,从所述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中,查找所述数据获取请求指示的业务数据;
所述执行器还用于,在向所述数据缓存中写入所述数据写入请求指示的业务数据之后,向所述数据缓存对接到的levelDB的KV存储、和/或对接到的CouchDB的文档型存储中写入所述数据写入请求指示的业务数据。
10.根据权利要求6所述的***,所述第二类智能合约包括Chaincode智能合约;所述目标数据流包括目标双向gRPC数据流;
所述通过所述目标数据流与所述执行器通信,包括:
所述执行器基于所述调用交易携带的信息构建ChaincodeMessage,并将所述ChaincodeMessage发送至所述目标双向gRPC数据流;其中,所述调用交易携带的信息至少包括Chaincode名称、相关方法名称、调用参数;
目标容器从所述目标双向gRPC数据流中,获取所述ChaincodeMessage。
11.一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现权利要求1~5任一所述的方法。
12.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1~5任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111657375.1A CN114358936A (zh) | 2021-12-31 | 2021-12-31 | 一种基于微服务区块链的智能合约运行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111657375.1A CN114358936A (zh) | 2021-12-31 | 2021-12-31 | 一种基于微服务区块链的智能合约运行方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114358936A true CN114358936A (zh) | 2022-04-15 |
Family
ID=81105012
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111657375.1A Pending CN114358936A (zh) | 2021-12-31 | 2021-12-31 | 一种基于微服务区块链的智能合约运行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114358936A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024066749A1 (zh) * | 2022-09-26 | 2024-04-04 | 腾讯科技(深圳)有限公司 | 区块链的交易执行方法、装置、程序产品、设备和介质 |
-
2021
- 2021-12-31 CN CN202111657375.1A patent/CN114358936A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024066749A1 (zh) * | 2022-09-26 | 2024-04-04 | 腾讯科技(深圳)有限公司 | 区块链的交易执行方法、装置、程序产品、设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110046023B (zh) | 一种基于区块链智能合约的数据处理方法及*** | |
US10684868B2 (en) | Configuration for application using microservices | |
CN112162753B (zh) | 软件部署方法、装置、计算机设备和存储介质 | |
CN109933404B (zh) | 一种基于区块链智能合约的编解码方法及*** | |
CN110009321B (zh) | 一种基于区块链智能合约的转账方法及*** | |
CN109062563B (zh) | 用于生成页面的方法和装置 | |
CN107885540A (zh) | 一种加载应用程序静态资源的方法、装置及终端 | |
CN111399840B (zh) | 一种模块开发方法及装置 | |
CN109445841B (zh) | 接口文档管理方法、装置、服务器及存储介质 | |
CN110007980A (zh) | 多业务服务端的实现方法和装置 | |
CN111262897B (zh) | 服务调用路由处理方法、装置及*** | |
CN110046991B (zh) | 一种基于区块链智能合约的数据处理方法及*** | |
CN107205015A (zh) | 开放接口的实现方法和装置 | |
US11893367B2 (en) | Source code conversion from application program interface to policy document | |
CN108334784A (zh) | 一种漏洞扫描方法和装置 | |
US20120159515A1 (en) | Sharing object representations | |
CN114358936A (zh) | 一种基于微服务区块链的智能合约运行方法 | |
CN110046052A (zh) | 一种服务调用方法及装置 | |
US12001395B2 (en) | Request handling in a multi-protocol cloud environment | |
CN111324395A (zh) | 调用方法、装置和计算机可读存储介质 | |
CN115983997A (zh) | 基于区块链的藏品管理方法、区块链节点和*** | |
CN113867776A (zh) | 中台应用的发布方法、装置、电子设备和存储介质 | |
CN108920277B (zh) | 业务执行***、方法及装置、业务隔离*** | |
CN110704295B (zh) | 一种数据调用方法、装置、设备及*** | |
CN110191141B (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Room 2339, 2nd Floor, No. 92, Huancheng North Road, Gongshu District, Hangzhou City, Zhejiang Province 310005 Applicant after: Hangzhou Xita Technology Co.,Ltd. Address before: 310007 room 2001 and 2010, 20 / F, tower a, Huaxing Times Square, No. 478, Wensan Road, Xihu District, Hangzhou, Zhejiang Applicant before: Hangzhou Xita Technology Co.,Ltd. |