具体实施方式
以下将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书实施例内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
现在结合附图来描述本说明书实施例的用于生成多层块链式结构的方法及装置、用于更新多层块链式结构中的信任点的方法及装置。
区块链是一种按照时间顺序来将数据区块顺序相连组合而成的链式数据结构,并且以密码学方式保证数据区块不可篡改和不可伪造。区块链包括一个或多个区块。区块链中的每个区块通过包括该区块链中紧接其之前的前一个区块的加密散列而链接到该前一个区块。每个区块还包括时间戳、该区块的加密哈希以及一个或多个交易(transaction)。对已经被区块链网络的节点验证的交易进行哈希处理并形成Merkle树。在Merkle树中,对叶节点处的数据进行哈希处理,并且针对Merkle树的每个分支,在该分支的根处级联该分支的所有哈希值。针对Merkle树执行上述处理,直到整个Merkle树的根节点。Merkle树的根节点存储代表该Merkle树中的所有数据的哈希值。当一个哈希值声称是Merkle树中存储的交易时,可以通过判断该哈希值是否与Merkle树的结构一致来进行快速验证。
区块链是用于存储交易的数据结构。区块链网络是用于管理、更新和维护一个或多个区块链结构的计算节点网络。如上所述,区块链网络可以包括公有区块链网络、私有区块链网络或联盟区块链网络。
在公有区块链网络中,共识过程由共识网络的节点控制。例如,在公有区块链网络中可以存在成千上万个实体协作处理,每个实体操作该公有区块链网络中的至少一个节点。因此,公有区块链网络可以被认为是参与实体的公有网络。在一些示例中,大多数实体(节点)必须按序对每个区块进行签名,并且将签名后的区块添加到区块链网络的区块链中。公有区块链网络的示例可以包括特定对等支付网络。此外,术语“区块链”不特别指代任何特定的区块链。
公有区块链网络支持公有交易。公有交易在公有区块链网络内的所有节点之间共享,并且存储在全局区块链中。全局区块链是指跨所有节点复制的区块链。为了达成共识(例如,同意向区块链添加区块),在公有区块链网络内实现共识协议。共识协议的示例包括但不限于:工作量证明(POW,proof-of-work),权益证明(POS,proof-of-stake)和权威证明(POA,proof-of-authority)。在本说明书实施例中,采用POW作为非限制性示例。
私有区块链网络被提供来用于特定实体。私有区块链网络中的各个节点的读写权限被严格控制。因此,私有区块链网络通常也称为许可网络,其对允许谁参与网络以及的网络参与水平(例如,仅在某些交易情形下)进行限制。在私有区块链网络中,可以使用各种类型的访问控制机制(例如,现有参与方对添加新实体进行投票,监管机构控制许可等)。
联盟区块链网络在参与实体之间是私有的。在联盟区块链网络中,共识过程由授权节点控制。例如,由若干个(例如,10个)实体(例如,金融机构,保险公司)组成的联盟可以操作联盟区块链网络,每个实体操作该联盟区块链网络中的至少一个节点。因此,联盟区块链网络可以被认为是参与实体的私有网络。在一些示例中,每个参与实体(节点)必须按序对每个区块进行签名,并将该区块添加到区块链。在一些示例中,可以由参与实体(节点)的子集(例如,至少7个实体)来对每个区块进行签名,并将该区块添加到区块链。
在本说明书实施例中参考联盟区块链网络来详细描述本说明书实施例的实施例。然而,可以预期,本说明书实施例的实施例可以在任何适合的区块链网络中实现。
区块链是防篡改的共享数字分类账,其在公有或私有对等网络中记录交易。分类帐被分发到网络中的所有成员节点,并且网络中发生的资产交易历史记录被永久记录在区块中。
共识机制确保分布式区块链网络中的所有网络节点按照相同的顺序执行交易,并且随后写入相同的分类账。共识模型旨在解决拜占庭问题。在拜占庭问题中,分布式区块链网络中的比如服务器或网络节点的组件可能会出现故障,或者故意向其他节点传播错误的信息。由于其他网络节点需要首先就哪个网络节点首先失败达成共识,从而其他网络节点很难将该组件声明失败并将其排除出区块链网络。
图1示出了可用于执行根据本说明书实施例的实施例的用于生成多层块链式结构的方法和用于更新区块链中的信任点的方法的环境100的示例的示意图。在一些示例中,环境100使得实体能够参与区块链网络102。如图1所示,环境100包括网络104、和计算设备/系统106、108。在一些示例中,网络104可以包括局域网(LAN),广域网(WAN),因特网或其组合,并且连接网站、用户设备(例如,计算设备)和后端系统。在一些示例中,可以通过有线和/或无线通信链路来访问网络104。在一些示例中,计算设备/系统106、108通过网络104相互通信,以及通过网络104实现与区块链网络102之间的通信,以及区块链网络102中的节点(或,节点设备)通过网络104来进行通信。通常,网络104表示一个或多个通信网络。在一些情况下,计算设备/系统106、108可以是云计算系统(未示出)的节点,或者每个计算设备/系统106、108可以是单独的云计算系统,其包括通过网络104互连的多个计算机并且用作分布式处理系统。
在所说明的示例中,计算设备/系统106、108中的每个可以包括能够参与作为区块链网络102中的节点的任何合适的计算系统。计算设备/系统的示例包括但不限于,服务器,台式计算机,笔记本电脑,平板电脑设备和智能手机等。在一些示例中,计算设备/系统106、108上可以安装有用于与区块链网络102交互的一个或多个计算机实现的服务。例如,计算设备/系统106可以上可以安装有第一实体(例如,用户A)的服务,比如,第一实体用于管理其与一个或多个其他实体(例如,其他用户)的交易的交易管理系统。计算设备/系统108可以上可以安装有第二实体(例如,用户B)的服务,比如,第二实体用于管理其与一个或多个其他实体(例如,其他用户)的交易的交易管理系统。在图1的示例中,区块链网络102被表示为节点的对等网络,并且计算设备/系统106、108分别作为参与区块链网络102的第一实体和第二实体的节点。
图2示出了执行根据本说明书实施例的实施例的用于生成多层块链式结构的方法和用于更新多层块链式结构中的信任点的方法的系统架构200的示例的示意图。系统架构200的示例包括分别与参与方A,参与方B和参与方C对应的参与方系统202、204、206。每个参与方(例如,用户,企业)参与被提供来作为对等网络的区块链网络212。区块链网络212包括多个节点214,其中,节点214中的至少一些节点在区块链216中记录信息,并且所记录的信息不可更改。尽管在区块链网络212内示意性地示出了单个区块链216,但是可以提供区块链216的多个副本,并且在区块链网络212中维护多个副本,如稍后详细描述的。
在所示出的示例中,每个参与方系统202、204、206分别由参与方A,参与方B和参与方C提供,或者被提供来作为参与方A,参与方B和参与方C,并且充当区块链网络212内的对应节点214。如这里所使用的,节点通常是指连接到区块链网络212的单个系统(例如,计算机,服务器),并且使得相应的参与方能够参与区块链网络。在图2示出的示例中,参与方对应于每个节点214。然而,一个参与方可以操作区块链网络212内的多个节点214,和/或多个参与方可以共享单个节点214。在一些示例中,参与方系统202、204、206使用协议(例如,超文本传输协议安全(HTTPS))和/或使用远程过程调用(RPC)来与区块链网络212通信,或者通过区块链网络212进行通信。
节点214在区块链网络212的参与度可以不同。例如,一些节点214可以参与共识过程(例如,作为将区块添加到区块链216的矿工节点),而其他节点214不参与共识过程。作为另一示例,一些节点214存储区块链216的完整副本,而其他节点214仅存储区块链216的部分副本。在图2的示例中,参与方系统202、204、206各自存储区块链216的完整副本216'、216”、216”'。
区块链(例如,图2中的区块链216)由一连串的区块组成,每个区块存储数据。数据的示例可以包括表示两个或更多参与方之间的交易的交易数据。在本说明书实施例中,交易被使用来作为非限制性示例,可以预期的是,任何适当的数据都可以存储在区块链中(例如,文档,图像,视频,音频)。交易的示例可以包括但不限于交换有价值的东西(例如,资产,产品,服务和货币等)。交易数据被不可更改地存储在区块链中。
在存储在区块中之前,对交易数据进行哈希处理。哈希处理是将(作为字符串数据提供的)交易数据转换为固定长度的哈希值(也被作为字符串数据提供)的过程。通过对交易数据进行哈希处理后,即使交易数据出现轻微更改,也会导致得到完全不同的哈希值。哈希值通常是通过使用哈希函数来对交易数据进行哈希处理而生成的。哈希函数的示例包括但不限于安全散列算法(SHA)-256,其输出256比特的哈希值。
多个交易的交易数据可以在被哈希化之后存储在区块中。例如,对两个交易数据进行哈希处理得到两个哈希值,然后,对所得到的两个哈希值再次进行哈希处理以得到另一哈希值。重复该过程,直到对于要存储在区块中的所有交易,得到单个哈希值。该哈希值被称为Merkle根哈希,并且被存储在区块的头部。任何交易的更改都会导致其哈希值发生变化,最终导致Merkle根哈希值发生变化。
通过共识协议来将区块添加到区块链中。区块链网络中的多个节点参与共识协议,并且经过竞争之后将区块添加到区块链中。这样的节点被称为矿工节点(或记账节点)。以上介绍的POW用作非限制性示例。
矿工节点执行共识过程来将交易(所对应的区块)添加到区块链。虽然多个矿工节点参与共识过程,但只有一个矿工节点可以将区块写入区块链。也就是说,矿工节点在共识过程中竞争以将其区块添加到区块链中。更详细地,矿工节点周期性地从交易池中收集待处理的交易(例如,直到达到在区块中可以包括的交易数量的预定限制,如果有的话)。交易池包括来自区块链网络中的参与方的交易消息。矿工节点创建区块,并将交易添加到区块中。在将交易添加到区块之前,矿工节点检查待添加的交易中是否存在区块链的区块中具有的交易。如果该交易已被添加到另一个区块中,则该交易将被丢弃。
矿工节点生成区块头,对区块中的所有交易进行哈希处理,并且成对地组合哈希值以生成进一步的哈希值,直到针对区块中的所有交易得到单个哈希值(Merkle根哈希)。然后,将Merkle根哈希添加到区块头中。矿工还确定区块链中的最新区块(即,添加到区块链的最后一个区块)的哈希值。矿工节点还可以在区块头中添加随机数值(noune值)和时间戳。在挖掘过程中,矿工节点尝试找到满足所需参数的哈希值。矿工节点不断更改nonce值,直到找到满足所需参数的哈希值。
区块链网络中的每个矿工都试图找到满足所需参数的哈希值,并且以这种方式彼此竞争。最终,一个矿工节点找到满足所需参数的哈希值,并将该哈希值通告给区块链网络中的所有其他矿工节点。其他矿工节点验证哈希值,如果确定为正确,则验证区块中的每个交易,接受该区块,并将该区块附加到它们的区块链副本中。以这种方式,区块链的全局状态在区块链网络内的所有矿工节点上达成一致。上述过程是POW共识协议。
在图2所提供的示例中,参与方A想要向参与方B发送一定数量的资金。参与方A生成交易消息,并将交易消息发送到区块链网络,该交易消息被增加到交易池中。区块链网络中的每个矿工节点创建区块,并从交易池中获取交易,并将交易添加到区块。按照这种方式,参与方A所发布的交易被添加到矿工节点的区块中。
在一些区块链网络中,实施密码技术来维护交易的隐私性。例如,如果两个节点想要保持交易私密性,使得区块链网络中的其他节点不能获悉交易细节,则节点可以对交易数据进行加密处理。加密方法的示例包括但不限于对称加密和非对称加密。对称加密是指使用单个密钥进行加密(根据明文生成密文)和解密(根据密文生成明文)的加密过程。在对称加密中,多个节点可以使用相同的密钥,因此每个节点都可以对交易数据进行加密/解密。
非对称加密是指使用密钥对来进行加密。每个密钥对包括私钥和公钥,私钥仅对于相应节点是已知的,并且公钥对于区块链网络中的任何或所有其他节点是已知的。节点可以使用另一个节点的公钥来加密数据,并且可以使用其他节点的私钥来解密经过加密的数据。例如,再次参考图1。参与方A可以使用参与方B的公钥来加密数据,并将加密数据发送给参与方B.参与方B可以使用其私钥来解密加密数据(密文)并提取原始数据(明文)。使用节点的公钥加密的消息,只能使用该节点的私钥解密。
非对称加密用于提供数字签名,这使得交易中的参与方能够确认交易中的其他参与方以及交易的有效性。例如,节点可以对消息进行数字签名,而另一个节点可以根据参与方A的数字签名确认消息是由该节点发送的。数字签名还可以用于确保消息在传输过程中不被篡改。例如,再次参考图1。参与方A将向参与方B发送消息。参与方A生成消息的哈希值,然后使用其私钥对哈希值进行加密来生成数字签名。参与方A将该数字签名附加到消息,并将具有数字签名的消息发送给参与方B。参与方B使用参与方A的公钥解密数字签名,从而解密出对应的哈希值。参与方B对所接收的消息进行哈希处理以得到另一哈希值,然后比较两个哈希值。如果哈希值相同,则参与方B可以确认该消息确实来自参与方A,并且未被篡改。
虽然以上对可以适用本说明书实施例的区块链场景进行了说明,但是本说明书实施例还可以适用于其它块链式场景。例如,本说明书实施例还可以适用于类区块链系统。在类区块链系统中,数据可以同样地采用块链式结构来存储,与区块链系统不同的是,在类区块链系统中,存储于块链式结构中的块链数据不需要经过共识处理。
在以下所描述的实施例中,“底层块链式层”是指多层块链式结构的最下层块链式层,“上层块链式层”是指该多层结构中的除底层块链式层之外的各个块链式层,“块链式层”包括底层块链式层和各个上层块链式层。“底层区块”是指底层块链式层中的区块,“上层区块”是指各个上层块链式层中的区块。“相邻上层块链式层”是指相邻的“上一层上层块。“下层”是指“下一层”,例如“下层区块”是指某块链式层的下一层块链式层中的区块。“基准区块”是指各个块链式层中满足预定条件而触发生成对应上层区块的区块,“上一基准区块”是指在同一块链式层中的上一基准区块,例如“基准区块的上一基准区块”中的“基准区块”和“上一基准区块”是指在同一块链式层中相邻的基准区块。“前一区块”或“后一区块”是指在本说明书中提及的验证路径中的某区块的前一区块或后一区块,该区块与其前一区块或后一区块可能位于同一块链式层,也可能位于不同的块链式层。“块高”是指区块在相应块链式层中所处的位置。例如,如果定义各个块链式层的第一个区块的块高为0,则该块链式层的第三个区块的块高可以为2。类似地,如果定义各个块链式层的第一个区块的块高为1,则该块链式层的第三个区块的块高可以为3。块高可以以任意有序的方式来确定,只要能够基于块高定位各个区块在相应块链式层的位置即可。
图3是根据本说明书的一个实施例的用于生成多层块链式结构的方法的流程图。
如图3所示,在块320,基于交易数据生成多层块链式结构的底层块链式层的底层区块。底层块链式层的底层区块可以采用生成块链式结构的任意方法生成,例如可以采用上述参考图1和图2说明的区块链生成方法生成,或采用比特币、以太坊等区块链生成方法来生成。各个交易数据可以在经过各个区块链节点的共识处理和智能合约执行处理之后被打包成底层区块。在类区块链系统中,被上链的交易数据可以不经过共识处理。
在块340,确定底层块链式层中是否存在触发上层块链式层生成条件的基准区块。各个块链式层中的基准区块是与上层块链式层中的各个区块对应的区块。例如,可以基于底层块链式层中的各个区块与其上一基准区块之间的区块数目是否达到指定数目来确定基准区块,还可以基于底层块链式层中的各个区块的生成时间与其上一基准区块的生成时间之间的时间间隔是否达到指定时间间隔来确定基准区块。在本说明书中,在确定区块与另一区块之间的区块数时将该另一区块包括在内。
在确定出基准区块时,在块360,响应于底层块链式层中存在触发上层块链式层生成条件的基准区块,至少部分地基于该基准区块的区块信息,生成上层块链式层的对应上层区块。多层块链式结构可以具有一个上层块链式层,还可以包括多个上层块链式层。当多层块链式结构具有多个上层块链式层时,在基于底层块链式层生成底层块链式层之后,还可以以同样的方式,针对各个上层块链式层,逐次地基于该上层块链式层生成相邻上层块链式层。具体地,可以针对各个上层块链式层,确定该上层块链式层是否存在触发上层块链式层生成条件的基准区块。当存在触发上层块链式层生成条件的基准区块时,至少部分地基于该基准区块的区块信息生成该上层块链式层的相邻上层块链式层。以下结合图4来对多层块链式结构的生成过程进行描述。
图4是根据本说明书的一个实施例的多层块链式结构的示意图。在图4中示意性地示出了四个块链式层,但是本说明书实施例对块链式层的数量没有限制。在图4中,Bij表示第i个块链式层的第j个区块,例如B11表示第一个块链式层(即底层块链式层)的第一个区块,B22表示第二个块链式层(即第一上层块链式层)的第二个区块。
在图4中,B11为创世区块,创世区块是指底层块链式层的第一个区块。随着块链式系统处理的交易数据的增加,依次生成底层块链式层的区块B12至B111等。各个上层块链式层基于该上层块链式层的下层块链式层生成。例如,第一上层块链式层基于底层块链式层生成,第二上层块链式层基于第一上层块链式层生成。各个上层块链式层的第一个区块可以被称为头区块(如头区块B21、B31、B41)。
在一个示例中,可以将各个块链式层的第一个区块确定为该块链式层的第一个基准区块(例如区块B11、B21、B31),然后基于该基准区块生成该块链式层的上层块链式层的头区块(例如区块B21、B31、B41)。可以针对各个上层块链式层,使该上层块链式层的头区块包括该上层块链式层的下层块链式层的第一个区块的哈希值。各个上层块链式层的头区块还可以基于创世区块来生成,例如各个上层块链式层的头区块可以包括创世区块的哈希值。在另一示例中,在生成各个上层块链式层的头区块时,可以复制创世区块以生成该上层块链式层的头区块。通过使各个头区块基于创世区块生成,能够快速地从创世区块定位至各个上层块链式层。
虽然图4中示出了各个上层块链式层的头区块均与创世区块对应的情形,但是在另一示例中,可以针对各个块链式层,将与该块链式层的第一个区块之间的区块数达到指定数目的区块或生成时间与第一个区块的生成时间之间的时间间隔达到指定时间间隔的区块确定为该块链式层的第一个基准区块。例如,可以对图4所示出的示例进行如下简单变形,即各个上层块链式层可以不包括图4所示出的区块B21、B31、B41,从而将图4示出的B22、B32、B42作为第一个区块。作为示例,可以将底层块链式层的区块B13确定为底层块链式层的第一个基准区块,然后可以基于B13来生成第一上层块链式层的第一个上层区块。在该示例中,各个上层块链式层的第一个上层区块可以包括创世区块的哈希值,以快速地从底层块链式层定位至各个上层块链式层,或从各个上层块链式层定位于至底层块链式层。
在确定各个块链式层的第一个基准区块之后,可以以与上一基准区块之间的区块数目达到指定数目或生成时间与上一基准区块的生成时间之间的间隔达到指定时间间隔作为触发条件,来确定各个块链式层的其它基准区块。例如,可以利用如下述参照图5A至图6B描述的过程来确定各个块链式层的各个基准区块,并对应于所确定的基准区块生成上层区块。各个块链式层的生成可以是实时并行执行的,还可以在底层块链式层的各个区块被生成之后,根据系统的计算资源占用情况,在合适的时机生成的各个上层块链式层。
图5A和图5B示出了与底层块链式层非同步地生成上层块链式层的示例。可以在各个块链式层中的各个区块被生成之后,在合适的时机(如系统资源充裕时),遍历该块链式层中未执行基准区块确定过程的区块,即一一查询各个区块,以确定当前被查询区块是否是触发上层块链式层生成条件的基准区块。在确定出基准区块后,可以生成上邻上层块链式层的对应上层区块。例如,可以在生成各个底层区块之后,在合适的时间段遍历所生成各个底层区块,以确定出触发生成第一上层块链式层中的上层区块的基准区块。
图5A是根据本说明书的一个实施例的用于生成多层块链式结构的方法中的基准区块确定过程的流程图。
如图5A所示,在块5A02,针对各个块链式层,确定该块链式层的当前被查询区块与上一基准区块之间的区块数。然后在块5A04,确定当前被查询区块与上一基准区块之间的区块数是否达到指定数目。在本说明书实施例中,区块与另一区块之间的区块包括该另一区块,相应地,在提及区块与另一区块之间的区块数时,应将该另一区块计算在内。例如,B11和B13之间的区块包括B12和B13,相应地,B11与B13之间的区块数为2。
如果当前被查询区块与上一基准区块之间的区块数达到指定数目,则在块5A06,将当前被查询区块确定为基准区块。可以设定各个块链式层的基准区块之间的区块数,例如对于图4中的示例,可个基准区块与上一基准区块之间的区块数为2。如果当前被查询区块与上一基准区块之间的区块数达到了所设定的指定数目,则可以将当前被查询区块确定为基准区块。
如果当前被查询区块与上一基准区块之间的区块数未达到指定数目,则在块5A08,将该块链式层的下一区块作为当前被查询区块,并再次执行上述过程。
图5B是根据本说明书的一个实施例的用于生成多层块链式结构的方法中的基准区块确定过程的另一示例流程图。
如图5B所示,在块5B02,针对各个块链式层,确定该块链式层的当前被查询区块与上一基准区块的生成时间之间的时间时隔。各个区块的生成时间例如可以基于该区块的时间戳来确定。然后在块5B04,判断所确定出的时间间隔是否达到指定时间间隔。
如果所确定出的时间间隔达到指定时间间隔,则在块5B06,将当前被查询区块确定为基准区块。如果所确定出的时间间隔未达到指定时间间隔,则在块5B08,将该块链式层的下一区块作为当前被查询区块,并再次执行上述过程。
图6A和6B示出了与底层块链式层同步地生成上层块链式层的示例。可以对各个块链式层中的区块进行监听,在监听到各个块链式层有新区块加入时,确定该新区块是否是触发上层块链式层生成条件的基准区块。对于全量节点,新加入的区块可以是新生成的区块,对于轻量节点,新加入的区块还可以是从全量节点获取的区块。轻量节点处的各个区块可以仅包括区块头。轻量节点可以在本地生成上层块链式层中和上层区块,还可以从全量节点处获取各个上层块链式层。
图6A是根据本说明书的一个实施例的用于生成多层块链式结构的方法中的基准区块确定过程的另一示例流程图。
如图6A所示,在块6A02和块6A04,监听各个块链式层是否有新区块加入。
当某个块链式层有新区块加入时,在块6A08,确定新区块与上一基准区块之间的区块数。然后,在块6A08,判断所确定的区块数是否达到了指定数目。
如果所确定的区块数达到指定数目,则在块6A12,将该新区块为相应块链式层的基准区块。如果所确定的区块数未达到指定数目,则继续对该块链式层进行监听。
图6B是根据本说明书的一个实施例的用于生成多层块链式结构的方法中的基准区块确定过程的另一示例流程图。
图6B所示,在块6B02和块6B04,监听各个块链式层是否有新区块生成。
当某个块链式层有新区块生成时,在块6B08,确定新区块的生成时间与上一基准区块的生成时间之间的时间间隔。然后,在块6B08,判断所确定的时间间隔是否达到了指定数目。
如果所确定的时间间隔达到指定数目,则在块6B12,将该新区块为相应块链式层的基准区块。如果所确定的时间间隔未达到指定数目,则继续对该块链式层进行监听。
以图4为例,在该多层块链式结构中,底层块链式层的基准区块为B11、B13、B15等,第一上层块链式层的基准区块为B21、B23、B25等,第二上层块链式层的基准区块为B31、B33等。
需要说明的是,在本说明书的实施例中,在基于与上一基准区块之间的区块数目是否达到指定数目来确定基准区块时,同一块链式层的相邻两个基准区块之前的区块数目可以相同也可以不同,各个块链式层所对应的指定数目可以相同也可以不同。此外,当基于生成时间之间的时间间隔来确定基准区块时,同一块链式层的相邻两个基准区块之前的生成时间间隔可以相同或不相同,各个块链式层所对应的指定时间间隔可以相同也可以不同。在一个示例中,可以使各个块链式层的各个基准区块对应的指定数目或指定时间间隔均相同,或者可以针对各个块链式层,使该块链式层的各个基准区块对应的指定数目或指定时间间隔均相同。在该块链式层的各个基准区块对应的指定数目或指定时间间隔均相同时,还可以基于预定规则来确定各个块链式层所对应的指定数目或指定时间间隔。例如,可以使得各个块链式层的相邻基准区块间的区块数以等差数列方式递增。由此,能够基于各个基准区块对应的指定数目或指定时间间隔,实现各个块链式层之间的快速定位。
在确定出基准区块之后,可以基于从该块链式层的第一个区块到该基准区块的所有区块中的至少部分区块的区块信息,生成该块链式层的上层块链式层的对应区块。对于底层块链式层,第一个区块是创世区块,对于各个上层块链式层,第一个区块是相应上层块链式层的头区块。区块信息可以是各个区块的哈希值或区块内容,还可以是区块内容中的部分内容(例如该区块的哈希值和时间戳或该区块的父区块的哈希值和该区块的哈希值)。由此,能够使各个块链式层与对应的下层块链式层链接起来,并能够基于相应区块信息来进行链路验证。
在一个示例中,所生成的上层区块可以包括该基准区块的哈希值。参考图4,第一上层块链式层的区块B22可以包括基准区块B13的哈希值。在另一示例中,针对各个块链式层,可以对该块链式层的第一个区块至基准区块的所有区块的区块内容进行哈希运算得出哈希值,并使对应于该基准区块上层区块包括该哈希值。参考图4,在生成区块B23时,可以对从B11至B15的所有区块的区块内容进行哈希运算以得到哈希值,然后使区块B23包括该哈希值。在另一示例中,针对各个块链式层,可以对该块链式层的第一个区块至基准区块的所有区块的哈希值进行哈希运算得出哈希值,并使对应于该基准区块对应的上层区块包括该哈希值。如图所示,可以对从B11至B15的所有区块的哈希值进行哈希运算以得到哈希值,然后使区块B23包括该哈希值。在另一示例中,针对各个块链式层,还可以将该块链式层的第一个区块和基准区块的区块内容或哈希值进行哈希运算得到哈希值,并使对应于该基准区块的上层块链式层的区块包括该哈希值。如图4所示,对于基准区块B15,可以对B11和B15的区块内容或哈希值进行哈希运算以得到哈希值,然后使对应于B15所生成的上层区块B23包括该哈希值。此外,对应于相应基准区块所生成的上层区块还可以包括利用以上示例所确定出的多个哈希值。
此外,对应于各个块链式层的各个基准区块所生成的上层块链式层的区块还可以具有已知的块链式结构的区块属性。例如,各个上层块链式层的上层区块可包括该上层区块的前一上层区块(父区块)的哈希值。
在另一示例中,还可以存储基准区块与所对应的上层区块的区块索引信息。区块索引信息有助于在各个块链式层之间进行定位。区块索引信息例如可以为基准区块或基准区块所对应的上层区块的块高。区块索引信息可以被包括在基准区块中,基准区块可以包括不参与该基准区块的哈希值运算的字段,可以在生成对应的上层区块之后,将该上层区块的块高写入该字段。区块索引信息可以被包括在基准区块所对应的上层区块中。例如,可以使上层区块的区块头包括基准区块块高字段,在生成对应的上层区块时,将该对应的基准区块的块高写入基准区块块高字段。区块索引信息还可以被包括在基准区块所对应的上层区块的下一区块中。可以在生成该上层区块的下一区块时,将该上层区块的基准区块的块高写入该下一区块的区块头中。在另一示例中,还可以设置索引数据库,在对应于基准区块生成上层区块时,可以将该上层区块与基准区块的区块索引信息存储在索引数据库中。
以下将参考图7至图11来说明本说明书实施例生成的多层块链式结构的应用。如下实施例可以用于区块链系统中的轻量节点。
图7是根据本说明书的一个实施例的用于更新多层块链式结构中的信任点的方法的流程图。信任点指示底层块链式层中的块高最大的已验证底层区块。信任点表示在节点处存储的底层区块中,从创世区块至信任点所指示的底层区块均已经通过了验证,即这些底层区块是被信任的区块。信任点的初始值可以是创世区块,例如,对于从未执行过区块验证的轻量节点,信任点指向创世区块。信任点可以存储在轻量节点处,可以在执行完一个批次的区块验证之后,轻量节点可以将信任点更新为指向当前区块最高的已验证底层区块,例如可以在信任点字段存储当前块高最大的已验证底层区块的块高或哈希值。作为信任点的一种应用,在轻量节点对待验证交易进行SPV验证时,如果待验证交易所在的底层区块位于信任点之前(即该底层区块是已验证过的可信任底层区块),则可以对该待验证交易进行存在性证明,并在存在性证明验证通过后确定该待验证交易已被正确执行。
如图7所示,在块720,基于多层块链式结构,确定当前信任点所指示的已验证底层区块与目标底层区块之间的验证路径。轻量节点可以在需要更新信任点时,从全量节点获取当前信任点指示的已验证区块与目标底层区块之间的各个块链式层的区块,并将所获取的区块添加到本地的各个块链式层中。然后,轻量节点可以基于本地存储的多层块链式结构来确定验证路径。参考图4,当前信任点可以指向底层块链式层的区块B14。目标底层区块例如可以是图4中的B112。
在一个示例中,可以在对待验证交易进行SPV验证时更新信任点,目标底层区块可以基于待验证交易所在的待验证底层区块来确定。图8是根据本说明书的一个实施例的对待验证交易进行SPV验证的方法的流程图。
如图8,在块802,确定待验证交易所在的待验证底层区块。当轻量节点想要获知某个交易是否被正确执行时,可以从全量节点处获取该交易所在的底层区块。全量节点可以将该交易所在的底层区块的块高发送给轻量节点。然后,轻量节点可以对该交易进行SPV验证。SPV验证可以包括正确性验证和存在性验证(或称为存在性证明)。正确性验证可以通过验证从创世区块至待验证底层区块之间的链路完整性来执行,用于证明待验证交易是正确的。存在性验证用于证明待验证交易确实存在于待验证区块中,可以基于任意存在性证明方法来执行。例如,可以基于MPT树获取待验证交易在MPT树中的查询路径,并基于所获取的查询路中各个MPT树的数据节点来验证交易树根哈希是否与块头中的交易树根哈希一致,当二者一致时,可以确定待验证交易确实存在于待验证底层区块中。
在确定待验证底层区块之后,在块804,确定待验证底层区块是否位于信任点之前。即,确定待验证底层区块是否是可信任的底层区块。可以通过比较待验证区块的块高与信任点所指向的已验证底层区块块高来确定待验证交易是否位于信任点之前。
当待验证底层区块位于信任点之前时,表明从创世区块至待验证交易所在的待验证底层区块之间的链路是正确的。因而可以在块808,对待验证交易进行存在性证明,并在块810,确定存在性证明是否通过。当待验证底层区块不是位于信任点之前时,可以在块806,使用本说明书实施例所描述的信任点更新方法,将信任点更新至块高不小于待验证底层区块的目标底层区块。此时,块高不小于待验证交易所在的底层区块的任意底层区块均可以作为目标底层区块。在更新信任点之后,可以在块808,对待验证交易进行存在性证明。
如果存在性证明通过,则可以在块812,确定待验证交易已被正确执行。如果存在性证明不通过,则可以在块814,确定待验证交易未被正确执行。
验证路径是指从当前信任点验证至目标底层区块的路径。验证路径可以经由任意块链式层。例如,如图4所示,从当前信任点TP至目标底层区块B112之间的验证路径可以是B15→B23→B32→B33→B25→B26→B111→B112。
验证路径可以只经由底层块链式层,还可以经由至少一个上层块链式层来确定。由于各个块链式层的相邻两个基准区块之间间隔有至少一个区块,因而该块链式层的上层区块相当于“跳过”了所间隔的区块。由此,在经由至少一个上层块链式层来确定验证路径时,能够减少验证路径中的区块数,从而提高验证效率。可以从当前信任点所指向的已验证底层区块与目标底层区块之间的所有路径中,选择最短路径(即经过区块最少的路径)以作为验证路径。
在经由上层块链式层确定验证路径时,在从各个块链式层上升到上层块链式层或从上层块链式层下降至下层块链式层时,存在路径损耗。即,由于在块链式层之间的上升或下降,可能出现路径所经由的区块数增加的情况。因此,在当前信任点所指示的已验证底层区块与目标底层区块之间的的区块数较少时,如果经由上层块链式层可能会导致验证路径比仅经由底层块链式层确定的验证路径要长。因而,在一个示例中,可以在当前信任点所指示的已验证底层区块与目标底层区块之前至少存在两个底层基准区块时,经由至少一个上层块链式层来确定验证路径。在另一示例中,所确定出的目标底层区块与当前信任点所指示的已验证底层区块之间的底层区块数可以大于第一预定数量。由此,目标底层区块与当前信任点所指向的已验证底层区块之间的底层区块数足够大,因而可以在每次更新信任点时经由至少一个上层块链式层来确定验证路径。当目标底层区块与当前信任点所指示的已验证底层区块之间的底层区块数大于第二预定数量(第二预定数量不小于第一预定数量)时,可以经由多个上层块链式层来确定验证路径,从而能够尽量地减少验证路径中所包括的区块数,以提高验证效率。
验证路径可以基于第一区块数和第二区块数来确定,第一区块数是各个块链式层的相邻两个基准区块之间的区块数,第二区块数是目标底层区块与已验证底层区块之间的底层区块数。在一个示例中,在各个块链式层中相邻两个基准区块之间可以存在相同数量的区块,即相邻两个基准区块之间的第一区块数相等。在该示例中,假设第一区块数为N,则第L层块链式层中的相邻两个区块之间所存在的底层区块数为NL-1个。例如,参考图4,第二个块链式层(即第一上层块链式层)中的相邻两个区块之间有22-1个底层区块。可以基于第一区块数和第二区块数来确定验证路径所经由的块链式层的上升点,对于验证路径所经过的各个区块,如果该区块的后一区块是相临上层块链式层的区块,则该区块被称为上升点。在验证路径中第L个块链式层的上升点所对应的区块在第L层块链式层中的序号为(%表示取余运算):
X+[N-(X-1)%N]%N,
其中,BLX为验证路径中的第L个块链式层的第一个区块。例如,在图4所示的验证路径中,对于第二个块链式层(即第一上层块链式层),其上升点为3+[2-(3-1)%2]%2,运算结果为3,即X的值是3,因此第二个块链式层中的第三个区块B23为上升点。
验证路径所经过的各个块链式层的下降点也可以基于第一区块数和第二区块数来确定。对于验证路径所经过的各个区块,如果该区块的后一区块是下层块链式层的区块,则该区块被称为下降点。假设当前信任点所指示的已验证区块为B1j(底层块链式层的第j个区块),目标底层区块为B1k(底层块链式层的第k个区块)。则第L层块链式层中的下降点所对应的区块的序号为:
(k-k%N)/NL-1
如果某区块同时符合上升点和下降点的条件,则将该区块确定为下降点(如B33)。
在确定出各个块链式层中的上升点和下降点之后,该块链式层中的上升点和下降点之间的区块均是验证路径中的区块。在图4所示出的示例中,确定出的上升点分别是B15、B23,下降点分别是B33和B26。
在各个块链式层中相邻两个区块之间的第一区块数相等时,为了使得所确定出的验证路径是当前信任点所指向的已验证底层区块和目标底层区块之间的最短路径,可以使得所经过的块链式层的最大层数不超过第一区块数。例如,以图4为例,通过上述实施例所确定出的验证路径B15→B23→B32→B33→B25→B26→B111→B112包括8个区块。如果使验证路径所经过的块链式层的最大层数不超过相邻两个基准区块的第一区块数(即2),则验证路径所经过的最大层数为第二个块链式层(即第一上层块链式层),那么所确定的验证路径将会是B15→B23→B24→B25→B26→B111→B112,该验证路径包括7个区块。即,验证路径相对于经过的块链式层数超过第一间隔区块数时的情形被缩短了。
对于各个块链式层中的相邻两个基准区块之间的第一区块数不相等的情况,第一区块数可以基于区块索引信息来确定。由于区块索引信息中包括基准区块与所对应的上层区块之间的索引关系,可以基于区块索引信息来确定已验证底层区块与目标底层区块之间的各层块链式层中的基准区块,并确定出各层块链式层中相邻两个基准区块之间的第一区块数。在确得到第一区块数之后,出在经由上层块链式层确定验证路径时,可以基于相邻两个基准区块之间的第一区块数和已验证底层区块与目标底层区块之间的第二区块数,计算得出各层块链式层应当被包括在验证路径中的区块。
如果相邻两个基准区块之间的区块数不完全相等,还可以基于区块索引信息确定验证路径,区块索引信息指示各个基准区块与所对应的上一层区块之间的索引。可以基于区块索引来确定各个块链式层中的基准区块,然后可以在上升到各个上层块链式层之后,可以通过试探的方式来确定该块链式层的下一区块是否已达到或超过目标底层区块。如果达到或超过了底层区块,则舍弃该块链式层,并下降到下层块链式层继续查找。
由于区块索引信息中存储有各个基准区块与对应上层区块之间的索引关系,因而可以基于区块索引信息来确定在上层块链式层中的各个上层区块实际上是否已超过目标底层区块。例如,区块索引信息可以被包括在各个基准区块中,各个基准区块中可以包括上层区块索引字段,例如可以把该基准区块所对应的上层区块的块高或哈希值写入该基准区块的上层区块索引字段。在确定验证路径时,可以从当前信任点所指向的已验证底层区块起查询各个底层区块,当被查询区块的上层区块索引字段为空时表明该被查询区块不是相应块链式层的基准区块,当上层区块索引字段不为空时,表明该被查询区块是基准区块。此时,可以基于上层区块索引信息确定该被查询区块所对应的上层区块,然后上升到相邻上层块链式层继续进行查询。在上层块链式层进行查询时,如果确定出某个上层区块是相应上层块链式层中的基准区块,由于上层区块中包括相应下层区块的索引,可以基于相应下层区块的索引确定该上层区块所能够定位到的底层区块是否已超过了目标底层区块。如果没有超过目标底层区块,则可以继续上升到上层块链式层,若超过了目标底层区块则回退到该上层块链式层的前一上层区块,并下降到下层块链式层。在下降到该上层块链式层的下层块链式层之后,如果该下层块链式层仍然是上层块链式层,则可以继续确定所下降到的下层区块的下一区块是否超过目标底层区块。如果下一区块没有超过目标底层区块,则该下层区块的下一区块可以被确定为验证路径中的区块。如果该下层区块的下一区块已超过目标底层区块,则继续下降,直到下降到底层区块链为止。执行上述过程直到查询至目标底层区块即可确定出验证路径。
在确定验证路径之后,在块740,针对验证路径中的各个区块,验证该区块与前一区块之间的链路是否正确。链路验证过程可以基于各个区块之间的链接关系来确定。对于验证路径中位于同一块链式层的区块,每个区块中存储有父哈希,因而可以基于前一区块的区块信息来验证各个区块与前一区块之间的链路是否正确。例如,以图4中实线箭头所指示的验证路径为例,B14和B15、B32和B33分别位于底层块链式层和第二上层块链式层,B14是B15的父区块,B32是B33的父区块。因而可以基于B15中的父哈希和B14的区块信息来验证B14与B15之间的链路是否正确。对于位于不同块链式层的相邻区块,由于上层区块是基于下层的对应基准区块生成的,因而可以基于对应基准区块的区块信息来验证该两个相邻区块之间的链路是否正确。以图4中示出的验证路径为例,B15与B23、B32分别位于不同的块链式层,B15是B23的基准区块、B23是B32的基准区块。由于B23是至少基于B15的区块信息生成的、B32是至少基于B23的区块信息而生成的,因而可以基于B15和B23的区块信息来验证B15和B23之前的链路,并基于B23和B32的区块信息来验证B23和B32之前的链路。具体的链路验证过程将在下文参照图9来进行描述。
需要说明的是,验证路径中各个区块之间的链路验证过程可以是在确定验证路径之后执行的,也可以是在确定验证路径的过程中执行的。例如,对于图4所示出的验证路径,可以在确定B14的下一区块(即B15)时,验证B14与B15之间的链路,然后确定B15的下一区块。在确定出B15的下一区块(即B23)之后,验证B15与B23之间的链路。在验证路径的确定过程以及链路验证过程中,当出现任意两个区块之前的链路不正确时,即可以确定验证路径中的链路不正确。
然后,在块760,确定验证路径中的各个区块之间的链路是否均正确。当验证路径中的各个区块之间的链路均正确时,在块780,将信任点更新为指示目标底层区块。
验证路径中的各个区块中可以存储有至少基于前一区块的区块信息生成的第一哈希值。如果该区块的前一区块与该区块位于相同块链式层,则第一哈希值可以是该区块的父哈希。如果该区块的前一区块与该区块位于不同块链式层,则第一哈希值可以是至少部分地基于该前一区块的区块信息来进行哈希运算得到的。此时,可以利用如图9所示的示例来进行链路验证。图9是根据本说明书的一个实施例的用于更新区块链中的信任点的方法中的链路验证过程的流程图。
如图9所示,在块902,至少基于上一区块的区块信息进行哈希运算,以得到第二哈希值。然后,在块804,确定所得到的第二哈希值与该区块中的第一哈希值是否一致。当二者一致时,在块906,确定该区块与前一区块之间的链路是正确的。当二者不一致时,在块908,确定该区块与前一区块之间的链路是不正确的。
当该区块的前一区块与该区块位于相同块链式层时,可以对前一区块的区块头进行哈希运算以得到第二哈希值。然后,可以比较该第二哈希值与该区块中的父哈希的一致性。例如,以图4中实线箭头所指示的验证路径为例,由于B14是B15的父区块,因而可以对B14的区块信息进行哈希运算以得到哈希值,并比较所得到的哈希值与B15中存储的父哈希的一致性。当二者一致时,可以确定B14和B15之间的链路是正确的。
当该区块的前一区块与该区块位于不同块链式层时,前一区块是该区块的基准区块,因而可以至少部分地基于前一区块的区块信息来进行哈希运算,以得到第二哈希值。例如,上层区块可以包括对应基准区块的哈希值。在该示例中,如果验证路径中的某个区块的前一区块位于下层块链式层,则可以对前一区块的区块信息进行哈希运算以得到第二哈希值。以图4中示出的验证路径中的B15与B23为例,可以对B15的区块头进行哈希运算以得到第二哈希值。然后可以比较所得到的第二哈希值与B23中存储的B15的哈希值是否一致,如果二者一致则可以确定B15和B23之间的链路是正确的。再例如,在对应于基准区块来生成上层区块时,可以对从基准区块所在的块链式层中,从第一个区块至该基准区块的所有区块的区块信息进行哈希运算,并将所得到的哈希值作为第一哈希值存储在所生成的上层区块中。在该示例中,如果验证路径中的某个区块的前一区块位于下层块链式层,可以对前一区块所在的块链式层中的第一个区块至该前一区块的所有区块信息进行哈希运算,以得到第二哈希值。以图4中示出的验证路径中的B15与B23为例,可以对B11、B12、B13、B14和B15的区块信息进行哈希运算以得到第二哈希值。然后可以比较所得到的哈希值与B23中存储的第一哈希值,如果二者一致则可以确定B15与B23之间的链路是正确的。
在验证路径中的各个区块之间的链路被验证为正确之后,还可以对目标底层区块的正确性进行验证。目标底层区块的正确性可以通过验证其是否经过了全网共识来执行。图10是根据本说明书的另一实施例的用于更新区块链中的信任点的方法的流程图。
如图10所示,在块1002,基于多层块链式结构,确定当前信任点所指示的已验证底层区块与目标底层区块之间的验证路径。在确定验证路径之后,在块1004,针对验证路径中的各个区块,验证该区块与该区块的前一区块之间的链路是否正确。然后在块1006,判断是否验证路径中各个区块之间的链路均被验证为正确。
如果各个区块与上一区块之间的链路均被验证为正确,则在块1008,确定目标底层区块是否正确。可以参照图11所示的示例来验证目标底层区块是否正确。
图11是根据本说明书的一个实施例的用于更新多层块链式结构中的信任点的方法中的目标底层区块验证过程的流程图。
如图11所示,在块1102,从区块链系统中的多个全量节点处获取目标底层区块的多个目标底层区块信息。
然后,在块1104,当多个目标底层区块信息中存在不低于法定数量的一致的目标底层区块信息时,确定目标底层区块是正确的。当存在不低于法定数量的一致的目标底层区块信息时,可以确定目标底层区块已经过全网共识,因而可以确定其是正确的。
在目标底层区块被确定正确时,在块1010,将信任点更新为指示目标底层区块。如果验证路径各个区块与上一区块之间的链路不完全正确或目标底层区块被确定为不正确,则表明目标底层区块不能信任的区块。在这种情况下,可以重新确定目标底层区块,并执行信任点更新过程。
在多层块链式结构应用于中心化的类区块链系统时,各个底层块链式层中的各个区块在被生成以后,可以将该区块发送给所信任的第三方服务器,第三方服务器可以利用其私钥对该区块进行签名认证。在验证目标底层区块是否正确时,可以从第三方服务器获取针对该目标底层区块的签名,然后用第三方服务器的公钥对所获取的目标底层区块的签名进行验证,验证通过时可以确定目标底层区块是正确的。
通过该实施例,能够进一步保证更新后的信任点的可信程度。图12是根据本说明书的一个实施例的多层块链式结构生成装置的结构框图。如图12所示,多层块链式结构生成装置1200包括底层块链式层生成单元1210和上层块链式层生成单元1220。
底层块链式层生成单元1210基于交易数据生成多层结构中的底层块链式层的区块。上层块链式层生成单元1220根据上层块链式层生成条件,基于底层块链式层生成上层块链式层。上层块链式层生成单元1220包括基准区块确定模块1221和上层块链式层生成模块1222。基准区块确定模块1221确定底层块链式层中是否存在触发上层块链式层生成条件的基准区块。上层块链式层生成条件可以包括该基准区块与上一基准区块之间的区块数目达到指定数目,还可以包括该基准区块的生成时间与上一基准区块的生成时间之间的时间间隔达到指定时间间隔。
在一个示例中,基准区块确定单元1220可以遍历多层块链式结构中的各个块链式层中的区块,以确定满足上层块链式层生成条件的基准区块。在另一个示例中,基准区块确定单元1220可以针对区块链中的各个块链式层,确定新生成的区块是否是满足上层块链式层生成条件的基准区块。
上层块链式层生成模块1222响应于底层块链式层中存在触发上层块链式层区块生成条件的基准区块,至少部分地基于该基准区块的区块信息,生成上层块链式层的对应上层区块。
多层块链式结构可以包括多个上层块链式层。在该示例中,上层块链式层生成单元1220可以针对各个上层块链式层,根据相同或者不同的上层块链式层生成条件,基于该上层块链式层生成该上层块链式层的相邻上层块链式层。具体地,基准区块确定模块1221可以针对各个上层块链式层,确定该上层块链式层中是否存在触发上层块链式层生成条件的基准区块。当存在触发上层块链式层生成条件的基准区块时,上层块链式层生成模块1222可以至少部分地基于该基准区块的区块信息,生成该上层块链式层的相邻上层块链式层的对应上层区块。
在一个示例中,上层块链式层生成模块1222还可以基于从各个块链式层的第一个区块到该基准区块的所有区块中的至少部分区块的区块信息,生成该块链式层的相邻上层块链式层的对应区块。
区块链生成装置还可以包括区块索引信息存储单元(附图中未示出)。区块索引信息存储单元存储基准区块与对应上层区块的区块索引信息。在一个示例中,区块索引信息存储单元可以将区块索引信息存储在基准区块或基准区块所对应的上层区块中,还可以将区块索引信息存储在该上层区块的下一区块中。在另一示例中,区块索引信息存储单元还可以将区块索引信息存储在索引数据库中。
图13是根据本说明书的一个实施例的用于更新多层块链式结构中的信任点的装置的结构框图。如图13所示,信任点更新装置1300包括验证路径确定单元1310、链路验证单元1320、目标底层区块验证单元1330和信任点更新单元1340。
验证路径确定单元1310基于多层块链式结构,确定当前信任点所指示的已验证底层区块与目标底层区块之间的验证路径。在一个示例中,验证路径确定单元1310可以在目标底层区块和已验证底层区块之间存在至少两个底层块链式层的基准区块时,经由至少一个上层块链式层确定验证路径。
在一个示例中,各个块链式层中的相邻两个基准区块之间的第一区块数可以是相等的,验证路径所经过的上层块链式层的数量可以不超过第一区块数。
在一个示例中,验证路径确定单元1310可以基于第一区块数和第二区块数来确定验证路径,第一区块数是各个块链式层的相邻两个基准区块之间的区块数,第二区块数是目标底层区块与已验证底层区块之间的区块数。各个块链式层的相邻两个基准区块之间的第一间隔区块数可以是基于区块索引信息确定的。
在另一示例中,验证路径确定单元1310还可以基于区块索引信息确定验证路径。
在确定验证路径之后,链路验证单元1320针对验证路径中的各个区块,验证该区块与该区块的前一区块之间的链路是否正确。目标底层区块验证单元1330验证目标底层区块是否正确。信任点更新单元1340当验证路径中的各个区块之间的链路均正确并且目标区块是正确的时,将目标底层区块更新为信任点。
在另一示例中,信任点更新装置可以不包括目标底层区块验证单元1330。在该示例中,信任点更新单元1340可以当验证路径中的各个区块之间的链路均正确时,将目标底层区块更新为信任点。
图14是图13所示的用于更新多层块链式结构的信任点的装置中的链路验证单元的结构框图。如图14所示,链路验证单元1320包括哈希运算模块1321和链路验证模块1322。在该示例中,验证路径中的各个区块包括前一区块的第一哈希值。
哈希运算模块1321至少部分地基于本地获取的前一区块的区块信息进行哈希运算,以得到第二哈希值。链路验证模块1322基于第二哈希值与第一哈希值之间的一致性,验证该区块与前一区块之间的链路是否正确。
图15是图13所示的用于更新多层块链式结构中的信任点的装置中的目标底层区块验证单元的结构框图。如图15所示,目标底层区块验证单元1330包括哈希运算模块1331和链路验证模块1332。
目标底层区块信息获取模块1321从区块链系统中的多个全量节点处获取目标底层区块的多个目标底层区块信息。目标底层区块验证模块1322当多个目标底层区块信息中存在不低于法定数量的一致的目标底层区块信息时,确定目标底层区块是否正确。
以上参照图1到6和图12,对根据本说明书实施例的用于生成多层块链式结构的方法及装置的实施例进行了描述,并参照图7到11、13至15对信任点更新方法及装置进行了描述。在以上对方法实施例的描述中所提及的细节,同样适用于本说明书实施例的装置的实施例。
本说明书实施例的多层块链式结构生成装置和信任点更新装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见。
本说明书实施例的多层块链式结构生成装置和信任点更新装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。以软件实现为例,作为逻辑意义上的装置,是通过其所在设备的处理器将存储器中对应的计算机程序指令读取到内存中运行形成的。在本说明书实施例中,多层块链式结构生成装置和信任点更新装置例如可以利用计算设备实现。
图16是根据本说明书的一个实施例的用于实现区块链生成方法或信任点更新方法的计算设备的结构框图。如图16所示,计算设备1600包括处理器1610、存储器1620、内存1630、通信接口1640和内部总线1650,并且处理器1610、存储器(例如,非易失性存储器)1620、内存1630、通信接口1640经由总线1650连接在一起。根据一个实施例,计算设备1600可以包括至少一个处理器1610,该至少一个处理器1610执行在计算机可读存储介质(即,存储器1620)中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器1620中存储计算机可执行指令,其当执行时使得至少一个处理器1610:基于交易数据生成多层块链式结构中的底层块链式层的区块;以及根据上层块链式层生成条件,基于底层块链式层生成上层块链式层,其中,根据上层块链式层生成条件,基于底层块链式层生成上层块链式层包括:确定底层块链式层中是否存在触发上层块链式层生成条件的基准区块;响应于底层块链式层中存在触发上层块链式层生成条件的基准区块,至少部分地基于该基准区块的区块信息,生成上层块链式层的对应上层区块。
在另一实施例中,在存储器1620中存储计算机可执行指令,其当执行时使得至少一个处理器1610:基于多层块链式结构,确定当前信任点所指示的已验证底层区块与目标底层区块之间的验证路径;针对所述验证路径中的各个区块,验证该区块与该区块的前一区块之间的链路是否正确;以及当所述验证路径中的各个区块之间的链路均正确时,将所述目标底层区块更新为信任点。
应该理解,在存储器1620中存储的计算机可执行指令当执行时使得至少一个处理器1610进行本说明书实施例的各个实施例中以上结合图1到6和图12描述的各种操作和功能,或参照图7到11、13至15所描述的各种操作和功能。
根据一个实施例,提供了一种例如非暂时性机器可读介质的程序产品。非暂时性机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书实施例的各个实施例中以上结合图1到6和图12描述的各种操作和功能,或参照图7到11、13至15所描述的各种操作和功能。
具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
以上结合附图详细描述了本说明书实施例的实施例的可选实施方式,但是,本说明书实施例的实施例并不限于上述实施方式中的具体细节,在本说明书实施例的实施例的技术构思范围内,可以对本说明书实施例的实施例的技术方案进行多种简单变型,这些简单变型均属于本说明书实施例的实施例的保护范围。
本说明书实施例内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本说明书实施例内容。对于本领域普通技术人员来说,对本说明书实施例内容进行的各种修改是显而易见的,并且,也可以在不脱离本说明书实施例内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本说明书实施例内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。