应用于区块链系统中矿工节点的共识方法和区块链系统与流程

文档序号:19741093发布日期:2020-01-18 05:13阅读:337来源:国知局
应用于区块链系统中矿工节点的共识方法和区块链系统与流程

本申请实施例涉及计算机技术领域,具体涉及应用于区块链系统中矿工节点的共识方法和区块链系统。



背景技术:

目前区块链的公有链中主要采用pow(proofofwork,工作量证明)作为共识算法来确定哪个矿工节点获得记账权。pow作为共识算法的优点是适应面广、安全性高,最大缺点是无意义的哈希碰撞计算(俗称挖矿)导致大量电能浪费。

在区块链的联盟链中有采用poet(proofofelapsedtime,消逝时间量证明)作为共识算法,但目前的poet共识算法依赖于特定型号的cpu,而联盟链是在特定机构间搭建区块链系统,因此,指定统一使用特定型号的cpu是可接受的,但公有链系统则不适合限定使用特定型号的cpu,因此,目前的poet不适合应用在公有链中。



技术实现要素:

本申请实施例提出了应用于区块链系统中矿工节点的共识方法和装置。

第一方面,本申请实施例提供了一种应用于区块链系统中矿工节点的共识方法,该方法包括:获取累计未用下限时长;在矿工节点的可信执行环境中执行以下记账权确定操作:确定矿工节点的当前累计未用时长;确定当前累计未用时长是否大于累计未用下限时长;响应于确定当前累计未用时长大于累计未用下限时长,确定矿工节点竞争到记账权,以及用当前累计未用时长与累计未用下限时长的差更新当前累计未用时长。

在一些实施例中,记账权确定操作还包括:响应于确定矿工节点竞争到记账权,根据矿工节点竞争到记账权的区块,确定是否调整累计未用下限时长;响应于确定调整累计未用下限时长,执行以下累计未用下限时长调整操作:根据累计未用下限时长、调整周期实等时长和期望调整周期时长确定调整后累计未用下限时长,调整周期实等时长为矿工节点竞争到记账权的区块的生成时间和矿工节点的区块链中上次调整累计未用下限时长对应的区块的生成时间之间的时长;以及将累计未用下限时长更新为调整后累计未用下限时长。

在一些实施例中,调整后累计未用下限时长与累计未用下限时长和期望调整周期时长均正相关,调整后累计未用下限时长与调整周期实等时长负相关。

在一些实施例中,在确定矿工节点竞争到记账权之后,记账权确定操作还包括:在矿工节点的可信执行环境中,将记账权确定信息利用可信执行环境中存储的预设私钥签名后广播给矿工节点的相邻节点,其中,记账权确定信息包括:矿工节点的区块链中矿工节点竞争到记账权的区块的上一区块的哈希值、累计未用下限时长和矿工节点绑定的账号地址,其中,矿工节点绑定的账号地址存储在矿工节点的可信执行环境中。

在一些实施例中,该方法还包括:响应于接收到记账权确定信息,利用预设公钥对所收到的记账权确定信息进行签名验证;响应于对所收到的记账权确定信息进行签名验证通过,分别利用矿工节点的区块链中的尾部区块的哈希值和累计未用下限时长对所收到的记账权确定信息中的上一区块哈希值和累计未用下限时长进行校验;响应于校验通过,将所收到的记账权确定信息中的账号地址确定为竞争到第一当前区块的矿工节点绑定的账号地址,其中,第一当前区块为所收到的记账权确定信息中上一区块哈希值所指示的区块的下一区块。

在一些实施例中,确定矿工节点的当前累计未用时长,包括:响应于确定矿工节点的当前累计未用时长大于累计未用上限时长,将当前累计未用时长更新为累计未用上限时长。

第二方面,本申请实施例提供了一种应用于区块链系统中矿工节点的共识装置,该装置包括:获取单元,被配置成获取累计未用下限时长;记账权确定单元,被配置成在矿工节点的可信执行环境中执行以下记账权确定操作:确定矿工节点的当前累计未用时长;确定当前累计未用时长是否大于累计未用下限时长;响应于确定当前累计未用时长大于累计未用下限时长,确定矿工节点竞争到记账权,以及用当前累计未用时长与累计未用下限时长的差更新当前累计未用时长。

在一些实施例中,记账权确定操作还包括:响应于确定矿工节点竞争到记账权,根据矿工节点竞争到记账权的区块,确定是否调整累计未用下限时长;响应于确定调整累计未用下限时长,执行以下累计未用下限时长调整操作:根据累计未用下限时长、调整周期实等时长和期望调整周期时长确定调整后累计未用下限时长,调整周期实等时长为矿工节点竞争到记账权的区块的生成时间和矿工节点的区块链中上次调整累计未用下限时长对应的区块的生成时间之间的时长;以及将累计未用下限时长更新为调整后累计未用下限时长。

在一些实施例中,调整后累计未用下限时长与累计未用下限时长和期望调整周期时长均正相关,调整后累计未用下限时长与调整周期实等时长负相关。

在一些实施例中,在确定矿工节点竞争到记账权之后,记账权确定操作还包括:在矿工节点的可信执行环境中,将记账权确定信息利用可信执行环境中存储的预设私钥签名后广播给矿工节点的相邻节点,其中,记账权确定信息包括:矿工节点的区块链中矿工节点竞争到记账权的区块的上一区块的哈希值、累计未用下限时长和矿工节点绑定的账号地址,其中,矿工节点绑定的账号地址存储在矿工节点的可信执行环境中。

在一些实施例中,该装置还包括:签名验证单元,被配置成响应于接收到记账权确定信息,利用预设公钥对所收到的记账权确定信息进行签名验证;校验单元,被配置成响应于对所收到的记账权确定信息进行签名验证通过,分别利用矿工节点的区块链中的尾部区块的哈希值和累计未用下限时长对所收到的记账权确定信息中的上一区块哈希值和累计未用下限时长进行校验;确定单元,被配置成响应于校验通过,将所收到的记账权确定信息中的账号地址确定为竞争到第一当前区块的矿工节点绑定的账号地址,其中,第一当前区块为所收到的记账权确定信息中上一区块哈希值所指示的区块的下一区块。

在一些实施例中,记账权确定单元进一步被配置成:响应于确定矿工节点的当前累计未用时长大于累计未用上限时长,将当前累计未用时长更新为累计未用上限时长。

第三方面,本申请实施例提供了一种矿工节点,包括:一个或多个处理器;存储装置,其上存储有一个或多个程序,当上述一个或多个程序被上述一个或多个处理器执行时,使得上述一个或多个处理器实现如第一方面中任一实现方式描述的方法。

第四方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,其中,该计算机程序被一个或多个处理器执行时实现如第一方面中任一实现方式描述的方法。

第五方面,本申请实施例提供了一种区块链系统,其中,区块链系统包括至少一个并行链,并行链包括路由节点和至少一个矿工节点,其中,至少一个并行链的路由节点之间网络连接,矿工节点绑定有账号地址,矿工节点被配置成采用如第一方面中任一实现方式描述的方法竞争该矿工节点所在并行链的链内交易请求的记账权,路由节点被配置成:实时将该路由节点的同链矿工节点的区块链同步到本地区块链。

在一些实施例中,路由节点还被配置成:响应于接收到包括区块哈希值、累计未用下限时长和账号地址的记账权确定信息,利用预设公钥对所收到的记账权确定信息进行签名验证;响应于对所收到的记账权确定信息进行签名验证通过,分别利用该路由节点的区块链中的尾部区块的哈希值和该路由节点本地存储的累计未用下限时长对所收到的记账权确定信息中的区块哈希值和累计未用下限时长进行校验;响应于对所收到的记账权确定信息中的区块哈希值和累计未用下限时长进行校验通过,将所收到的记账权确定信息中的账号地址确定为竞争到第二当前区块的矿工节点绑定的账号地址,其中,第二当前区块为所收到的记账权确定信息中上一区块哈希值所指示的区块的下一区块。

