基于区块链的共识和验证方法及装置
技术领域
本公开总体上涉及信息处理技术,更具体地说,涉及基于区块链的共识和验证方法、装置及相应的计算机可读存储介质。
背景技术
区块链(Block Chain)技术是基于去中心化的对等网络,将密码学原理与共识机制相结合,来保障分布式各节点的数据连贯和持续,实现信息即时验证、可追溯、难篡改等特性,从而创造了一套隐私、高效、安全的分布式信任体系。
传统区块链系统将网络中所有广播出来的交易通过节点收集后进行统一打包成区块,各节点进行验证并形成共识,然而传统系统的吞吐量受限于多方面因素:节点的打包能力、对于大量交易的网络传输能力的限制、区块大小限制、共识延迟等。目前主流区块链的处理方式并没有合理利用点对点网络中富裕的带宽、计算资源,而是将所有交易汇集到单点或单个区块进行处理,其根本原因在于传统的区块链设计只允许整个系统里有一条主链,即使是例如侧链、闪电网络等技术,仍然无法避免主链的单点性能瓶颈。
因此,需要一种改进的基于区块链的共识和验证方法。
发明内容
总体上,本公开的实施例提供了基于区块链的共识和验证方法、装置及相应的计算机可读存储介质以至少部分地解决现有技术的上述及其它潜在问题。
本公开实施例的第一方面提供了一种基于区块链的共识方法,所述共识方法包括:基于与区块链网络的第一节点有关的交易生成包括交易信息的交易区块;在对所述交易区块不进行共识的情况下将所述交易区块添加到所述第一节点的区块链;向所述区块链网络的第二节点发送对新的检查点区块进行共识的共识消息,所述新的检查点区块的父区块的类型是交易区块;基于来自所述第二节点的共识结果,生成包括所述共识结果的所述新的检查点区块并将所述新的检查点区块添加到所述区块链。
本公开实施例的第二方面提供了一种基于区块链的共识装置,所述共识装置包括:存储器,其用于存储指令;以及处理器,其耦合到所述存储器,所述指令在由所述处理器执行时使得所述装置执行根据本公开实施例的第一方面描述的基于区块链的共识方法。
本公开实施例的第三方面提供了一种基于区块链的共识方法,所述共识方法包括:在区块链网络的第一节点处,向所述区块链网络的第二节点发送对新的检查点区块进行共识的共识消息;所述第二节点确定所述共识消息是否有效,如果有效,则基于所述共识消息进行共识处理,并向所述第一节点发送共识结果;所述新的检查点区块包括基于所述共识结果生成的共识信息,所述第一节点将所述新的检查点区块添加到所述第一节点的区块链,所述第一节点的区块链还包括交易区块,所述交易区块包括与所述第一节点的交易相关联的交易信息。
本公开实施例的第四方面提供了一种区块链网络,所述区块链网络包括第一节点和第二节点,在所述第一节点和所述第二节点处执行根据本公开实施例的第三方面描述的基于区块链的共识方法。
本公开实施例的第五方面提供了一种基于区块链的验证方法,所述验证方法包括:在区块链网络的第一节点处,从第一节点的区块链中获取与第一交易相关联的第一交易信息,其中,所述第一交易信息位于所述第一节点的区块链的相邻的两个检查点区块之间的交易区块中;向所述区块链网络的第二节点确认所述第一交易信息是否存在于所述第二节点的区块链的相邻的两个检查点区块之间的交易区块中;在确认存在的情况下,使用所述第一交易信息来验证所述第一交易;其中,所述区块链网络的每个节点的区块链的交易区块包括与所述每个节点的交易相关联的交易信息,并且所述每个节点的区块链的检查点区块包括共识信息。
本公开实施例的第六方面提供了一种基于区块链的验证装置,所述验证装置包括:存储器,其用于存储指令;以及处理器,其耦合到所述存储器,所述指令在由所述处理器执行时使得所述装置执行根据本公开实施例的第五方面描述的基于区块链的验证方法。
本公开实施例的第七方面提供了一种计算机可读存储介质。该计算机可读存储介质存储有指令,所述指令用于执行根据本公开实施例的第一方面、第三方面、第五方面描述的方法。
本公开的实施例提供了基于区块链的共识和验证的方案,将大量点对点交易的处理权、验证权从共识节点转移到交易双方节点,实现局部自治,有效去除了网络总吞吐量限制,在保证安全性的前提下显著地改善了区块链的交易性能,并显著地降低了目前区块链系统中由于需要对系统中所有交易进行共识而带来的数据传输负载和共识复杂度。
附图说明
现将仅通过示例的方式,参考所附附图对本公开的实施例进行描述,在附图中,相同或相似的附图标注表示相同或相似的元素,其中:
图1示出了其中可以实现本公开实施例的示例性区块链网络100的示意图;
图2示出了根据本公开实施例的区块链节点的区块链架构图200;
图3示出了根据本公开实施例的基于区块链的示例性信息处理方法300的流程图;
图4示出了根据本公开实施例的基于区块链的示例性共识方法400的流程图;以及
图5示出了根据本公开实施例的基于区块链的示例性共识方法500的流程图;
图6示出了根据本公开实施例的基于区块链的示例性验证方法600的流程图;
图7示出了根据本公开实施例的基于区块链的示例性共识或验证或信息处理装置700的示意图;以及
图8示出了根据本公开实施例的一个具体示例800。
具体实施方式
现将结合附图对本公开的实施例进行具体的描述。应当注意的是,附图中对相似的部件或者功能组件可能使用同样的数字标示。所附附图仅仅旨在说明本公开的实施例。本领域技术人员可以在不偏离本公开精神和保护范围的基础上从下述描述得到替代的实施方式。
本文所使用的术语“包括”、“包含”及类似术语应该被理解为是开放性的术语,即“包括/包含但不限于”,表示还可以包括其它内容。术语“基于”是“至少部分地基于"。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”,等等。本文使用词语“示例性”表示“充当示例、实例或举例说明”。本文中被描述为“示例性”的任何实施例都并非必然解释为对于其它实施例而言是优选的或有优势的。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。对于附图中的各单元之间的连线,仅仅是为了便于说明,其表示至少连线两端的单元是相互通信的,并非旨在限制未连线的单元之间无法通信。
如前所述,现有主流的区块链系统中只有一条主链,所有节点维护相同的一条主链,主链上分布的均为关于每个普通交易的区块,对于区块链节点来说更新和同步主链需要非常多的资源和时间。例如,如果区块链大小超过1TB(太字节),则在每个节点处维护该区块链需要大量的存储空间并且同步的时间会很长,此外每一笔交易都需要被全网每一个节点处理,严重制约了整个区块链系统的吞吐量。目前缺乏一种能够充分利用节点与节点之间点对点性能的区块链交易、共识、验证方式,缺乏一种兼顾节点自治和全局共识的共识机制。
有鉴于此,本公开的实施例提供了一种可线性扩展的基于多节点区块链的共识机制和验证的解决方案,将大量点对点交易的处理权、验证权从共识节点转移到交易双方节点,实现局部自治。根据本公开的实施例的区块链系统中没有主链或所谓的中心区块链,该系统采用四层架构,分别为交易、独立的区块链、共识方案和验证方案。该系统的第一层是交易,它是基于价值交换的区块链系统上的交易模型;该系统的第二层是独立的区块链,即节点区块链,区块链网络具有多个节点,并且每个节点都具有从它自己的创世区块为起点的独立的区块链,创世区块是预创建的检查点区块,在这条区块链里还包括交易区块和其它检查点区块,交易区块只记录和本节点有关的交易,其它检查点区块不包括任何交易信息而是包含共识信息;该系统的第三层是共识方案,对检查点区块进行全网共识,当检查点区块被全网共识后,根据区块链不可篡改的特性,可以认为发生在前一检查点区块到当前检查点区块之间的所有交易区块中的交易都已经被全网密封,该层对交易区块的正确性不予保证,正确验证交给该系统的第四层来处理;该系统的第四层是验证方案,对于交易区块中的每一个交易,追溯该交易的来源交易,以及该来源交易的来源交易,一直追溯到创世区块中的交易。与目前绝大多数系统中只包含一条主链的区块链实现相比,本系统每个节点均为普通交易参与方,每个节点都维护自身的一条区块链并独立运行。该区块链记录所有与该节点相关的交易,包括交易发起方和交易接收方,或者说每个交易仅记录在交易发起方和交易接收方的区块链的交易区块中。
为了便于描述,下面对本公开中出现的术语进行说明。本公开中的术语“凭证”是指一种数字权益证明(例如,数值化的权益证明),可以用于表征交易的发起方(发送方)或接收方的数字化权益,并且凭证包括但不限于指示例如资产的金额、积分等等。
图1示出了其中可以实现本公开的实施例的示例性区块链网络100的示意图。区块链网络100包括多个区块链节点101、102、103、104。由于区块链技术具有去中心化、分布式的特性,各区块链节点可通过各种通信介质互相交换信息。用户可以通过访问区块链节点101-104中的若干个节点发起交易,当交易达到一定数量或超时后,一个或多个交易打包成区块并被发送到节点。与现有的区块链网络不同,在区块链网络100中,区块链节点101-104中的每个节点维护自身的一条独立运行的区块链(下文将结合图2进行描述)。此外,可以在各个区块链节点101-104处执行智能合约的管理操作,诸如智能合约的安装和部署等,使得交易是通过调用智能合约来实现的。另外,图1中的区块链节点的数量仅是示意而非限制,其可以是任意数量,该区块链网络100还可以包括其它各种类型的节点。
图2示出了根据本公开的实施例的区块链节点的示例性区块链结构图200,该区块链结构可以应用于图1的区块链网络100中。例如,该区块链架构图200分别示出了图1的区块链节点101的区块链201和区块链节点102的区块链202。区块链201和202中的每个区块链由多个相连的区块构成,区块包括区块头部和区块内容,区块头部包含基于它的父区块(即前一个区块)的至少一部分来生成的摘要(Hash)以确保区块的正确性,区块内容和区块类型有关。与现有的区块链不同,每个区块链201、202上分布有两种区块类型:交易区块和检查点区块。区块链201和202中的每个区块链中的第一个区块被称为创世区块,创世区块是一个预创建的检查点区块,它可以包含每一节点的唯一标识和初始凭证信息,该初始凭证信息作为共识信息并指示一个没有来源但是拥有唯一索引的交易。可以在每个区块链的启动时预先创建创世区块。每个区块链201、202的相邻的两个检查点区块之间存在至少一个交易区块。对于每个节点来说,交易区块是包含普通交易信息的区块,该区块中的交易应当是和本节点有关的交易,要么是交易的发起方,要么是交易的接收方。因此,对于每个交易来说,它存在两个索引。同一个交易会被写入到发起方和接收方节点的区块链中。对于每个节点来说,检查点区块不包含任何普通交易信息,而是包含共识信息,以达成本节点区块链的一致性,即检查点区块用于区块链间共识。
例如,区块链201包括创世区块CP1.1、交易区块TX1.1、交易区块TX1.2、检查点区块CP1.2、交易区块TX1.3和检查点区块CP1.3,区块链202包括创世区块CP2.1、交易区块2.1、检查点区块CP2.2、交易区块TX2.2和检查点区块CP2.3。TX i.j代表节点i的区块链的第j个交易区块,每个交易区块仅包括与第i个节点有关的交易。CP i.1代表节点i的第一个区块(即,创世区块),CP i.j(j≥2)代表节点i的区块链的第j个(轮)检查点区块。例如,涉及区块链节点101和102的同一个交易被写入到区块链201中的交易区块Tx 1.1和区块链202中的交易区块Tx 2.1中。
当节点验证交易区块中的交易信息有效后,根据上一区块(可以是交易区块或检查点区块)的摘要(Hash)和当前区块的交易信息生成普通交易区块入链,交易区块不被广播到区块链网络。由于一个交易包含发送方和接收方两个节点,因此对于每个交易来说,同一个交易会被写入到发起方和接收方节点的区块链中。例如,从节点i到节点j的第s个交易表示为tr(i->j,s),它只会被记录在节点i和节点j的区块链上。一个交易tr(i->j,s)的交易信息可以包括但不限于:交易发起方和接收方,即i和j;唯一的交易序号,以映射到该交易tr(i->j,s);交易的来源索引(或来源交易),即能够支持发起方凭证来源的来源交易集合(即,发起方是通过哪几个交易获得需要转移的凭证的),即它表示的是前面所有发送到节点i的交易的集合;交易凭证,其是交易所表示的转移的权益;交易签名信息(例如,节点(i或j)对交易的签名);等等。
除了创世区块之外,节点可以根据自身交易数量、确认情况等提出检查点区块。如果节点有需要确认的检查点区块,可以在共识期间提出共识消息,来自多个节点的共识消息打包成区块并被广播到区块链网络进行共识以生成共识结果。共识消息可以包括但不限于:节点编号;检查点轮次编号;前一个检查点区块的摘要(Hash);当前检查点区块的父区块的摘要;前一个检查点区块在区块链中的区块号;当前检查点区块在区块链中的区块号;节点对该当前检查点区块的签名;等等。该当前检查点区块可以包括基于共识结果生成的共识信息。提出共识消息后,区块链网络将收集所有本轮提出的检查点区块,并通过常用共识算法形成链之间的共识。本文所使用的共识算法包括但不限于:如PoW(工作量证明),其允许不高于50%的恶意节点;PoS(权益证明);BFT(拜占庭容错),其允许少于1/3的恶意节点;等等。此共识仅包含愿意将检查点区块进行共识的节点所提出的检查点区块,不包含交易信息,不包含本轮无交易的节点。
图3示出了根据本公开实施例的基于区块链的示例性信息处理方法300的流程。可以在图1的区块链网络的区块链节点处执行方法300。如流程图所示,方法300包括以下步骤:
步骤301:基于与区块链网络的第一节点有关的交易生成包括交易信息的交易区块。在该步骤中,交易区块与节点的交易相关。例如,每个交易被记录在交易的发起方和接收方的区块链的交易区块中。
步骤302:在对交易区块不进行共识的情况下将交易区块添加到第一节点的区块链,第一节点的区块链还包括检查点区块并且检查点区块包括共识信息。在该步骤中,不同于传统区块链,交易区块不经过共识被直接添加到节点的区块链中,节省了对交易区块进行共识所花费的时间。
步骤303:对要添加到第一节点的区块链中的新的检查点区块进行共识。在该步骤中,对检查点区块进行共识来确保相邻的两个检查点区块之间的交易区块能够在不广播到全网的前提下得到全网的共识。
步骤304:对第一节点的第一交易进行验证,其中,与第一交易相对应的交易区块位于第一节点的区块链中相邻两个检查点区块之间。在该步骤中,与第一交易相对应的交易区块位于两个相邻检查点区块之间,以便对不广播到全网但得到全网共识的第一交易进行验证。
在一个示例中,步骤303可以包括:向区块链网络的第二节点发送对新的检查点区块进行共识的共识消息,该新的检查点区块的父区块的类型是交易区块;该新的检查点区块包括基于来自第二节点的共识结果生成的共识信息,并且将该新的检查点区块添加到所述第一节点的区块链。在该步骤中,例如,在共识期间,向区块链网络中的共识节点发送共识消息。
在一个示例中,向区块链网络的第二节点发送共识消息可以包括:基于预定时间和/或交易数量来发送共识消息。
在一个示例中,共识消息包括:节点编号、检查点区块轮次编号、前一个检查点区块的摘要、新的检查点区块的父区块的摘要、前一个检查点区块在区块链中的区块号、新的检查点区块在区块链中的区块号、节点对于新的检查点区块的签名。
在一个示例中,步骤304可以包括:从与第一交易相对应的交易区块中获取与第一交易相关联的第一交易信息;向区块链网络的第三节点确认第一交易信息是否存在于第三节点的区块链的相邻的两个检查点区块之间的交易区块中;在确认存在的情况下,使用第一交易信息来验证第一交易。在该步骤中,如果第一交易信息只存在于第一交易的发起方和接收方中的一个的区块链上或者第一交易信息所在的交易区块没有在相邻的两个检查点区块之间时,验证第一交易失败。
在一个示例中,第一节点是第一交易的发起方和接收方中的一个,并且第三节点是第一交易的发起方和接收方中的另一个。例如,第一节点是交易的发起方,第三节点是交易的接收方。或者,第一节点是交易的接收方,第三节点是交易的发送方。
在一个示例中,区块链网络中的每个节点的区块链中的交易区块所包括的交易信息包括以下各项:交易的发起方和接收方、交易序号、支持交易的发起方凭证来源的来源交易集合、交易凭证、交易签名信息;区块链网络的每个节点的区块链中的创世区块是预创建的检查点区块并包括初始凭证信息作为共识信息,初始凭证信息指示没有来源的交易,并且该每个节点的区块链中的其它检查点区块包括基于共识结果生成的共识信息。
在一个示例中,使用第一交易信息来验证第一交易可以包括以下中的至少一项:确定第一交易信息中的各项是否正确;确定第一交易在第一交易的发起方的区块链中是否只出现一次;在第一节点和第三节点的区块链中,确定与第一交易信息所在的交易区块相邻两个检查点区块所包括的共识信息是否与先前共识时相同。在该步骤中,节点在验证交易是否合法时,可以检查如下事项:交易信息的各项是否正确,包括是否被正确签名;交易在交易发起方的区块链上是否只出现一次,以避免双重花费;确定检查点区块的共识信息是否被篡改,如果被篡改意味着检查点区块之间的交易可能是不可靠的。
在一个示例中,使用第一交易信息来验证第一交易还可以包括:针对第一交易信息中的来源交易集合中的每个来源交易,从区块链网络的各节点的区块链中追溯该每个来源交易的来源交易直到创世区块中的初始凭证信息,以获取包括该来源交易集合的第二交易集合和与第二交易集合相关的第二交易信息;使用第二交易集合和第二交易信息来验证第一交易。在步骤中,递归地收集支持第一交易的发起方凭证的来源交易及来源交易的来源交易直到创世区块中的无来源交易,以便对第一交易进行验证。
在一个示例中,使用第二交易集合和第二交易信息来验证第一交易包括以下中的至少一项:确定在第二交易集合中的每个交易的发起方和接收方的区块链中是否具有相同的第二交易信息;在第二交易集合中的每个交易的发起方和接收方的区块链中,确定第二交易信息的各项是否正确并且第二交易信息是否包括在位于两个检查点区块之间的交易区块中;确定第二交易集合中的每个交易在该每个交易的发起方的区块链中是否只出现一次;在第二交易集合中的每个交易的发起方和接收方的区块链中,确定与第二交易信息所在的交易区块相邻的两个检查点区块所包括的共识信息是否与先前共识时相同;或者基于第一交易和第二交易集合中的每个交易的交易凭证以及创世区块中的初始凭证信息,确定第一交易的发起方是否具有充足的凭证来支持第一交易。在该步骤中,节点在验证交易是否合法时,可以验证该交易的来源交易是否合法,并基于交易及其来源交易的交易凭证和创世区块中的初始凭证信息可以计算出交易的发起方的凭证是否足以完成交易(例如,如果不充足,则交易不合法)。
在一个示例中,区块链网络可以包括缓存节点,该缓存节点用于缓存区块链网络中的至少一个节点的区块链的至少一部分,以便在该至少一个节点不可访问时提供该至少一个节点的区块链的所述至少一部分。提供缓存节点可以在区块链网络中的某个节点无法被访问时(例如,节点离线)提供该节点的区块链的数据。
根据图3描述的实施例,每个节点都维护自己独立的区块链,当进行交易时,交易参与方节点根据自身利益按需收集对方节点数据,验证并完成交易,因此显著地降低了目前区块链系统中由于需要对系统中所有交易进行共识而带来的数据传输负载和共识复杂度。
图4示出了根据本公开实施例的基于区块链的示例性共识方法400。可以在图1的区块链网络的区块链节点处执行方法400。如流程图所示,方法400包括以下步骤:
步骤401:基于与区块链网络的第一节点有关的交易生成包括交易信息的交易区块。
步骤402:在对交易区块不进行共识的情况下将交易区块添加到第一节点的区块链。
步骤403:向区块链网络的第二节点发送对新的检查点区块进行共识的共识消息,该新的检查点区块的父区块的类型是交易区块。
在一个示例中,交易信息包括但不限于:交易的发起方和接收方、交易序号、支持交易的发起方凭证来源的来源交易集合、交易凭证、交易签名信息。
在一个示例中,向区块链网络的第二节点发送共识消息可以包括:基于预定时间和/或交易数量来发送共识消息。
在一个示例中,共识消息可以包括但不限于:节点编号、检查点区块轮次编号、前一个检查点区块的摘要、新的检查点区块的父区块的摘要、前一个检查点区块在区块链中的区块号、新的检查点区块在区块链中的区块号、节点对于新的检查点区块的签名。
步骤404:该新的检查点区块包括基于来自第二节点的共识结果生成的共识信息,并将该新的检查点区块添加到该区块链。
在一个示例中,该区块链中的创世区块是预创建的检查点区块并且包括初始凭证信息作为共识信息。
根据图4描述的实施例,显著地降低了目前区块链系统中由于需要对系统中所有交易进行共识而带来的数据传输负载和共识复杂度。
图5示出了根据本公开实施例的基于区块链的示例性共识方法500。可以在图1的区块链网络的两个区块链节点之间执行方法500。如流程图所示,方法500包括以下步骤:
步骤501:在区块链网络的第一节点处,向区块链网络的第二节点发送对新的检查点区块进行共识的共识消息。
步骤502:第二节点确定共识消息是否有效,如果有效,则基于共识消息进行共识处理,并向第一节点发送共识结果。
步骤503:新的检查点区块包括基于共识结果生成的共识信息,第一节点将新的检查点区块添加到第一节点的区块链,第一节点的区块链还包括交易区块,交易区块包括与第一节点的交易相关联的交易信息。
在一个示例中,交易区块是未经共识的区块并且包括与第一节点的交易相关联的交易信息。
在一个示例中,新的检查点区块的父区块的类型是交易区块。
在一个示例中,步骤501可以包括:基于预定时间和/或交易数量来发送共识消息。
在一个示例中,共识消息包括但不限于:节点编号、检查点区块轮次编号、前一个检查点区块的摘要、新的检查点区块的父区块的摘要、前一个检查点区块在区块链中的区块号、新的检查点区块在区块链中的区块号、节点对于新的检查点区块的签名。
在一个示例中,第二节点基于以下中的一项或多项来确定共识消息是否有效:检查点区块轮次编号;节点对新的检查点区块的签名;新的检查点区块是否已经存在于先前的共识中;共识消息中的前一个检查点区块是否已经作为前一个检查点区块存在于先前的共识中。例如,在共识过程中,如下共识消息将被视为无效:a)检查点轮次编号(r)不正确(如跳号、重复号等);b)共识消息的签名不正确;c)共识消息中的检查点已经存在于之前的共识中;d)共识消息中的前一个检查点已经作为前一个检查点存在于某一个共识中(即,前一个检查点被用了两次,区块链链出现分叉)。
在一个示例中,步骤502中基于共识消息进行共识处理可以包括:对基于共识消息生成的摘要进行共识处理。
在一个示例中,第一节点的区块链中的创世区块是预创建的检查点区块并包括初始凭证信息,初始凭证信息指示没有来源的交易。
根据图5描述的实施例,显著地降低了目前区块链系统中由于需要对系统中所有交易进行共识而带来的数据传输负载和共识复杂度。
图6示出了根据本公开实施例的基于区块链的示例性验证方法600。可以在图1的区块链网络的区块链节点处执行方法600。如流程图所示,方法600包括以下步骤:
步骤601:在区块链网络的第一节点处,从第一节点的区块链中获取与第一交易相关联的第一交易信息,其中,第一交易信息位于第一节点的区块链的相邻的两个检查点区块之间的交易区块中。
步骤602:向区块链网络的第二节点确认第一交易信息是否存在于第二节点的区块链的相邻的两个检查点区块之间的交易区块中。
步骤603:在确认存在的情况下,使用第一交易信息来验证第一交易,其中,区块链网络的每个节点的区块链的交易区块包括与该每个节点的交易相关联的交易信息,并且该每个节点的区块链的检查点区块包括共识信息。
在一个示例中,第一节点是第一交易的发起方和接收方中的一个并且第二节点是所述第一交易的发起方和接收方中的另一个。
在一个示例中,区块链网络的每个节点的区块链中的每个交易区块中的交易信息包括以下各项:交易的发起方和接收方、交易序号、支持交易的发起方凭证来源的来源交易集合、交易凭证、交易签名信息;区块链网络的每个节点的区块链中的创世区块是预创建的检查点区块并包括初始凭证信息作为共识信息,所述初始凭证信息指示没有来源的交易,并且该每个节点的区块链中的其它检查点区块包括基于共识结果生成的共识信息。
在一个示例中,步骤603可以包括以下中的至少一项:确定第一交易信息中的各项是否正确;确定第一交易在第一交易的发起方的区块链中是否只出现一次;在第一节点和第二节点的区块链中,确定与第一交易信息所在的交易区块相邻的两个检查点区块所包括的共识信息是否与先前被共识时相同。
在一个示例中,步骤603还可以包括:针对第一交易信息中的来源交易集合中的每个来源交易,从区块链网络的各节点的区块链中追溯该每个来源交易的来源交易直到创世区块中的初始凭证信息,以获取包括来源交易集合的第二交易集合和与第二交易集合相关的第二交易信息;使用第二交易集合和第二交易信息来验证第一交易。
在一个示例中,使用第二交易集合和第二交易信息来验证第一交易可以包括以下中的至少一项:确定在第二交易集合中的每个交易的发起方和接收方的区块链中是否具有相同的所述第二交易信息;在第二交易集合中的每个交易的发起方和接收方的区块链中,确定第二交易信息的各项是否正确并且第二交易信息是否包括在位于两个检查点区块之间的交易区块中;确定第二交易集合中的每个交易在该每个交易的发起方的区块链中是否只出现一次;确定来源交易集合中的每个来源交易的来源交易是否包括在第二交易集合中;在第二交易集合中的每个交易的发起方和接收方的区块链中,确定与第二交易信息所在的交易区块相邻的两个检查点区块所包括的共识信息是否与先前被共识时相同;或者基于第一交易和第二交易集合中的每个交易的交易凭证以及创世区块中的初始凭证信息,确定第一交易的发起方是否具有充足的凭证来支持第一交易。
在一个示例中,区块链网络可以包括缓存节点,该缓存节点用于缓存区块链网络中的至少一个节点的区块链的至少一部分,以便在所述至少一个节点不可访问时提供所述至少一个节点的区块链的至少一部分。
根据图6描述的实施例,将大量点对点交易的处理权、验证权从共识节点转移到交易双方节点,实现局部自治,有效去除了网络总吞吐量限制,在保证安全性的前提下显著地改善了区块链的交易性能。
图7示出了根据本公开的实施例的基于区块链的示例性共识或验证或信息处理的装置700的示意图。装置700可以包括:存储器701和耦合到存储器701的处理器702。存储器701用于存储指令,处理器702被配置为基于存储器701存储的指令来使装置700实现针对图3-图6所描述的方法的步骤中的任何步骤中的一个或多个。
如图7所示,装置700还可以包括通信接口703,用于与其它设备进行信息交互。此外,装置700还可以包括总线704,存储器701、处理器702和通信接口703通过总线704来彼此进行通信。
存储器701可以包括易失性存储器,也可以包括非易失性存储器。处理器702可以是中央处理器(CPU)、微控制器、专用集成电路(ASIC)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、或是被配置为实现本发明的实施例的一个或多个集成电路。
图8示出了根据本公开实施例的一个具体示例800。该示例800关注区块链网络中的三个节点A、B、C。节点A、B、C分别具有区块链801、802和803,其中:A与其它某节点X(未示出)发生过交易,记作交易对1,A在其本地区块链上记作交易块Tx1.1;A与B发生过交易,记作交易对2,A在其本地区块链上记作交易块Tx1.2,B在其本地区块链上记作交易块Tx2.1。不失一般性,假设每个交易块包括一个交易信息。
现在考虑节点C与B的交易,交易对3:B转移凭证(例如,20)给C。对于B而言,在发起转移凭证时为了证明节点B的凭证来源,需要同时在交易信息中附带提供创世区块CP2.1和交易区块Tx2.1。考虑三种情形:正常双节点交易、交易对手方作恶交易、交易对手方的上游节点作恶交易。
正常双节点交易
对于节点C而言,为了验证节点B的确有凭证(例如,20),需要收集Tx2.1的来源交易。由于节点B与A发生交易,则节点A的交易块Tx1.1、Tx1.2直到创世区块CP1.1需要被收集。又由于节点A与另外节点X在Tx1.1发生交易,则仍需要递归收集与节点A发生交易的那个另外节点X的交易和创世区块,直至形成闭包。
可以通过以下方式验证Tx2.1是一个合法的交易:a)在交易的发起方和接收方的区块链上同时拥有此笔相同的交易信息,即Tx2.1与Tx1.2相同,均在各自的区块链上;b)交易信息中的各项正确,交易信息被正确签名且被包夹在两个检查点之间,且检查点均已进行过共识,即Tx2.1的左右两个检查点分别为CP2.1和CP2.2,均已进行全网共识;c)没有双重花费,在交易发起方的区块链上此笔交易只出现一次,即Tx2.1没有出现多次;d)用来提供交易发起方凭证来源的来源交易的来源交易(及迭代后其它节点上的来源交易)都收集到,且验证通过,即在生成Tx2.2的时刻之前,节点B的来源交易有两个,分别为Tx2.1和CP1.1(创世块,初始凭证信息直接写入创世块),均已收集到并且验证通过;e)交易发起方的凭证充足,例如根据复盘计算,节点B目前拥有的凭证可以通过计算节点B的所有交易得出。
在此过程中,两个CP节点用于确保发生在这两个CP区间内的交易能够在不广播到全网的前提下得到全网的共识,因为一旦改动CP区间的任何一个交易的任何一项数据,验证者在验证该CP区间的交易时就会与交易实际数据不符,从而导致该节点的交易不可信。
交易对手方作恶交易
示例800中的区块链网络是本网络是基于利己主义的。节点作恶对于节点本身并没有好处。其它的节点可以通过缓存与自己发生交易的来源交易,证明自己资金的合法来源。作恶节点修改来源交易或重新生成来源交易并不能改变历史结果,也不能造成双花攻击,因为其无法提供逆转区块链之后还能够被全网承认的检查点块。
例如,如果B是作恶节点,交易块Tx2.1是B的一个转出交易,此时B试图否认Tx2.1的存在并且试图通过提出Tx2.2将自己已转出到A的钱转账到C(双花),则此时:C在生成Tx3.1时需要检查B的所有检查点块CP2.2和CP2.1是否和当初进行全网共识时的Hash一致。此时B有两种作恶方法:a)去掉或修改Tx2.1,重新生成一个合法的检查点块CP2.2,则CP2.2在网络中将被检测出分叉,不能被共识;b)去掉或修改Tx2.1,沿用已经被共识的CP2.2,则CP2.2的Hash验证将不通过,不能被节点C承认。无论那种作恶方法,B都将破坏之前由全网共识的CP2.1和CP2.2之间的交易,因此将无法成功。
交易对手方的上游节点作恶交易
例如节点B、C之间交易,如果该交易牵涉到之前节点B与A的交易而节点A此时作恶不承认Tx1.2时:B根据利己主义原则,应当尽可能不信任网络中的其它任何节点。在当时与节点A发生交易的时候,B可以在本地缓存所有支持Tx2.1交易的来源交易。这样当节点C在寻求来源交易时,节点B可以无需节点A的帮助就向节点C提供来源交易。这样也避免了当节点A下线之后交易无法获得的问题。
根据图8描述的示例800,节点将交易通过检查点区块的方式签名验证并交于全网进行共识,有效去除了网络总吞吐量限制,在保证安全性的前提下显著地改善了区块链的交易性能。
此外,替代地,上述的基于区块链的共识方法、验证方法、信息处理方法能够通过计算机程序产品,即有形的计算机可读存储介质来体现。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开实施例的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其它自由传播的电磁波、通过波导或其它传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
以上所述仅为本公开的可选实施例,并不用于限制本公开的实施例,对于本领域的技术人员来说,本公开的实施例可以有各种更改和变化。凡在本公开的实施例的精神和原则之内,所作的任何修改、等效替换、改进等,均应包含在本公开的实施例的保护范围之内。此外,尽管可能关于若干实施方式中的一个来公开实施例的特定特征或方面,但是可以将这种特征或方面与其它实施方式的一个或多个其它特征或方面进行组合,这是由于其对任何给定或特定应用来说是期望且有利的。
虽然已经参考若干具体实施例描述了本公开的实施例,但是应该理解,本公开的实施例并不限于所公开的具体实施例。本公开的实施例旨在涵盖在所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。