发明内容
本文的各种实施例包括但不限于用于实现基于区块链的私有交易的系统、方法和非瞬态计算机可读介质。
根据一些实施例,由参与私有交易的第一区块链节点执行的计算机实现的用于实现基于区块链的私有交易的方法,该方法包括:根据公有区块链中的区块链合约确定参与所述私有交易的一个或多个第二区块链节点;向所述一个或多个第二区块链节点传输交易信息,所述交易信息包括所述私有交易的一个或多个发送方、所述私有交易的一个或多个接收方、以及所述私有交易的一个或多个交易金额;获得来自一定数量的所述第二区块链节点中每个节点的、证明接收所述交易信息的签名;响应于获得超过阈值的所述一定数量的签名,至少将所述私有交易的表示和签名存储在公有区块链中。
根据其他实施例,所述区块链合约包括参与所述私有交易的第一区块链节点和第二区块链节点中每一个的地址;根据所述公有区块链中的区块链合约确定参与所述私有交易的一个或多个第二区块链节点,包括:根据参与所述私有交易的所述一个或多个第二区块链节点中每个节点的地址确定参与所述私有交易的所述一个或多个第二区块链节点。
根据其他实施例,第一区块链节点和第二区块链节点的地址分别包括以下中的至少一个:互联网协议(IP)地址或通信端口号。
根据其他实施例,所述区块链合约还包括与参与私有交易的第一区块链节点和第二区块链节点中每一个相关联的公钥;并且向所述一个或多个第二区块链节点传输交易信息,包括:对于所述一个或多个第二区块链节点,分别用相应的公钥对所述交易信息进行加密;根据所述一个或多个第二区块链节点中每个节点的地址,向所述一个或多个第二区块链节点分别传输加密的交易信息。
根据一些实施例,所述区块链合约还包括包含参与私有交易的第一区块链节点和第二区块链节点中每一个的组的标识,用于向第一区块链节点和第二区块链节点分别通知参与私有交易。
根据其他实施例,来自所述一定数量的所述第二区块链节点中每个节点的、证明接收所述交易信息的签名,包括:用与所述一定数量的所述第二区块链节点中每个节点相关联的私钥进行加密的交易信息的哈希值。
根据一些实施例,至少将私有交易的表示和签名存储在公有区块链中,包括:向公有区块链的一个或多个区块链节点传输包括私有交易的交易哈希和签名的第三区块链交易,以用于打包到公有区块链中,其中所述交易哈希至少是交易信息的哈希值。
根据其他实施例,响应于获得超过阈值的所述一定数量的签名,至少将私有交易的表示和签名存储在公有区块链中,包括:响应于获得参与私有交易的所有第二区块链节点中每个节点的签名,以至少将私有交易的表示和签名存储在公有区块链中。
根据其他实施例,所述方法还包括:在本地执行私有交易。
根据其他实施例,所述方法还包括:从一个或多个第二区块链节点中已验证一定数量的签名并且尚未接收交易信息的一个第二区块链节点获得用于交易信息的请求;以及向所述一个第二区块链节点传输交易信息,以使所述一个第二区块链节点本地执行私有交易。
根据一些实施例,在根据公有区块链中的区块链合约确定参与私有交易的一个或多个第二区块链节点之前,所述方法还包括:将区块链节点信息存储在公有区块链中,所述区块链节点信息包括与参与私有交易的第一区块链节点和第二区块链节点中每一个相关联的公钥以及第一区块链节点和第二区块链节点中每个的地址。
根据其他实施例,将区块链节点信息存储在公有区块链中,包括:向公有区块链的一个或多个区块链节点传输包括区块链合约的第一区块链交易,以在公有区块链中部署区块链合约;向公有区块链的一个或多个区块链节点传输一个或多个第二区块链交易,以调用部署的区块链合约,进而将区块链节点信息存储在部署的区块链合约中。
根据又一些实施例,部署的区块链合约被配置为在将区块链节点信息存储在部署的区块链合约中之后,禁止对参与私有交易的第一区块链节点和第二区块链节点中每个的更改。
根据其他实施例,一种用于实现基于区块链的私有交易的系统,包括:一个或多个处理器;和耦接到所述一个或多个处理器并且其上存储有指令的一个或多个计算机可读存储器,所述指令能由所述一个或多个处理器执行以执行任何前述实施例的方法。
根据一些实施例,用于实现基于区块链的私有交易的装置,包括用于执行前述实施例中的任一的方法的多个模块。
根据一些实施例,一种非瞬态算机可读介质,所述计算机可读介质中存储有指令,当所述指令由设备的处理器执行时,所述指令使所述设备执行前述实施例中任一项的方法。
根据其他实施例,用于实现基于区块链的私有交易的系统,包括:一个或多个处理器和一个或多个非瞬态计算机可读存储器,所述非瞬态计算机可读存储器耦接至所述一个或多个处理器并配置有可由所述一个或多个处理器执行的指令,以促使所述系统执行操作。所述系统可以与参与私有交易的第一区块链节点相关联。所述操作可以包括:根据公有区块链中的区块链合约,确定私有交易的一个或多个第二区块链节点;以及向所述一个或多个第二区块链节点传输交易信息,所述交易信息包括所述私有交易的一个或多个发送方、所述私有交易的一个或多个接收方以及所述私有交易的一个或多个交易金额;获得来自一定数量的所述第二区块链节点中每个节点的、证明接收所述交易信息的签名;响应于获得超过阈值的所述一定数量的签名,至少将私有交易的表示和签名存储在公有区块链中。
根据又一实施例,用于实现基于区块链的私有交易的非瞬态计算机可读存储介质,所述存储介质配置有可由一个或多个处理器执行以促使一个或多个处理器执行操作的指令。所述存储介质可以与参与私有交易的第一区块链节点相关联。所述操作可以包括:根据公有区块链中的区块链合约,确定私有交易的一个或多个第二区块链节点;以及向所述一个或多个第二区块链节点传输交易信息,所述交易信息包括所述私有交易的一个或多个发送方、所述私有交易的一个或多个接收方以及所述私有交易的一个或多个交易金额;获得来自一定数量的所述第二区块链节点中每个节点的、证明接收所述交易信息的签名;响应于获得超过阈值的所述一定数量的签名,至少将私有交易的表示和签名存储在公有区块链中。
根据其他实施例,用于实现基于区块链的私有交易的装置,其可以与参与私有交易的第一区块链节点相关联,并且可以包括:确定模块,用于根据公有区块链中的区块链合约确定参与私有交易的一个或多个第二区块链节点;传输模块,用于向所述一个或多个第二区块链节点传输交易信息,所述交易信息包括所述私有交易的一个或多个发送方、所述私有交易的一个或多个接收方以及所述私有交易的一个或多个交易金额;获得模块,用于获得来自一定数量的所述第二区块链节点中每个节点的、证明接收交易信息的签名;存储模块,用于响应于获得超过阈值的所述一定数量的签名,至少将私有交易的表示和签名存储在公有区块链中。
本文中公开的实施例具有一个或多个技术效果。在一些实施例中,私有交易的表示被记录到公有区块链以确保公开通知和识别该私有交易的发生,同时该私有交易的交易信息被保持在该公有区块链外以提供隐私保护。在一个实施例中,私有交易的交易信息(例如,发送方、接收方和交易金额)在参与私有交易的各方或其区块链节点之间传输并且可被其访问,并远离不参与私有交易的各方或其区块链节点。在另一个实施例中,可以通过公有区块链的节点验证私有交易的有效性。可以防止双花和其他欺诈行为。在又一个实施例中,进行私有交易的所有方的区块链节点都被通知并因此被同步到相同状态。在又一个实施例中,提供了一种用于方便且安全地创建和管理这种私有交易的方法。在其他实施例中,需要收集大于私有交易参与方的区块链节点的阈值百分比的收据(例如,就签名而言)并将其存储到公有区块链,以防止由参与私有交易的发起方的恶意行为。在其他实施例中,根据组分配,参与私有交易的各方可以识别参与私有交易的其他各方,获取其公钥以验证其签名,并且当私有交易的交易哈希被打包到公有区块链中时被通知发生私有交易。因此,改善了私有交易的安全性和隐私保护。
参考附图考虑以下描述和所附权利要求,本文公开的系统、方法和非瞬态计算机可读介质的这些和其他特征,以及操作方法和相关结构元件的功能以及部件的组合和制造经济性将变得更加明显。所有这些附图形成本说明书的一部分,其中相同的附图标记表示各附图中的相应部分。然而,应该清楚地理解,附图仅用于说明和描述的目的,而不是限制性的。
具体实施方式
图1示出了根据一些实施例的区块链网络100的示例。如图所示,区块链网络100可以包括耦接到区块链系统112的一个或多个客户端设备(例如,节点A、节点B等)。客户端设备可以包括轻节点。轻节点可以不下载完整的区块链,而是可以只下载区块头以验证区块链交易的真实性。轻节点可以由全节点(例如,区块链系统112中的节点)服务并有效地依赖于该全节点,以访问区块链的更多功能。通过安装适当的软件,可以在诸如膝上型计算机、移动电话等的电子设备中实现轻节点。
区块链系统112可以包括多个区块链节点(例如,节点1、节点2、节点3、节点4、节点i等),这些节点可以包括全节点。全节点可以下载每个区块和区块链交易,并根据区块链的共识规则检查它们。所述区块链节点可以形成网络(例如,点对点网络,peer-to-peernetwork),其中一个区块链节点与另一区块链节点通信。所示的区块链节点的顺序和数量仅仅是示例性的并且是为了简化说明。区块链节点可以在服务器、计算机等中实现。例如,区块链节点可以在服务器的集群中实现。服务器的集群可以使用负载平衡。每个区块链节点可以对应于经由诸如TCP/IP的各种类型的通信方法耦接在一起的一个或多个物理硬件设备或虚拟设备。根据分类,区块链节点也可以称为全节点、Geth节点、共识节点等。
客户端设备和区块链节点中的每个可以安装有适当的软件(例如,应用程序接口)和/或硬件(例如,有线连接、无线连接)以访问区块链网络100的其他设备。通常,客户端设备和区块链节点能够通过可以通信数据的一个或多个有线网络或无线网络(例如,因特网)彼此通信。客户端设备和区块链节点中的每个可以包括一个或多个处理器以及耦接到一个或多个处理器的一个或多个存储器。所述存储器可以是非瞬态的且计算机可读的,并且配置有可由一个或多个处理器执行的指令,以促使一个或多个处理器执行本文所述的操作。所述指令可以被存储在存储器中,或者可以通过通信网络下载,而不必被存储在存储器中。尽管在该图中客户端设备和区块链节点被示为单独的组件,但是应当理解,可以将这些系统和设备实现为单个设备或耦接在一起的多个设备。即,客户端设备(例如,节点A)可以可选择地集成到区块链节点(例如,节点1)中。
诸如节点A和节点B之类的客户端设备可以安装有适当的区块链软件,以启动、转发或访问区块链交易。节点A可以通过与节点1或一个或多个其他区块链节点的通信来访问区块链,节点B可以通过与节点2或一个或多个其他区块链节点的通信来访问区块链。在区块链之外,节点A和节点B可以具有其他通信信道(例如,不经过节点1和节点2的常规因特网通信)。在一些实施例中,节点A可以通过节点1或类似节点向区块链提交区块链交易,以请求将区块链交易添加到区块链。
在一个实施例中,所提交的区块链交易可以包括各方之间的金融交易。在另一个实施例中,所提交的区块链交易可以包括更新该数据存储的数据更新事件。例如,所提交的区块链交易可以包括用于部署在区块链上的区块链合约(例如,智能合约)。对于另一个示例,所提交的区块链交易可以包括用于调用所部署的区块链合约的请求。在本文中,术语“区块链交易”可以通过区块链系统实施并被记录到区块链中。所述区块链交易可以包括,例如,金融交易、用于部署或调用区块链合约的区块链合约交易、更新区块链状态(例如,世界状态)的区块链交易等。所述区块链交易不必涉及金融兑换。金融交易可以是基于区块链的,并且可以是私有交易或公开交易。因此,私有交易、公开交易和相关术语(例如交易金额、交易信息等)可以指相应的金融交易。
所述区块链合约可包括以代码行编写的用户之间的合约条款。区块链合约可以是一种计算机协议,其旨在以数字方式促进、验证或施行合约的谈判或履行。在一些实施例中,为了处理区块链合约,所述区块链网络的每个节点运行相应的虚拟机(VM)并执行相同的指令。VM是基于计算机架构的对计算机系统的软件仿真,并提供物理计算机的功能。可以将区块链背景下的VM理解为被设计为作为区块链合约的运行时环境的系统。
区块链可以由区块链节点维护,所述区块链节点各自包括存储器或耦接到存储器。在一些实施例中,存储器可以存储池数据库。所述池数据库可以被分布式方式的多个区块链节点访问。例如,所述池数据库可以分别存储在区块链节点的存储器中。池数据库可以存储由与节点A类似的一个或多个客户端设备提交的多个区块链交易。
在一些实施例中,在接收到未确认的区块链交易的区块链交易请求之后,接收方区块链节点可以对区块链交易执行一些初步验证。例如,节点1可以在从节点A接收区块链交易之后执行初步验证。一旦被验证,所述区块链交易可以被存储在接收方区块链节点(例如,节点1)的池数据库中,该接收方区块链节点也可以将所述区块链交易转发到一个或者多个其他区块链节点(例如,节点3、节点4)。一个或多个其他区块链节点可以重复由接收方节点完成的过程。
一旦对应池数据库中的区块链交易达到某个级别(例如,阈值量),区块链节点就可以各自根据共识规则或其他规则来验证对应池数据库中的一批区块链交易。如果区块链交易涉及区块链合约(例如,智能合约),则区块链节点可以在本地执行区块链合约。区块链合约可以包括用户编写的合约代码。例如,区块链交易可以将数据编码为合约代码,用于数据存储(通过合约部署)和检索(通过访问或执行合约)。
根据共识规则成功验证该批的区块链交易的特定区块链节点可以将区块链交易打包到其区块链的本地副本,并将结果多播到其他区块链节点。该特定区块链节点可以是首先成功完成验证的区块链节点、已获得验证权限的区块链节点、或者已经基于另一共识规则确定的区块链节点等。然后,其他区块链节点可以在本地执行区块链交易,彼此验证执行结果(例如,通过执行哈希计算),并将其区块链的副本与该特定区块链节点的副本同步。通过更新区块链的本地副本,其他区块链节点可以类似地将区块链交易中的这种信息写入各自的本地存储器中。这样,区块链合约可以被部署在区块链上。如果验证在某些点失败,则拒绝区块链交易。
所部署的区块链合约可以具有地址,根据该地址可以访问所部署的合约。区块链节点可以通过向区块链合约输入某些参数来调用所部署的区块链合约。在一个实施例中,节点B可以请求调用所部署的区块链合约以执行各种操作。例如,可以检索存储在所部署的区块链合约中的数据。又例如,可以将数据添加到所部署的区块链合约中。又例如,可以执行在所部署的区块链合约中指定的金融交易。尽管如此,其他类型的区块链系统和相关的共识规则可以应用于所公开的区块链系统。
在一些实施例中,区块链系统112包括维护公有区块链的区块链节点。在一个实施例中,提交给区块链系统112以添加到公有区块链中的公开交易对于所有区块链节点都是可见的,以进行验证和执行。在另一个实施例中,私有交易可以仅涉及代表参与私有交易的各方的多个区块链节点。对于这样的私有交易,尽管私有交易的表示仍可以像公开交易一样被提交以添加到公有区块链,但是私有交易的交易信息可以远离非参与方及其区块链节点。在这种情况下,可以在有限数量的区块链节点(例如,参与私有交易的各方的区块链节点)之间传输私有交易的交易信息。也就是说,与公开交易不同,私有交易可以保留交易各方已知的交易信息(例如,发送方、接收方和交易信息)的至少一部分,以便在不向非参与方广播的情况下各方的相应区块链节点进行验证和执行。对于所有区块链节点可见的公有区块链可以记录私有交易的证明,例如私有交易的交易哈希和交易信息的加密,但是没有明确地存储交易信息的至少一部分。交易哈希是哈希值,可以是将哈希算法应用于交易数据(例如交易信息)的数值结果。例如,节点1和节点2之间的私有交易的交易哈希可以被记录到公有区块链中,并且对节点1、节点2、节点3、节点4等可见,而私有交易的交易信息可以仅对节点1和节点2是已知的。为此,节点1和节点2可以在区块链之外进行通信并且将私有交易的交易信息保持私有,或者在区块链上进行通信,但是仅允许对某些节点可见(例如,通过公钥-私钥加密)。
图2示出了根据一些实施例的用于实现区块链合约的框架。下文中关于图2的描述将针对在公有区块链上部署和调用可公开访问的区块链合约。例如,需要公开验证并基于共识存储的信息(例如,关于私有交易的各方、私有交易的交易哈希)可以被包括在区块链合约中以存储在公有区块链中。
在一些实施例中,区块链合约可以从其在源代码中的构建开始。例如,用户A可以将区块链合约编程为源代码,并将源代码输入到用户端应用211的接口。在该图中,用户端应用211被安装在节点A中。为了部署区块链合约,节点A可以使用相应的编译器编译区块链合约源代码,该编译器将源代码转换成字节码。在接收字节码之后,用户端应用可以生成包括该字节码的区块链交易A,并将区块链交易A提交给一个或多个区块链节点。例如,区块链交易A可以包括以下信息:诸如随机数(nonce)(例如,交易序列号)、from(例如,用户A的账号的地址)、to(例如,如果部署区块链合约,则为空)、GasLimit(例如,为交易所消费的交易费用上限)、GasPrice(例如,由发送方提供的交易费用)、value(例如,交易金额)、data(例如,字节码)等。节点A可以用各种加密方法对区块链交易A进行签名以代表节点A的背书。节点A可以通过远程过程调用(RPC)接口213向区块链节点(例如,节点1)发送区块链交易A。RPC是一种协议,第一程序(例如,用户端应用)可以使用该协议从位于网络中的另一台计算机(例如,区块链节点)的第二程序请求服务,而无需了解网络的详细信息。当第一程序使过程在不同地址空间(例如在节点1)中执行时,就好像是正常(本地)过程调用,而无需程序员明确地编码远程交互的细节。
如先前所述,在接收区块链交易A时,节点1可以验证区块链交易A是否有效。例如,可以验证节点A的签名和其他格式。如果验证成功,则节点1可以向包括各种其他区块链节点的区块链网络广播区块链交易A。一些区块链节点可以参与区块链交易的挖掘过程。特定节点可以挑选区块链交易A进行共识验证,以打包到新区块中。该特定节点可以为区块链合约创建与合约账号地址相关的合约账号。该特定节点可以触发其本地VM执行区块链合约,从而将区块链合约部署到其区块链的本地副本,并更新区块链中的账号状态。如果该特定节点成功挖掘新区块,则该特定节点可以将新区块广播到其他区块链节点。其他区块链节点可以验证由该特定区块链节点挖掘的新区块。如果达成共识,则将区块链交易A分别打包到由区块链节点维护的区块链本地副本中。所述区块链节点可以类似地触发其本地VM(例如,本地VM 1、本地VM i、本地VM 2)执行区块链合约,从而调用部署在区块链的本地副本(例如,本地区块链副本1、本地区块链副本i、本地区块链副本2)的区块链合约,并进行相应的更新。每个区块链节点的硬件机器可以访问一个或多个虚拟机,这些虚拟机可以是相应区块链节点的一部分或耦接到相应区块链节点。每次,可以触发相应本地VM执行区块链交易A中的区块链合约。同样,新区块中的所有其他区块链交易也将被执行。轻节点也可以同步至更新的区块链。
当区块链节点想要对所部署的区块链合约执行操作(例如,添加数据、接受要约)时,区块链节点可能需要调用区块链合约。在一些实施例中,用户B可以对指令进行编程以调用源代码中的区块链合约,并将源代码输入到用户端应用221的接口。为了调用区块链合约,节点B可以使用相应的编译器编译指令,该编译器将源代码转换为字节码。在接收字节码之后,用户端应用可以生成包括该字节码的区块链交易B,并将区块链交易B提交给一个或多个区块链节点。相似地,区块链交易B可以包括以下信息:诸如随机数(nonce)(例如,交易序列号)、from(例如,用户B的账号的地址)、to(例如,部署的区块链合约的地址)、GasLimit(例如,为交易所消费的交易费用上限)、GasPrice(例如,由发送方提供的交易费用)、value(例如,交易金额)、data(例如,字节码)等。节点B可以用各种加密方法对区块链交易B进行签名以代表节点B的背书。节点B可以通过远程过程调用(RPC)接口223将区块链交易B发送到区块链节点(例如,节点2)。
在接收区块链交易B时,节点2可以验证区块链交易B是否有效。例如,可以验证节点B的签名和其他格式。如果验证成功,则节点2可以向包括各种其他区块链节点的区块链网络广播区块链交易B。特定节点可以挑选由节点B发送的区块链交易B进行共识验证,以打包到新的区块中。该特定节点可以触发其本地VM执行区块链合约,从而调用部署在其区块链的本地副本上的区块链合约,并更新区块链中的账号状态。如果该特定节点成功挖掘新区块,则该特定节点可以将新区块广播到其他区块链节点。其他区块链节点可以验证由该特定区块链节点挖掘的新区块。如果达成共识,则将区块链交易B分别打包到由区块链节点维护的区块链本地副本中。所述区块链节点可以类似地触发其本地VM执行区块链合约,从而调用部署在区块链的本地副本上的区块链合约,并进行相应的更新。每个区块链节点的硬件机器可以访问一个或多个虚拟机,这些虚拟机可以是相应区块链节点的一部分或耦接至相应区块链节点。每次,可以触发相应的本地VM执行区块链交易B中的区块链合约。同样,新区块中的所有其他区块链交易也将被执行。轻节点也可以同步至更新的区块链。
图3和图4示出了根据一些实施例的用于实现基于区块链的交易的方法的流程图。以下呈现的方法的操作旨在进行说明。取决于实施方式,该方法可以包括以各种顺序执行或并行执行的附加、更少或替代步骤。
首先介绍与该方法相关的并且在图3和图4的顶部方框中示出的各种实体。在一些实施例中,私有交易可以涉及多个参与方。私有交易的每一方可以具有一个或多个相应区块链节点以实施私有交易。例如,一方可以将付款转移给一个或多个其他方。参与方可以是但不限于个人、实体、账号等。私有交易可以涉及一个或多个提议方节点和一个或多个成员节点。提议方节点和成员节点可以是区块链节点。
提议方节点可以代表第一区块链节点。第一区块链节点可以属于第一方(私有交易第一方)。第一方是知道交易信息的一方,所述交易信息可以包括发送方(例如,发送方的账号地址)、接收方(例如,接收方的账号地址)和交易金额的信息。第一方可以是发起私有交易的一方,也可以是参与私有交易的发送方或接收方等。私有交易可能需要向非参与方隐藏交易信息中的一个或多个元素。第一方可以使用可从设备(例如,移动电话、计算机)访问的账号来订购私有交易。该设备可构成轻节点或全节点。
成员节点可以代表第二区块链节点。第二区块链节点可以属于第二方(私有交易第二方)。所示的第二方可以代表参与私有交易的除第一方以外的部分或全部参与方。
图3和图4中示出的顶部方框中的“公有区块链的区块链节点”可以指维护公有区块链的区块链节点。所有区块链节点均可访问公有区块链以验证和访问所存储的信息,例如执行所记录的交易或区块链合约。所述提议方节点和成员节点可以是可访问公有区块链并参与私有交易的此类的公有区块链的区块链节点,而其他区块链节点虽然可以访问公有区块链,但是不参与私有交易。
管理员可以代表负责通过本文所述的区块链合约创建一组参与方(例如,第一方和第二方)的指定角色。任何人(例如,上述用户或其他用户)都可以成为管理员。在创建所述组之后,与各方相关联的提议方节点和成员节点可以进行私有交易。管理员可以使用可从设备(例如,计算机)访问的账号来订购区块链合约的部署和调用。该设备可以构成轻节点或全节点。
参考图3,在关于区块链合约部署的一些实施例中,在步骤311,管理员(例如,节点A)可以向提议方节点(例如,节点1)传输用于部署区块链合约的第一交易。所述区块链合约可以用于存储(1)包含参与私有交易的第一区块链节点和第二区块链节点(与相应方相关联)中每个的组的标识,(2)组成员的公钥,和/或(3)组成员的地址(例如,IP地址和端口号)。在步骤312,提议方节点可以在公有区块链网络中广播第一交易,以将区块链合约部署在公有区块链中。在步骤313,通过共识验证,公有区块链的区块链节点成功地部署区块链合约,例如,在为公有区块链创建新区块时。共识验证的细节可以参考以上描述的图1和图2。在步骤314,管理员接收成功部署的收据。
在关于区块链合约调用的一些实施例中,在步骤315,管理员可以向提议方节点传输用于调用所部署的区块链合约的一个或多个第二交易。第二交易可以用于向所部署的区块链合约添加数据(例如,包括参与私有交易的提议方节点或成员节点(与相应方相关联)中每个的组的标识、组成员的公钥、和/或组成员的地址)。每个第二交易可以添加与参与私有交易(与相应方相关联)的提议方节点和成员节点有关的信息。因此,在组之间进行并存储到公有区块链的私有交易可以显示该组的相应标识(参阅下面的步骤324、325a和325b),以便组成员(例如,与参与私有交易的各方相关联的提议方节点和成员节点)将被通知以获得私有交易的交易信息并执行私有交易。公钥和地址将是公开可得的,以促进参与私有交易的提议方节点和成员节点之间的通信,如下所述。在步骤316,提议方节点可以在公有区块链网络中广播第二交易中的每一个,以调用公有区块链中的区块链合约以添加数据。在步骤317,通过共识验证,公有区块链的区块链节点成功地将数据添加到所部署的区块链合约中,例如,通过向公有区块链创建新区块。区块链合约调用的细节可以参考以上描述的图1和图2。在步骤318,管理员接收成功添加的收据。
在一些实施例中,区块链合约可以被配置为防止对添加到所部署的区块链合约中的数据进行改变。例如,只允许管理员添加数据,禁止其他账号更改区块链合约。由于公有区块链中的所有区块链节点都可以访问公有区块链中的新区块,因此管理员会受到区块链节点的有效监视,这可以阻止管理员进行恶意行为。如果管理员延迟区块链合约的部署或调用,则可以更换管理员。步骤311至318可以被称为引导过程。
参考图4,尽管该图示出了提议方节点发起私有交易,但是私有交易可以由参与私有交易的任何区块链节点发起。在一些实施例中,在步骤321,用户可以向提议方节点发送要由组成员进行的私有交易(例如,交易信息)。在一个实施例中,由提议方节点接收的私有交易可以包括用于执行私有交易的组的标识。在另一个实施例中,所述提议方节点可以从多个组中识别用于执行私有交易的组,所述多个组的组标识可从区块链获得。要由特定组执行的私有交易对其他组的成员(重叠成员除外)是保密的。所述提议方节点可以选择包括参与私有交易的发送方和/或接收方的组以执行私有交易。在一个示例中,所述提议方节点参与三个不同的组:包括其自身以及节点M和N的组1,包括其自身以及节点M、N和P的组2,包括其自身以及节点M和P的组3。对于提议方节点与节点M和N之间的私有交易,如果提议方节点希望最大程度地减少参与者的数量,则可以选择组1;如果其不介意节点P知道私有交易或需要节点P作为验证方(如下所述),则可以选择组2。所述提议方节点可以不选择组3,因为组3不包含节点N。如果根据区块链没有合适的组可用,则所述提议方节点可以如上所述创建用于执行私有交易的组。
在步骤322,所述提议方节点可以根据公有区块链中的区块链合约确定参与私有交易的一个或多个成员节点,并向该一个或多个成员节点传输交易信息。例如,所述提议方节点可以从区块链合约中获得成员节点的地址以传输交易信息。所述交易信息可以包括私有交易的一个或多个发送方、私有交易的一个或多个接收方、私有交易的一个或多个相应的交易金额、以及可选地私有交易的一个或多个验证方。验证方可以是也可以不是发送方或接收方之一。例如,所述交易信息可以包括发送方A发送$5,发送方B发送$4,接收方C接收$1,接收方D接收$9,以及验证方E在不发送或接收任何钱的情况下验证该交易。又例如,所述交易信息可以包括发送方A发送$5,发送方B发送$4,接收方C接收$1,以及接收方D接收$9,并且A、B、C和D也是验证方。又例如,所述交易信息可以包括发送方A向接收方B、C和D分别发送$2。
在接收交易信息时,每个成员节点(例如,验证方,其可以是也可以不是发送方或接收方)可以验证交易信息是否正确。成员节点可以计算交易信息的表示(例如,哈希值)。所述哈希值可以被称为交易哈希。附加地且可选地,所述交易信息还可以包括提议方节点已知的交易哈希,从而成员节点可以将自身计算的哈希值与提议方节点已知的交易哈希进行比较以进行验证。无论哪种方式,如果交易信息已被验证,则成员节点可以对交易哈希进行签名(例如,通过使用其私钥对交易哈希进行加密),并将签名(例如,使用其私钥加密的交易哈希)传输给提议方节点。所述签名表示成员节点确认交易信息。所述提议方节点还使用自己的签名对交易哈希进行签名,以确认交易信息。在步骤323,所述提议方节点可以尝试从多个成员节点分别获得证明接收交易信息的签名。所述提议方节点可以从所有成员节点或从某些成员节点分别获得签名。
在步骤324,所述提议方节点可以响应于获得超过阈值的所述一定数量的签名,至少将私有交易的表示、签名以及包括参与私有交易的每个区块链节点的组的标识存储在公有区块链中。所述阈值可以是预先配置的值,例如50%或所有的参与区块链节点。可以增加阈值,以通过要求私有交易的更多参与区块链节点确认交易信息来提高安全级别。在一个实施例中,所述提议方节点可以广播第三交易,所述第三交易包括私有交易的交易哈希和公有区块链网络中的签名,以打包到公有区块链中。例如,所述提议方节点可以将交易哈希和签名联系起来以添加到第三交易中。在一个实施例中,直到满足阈值条件,才可以将私有交易打包到公有区块链中。在步骤325a和步骤325b,通过共识验证,公有区块链的区块链节点可以将私有交易打包到公开交易的新区块中。作为公有区块链的区块链节点的一部分,所述提议方节点和成员节点也可以看到新区块。在步骤326,用户接收用于成功执行私有交易的收据。
在一些实施例中,通过周期性地同步到公有区块链,所述提议方节点和成员节点可以知道公有区块链中存储的私有交易(由其交易哈希表示)。所述提议方节点和成员节点可以获得与交易哈希相关联的组标识,并意识到这是它们所属的组,因此私有交易可能涉及其自身。因此,所述提议方节点和成员节点可以验证被打包在公有区块链中的私有交易。例如,签名的数量可能必须满足阈值条件。如果验证成功,则提议方节点可以根据交易信息本地执行私有交易。如果验证成功,则成员节点可以检查是否已经接收交易信息。如果已接收,则成员节点可以根据交易信息本地执行私有交易。在一个示例中,所述提议方节点或成员节点的本地数据库可以根据交易信息更新账号信息以执行私有交易。本地数据库可以是对公众保密的。如果没有接收,则成员节点可以向提议方节点传输用于交易信息的请求,以便提议方节点可以向成员节点传输交易信息,以使成员节点本地执行私有交易。
图5示出了根据本说明书的一些实施例的用于实现基于区块链的私有交易的示例性方法510的流程图。方法510可以由图1的系统112的一个或多个组件(例如,上述的节点1、节点2、…或节点i或类似设备,或任何节点与一个或多个附加设备(例如节点A)的组合)实施。方法510可以由包括各种硬件机器和/或软件的系统或设备(例如,计算机、服务器)实施。例如,所述系统或设备可以包括一个或多个处理器和一个或多个非瞬态计算机可读存储介质(例如,一个或多个存储器),所述存储介质耦接到一个或多个处理器并配置有可由一个或多个处理器执行的指令,以促使系统或设备(例如,处理器)执行方法510。以下呈现的方法510的操作旨在是说明性的。取决于实施方式,方法510可以包括以各种顺序执行或并行执行的附加、更少或替代步骤。方法510的更多细节可以参考图1至图4以及以上相关描述。
在一些实施例中,方法510由参与私有交易的第一区块链节点(例如,第一方的区块链节点)执行。第一区块链节点可以对应于上述的提议方节点。第一方可以是发起交易的一方、交易的发送方或接收方等。私有交易还涉及一个或多个第二区块链节点(例如,第二方的区块链节点)。在一些实施例中,私有交易可以仅涉及第一区块链节点和第二区块链节点。当步骤被描述为由第一方或第二方执行时,本领域普通技术人员将理解,该步骤可以由与相应方相关联的区块链节点执行。所述第一方和第二方可以属于相同实体或不同实体。所述第一区块链节点和第二区块链节点可以属于同一方或不同方。在一些实施例中,参与方可以是参与(资产、通证等的)私有交易的发送方和/或接收方。也就是说,对于私有交易,一方可以向参与私有交易的另一方发送某些东西和/或从另一方接收某些东西。尽管如此,参与方可以是观察方,且不发送和/或接收来自私有交易的任何东西。
在一些实施例中,可以在框511中的步骤之前执行一些步骤,以将区块链合约部署在公有区块链中,并添加与参与私有交易的(与各方相关联)各种区块链节点有关的信息。在一实施例中,在根据公有区块链中的区块链合约确定参与私有交易的一个或多个第二区块链节点(框511)之前,所述方法还包括:将区块链节点信息存储在公有区块链中,所述区块链节点信息包括:与参与私有交易的第一区块链节点和第二区块链节点中每一个相关联的公钥(例如,每方的公钥)以及第一区块链节点和第二区块链节点中每个的地址(例如,每方的地址)。
在一些实施例中,将区块链节点信息存储在公有区块链中,包括:向公有区块链的一个或多个区块链节点传输包括区块链合约的第一区块链交易,以在公有区块链中部署区块链合约;向公有区块链的一个或多个区块链节点传输一个或多个第二区块链交易,以调用部署的区块链合约,进而将区块链节点信息存储在部署的区块链合约中。第二区块链节点可以对应于上述成员节点。在一个实施例中,所述部署的区块链合约被配置为,在将所述区块链节点信息存储在所述部署的区块链合约中之后,禁止对参与所述私有交易的第一区块链节点和第二区块链节点中每个的更改。例如,一旦将区块链节点信息存储到所部署的区块链合约中,参与私有交易的相应区块链节点(和相应方)就不能被更改。
框511包括根据公有区块链中的区块链合约确定参与私有交易的一个或多个第二区块链节点。在一个实施例中,所述区块链合约包括参与私有交易的第一区块链节点和第二区块链节点中每个的地址;并且根据所述公有区块链中的区块链合约来确定参与所述私有交易的一个或多个第二区块链节点(例如,私有交易其他方的区块链节点,如第二方的区块链节点),包括:根据参与私有交易的一个或多个第二区块链节点中每个节点的地址,确定参与私有交易的一个或多个第二区块链节点。例如,参与私有交易的每一方可以与区块链节点相关联,并且所述区块链节点的地址可以用于标识相应方。如上所述,参与私有交易的区块链节点或其关联的私有交易参与方可指,作为发送方或接收方直接参与私有交易的区块链节点或参与方,或仅作为验证方间接参与私有交易的区块链节点或参与方。所述验证方可以验证私有区块链。所述发送方可以是没有验证私有交易的发送方,或者可以是也验证私有交易的发送方-验证方。接收方可以是没有验证私有交易的接收方,或者可以是也验证私有交易的接收方-验证方。仅作为验证方间接参与私有交易的区块链节点或参与方可能不会同时是发送方或接收方。在一些实施例中,区块链合约包括参与私有交易的所有区块链节点中的每个节点的地址。在一个示例中,私有交易仅涉及第一区块链节点和一个或多个第二区块链节点。所述第一区块链节点可以向一个或多个第二区块链节点发起金融交易。
在一个实施例中,第一区块链节点和第二区块链节点中的每个的地址包括互联网协议(IP)地址和/或通信端口号。IP地址(例如192.168.1.1)是网络中系统的地址(例如,区块链网络中的相应区块链节点),端口号(例如8080)是系统中服务的地址(例如,区块链节点使用的区块链软件或协议)。因此,IP地址和端口号的组合可以定义特定系统中特定服务的地址。
在另一个实施例中,所述区块链合约还包括包含参与所述私有交易的所述第一区块链节点和第二区块链节点中每一个的组的标识,用于向所述第一区块链节点和第二区块链节点中每一个通知参与所述私有交易。例如,标识1234或“组X”可以被分配给参与一个或多个私有交易的一组区块链节点。通过部署区块链合约以及添加第一区块链节点和第二区块链节点的信息到区块链合约中,参与区块链节点将被通知获得交易信息并执行私有交易。因此,所述私有交易被保持为对没有参与私有交易的其他组保密。
框512包括向所述一个或多个第二区块链节点传输交易信息,所述交易信息包括所述私有交易的一个或多个发送方、所述私有交易的一个或多个接收方以及所述私有交易的一个或多个交易金额。在一些实施例中,所述区块链合约还包括与参与私有交易的第一区块链节点和第二区块链节点中每一个相关联的公钥(例如,第一方或第二方中每个的公钥);并且向所述一个或多个第二区块链节点传输交易信息,包括:对于所述一个或多个第二区块链节点中每一个,用相应的公钥对所述交易信息进行加密;根据所述一个或多个第二区块链节点中每个节点的地址,向所述一个或多个第二区块链节点分别传输加密的交易信息。通过使用接收方的公钥对交易信息进行加密,只要它将私钥保密,就只有接收方可以使用其私钥对该加密进行解密,。
在一些实施例中,交易信息包括私有交易的一个或多个发送方、私有交易的一个或多个接收方、私有交易的一个或多个交易金额、以及私有交易的一个或多个验证方,其中一个或多个验证方都不是发送方或接收方之一。如上所述,所述发送方和接收方也可以是验证方。可选地及附加地,一个或多个验证方可以被包括在组中以验证私有交易,但也不能充当发送方或接收方。
框513包括获得来自一定数量的第二区块链节点中每个节点的、证明接收交易信息的签名。可以从一些或所有第二区块链节点中每个节点获得签名。所述一定数量可以构成阈值数字或阈值百分数。所述签名可以证明接收交易信息。在一些实施例中,来自所述一定数量的所述第二区块链节点中每个节点的、证明接收交易信息的签名,包括:用与一个或多个第二区块链节点中每一个相关联的私钥(例如,一个或多个第二方中的每个的私钥)加密的交易信息的哈希值。为了进行验证,可以使用从所部署的区块链合约中获得的接收方的公钥对使用接收方的私钥的加密进行解密,以获得交易信息的哈希值。然后,可以将交易信息的哈希值与私有交易的交易哈希(如下所述)进行比较。如果比较产生一致结果,则签名有效。
框514包括响应于获得超过阈值的一定数量的所述签名,至少将所述私有交易的表示和所述签名存储在公有区块链中。阈值可以是预先配置的值,例如50%的参与方、80%的参与方或所有参与方。在其他实施例,响应于获得超过阈值的所述一定数量的签名,至少将私有交易的表示和签名存储在公有区块链中,包括:响应于获得参与私有交易的所有第二区块链节点(例如,所有第二方的区块链节点)中每个节点的签名,至少将私有交易的表示和签名存储在公有区块链中。
在一些实施例,至少将私有交易的表示和签名存储在公有区块链中,包括:向公有区块链的一个或多个区块链节点传输包括私有交易的交易哈希和签名的第三区块链交易,以用于打包到公有区块链中,其中所述交易哈希至少是交易信息的哈希值。第一区块链交易、第二区块链交易和第三区块链交易可以被传输到公有区块链的相同或不同的区块链节点。
在一些实施例中,所述方法还包括:本地执行私有交易。参与私有交易的其他区块链节点可以类似地尝试本地执行私有交易。如果尚未获得交易信息,则可以向第一区块链节点发送请求。在其他实施例,所述方法还包括:从已经验证签名的数量并且尚未接收交易信息的一个或多个第二区块链节点之一获得用于交易信息的请求;以及将交易信息传输至一个第二区块链节点,以使所述一个第二区块链节点本地执行私有交易。
图6示出了根据一些实施例的用于实现基于区块链的私有交易的系统610的框图。系统610(例如,计算机系统)可以是上述节点1、节点2、节点3、......或节点i或类似设备,或者任何节点和附加设备的组合(例如,节点A)的实施的示例。例如,方法510可以由系统610实施。系统610可以包括一个或多个处理器和一个或多个非瞬态计算机可读存储介质(例如,一个或多个存储器),所述非瞬态计算机可读存储介质耦接到一个或多个处理器并配置有可由一个或多个处理器执行的指令,以促使系统或设备(例如,处理器)执行上述方法或操作,例如方法510。系统610可以包括与指令(例如,软件指令)相对应的各种单元/模块。
在一些实施例中,系统610可以被称为用于实现基于区块链的私有交易的装置。所述装置可以对应于参与私有交易的第一区块链节点。所述装置可以包括:确定模块611,用于根据公有区块链中的区块链合约,确定参与私有交易的一个或多个第二区块链节点;传输模块612,用于向所述一个或多个第二区块链节点传输交易信息,所述交易信息包括所述私有交易的一个或多个发送方、所述私有交易的一个或多个接收方以及所述私有交易的一个或多个交易金额;获得模块613,用于获取来自一定数量的所述第二区块链节点中每个节点的、证明接收所述交易信息的签名;以及存储模块614,用于响应于获得超过阈值的所述一定数量的签名,至少将私有交易的表示和签名存储在公有区块链中。
本文描述的技术由一个或多个专用计算设备实现。专用计算设备可以是台式计算机系统、服务器计算机系统、便携式计算机系统、手持设备、网络设备或结合硬连线和/或程序逻辑以实现这些技术的任何其他设备或设备的组合。专用计算设备可以被实现为个人计算机、膝上型计算机、蜂窝电话、照相电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板电脑、可穿戴设备或其组合。计算设备通常由操作系统软件控制和协调。传统的操作系统控制和调度用于执行的计算机进程,执行存储器管理,提供文件系统、网络、I/O服务,以及提供用户界面功能,例如图形用户界面(“GUI”)等。这里描述的各种系统、装置、存储介质、模块和单元可以在专用计算设备或者一个或多个专用计算设备的一个或多个计算芯片中实现。在一些实施例中,本文描述的指令可以在专用计算设备上的虚拟机中实现。当被执行时,指令可以促使专用计算设备执行本文描述的各种方法。虚拟机可以包括软件、硬件或其组合。
图7是示出计算机系统700的框图,在所述计算机系统700上可以实现本文描述的任何实施例。系统700可以执行本文所述的任何方法(例如,用于实现基于区块链的私有交易的方法510)。系统700可以在本文描述的任何系统(例如,用于实现基于区块链的私有交易的系统610)中被实现。系统700可以在本文描述的任何节点中实现,并且被配置为执行用于实现区块链合约的相应步骤。计算机系统700包括用于通信信息的总线702或其他通信机制,与总线702耦接以处理信息的一个或多个硬件处理器704。硬件处理器704可以是例如一个或多个通用微处理器。
计算机系统700还包括耦接到总线702的用于存储信息和可由处理器704执行的指令的主存储器706,例如随机存取存储器(RAM)、高速缓存和/或其他动态存储设备。主存储器706还可以用于在执行可由处理器704执行的指令期间存储临时变量或其他中间信息。当这些指令存储在处理器704可访问的存储介质中时,这些指令将计算机系统700呈现为被定制以执行指令中指定的操作的专用机器。计算机系统700还包括耦接到总线702的用于存储处理器704的静态信息和指令的只读存储器(ROM)708或其他静态存储设备。存储设备710诸如磁盘、光盘或USB拇指驱动器(闪存驱动器)等被提供并被耦接到总线702以存储信息和指令。
计算机系统700可以使用与计算机系统相结合使得计算机系统700成为专用机器或将计算机系统700编程为专用机器的定制硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑实现本文所述的技术。根据一个实施例,本文描述的操作、方法和过程由计算机系统700响应于处理器704执行主存储器706中包含的一个或多个指令的一个或多个序列而执行。这些指令可从另一存储介质(例如存储设备710)读入主存储器706中。主存储器706中包含的指令序列的执行促使处理器704执行本文描述的处理步骤。在替代实施例中,可使用硬连线电路代替软件指令或与软件指令组合。
主存储器706、ROM 708和/或存储设备710可包括非瞬态存储介质。本文使用的术语“非瞬态介质”和类似术语是指存储促使机器以特定方式操作的数据和/或指令的介质,所述介质不包括暂时性信号。这种非瞬态介质可包括非易失性介质和/或易失性介质。例如,非易失性介质包括光盘或磁盘,诸如存储设备710。易失性介质包括动态存储器,例如主存储器706。常规形式的非瞬态介质包括,例如,软磁盘、软盘、硬盘、固态驱动器、磁带或任何其他磁数据存储介质、CD-ROM、任何其他光学数据存储介质、具有孔图案的任何物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其他存储器芯片或盒式磁带的以及它们的网络版本。
计算机系统700还包括耦接到总线702的网络接口718。网络接口718提供耦接到一个或多个网络链路的双向数据通信,所述一个或多个网络链路连接到一个或多个本地网络。例如,网络接口718可以是综合业务数字网(ISDN)卡、电缆调制解调器、卫星调制解调器或调制解调器,以提供与相应类型的电话线的数据通信连接。作为另一示例,网络接口718可以是局域网(LAN)卡,以提供到兼容LAN(或与WAN通信的WAN组件)的数据通信连接。还可以实现无线链路。在任何这样的实施方式中,网络接口718发送和接收携带表示各种类型的信息的数字数据流的电信号、电磁信号或光信号。
计算机系统700可以通过网络、网络链路和网络接口718发送消息和接收数据,包括程序代码。在因特网示例中,服务器可以通过因特网、ISP、本地网络和网络接口718发送用于应用程序的请求代码。
所接收的代码可在其被接收时由处理器704执行,和/或存储在存储设备710或其他非易失性存储器中以用于稍后执行。
前面部分中描述的每个过程、方法和算法可以在由包括计算机硬件的一个或多个计算机系统或计算机处理器执行的代码模块中实现,并且完全或部分自动化地实现。过程和算法可以部分或全部地在专用电路中实现。
上述各种特征和过程可以彼此独立地使用,或者可以以各种方式组合。所有可能的组合和子组合都旨在落入本说明书的范围内。另外,在一些实施方式中可以省略某些方法或过程框。本文描述的方法和过程也不限于任何特定序列,与其相关的框或状态可以以适当的其他序列执行。例如,所描述的框或状态可以以不同于具体公开的顺序执行,或者多个框或状态可以在单个框或状态中组合。框或状态的示例可以串行、并行或以某种其他方式执行。可以将框或状态添加到所公开的实施例中或从所公开的实施例中移除。本文描述的系统和组件的示例可以与所描述的不同地被配置。例如,与所公开的实施例相比,可以添加、移除或重新排列元件。
本文描述的方法的各种操作可以至少部分地由被临时配置(例如,通过软件)或被永久配置为执行相关操作的一个或多个处理器执行。无论是临时配置还是永久配置,这样的处理器可以构成处理器实现引擎,所述处理器实现引擎操作以执行本文描述的一个或多个操作或功能。
类似地,本文描述的方法可以至少部分地由处理器实现,其中一个或多个特定处理器是硬件的示例。例如,所述方法的至少一些操作可以由一个或多个处理器或处理器实现引擎执行。此外,一个或多个处理器还可以操作以支持“云计算”环境中的相关操作的性能或作为“软件即服务”(SaaS)。例如,至少一些操作可以由一组计算机(作为包括处理器的机器的示例)执行,这些操作可以经由网络(例如,因特网)并且经由一个或多个适当的接口(例如,应用程序接口(API))被访问。
某些操作的性能可以在处理器之间分配,不仅驻留在单个机器中,而且跨多个机器被部署。在一些实施例中,处理器或处理器实现引擎可以位于单个地理位置(例如,在家庭环境、办公室环境或服务器群内)。在其他实施例中,处理器或处理器实现引擎可以分布在多个地理位置。
在整个说明书中,多个实例可以实现作为单个实例所描述的组件、操作或结构。尽管一个或多个方法的各个操作被示出并描述为独立的操作,但是可以同时执行一个或多个独立的操作,并且不需要以所示的顺序执行所述操作。在配置中作为独立组件呈现的结构和功能可以实现为组合结构或组件。类似地,作为单个组件呈现的结构和功能可以实现为独立的组件。这些和其他变化、修改、添加和改进都落入本文中的主题的范围内。此外,本文使用的相关术语(诸如“第一”、“第二”、“第三”等)不表示任何顺序、高度或重要性,而是用于将一个元件与另一元件区分开。此外,术语“一”、“一个”和“多个”在本文中并不表示数量的限制,而是表示存在至少一个所述的物品。
尽管已经参考具体实施例描述了主题的概述,但是在不脱离本说明书的实施例的较宽范围的情况下,可以对这些实施例进行各种修改和改变。具体实施方式不应被视为具有限制意义,并且各种实施例的范围仅由所附权利要求以及这些权利要求所赋予的等同物的全部范围限定。