在一些实施例中,路由节点还被配置成:响应于对所收到的记账权确定信息中的区块哈希值和累计未用下限时长进行校验不通过,将所收到的记账权确定信息中的账号地址添加到本地存储的黑名单账号地址集合。

在一些实施例中,矿工节点还被配置成:根据该矿工节点竞争到记账权的区块,确定是否进入新的累计未用下限时长调整周期;响应于确定进入新的累计未用下限时长调整周期,执行以下当期每区块记账奖励确定操作:获取该矿工节点的同链路由节点绑定的账号地址对应的数字货币余额;将获取的数字货币余额除以预设周期区块数目所得到的比值的整数部分确定为当期每区块记账奖励;将当期每区块记账奖励与预设周期区块数目的积确定为当期待分配奖励;根据所选取的待处理交易请求、当期待分配奖励转出信息、当前区块奖励转入信息和当前区块奖励转出信息生成矿工节点竞争到记账权的区块的区块数据,其中,当期待分配奖励转出信息用于表征从该矿工节点的同链路由节点绑定的账号地址转出当期待分配奖励,当前区块奖励转入信息用于表征将当期每区块记账奖励转入该矿工节点绑定的账号地址,所述当前区块奖励转出信息用于表征将所选取的待处理交易请求对应的记账奖励转入该矿工节点的同链路由节点绑定的账号地址;响应于确定未进入新的累计未用下限时长调整周期,根据所选取的待处理交易请求、当前区块奖励转入信息和当前区块奖励转出信息生成矿工节点竞争到记账权的区块的区块数据。

在一些实施例中,在矿工节点的可信执行环境中执行以下记账权确定操作,包括:响应于采用工作量证明共识机制进行哈希碰撞计算所用的随机数满足预设条件,在矿工节点的可信执行环境中执行记账权确定操作。

在一些实施例中,矿工节点还被配置成:执行以下哈希碰撞难度目标值调整操作:响应于确定矿工节点竞争到记账权,根据矿工节点竞争到记账权的区块,确定是否调整哈希碰撞的难度目标值;响应于确定调整哈希碰撞的难度目标值,根据当前哈希碰撞的难度目标值、调整周期实等时长和期望调整周期时长确定调整后难度目标值,以及将当前哈希碰撞的难度目标值更新为调整后难度目标值。

在一些实施例中,路由节点还被配置成:确定该路由节点的同一同链矿工节点相邻两次竞争到记账权的时间间隔;响应于累计未用下限时长减去所确定的时间间隔的时长差大于预设时长阈值,将所确定的时间间隔对应的矿工节点绑定的账号地址添加到黑名单账号地址集合。

本申请实施例提供的应用于区块链系统中矿工节点的共识方法,通过在矿工节点的可信执行环境中确定矿工节点的当前累计未用时长大于累计未用下限时长的情况下,确定矿工节点竞争到记账权,以及用当前累计未用时长与累计未用下限时长的差更新当前累计未用时长,降低了区块链中公有链的电能消耗。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1是本申请的一个实施例可以应用于其中的示例性系统架构图;

图2a是根据本申请的应用于区块链系统中矿工节点的共识方法的一个实施例的流程图;

图2b是图2a所示的流程图中步骤202的分解流程图;

图3是根据本申请的应用于区块链系统中矿工节点的共识方法的又一个实施例的流程图;

图4是根据本申请的区块链系统的一个实施例的示例性系统架构图;

图5a和图5b是根据本申请的区块链系统的一个实施例的时序图;

图5c是图5b所示的时序图中步骤508的分解流程图;

图6是根据本申请的应用于区块链系统中矿工节点的共识装置的一个实施例的结构示意图;

图7是适于用来实现本申请实施例的矿工节点的计算机系统的结构示意图。

具体实施方式

下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

图1示出了可以应用本申请的应用于区块链系统中矿工节点的共识方法或应用于区块链系统中矿工节点的共识装置的实施例的示例性系统架构100。

如图1所示,系统架构100可以包括矿工节点101、102、103和网络104。网络104用以在终端设备101、102、103之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用矿工节点101、102、103通过网络104与其他矿工节点交互,以接收或发送消息等。矿工节点101、102、103上可以安装有各种通讯客户端应用,例如区块链记账类应用、数字货币钱包类应用、网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。

矿工节点101、102、103可以是硬件,也可以是软件。当终端设备101、102、103为硬件时,可以是设置有可信执行环境(tee,trustedexecutionenvironment)的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。当矿工节点101、102、103为软件时,可以安装在上述所列举的电子设备中。其可以实现成多个软件或软件模块(例如用来提供区块链记账服务或者用来提供数字货币钱包服务),也可以实现成单个软件或软件模块。在此不做具体限定。

这里,tee是与设备上的richos(通常是android等)并存的运行环境,并且给richos提供安全服务。tee具有其自身的执行空间。tee所能访问的软硬件资源是与richos分离的。tee提供了可信应用(trustedapplication,ta)的安全执行环境,同时也保护可信应用的资源和数据的保密性,完整性和访问权限。为了保证tee本身的可信根,tee在安全启动过程中是要通过验证并且与richos隔离的。在tee中,每个可信应用是相互独立的,而且不能在未授权的情况下不能互相访问。

作为示例,矿工节点中设置的tee可以采用如下两种方式:

(1)、借助特定cpu芯片提供的安全防护能力,比如intelsgx、armtrustzone等,构造一个可信执行环境。

为了保障安全强度,还可以在可信执行环境底层增加可信硬件支持,比如采用符合可信平台模块(tpm,trustedplatformmodule)标准的安全芯片,或采用符合可信密码模块(tcm,trustedcryptographymodule)标准的安全芯片。

(2)采用加密锁(俗称软件狗)实现可信执行环境。

常见的软件狗常包装成一个小巧的usb(universalserialbus,通用串行总线)设备,软件狗内既提供文件存贮,也支持运行经过定制的程序。采用软件狗,可以不必限定矿工节点的设备类型,只要矿机节点有usb接口即可,降低了对矿工节点的设备要求。

系统架构100中的各个矿工节点组成区块链系统,且系统架构100中的各个矿工节点采用分布式数据区块链存储数据。

需要说明的是,本申请实施例所提供的应用于区块链系统中矿工节点的共识方法一般由矿工节点101、102、103执行,相应地,应用于区块链系统中矿工节点的共识装置一般设置于矿工节点101、102、103中。

应该理解,图1中的矿工节点和网络的数目仅仅是示意性的。根据实现需要,可以具有任意数目的矿工节点和网络。

继续参考图2a,其示出了根据本申请的应用于区块链系统中矿工节点的共识方法的一个实施例的流程200。该应用于区块链系统中矿工节点的共识方法,包括以下步骤:

步骤201,获取累计未用下限时长。

在本实施例中,共识方法的执行主体(例如图1所示的矿工节点)可以在竞争记账权的过程中获取预先确定的累计未用下限时长。这里,累计未用下限时长可以是由技术人员预先设置好的,也可以是上述执行主体根据矿工节点所竞争的区块而动态计算并更新后得到的。

步骤202,在矿工节点的可信执行环境中执行记账权确定操作。

在本实施例中,上述执行主体可以在矿工节点的可信执行环境中执行记账权确定操作。这里,记账权确定操作可以包括如图2b所示的子步骤2021到子步骤2024:

子步骤2021,确定矿工节点的当前累计未用时长。

这里,上述执行主体中设置有可信执行环境,可信执行环境中设置有时钟,可信执行环境中设置的时钟与上述执行主体的可信执行环境之外设置的时钟是不同的时钟。可信执行环境中设置的时钟只能被可信执行环境中的程序访问,不能被可信执行环境之外的程序所访问。

这样,上述执行主体可以在可信执行环境中,采用各种实现方式,基于可信执行环境中设置的时钟的当前时间确定矿工节点的当前累计未用时长。

在本实施例中,矿工节点中设置的可信执行环境在出厂之前可以被设置了当前累计未用时长的初始值。然后,在矿工节点竞争记账权的过程中,从开始竞争记账权到可信执行环境中设置的时钟的当前时间之间所经过/消逝的时长会累加到当前累计未用时长。例如,可以由可信执行环境中持续运行的处理过程(或称背景线程)控制“当前累计未用时长”的变化。又例如,还可以是在执行子步骤2021时,先确定从开始竞争记账权到可信执行环境中设置的时钟的当前时间之间所经过/消逝的时长,然后将所确定的时长累加到当前累计未用时长中。当然,仅仅让矿工节点中的可信执行环境加电,而不去竞争记账权(俗称挖矿),可信执行环境中的“当前累计未用时长”是不会累加的。

在本实施例的一些可选的实现方式中,上述执行主体还可以在执行完子步骤2021之后,执行子步骤2022之前,确定矿工节点的当前累计未用时长是否大于累计未用上限时长。如果确定大于,则将当前累计未用时长更新为累计未用上限时长。其中,累计未用上限时长可以是由技术人员凭经验人工设定的,累计未用上限时长也可以是累计未用下限时长与预设的大于1的系数的乘积。这样,可以确保当前累计未用时长小于等于上述累计未用上限时长,即,当前累计未用时长不至于过度累计。设置当前累计未用时长的上限可以提高安全性,因为不管什么原因(比如,软件有bug),同一矿工节点连续获得记账权的次数会受限。

在本实施例的一些可选的实现方式中,可信执行环境的厂商可以对每个出厂的可信执行环境随机设置不同的当前累计未用时长的初始值。如果为每个出厂的可信执行环境设置了相同的当前累计未用时长的初始值,当可信执行环境被批量购买并同时开始竞争记账权,则可能导致在同一时间段内出现大量竞争到记账权的矿工节点,继而导致容易出现软分叉。

子步骤2022,确定当前累计未用时长是否大于累计未用下限时长。

在本实施例中,上述执行主体可以在可信执行环境中确定当前累计未用时长是否大于累计未用下限时长。如果确定大于,则转到子步骤2023。

子步骤2023,确定矿工节点竞争到记账权。

在本实施例中,上述执行主体可以在可信执行环境中确定当前累计未用时长大于累计未用下限时长的情况下,确定矿工节点竞争到记账权。

可以理解的是,上述执行主体可以在确定竞争到记账权后,开始记账操作,记账操作可以在可信执行环境之外进行。需要说明的是,这里,对于公有链区块链系统中的矿工节点,竞争到记账权之后的记账过程是目前广泛研究和应用的公知技术,在此不再赘述。

在执行完子步骤2023后,转到子步骤2024执行。

子步骤2024,用当前累计未用时长与累计未用下限时长的差更新当前累计未用时长。

在本实施例中,上述执行主体可以在确定竞争到记账权后,用当前累计未用时长与累计未用下限时长的差更新当前累计未用时长。即,竞争到记账权会使得当前累计未用时长消耗掉累计未用下限时长,继而保证区块链系统中各矿工节点公平竞争记账权。

在本实施例的一些可选的实现方式中,上述执行主体还可以在执行完子步骤2023之后,执行如下子步骤2025:

子步骤2025,在矿工节点的可信执行环境中,将记账权确定信息利用可信执行环境中存储的预设私钥签名后广播给矿工节点的相邻节点。

由于上述执行主体已经在子步骤2023中确定矿工节点竞争到记账权,这里,上述执行主体可以在矿工节点的可信执行环境中,将记账权确定信息利用可信执行环境中存储的预设私钥签名后广播给矿工节点的相邻节点。其中,记账权确定信息可以包括:矿工节点的区块链中矿工节点竞争到记账权的区块的上一区块的哈希值、累计未用下限时长和矿工节点绑定的账号地址,其中,矿工节点绑定的账号地址存储在矿工节点的可信执行环境中。

这里,矿工节点的可信执行环境可以存储有预设密钥对,包括预设私钥和预设公钥,其中,预设私钥只存储在矿工节点的可信执行环境中,而预设公钥可以存储在矿工节点的可信执行环境中和矿工节点的可信执行环境之外。

需要说明的是,上述执行主体可以在执行完子步骤2023后先执行子步骤2024再执行子步骤2025,也可以在执行完子步骤2023后先执行子步骤2025再执行子步骤2024,本申请对此不做具体限定。

在本实施例的一些可选的实现方式中,步骤202还可以如下进行:

响应于采用工作量证明共识机制进行哈希碰撞计算所用的随机数满足预设条件,在矿工节点的可信执行环境中执行记账权确定操作。即,需要先采用pow进行哈希碰撞计算,并且哈希碰撞计算所用的随机数满足了预设条件的情况下才会去在确定矿工节点的当前累计未用时长是否大于累计未用下限时长。这里,区块链中的哈希碰撞计算,以及哈希碰撞计算所用的随机数是否满足预设条件是本领域广泛研究和应用的现有技术,在此不再赘述。作为示例,哈希碰撞计算所用的随机数满足预设条件可以包括:

首先,预先设定难度目标值target=targetmax/difficulty,其中,targetmax与预设的最大难度值,difficulty为动态可调的难度系数,难度系数越大,难度目标值越小。

然后,计算当前所竞争记账权的区块的上一区块的哈希值和随机数nonce的组合信息的哈希值。

接着,确定计算所得的哈希值是否小于上述难度目标值,如果小于上述难度目标值,则可以确定哈希碰撞计算所用的随机数nonce满足预设条件。

这里,在确定矿工节点的当前累计未用时长是否大于累计未用下限时长之前,先采用pow进行哈希碰撞计算,增强了区块链系统的安全性,其技术效果具体至少可以包括:

第一,如果攻击者已准备一定数量的矿工节点,虽然远未达到51%算力要求,但攻击者可以延后执行步骤202,即,暂时搁置记账权确定操作,让可信执行环境内的“当前累计未用时长”变的很长。当攻击者所控制的各个矿工节点的“累计未用时长”都很长时,攻击者可以让这些“累计未用时长”都很长矿工节点同时开始执行记账权确定操作以竞争记账权,这种情况下,攻击者连续获得记账权的机率大大提高,变相制造51%算力。而如果在矿工节点的可信执行环境中执行记账权确定操作之前,叠加上述pow共识机制,并将pow限制在只用cpu实现,由于目前主流计算设备的cpu算力差别不大,而gpu(graphicsprocessingunit,图形处理单元)或asic(applicationspecificintegratedcircuit,供专门应用的集成电路)的算力差距是指数级的,攻击者想用pow连续获得记账权仍然很困难。这里,限用cpu实现pow是本领的现有技术,比如改用浮点运算设计哈希算法(浮点运算在gpu上没有优势),再让计算过程依赖内存空间来抵抗asic芯片。因其技术细节不是本发明的技术重点,这里不展开介绍。

第二,可信执行环境的硬件由官方提供,如何让官方自己也不能作弊?叠加pow共识机制,实际抬高了官方作弊的门槛,假设区块链系统中有1000个矿工节点,官方需动用1001台同等设备才能发起51%算力攻击,门槛很高。这种叠加pow的双共识机制更容易获得公众的信任。

可以理解的是,作为矿工节点,除了可以向相邻节点广播记账权确定信息外,也可以收到其他矿工节点发来的记账权确定信息。因此,在本实施例的一些可选的实现方式中,上述执行主体还可以执行如下步骤203到步骤205:

步骤203,响应于接收到记账权确定信息,利用预设公钥对所收到的记账权确定信息进行签名验证。

这里,上述执行主体可以在接收到其他相邻节点广播来的记账权确定信息的情况下,在可信执行环境中或者可信执行环境之外利用预设公钥对所收到的记账权确定信息进行签名验证。

如果,所收到的记账权确定信息是利用预设私钥进行签名的,利用预设公钥对所收到的记账权确定信息进行签名验证会验证通过。

如果,所收到的记账权确定信息不是利用预设私钥进行签名的,利用预设公钥对所收到的记账权确定信息进行签名验证会验证不通过。

如果,步骤203中签名验证通过,上述执行主体可以转到步骤204执行。

步骤204,分别利用矿工节点的区块链中的尾部区块的哈希值和累计未用下限时长对所收到的记账权确定信息中的上一区块哈希值和累计未用下限时长进行校验。

这里,上述执行主体可以在步骤203中对所收到的记账权确定信息进行签名验证通过的情况下,分别利用矿工节点的区块链中的尾部区块的哈希值和累计未用下限时长对所收到的记账权确定信息中的上一区块哈希值和累计未用下限时长进行校验。如果校验通过,表明发送所收到的记账权确定信息的矿工节点没有伪造记账权确定信息,接下来可以转到步骤205。如果校验不通过,表明发送所收到的记账权确定信息的矿工节点伪造了记账权确定信息。

这里,矿工节点的区块链中的尾部区块可以是矿工节点的尚未最终确认的区块(例如,尚未最终确认的区块可以是指该矿工节点的区块链中的后面的区块少于六个区块的区块)中某个区块。例如,矿工节点m1的尚未最终确定的区块有3个区块b1、b2和b3,区块b1、b2和b3的哈希值分别是h1、h2和h3,那么上述执行主体在执行步骤204时,可以将所收到的记账权确定信息中的上一区块哈希值分别与上述哈希值h1、h2和h3进行比较,如果哈希值h1、h2和h3中有一个哈希值与所收到的记账权确定信息中的上一区块哈希值相同,则可以确定对所收到的记账权确定信息中的上一区块哈希值校验通过。

步骤205,将所收到的记账权确定信息中的账号地址确定为竞争到第一当前区块的矿工节点绑定的账号地址。

这里,上述执行主体可以在步骤204中对所收到的记账权确定信息校验通过的情况下,将所收到的记账权确定信息中的账号地址确定为竞争到第一当前区块的矿工节点绑定的账号地址。其中,第一当前区块为所收到的记账权确定信息中上一区块哈希值所指示的区块的下一区块。

本申请的上述实施例提供的共识方法通过在矿工节点的可信执行环境中确定矿工节点的当前累计未用时长大于累计未用下限时长的情况下,确定矿工节点竞争到记账权,即,通过采用一种按时长平均分配的机制,克服了公有链中采用工作量证明的共识机制所导致的高耗能缺陷。

进一步参考图3,其示出了根据本申请的应用于区块链系统中矿工节点的共识方法的又一个实施例的流程300。该共识方法的流程300,包括以下步骤:

步骤301,获取累计未用下限时长。

步骤302,在矿工节点的可信执行环境中执行记账权确定操作。

在本实施例中,步骤301和步骤302的具体操作与图2所示的实施例中步骤201和步骤202的操作基本相同,在此不再赘述。

步骤303,响应于确定矿工节点竞争到记账权,根据矿工节点竞争到记账权的区块,确定是否调整累计未用下限时长。

在本实施例中,共识方法的执行主体(例如图1所示的矿工节点)可以在确定矿工节点竞争到记账权的情况下,根据矿工节点竞争到记账权的区块,确定是否调整累计未用下限时长。如果确定调整累计未用下限时长,则转到步骤304执行。

在公有链的区块链系统中,每个区块都可以用区块标识来唯一指示。这里,上述执行主体可以根据矿工节点竞争到记账权的区块的区块标识,确定是否调整累计未用下限时长。

在本实施例的一些可选的实现方式中,上述执行主体可以确定矿工节点竞争到记账权的区块的区块标识是否属于预设的调整累计未用下限时长用区块标识集合,如果属于,则可以确定调整累计未用下限时长。其中,预设的调整累计未用下限时长用区块标识集合可以是由技术人员根据经验预先制定的用于指示每个累计未用下限时长调整周期的最后一个区块的区块标识的集合。

在本实施例的一些可选的实现方式中,上述执行主体可以确定矿工节点竞争到记账权的区块和上次调整累计未用下限时长对应的区块之间是否存在预设周期区块数目减1的差个区块,如果是,则可以确定调整累计未用下限时长。例如,预设周期区块数目为1008,即,每出块1008个区块,就调整累计未用下限时长。

步骤304,执行累计未用下限时长调整操作。

在本实施例中,上述执行主体可以在步骤303中确定调整累计未用下限时长的情况下,执行累计未用下限时长调整操作。这里,累计未用下限时长调整操作可以包括以下子步骤3041到子步骤3042:

子步骤3041,根据累计未用下限时长、调整周期实等时长和期望调整周期时长确定调整后累计未用下限时长。

在本实施例中,上述执行主体可以采用各种实现方式,根据累计未用下限时长、调整周期实等时长和期望调整周期时长确定调整后累计未用下限时长。

其中,调整周期实等时长为矿工节点竞争到记账权的区块的生成时间和矿工节点的区块链中上次调整累计未用下限时长对应的区块的生成时间之间的时长。即,调整周期实等时长为矿工节点相邻两次调整累计未用下限时长之间的实际等待时长。

这里,期望调整周期时长可以是技术人员根据经验预先设定的相邻两次调整累计未用下限时长之间的期望时长。例如,假设每出1008个区块调整一次累计未用下限时长,即,每1008次出块为一个调整周期,再假设预期平均每5分钟出一个区块块,那么可以将期望调整周期时长设定为:5040(即5×1008=5040)分钟。

由于区块链中矿工节点的数量是动态变化的,从而导致当矿工节点的数量在当前累计未用下限时长调整周期内有较大幅度的增加时,区块链的调整周期实等时长,即相邻两次调整累计未用下限时长之间的实际等待时长就会变短(因为有更多矿工节点参与竞争记账权,更容易在少于预期的时间内完成竞争),反之,当矿工节点的数量在当前累计未用下限时长调整周期内有较大幅度的减少时,调整周期实等时长,即相邻两次调整累计未用下限时长之间的实际等待时长就会变长。为了达到区块链系统尽量能在期望调整周期时长t内出预设数目n个区块,即,平均每t时长内出一个区块,其中,t=t÷n,调整后累计未用下限时长可以与累计未用下限时长和期望调整周期时长均正相关,调整后累计未用下限时长可以与调整周期实等时长负相关。

可选地,可以按照如下公式,根据累计未用下限时长、调整周期实等时长和期望调整周期时长,计算调整后累计未用下限时长:

其中:

tmin是累计未用下限时长;

texp是期望调整周期时长;

treal是调整周期实等时长;

t′min是计算得到的调整后累计未用下限时长。

可选地,还可以按照如下公式,根据累计未用下限时长、调整周期实等时长和期望调整周期时长,计算调整后累计未用下限时长:

其中:

tmin是累计未用下限时长;

texp是期望调整周期时长;

treal调整周期实等时长;

α、β、γ和θ是预设的常数;

t′min是计算得到的调整后累计未用下限时长。

子步骤3042,将累计未用下限时长更新为调整后累计未用下限时长。

在本实施例中,上述执行主体可以将矿工节点中的累积未用下限时长更新为子步骤3041中计算得到的调整后累计未用下限时长。

如果上述执行主体在执行步骤302的过程中,采用了图2所示的实施例中叠加pow公式机制的可选实现方式,则在本实施例的一些可选的实现方式中,上述执行主体还可以执行以下步骤305:

步骤305,执行哈希碰撞难度目标值调整操作。

这里,哈希碰撞难度目标值调整操作可以包括以下子步骤3051到子步骤3053:

子步骤3051,响应于确定矿工节点竞争到记账权,根据矿工节点竞争到记账权的区块,确定是否调整哈希碰撞的难度目标值。

在本实施例的一些可选的实现方式中,上述执行主体可以确定矿工节点竞争到记账权的区块的区块标识是否属于预设的调整哈希碰撞难度目标值用区块标识集合,如果属于,则可以确定调整哈希碰撞的难度目标值。其中,预设的调整哈希碰撞难度目标值用区块标识集合可以是由技术人员根据经验预先制定的用于指示每个哈希碰撞难度目标值调整周期的最后一个区块的区块标识的集合。

在本实施例的一些可选的实现方式中,上述执行主体可以确定矿工节点竞争到记账权的区块和上次调整累计未用下限时长对应的区块之间是否存在预设周期区块数目减1的差个区块,如果是,则可以确定调整哈希碰撞难度目标值。例如,预设周期区块数目为1008,即,每出块1008个区块,就调整哈希碰撞难度目标值。

子步骤3052,响应于确定调整哈希碰撞的难度目标值,根据当前哈希碰撞的难度目标值、调整周期实等时长和期望调整周期时长确定调整后难度目标值。

这里,调整后难度目标值与当前哈希碰撞的难度目标值和调整周期实等时长均正相关,调整后难度目标值与期望调整周期时长负相关。具体的调整后难度目标值的计算方法与子步骤2041中描述的调整后累计未用下限时长的计算方法基本相同,在此不再赘述。

子步骤3053,将当前哈希碰撞的难度目标值更新为调整后难度目标值。

从图3中可以看出,与图2对应的实施例相比,本实施例中的应用于区块链系统中矿工节点的共识方法的流程300多出了对累计未用下限时长进行调整的步骤。由此,本实施例描述的方案可以达到的技术效果至少可以包括:在区块链中的矿工节点数量发生变化时,实时调整累计未用下限时长以适应矿工节点数量的动态变化,尽量确保区块链系统在预设期望周期时长内的出块数目维持在预设数目个。目前将poet共识机制应用于联盟链中,是借助cpu随机指定一个等待时长,以此替代工作量证明共识机制来竞争记账权,这种共识方法不能支持动态调整竞争记账权的难度。而图3中所示的应用于区块链系统中矿工节点的共识方法的流程300,可以通过调整累计未用下限时长来调整竞争记账权的难度。例如,调高累计未用下限时长,就加大了竞争记账权的难度,而调低累计未用下限时长,就降低了竞争记账权的难度。

下面参考图4,图4示出了根据本申请的区块链系统的一个实施例的示例性系统架构400。

如图4所示,系统架构400可以包括并行链401、402、403和网络404、405。

网络404用以在路由节点4011和路由节点4021之间提供通信链路的介质。网络404可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

网络405用以在路由节点4021和路由节点4031之间提供通信链路的介质。网络404可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

并行链401包括路由节点4011,矿工节点4012、4013、4014、4015和网络4016。网络4016用以在路由节点4011和矿工节点4012、4013、4014、4015之间提供通信链路的介质。网络4016可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。并行链401的矿工节点4012、4013、4014、4015采用分布式数据区块链存储数据。

并行链402包括路由节点4021,矿工节点4022、4023、4024和网络4025。网络4025用以在路由节点4021和矿工节点4022、4023、4024之间提供通信链路的介质。网络4025可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。并行链402的矿工节点4022、4023、4024采用分布式数据区块链存储数据。

并行链403包括路由节点4031,矿工节点4032、4033、4034、4035、4036和网络4037。网络4037用以在路由节点4031和矿工节点4032、4033、4034、4035、4036之间提供通信链路的介质。网络4037可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。并行链403的矿工节点4032、4033、4034、4035、4036采用分布式数据区块链存储数据。

用户可以使用矿工节点4012、4013、4014、4015通过网络4016与路由节点4011交互,以接收或发送消息等。

用户也可以使用矿工节点4022、4023、4024通过网络4025与路由节点4021交互,以接收或发送消息等。

用户还可以使用矿工节点4022、4023、4024、4025、4036通过网络4037与路由节点4031交互,以接收或发送消息等。

矿工节点4012、4013、4014、4015、4022、4023、4024、4032、4033、4034、4035、4036上可以安装有各种通讯客户端应用,例如区块链记账类应用、数字货币钱包类应用、网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。用户可以使用矿工节点4012、4013、4014、4015、4022、4023、4024、4032、4033、4034、4035、4036上安装的数字货币钱包类应用,实现数字货币管理、转账、收款、查看余额、查看交易记录等操作。用户还可以使用矿工节点4012、4013、4014、4015、4022、4023、4024、4032、4033、4034、4035、4036上安装的区块链记账类应用,实现竞争矿工节点所在并行链的记账权以及实现记账操作。矿工节点4012、4013、4014、4015、4022、4023、4024、4032、4033、4034、4035、4036均绑定有账号地址(例如,可以采用数字货币钱包类应用来绑定账号地址)。

需要说明的是,路由节点4011、4021、4031可以是硬件,也可以是软件。当路由节点4011、4021、4031为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当路由节点4011、4021、4031为软件时,可以实现成多个软件或软件模块(例如用来提供路由服务),也可以实现成单个软件或软件模块。在此不做具体限定。

需要说明的是,矿工节点4012、4013、4014、4015、4022、4023、4024、4032、4033、4034、4035、4036可以是硬件,也可以是软件。当矿工节点4012、4013、4014、4015、4022、4023、4024、4032、4033、4034、4035、4036为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当矿工节点4012、4013、4014、4015、4022、4023、4024、4032、4033、4034、4035、4036为软件时,可以实现成多个软件或软件模块(例如用来提供竞争记账权和记账服务),也可以实现成单个软件或软件模块。在此不做具体限定。

矿工节点4012、4013、4014、4015、4022、4023、4024、4032、4033、4034、4035、4036中设置有可信执行环境,且矿工节点4012、4013、4014、4015、4022、4023、4024、4032、4033、4034、4035、4036可以实现图2所示的实施例中的共识方法,也可以实现图3所示的实施例中的共识方法。

需要说明的是,在某些情况下,并行链中还可以包括spv(simplifiedpaymentverification,简化支付验证)节点,spv节点上可以安装有各种通讯客户端应用,例如简化支付验证应用、数字货币钱包类应用、网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。用户可以使用spv节点上安装的简化支付验证应用,实现数字货币管理、转账、收款、查看余额、查看交易记录等操作。

应该理解,图4中的并行链的数目仅仅是示意性的。根据实现需要,可以具有任意数目的并行链。每个并行链中的路由节点、矿工节点和网络的数目也仅仅是示意性的。根据实现需要,可以具有任意数目的路由节点、矿工节点和网络。

继续参考图5,其示出了根据本申请的区块链系统的一个实施例的时序500。

本申请实施例中的区块链系统可以包括至少一个并行链(例如图4所示的并行链401、402、403),并行链可以包括路由节点(例如图4所示的路由节点4011、4021、4031)和至少一个矿工节点(例如图4所示的矿工节点4012、4013、4014、4015、4022、4023、4024、4032、4033、4034、4035、4036),每个并行链的各个矿工节点采用分布式数据区块链存储数据,至少一个并行链的路由节点之间网络连接,

如图5所示,根据本申请的区块链系统的一个实施例的时序500可以包括以下步骤:

步骤501,矿工节点获取累计未用下限时长,以及在矿工节点的可信执行环境中执行记账权确定操作,以竞争该矿工节点所在并行链的链内交易请求的记账权。

在本实施例中,矿工节点可以采用如图2所示的实施例中的共识方法或者采用如图3所示的实施例中的共识方法竞争该矿工节点所在并行链的链内交易请求的记账权。

在本实施例中,交易请求可以包括出账请求和入账请求。例如,交易请求d为将账号地址a中的x个数字货币转给账号地址b。那么交易请求d可以包括出账请求d1和入账请求d2,其中,出账请求d1为将账号地址a中的数字货币减少x个,入账请求d2为将账号地址b中的数字货币增加x个。

这里,该矿工节点所在并行链的链内交易请求具体可以包括以下两种情况:(1)交易请求中的转出账号地址和转入账号地址对应的并行链都是该矿工节点所在的并行链,那么交易请求中的出账请求和入账请求均为该矿工节点所在并行链的链内交易请求。(2)交易请求中的转出账号地址对应的并行链是该矿工节点所在的并行链,而交易请求中的转入账号地址对应的并行链不是该矿工节点所在的并行链,那么交易请求中的出账请求是该矿工节点所在并行链的链内交易请求,而交易请求中的入账请求不是该矿工节点所在并行链的链内交易请求,交易请求中的入账请求是交易请求中的转入账号地址对应的并行链的链内交易请求。

继续延用上述举例,且,账号地址a对应并行链l1,账号地址b对应并行链l2,那么,出账请求d1为并行链l1的链内交易请求,而入账请求d2为并行链l2的链内交易请求。

需要说明的是,用户可以使用并行链中的spv节点或者矿工节点提交交易请求,spv节点或者矿工节点可以将所收到的交易请求发送给交易请求中的转出账号地址对应的并行链中的路由节点,路由节点可以将接收到的交易请求签名后广播给该路由节点的同链矿工节点。这样,矿工节点就可以接收到交易请求并采用如图2所示的实施例中的任一种共识方法或者采用如图3所示的实施例中的任一种共识方法竞争该矿工节点所在并行链的链内交易请求的记账权。

实践中,每个账号地址都可以对应一个并行链,可以采用各种实现方式将账号地址对应到区块链系统所包括的并行链中的一个并行链。例如,可以在区块链系统所包括的并行链中随机选取一个并行链作为账号地址对应的并行链。矿工节点所在的并行链可以是矿工节点绑定的账号地址对应的并行链。

步骤502,路由节点实时将该路由节点的同链矿工节点的区块链同步到本地区块链。

在本实施例中,路由节点(例如,图1所示的路由节点4011、4021、4031)还会实时将该路由节点的同链矿工节点的区块链同步到本地区块链。也就是说,路由节点不会执行竞争记账权和记账的操作,但是,路由节点中同步保存了该路由节点所在并行链的区块链(账本)。

需要说明的是,路由节点可以随时执行步骤502,并不限定于在执行完步骤501之后再执行步骤502。

实践中,每个路由节点都可以对应一个并行链,可以采用各种实现方式将路由节点对应到区块链系统所包括的并行链中的一个并行链。例如,路由节点的域名可以与该路由节点所在并行链的并行链标识相关联。比如,“routenode0.xxx.com”是并行链标识“0”所指示的并行链的路由节点的域名,“routenode1.xxx.com”是并行链标识“1”所指示的并行链的路由节点的域名,“routenode65535.xxx.com”是并行链标识“65535”所指示的并行链的路由节点的域名。

这里,该路由节点的同链矿工节点是与该路由节点属于同一并行链的矿工节点。例如,如图4所示,矿工节点4012、4013、4014、4015是路由节点4011的同链矿工节点。

在本实施例的一些可选的实现方式中,上述时序500还可以包括步骤503到步骤505:

步骤503,路由节点响应于接收到包括区块哈希值、累计未用下限时长和账号地址的记账权确定信息,利用预设公钥对所收到的记账权确定信息进行签名验证。

由于每个并行链通常是基于对等网络(peertopeer,p2p)的,在步骤501中,如果矿工节点向相邻节点发送了记账权确定信息(具体可参考图2所示的实施例中子步骤2025),路由节点也是并行链中的一个节点,路由节点也可以接收到同链矿工节点发出的记账权确定信息。因此,路由节点可以在接收到同链矿工节点发出的记账权确定信息的情况下,利用预设公钥对所收到的记账权确定信息进行签名验证。

这里,路由节点中也存储有矿工节点的可信执行环境中存储的预设密钥对中的预设公钥。

如果,路由节点所收到的记账权确定信息是利用预设私钥进行签名的,利用预设公钥对所收到的记账权确定信息进行签名验证会验证通过。

如果,路由节点所收到的记账权确定信息不是利用预设私钥进行签名的,利用预设公钥对所收到的记账权确定信息进行签名验证会验证不通过。

这里,路由节点可以在步骤503中签名验证通过的情况下,转到504执行。

步骤504,路由节点响应于对所收到的记账权确定信息进行签名验证通过,分别利用该路由节点的区块链中的尾部区块的哈希值和该路由节点本地存储的累计未用下限时长对所收到的记账权确定信息中的区块哈希值和累计未用下限时长进行校验。

这里,路由节点可以在步骤503中利用预设公钥对所收到的记账权确定信息进行签名验证通过的情况下,分别利用该路由节点的区块链中的尾部区块的哈希值和该路由节点本地存储的累计未用下限时长对所收到的记账权确定信息中的区块哈希值和累计未用下限时长进行校验。如果校验通过,表明发送所收到的记账权确定信息的矿工节点没有伪造记账权确定信息,接下来可以转到步骤505。如果校验不通过,表明发送所收到的记账权确定信息的矿工节点伪造了记账权确定信息。

这里,路由节点的区块链中的尾部区块可以是路由节点的尚未最终确认的区块(例如,尚未最终确认的区块可以是指该路由节点的区块链中的后面的区块少于六个区块的区块)中某个区块。例如,路由节点r1的尚未最终确定的区块有3个区块b4、b5和b6,区块b4、b5和b6的哈希值分别是h4、h5和h6,那么路由节点在执行步骤504时,可以将所收到的记账权确定信息中的上一区块哈希值分别与上述哈希值h4、h5和h6进行比较,如果哈希值h4、h5和h6中有一个哈希值与所收到的记账权确定信息中的上一区块哈希值相同,则可以确定对所收到的记账权确定信息中的上一区块哈希值校验通过。

步骤505,路由节点响应于对所收到的记账权确定信息中的区块哈希值和累计未用下限时长进行校验通过,将所收到的记账权确定信息中的账号地址确定为竞争到第二当前区块的矿工节点绑定的账号地址。

这里,路由节点可以在步骤504中对所收到的记账权确定信息中的区块哈希值和累计未用下限时长进行校验通过的情况下,将所收到的记账权确定信息中的账号地址确定为竞争到第二当前区块的矿工节点绑定的账号地址。第二当前区块为所收到的记账权确定信息中上一区块哈希值所指示的区块的下一区块。

在本实施例的一些可选的实现方式中,上述时序500还可以包括以下步骤506:

步骤506,路由节点响应于对所收到的记账权确定信息中的区块哈希值和累计未用下限时长进行校验不通过,将所收到的记账权确定信息中的账号地址添加到本地存储的黑名单账号地址集合。

这里,路由节点本地存储有黑名单账号地址集合。实践中,路由节点在接收到交易请求后,会对交易请求进行合法性校验。只有合法性校验通过的交易请求才会被路由节点签名后广播给该路由节点的各个同链矿工节点。其中,合法性校验可以包括但不限于验证交易请求中的转出账号地址是否存在utxo(unspenttransactionoutput,未花费交易输出)记录、交易请求中的转出账号地址的余额是否支持本次交易请求、交易请求中的转出账号地址或者转入账号地址是否是路由节点中存储的黑名单账号地址集合中的账号地址等等。因此,这里,如果步骤504中路由节点对所收到的记账权确定信息中的区块哈希值和累计未用下限时长进行校验不通过,表明发送所收到的记账权确定信息的矿工节点伪造了记账权确定信息,那么就可以将收到的记账权确定信息中的账号地址加入该路由节点存储的黑名单账号地址集合,而黑名单账号地址集合中账号地址的转出交易请求和转入交易请求都会被路由节点在合法性校验中因合法性校验不通过而阻止。

由于页面显示限制,下面继续参考图5b,需要说明的是,图5b的流程除了包括图5b中所示的流程外,还可以包括图5a中所示的各个步骤。

实践中,矿工节点的奖励来自于两部分,一是竞争到记账权会有奖励,俗称挖矿奖励;二是记账奖励,也即,将矿工节点当前区块所记录的各个交易请求的奖励,俗称记账费(或者交易手续费,交易抽成)。但是,记账奖励部分的数值与时段有关,在交易量多的时段,记账奖励较多,在交易量少的时段,记账奖励就会较少。为了使得区块链系统更稳定,不受时段的影响,在本实施例的一些可选的实现方式中,上述时序500还可以包括图5b中所示的步骤507到步骤509:

步骤507,矿工节点根据该矿工节点竞争到记账权的区块,确定是否进入新的累计未用下限时长调整周期。

这里,矿工节点可以根据该矿工节点竞争到记账权的区块,确定是否进入新的累计未用下限时长调整周期。如果上一次调整累计未用下限时长时对应的区块与为矿工节点竞争到记账权的区块间隔了预设周期区块数目减1的差个区块,则矿工节点竞争到记账权的区块对应进入新的累计未用时长调整周期,矿工节点竞争到记账权的区块为进入新的累计未用时长调整周期的第一个区块,那么可以确定进入新的累计未用下限时长调整周期,接着转到步骤508执行,反之,可以确定未进入新的累计未用下限时长调整周期,接着转到步骤509执行。

在本实施例的一些可选的实现方式中,每个区块都可以用区块标识来指示,则矿工节点可以确定矿工节点竞争到记账权的区块的区块标识是否属于预设的新周期区块标识集合,如果属于,则可以确定进入新的累计未用下限时长调整周期。其中,预设的新周期区块标识集合可以是由技术人员根据经验预先制定的用于指示进入新的累计未用下限时长调整周期的第一个区块的区块标识的集合。例如,假设预设周期区块数目为1008,即,每出块1008个区块就调整累计未用下限时长,那么,假设区块标识为从1开始递增,那么新周期区块标识集合可以包括:1,1009,…,(1+1008×n),这里n为正整数。

步骤508,矿工节点响应于确定进入新的累计未用下限时长调整周期,执行当期每区块记账奖励确定操作。

这里,矿工节点可以在步骤507中确定进入新的累计未用下限时长调整周期,执行当期每区块记账奖励确定操作,其中,当期每区块记账奖励确定操作可以包括如图5c中所示的子步骤5081到子步骤5084:

子步骤5081,获取该矿工节点的同链路由节点绑定的账号地址对应的数字货币余额。

这里,由于进入新的累计未用下限时长调整周期,而上一累计未用下限时长调整周期中所生成的各个区块中的交易请求中的记账奖励已经转入在该矿工节点的同链路由节点绑定的账号地址中。因此,矿工节点可以获取该矿工节点的同链路由节点绑定的账号地址对应的数字货币余额,这些所获取的数字货币余额可以用于平均分配给当前累计未用下限时长调整周期内生成的各个区块对应的矿工节点。

子步骤5082,将获取的数字货币余额除以预设周期区块数目所得到的比值的整数部分确定为当期每区块记账奖励。

这里,如果直接将所获取的数字货币余额除以预设周期区块数目所得到的比值作为当期每区块记账奖励,则当期每区块记账奖励可能为整数也可能为浮点数。如果当期每区块记账奖励为浮点数,这里,由于不同矿工节点可能存在硬件结构上的差异,每个矿工节点在除法运算上的精度存在差异。为了避免因各个矿工节点硬件结构差异可能导致计算得到的当期每区块记账奖励的不同,这里,可以将获取的数字货币余额除以预设周期区块数目所得到的比值的整数部分确定为当期每区块记账奖励,这样,即使各个矿工节点的硬件存在差异,也可以保证计算所得的当期每区块记账奖励是相同的。

这里,当期每区块记账奖励用于表征在当前累计未用下限时长调整周期内新出的每个区块,对于竞争到该区块的记账权的矿工节点,针对为该区块记账的记账奖励是相同的,即,记账奖励是当期每区块记账奖励。这里,在当前累计未用下限时长调整周期内新出的每个区块的记账奖励,仅仅与上一累计未用下限时长调整周期内的区块中的各个交易请求的记账奖励总额有关,而与该区块所要记录的交易请求的记账奖励无关。这样,对于矿工节点而言,不论是在交易量大的时段竞争记账权,还是在交易量小的时段竞争记账权都会得到相同的记账奖励,不会导致在交易量小的时段竞争记账权的矿工节点数量大量减少的情况出现。

这里,预设周期区块数目是预设的每个累计未用下限时长调整周期内所生成的区块的数目,例如,预设周期区块数可以为1008。

子步骤5083,将当期每区块记账奖励与预设周期区块数目的积确定为当期待分配奖励。

为了更直观地描述子步骤5082和子步骤5083,可以用如下公式表达:

u′=ua×n(4)

其中:

u为所获取的余额;

n为预设周期区块数目;

为向下取整符号;

ua为计算得到的当期每区块记账奖励;

u′为计算得到的当期待分配奖励。

这里,当期待分配奖励用于表征在当前累计未用下限时长调整周期内新生成的各个区块的矿工节点共同分享的记账奖励总和。

子步骤5084,根据所选取的待处理交易请求、当期待分配奖励转出信息、当前区块奖励转入信息和当前区块奖励转出信息生成矿工节点竞争到记账权的区块的区块数据。

这里,矿工节点本地存储有待处理交易请求集合,由于该矿工节点已经竞争到记账权,这时,矿工节点就会从本地存储的待处理交易请求集合中选取待处理交易请求,并将所选取的待处理交易请求写入当前竞争到记账权的区块。除了将所选取的待处理交易请求写入当前竞争到记账权的区块外,由于当前竞争到记账权的区块为当前累计未用下限时长调整周期的第一个区块,还会在这个区块中写入当期待分配奖励转出信息、当前区块奖励转入信息和当前区块奖励转出信息,其中,当期待分配奖励转出信息用于表征从矿工节点的同链路由节点绑定的账号地址转出当期待分配奖励,当前区块奖励转入信息用于表征将当期每区块记账奖励转入该矿工节点绑定的账号地址,而当前区块奖励转出信息用于表征将所选取的待处理交易请求对应的记账奖励转入该矿工节点的同链路由节点绑定的账号地址。即,在当前累计未用下限时长调整周期的第一个区块记录了从矿工节点的同链路由节点绑定的账号地址转出当期待分配奖励,将当期每区块记账奖励转入该矿工节点绑定的账号地址,以及将所选取的待处理交易请求对应的记账奖励转入该矿工节点的同链路由节点绑定的账号地址。

步骤509,矿工节点响应于确定未进入新的累计未用下限时长调整周期,根据所选取的待处理交易请求、当前区块奖励转入信息和当前区块奖励转出信息生成矿工节点竞争到记账权的区块的区块数据。

这里,矿工节点可以在步骤507中确定未进入新的累计未用下限时长调整周期,表明矿工节点当前竞争到记账权的区块不是当前累计未用调整周期中的第一个区块。同理,由于该矿工节点已经竞争到记账权,这时,矿工节点就会从本地存储的待处理交易请求集合中选取待处理交易请求,并将所选取的待处理交易请求写入当前竞争到记账权的区块。除了将所选取的待处理交易请求写入当前竞争到记账权的区块外,当前竞争记账权的区块不是当前累计未用下限时长调整周期的第一个区块,不需要将当前待分配奖励转出该矿工节点的同链路由节点绑定的账户地址,但每个竞争到记账权的矿工节点都会获得当期每区块记账奖励,而且,所选取的待处理交易请求中每个交易请求都对应有记账奖励,需要把所选取的待处理交易请求对应的记账奖励转入该矿工节点的同链路由节点绑定的账号地址。因此,还会在这个区块中写入当前区块奖励转入信息和当前区块奖励转出信息,同上,这里当前区块奖励转入信息用于表征将当期每区块记账奖励转入该矿工节点绑定的账号地址,而当前区块奖励转出信息用于表征将所选取的待处理交易请求对应的记账奖励转入该矿工节点的同链路由节点绑定的账号地址。

在本实施例的一些可选的实现方式中,上述时序500还可以包括如下步骤510和步骤511:

步骤510,路由节点确定该路由节点的同一同链矿工节点相邻两次竞争到记账权的时间间隔。

这里,由于路由节点中同步了该路由节点的同链矿工节点的区块链,那么路由节点可以通过本地区块链来确定该路由节点的同一同链矿工节点相邻两次竞争到记账权的时间间隔。

步骤511,路由节点响应于累计未用下限时长减去所确定的时间间隔的时长差大于预设时长阈值,将所确定的时间间隔对应的矿工节点绑定的账号地址添加到黑名单账号地址集合。

这里,由于步骤510中路由节点以及确定了该路由节点的同一同链矿工节点相邻两次竞争到记账权的时间间隔,那么,在步骤511中路由节点可以首先计算累计未用下限时长减去所确定的时间间隔的时长差,然后确定上述计算所得的时长差是否大于预设时长阈值,如果大于预设时长阈值,表明步骤510中所确定的时间间隔较短,即,步骤510中所确定的时间间隔对应的矿工节点相邻两次竞争到记账权的时间间隔较短,也就是说,步骤510中所确定的时间间隔对应的矿工节点可能存在作弊行为,那么,路由节点可以将所确定的时间间隔对应的矿工节点绑定的账号地址添加到黑名单账号地址集合,进而,该所确定的时间间隔对应的矿工节点绑定的账号地址的转出交易请求和转入交易请求都会被路由节点在合法性校验中因合法性校验不通过而阻止。

步骤510和步骤511的技术效果至少包括:

第一,可以证明可信执行环境的设备商不会作弊。

第二,可以防止区块链系统的共识算法万一被破解而导致严重安全问题。破解内容可能是:通过破坏可信执行环境中的硬件时钟来缩短等待记账权的间隔时间,或者破解可信执行环境中存储的第一密钥对等。

进一步参考图6,作为对上述各图所示方法的实现,本申请提供了一种应用于区块链系统中矿工节点的共识装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。

如图6所示,本实施例的应用于区块链系统中矿工节点的共识装置600包括:获取单元601和记账权确定单元602。其中,获取单元601,被配置成获取累计未用下限时长;记账权确定单元602,被配置成在上述矿工节点的可信执行环境中执行以下记账权确定操作:确定上述矿工节点的当前累计未用时长;确定上述当前累计未用时长是否大于上述累计未用下限时长;响应于确定上述当前累计未用时长大于上述累计未用下限时长,确定上述矿工节点竞争到记账权,以及用上述当前累计未用时长与上述累计未用下限时长的差更新上述当前累计未用时长。

在本实施例中,应用于区块链系统中矿工节点的共识装置600的获取单元601和记账权确定单元602的具体处理及其所带来的技术效果可分别参考图2对应实施例中步骤201和步骤202的相关说明,在此不再赘述。

在本实施例的一些可选的实现方式中,上述记账权确定操作还可以包括:响应于确定上述矿工节点竞争到记账权,根据上述矿工节点竞争到记账权的区块,确定是否调整上述累计未用下限时长;响应于确定调整上述累计未用下限时长,执行以下累计未用下限时长调整操作:根据上述累计未用下限时长、调整周期实等时长和期望调整周期时长确定调整后累计未用下限时长,上述调整周期实等时长为上述矿工节点竞争到记账权的区块的生成时间和上述矿工节点的区块链中上次调整上述累计未用下限时长对应的区块的生成时间之间的时长;以及将上述累计未用下限时长更新为上述调整后累计未用下限时长。

在本实施例的一些可选的实现方式中,上述调整后累计未用下限时长可以与上述累计未用下限时长和上述期望调整周期时长均正相关,上述调整后累计未用下限时长可以与上述调整周期实等时长负相关。

在本实施例的一些可选的实现方式中,在确定上述矿工节点竞争到记账权之后,上述记账权确定操作还可以包括:在上述矿工节点的可信执行环境中,将记账权确定信息利用上述可信执行环境中存储的预设私钥签名后广播给上述矿工节点的相邻节点,其中,上述记账权确定信息包括:上述矿工节点的区块链中上述矿工节点竞争到记账权的区块的上一区块的哈希值、上述累计未用下限时长和上述矿工节点绑定的账号地址,其中,上述矿工节点绑定的账号地址存储在上述矿工节点的可信执行环境中。

在本实施例的一些可选的实现方式中,上述装置600还可以包括:签名验证单元603,被配置成响应于接收到记账权确定信息,利用预设公钥对所收到的记账权确定信息进行签名验证;校验单元604,被配置成响应于对所收到的记账权确定信息进行签名验证通过,分别利用上述矿工节点的区块链中的尾部区块的哈希值和上述累计未用下限时长对所收到的记账权确定信息中的上一区块哈希值和累计未用下限时长进行校验;确定单元605,被配置成响应于校验通过,将所收到的记账权确定信息中的账号地址确定为竞争到第一当前区块的矿工节点绑定的账号地址,其中,上述第一当前区块为所收到的记账权确定信息中上一区块哈希值所指示的区块的下一区块。

在本实施例的一些可选的实现方式中,上述记账权确定单元602可以进一步被配置成:响应于确定上述矿工节点的当前累计未用时长大于累计未用上限时长,将上述当前累计未用时长更新为上述累计未用上限时长。

需要说明的是,本申请实施例提供的应用于区块链系统中矿工节点的共识装置中各单元的实现细节和技术效果可以参考本申请中其它实施例的说明,在此不再赘述。

下面参考图7,其示出了适于用来实现本申请实施例的矿工节点的计算机系统700的结构示意图。图7示出的矿工节点仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。

如图7所示,计算机系统700包括中央处理单元(cpu,centralprocessingunit)701,其可以根据存储在只读存储器(rom,readonlymemory)702中的程序或者从存储部分708加载到随机访问存储器(ram,randomaccessmemory)703中的程序而执行各种适当的动作和处理。在ram703中,还存储有系统700操作所需的各种程序和数据。cpu701、rom702以及ram703通过总线704彼此相连。输入/输出(i/o,input/output)接口705也连接至总线704。

以下部件连接至i/o接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(crt,cathoderaytube)、液晶显示器(lcd,liquidcrystaldisplay)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如lan(局域网,localareanetwork)卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至i/o接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。

特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(cpu)701执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++、python,还包括常规的过程式程序设计语言—诸如”c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括获取单元和记账权确定单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,获取单元还可以被描述为“获取累计未用下限时长的单元”。

作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的装置中所包含的;也可以是单独存在,而未装配入该装置中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该装置执行时,使得该装置:获取累计未用下限时长;在上述矿工节点的可信执行环境中执行以下记账权确定操作:确定上述矿工节点的当前累计未用时长;确定上述当前累计未用时长是否大于上述累计未用下限时长;响应于确定上述当前累计未用时长大于上述累计未用下限时长,确定上述矿工节点竞争到记账权,以及用上述当前累计未用时长与上述累计未用下限时长的差更新上述当前累计未用时长。

以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1