CN109218348A - 一种区块链中区块的确定方法及节点设备 - Google Patents
一种区块链中区块的确定方法及节点设备 Download PDFInfo
- Publication number
- CN109218348A CN109218348A CN201710519236.XA CN201710519236A CN109218348A CN 109218348 A CN109218348 A CN 109218348A CN 201710519236 A CN201710519236 A CN 201710519236A CN 109218348 A CN109218348 A CN 109218348A
- Authority
- CN
- China
- Prior art keywords
- block
- branch
- intensity
- pow
- node
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/40—Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
- G06Q20/401—Transaction verification
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1061—Peer-to-peer [P2P] networks using node-based peer discovery mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1074—Peer-to-peer [P2P] networks for supporting data block transmission mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Computer Security & Cryptography (AREA)
- Strategic Management (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开了一种区块链中区块的确定方法及节点设备,应用于一种区块链系统中的任一节点设备,区块链系统包括N个节点设备,N为大于或者等于3的正整数,该确定方法包括:在预设时长内,获取待选区块的信息集合,待选区块的信息集合包括N个节点设备中每个节点设备各自确定的区块强度最高的待选区块;从待选区块的信息集合中确定区块强度最高的目标区块;当达到预置时刻时,广播目标区块的信息,预置时刻为预设时长内的时刻;获取P个节点设备广播的目标区块的信息,P为小于或者等于N的正整数;当P大于或者等于阈值时,确定目标区块为新区块。本申请实施例可以使得区块链技术应用于对于交易时间比较苛刻的场景中,扩大区块链技术的适用性。
Description
技术领域
本申请涉及互联网技术领域,尤其涉及一种区块链中区块的确定方法及节点设备。
背景技术
随着比特币的出现,支持比特币交易的底层技术区块链也随之兴起。区块链(BlockChain)是指通过去中心化和去信任的方式在区块链系统中的各节点集体维护一个可靠数据库的技术。区块链系统中,所有数据保存在区块中,新写入的数据组成新的区块,添加在当前区块链末端链。每个区块在保存数据的同时,还要保存前一个区块中所有记录的数据唯一对应的一个数值,该数值往往是所有数据的Hash值,如果修改前一个区块中的数据,那么后面的区块中保存的该数值就会对不上(“链”不上),无法形成链。于是,区块链系统可以认为是由分布式网络上的互相不完全信任的节点,通过共识规则,共同维护一套可追溯、不可篡改的链式数据的系统。
区块链技术在区块(block)的生成过程中可以使用工作量证明(Proof of Work,缩写:PoW)共识机制,该PoW共识机制是通过引入分布式节点的算力竞争来保证数据一致性和共识的安全性。例如,在比特币系统中,各节点(即“矿工”)基于各自的计算机算力相互竞争来共同解决一个求解复杂但验证容易的数学难题(即挖矿得到PoW解),最快解决该难题的节点将获得区块记账权和系统自动生成的比特币奖励。
图1是比特币系统中一个区块的示意图,该区块包括区块头和交易列表,其中区块头包括版本号、上一个区块的hash值、交易列表中所有交易的Merkle Root(对所有交易进行特定处理后进行Hash运算得到)、时间戳、当前难度和随机数(PoW解)。
传统技术中的PoW共识机制,为了体现工作量证明寻找的难度,区块中的难度值必须根据系统算力合理确定,该难度值如果设定的太小(较低难度),那么系统中的不同节点会在较短的时间内几乎同时发现合适的PoW解,整个网络难以达成共识。如果该难度值设定的太大(较高难度),则寻找一个POW解所花费的时间是随机的,很可能导致产生区块的时间较长。例如,在比特币系统中选择根据全网算力平均10分钟能够找到一个PoW解,表1是比特币系统中连续若干个Block的产生情况表,可以发现从444815块到444816块中间经历了20分钟,是期望时间的2倍;从444816块到444817块经历了17分钟,也远远长于期望的10分钟间隔。
传统的PoW共识机制中只能够保证平均多长时间(例如上面例子中的10分钟)生成一个新区块,但是生成每个新区块的具体时间并不能确定,进而使得区块链技术的应用受限,使得其很难应用在对交易完成时间要求比较苛刻的场景中。
发明内容
本申请实施例提供了一种区块链中区块的确定方法及节点设备,可以使得区块链技术应用于对于交易时间比较苛刻的场景中,扩大区块链技术的适用性。
为达到上述目的,本发明的实施例采用如下技术方案:
本申请第一方面提供一种区块链中区块的确定方法,该方法应用于一种区块链系统中的任一节点设备,该区块链系统包括N个节点设备,N为大于或者等于3的正整数,该确定方法包括:在预设时长内,例如,该预设时长可以为5分钟,获取待选区块的信息集合,待选区块的信息集合包括N个节点设备中每个节点设备各自确定的区块强度最高的待选区块;从待选区块的信息集合中确定区块强度最高的目标区块;当达到预置时刻时,广播目标区块的信息,预置时刻为预设时长内的时刻;获取P个节点设备广播的目标区块的信息,P为小于或者等于N的正整数;当P大于或者等于阈值时,确定目标区块为新区块。例如,N可以为4,P可以为3,也有就是说当在全部节点中的大部分节点都确定该目标区块的区块强度最高,就可以达成共识该目标区块为新区块,本实施例中,通过比较各待选区块的区块强度,在一个预设时长内,P个节点设备确定的目标区块为新区块即达成共识,即可以确定目标区块为新区块,区块链产生新区块的时长为预设时长,确定了新区块产生的间隔时长,使得区块链技术可以应用在对交易完成时间要求比较苛刻的场景中。
结合第一方面,在第一种可能的实现方式中,第一方面中的步骤:获取待选区块信息集合,可以包括:确定区块强度最高的第一待选区块;将第一待选区块的信息写入第一预备结果;广播第一预备结果,该第一预备结果用于通知第二节点设备中的每个节点设备以根据接收的第一待选区块来各自确定区块强度最高的待选区块;接收第二节点设备中每个节点设备广播的第二预备结果,第二预备结果包括第二节点设备中每个节点设备各自确定的区块强度最高的待选区块的信息。
结合第一方面第一种可能的实现方式,在第二种可能的实现方式中,步骤确定区块强度最高的第一待选区块之前,该确定方法还包括:确定目标待选区块;根据目标待选区块中的信息进行工作量证明计算,得到结果值;若结果值小于或者等于目标值,则确定结果值为工作量证明PoW解;将PoW解写入目标待选区块,得到构建的待选区块。
结合第一方面第二种可能的实现方式,在第三种可能的实现方式中,步骤:确定区块强度最高的第一待选区块,可以包括:根据构建区块的信息和已接收的第二节点设备发送的待选区块的信息,确定区块强度最高的第一待选区块。
结合第一方面第二种可能的实现方式,在第四种可能的实现方式中,该确定方法还包括:若结果值大于目标值,则根据已接收的第二节点设备发送的待选区块的信息,确定区块强度最高的第一待选区块。
结合第一方面,在第五种可能的实现方式中,每个待选区块中包括工作量证明PoW解,从待选区块的信息集合中确定区块强度最高的目标区块,可以包括:确定每个待选区块中PoW解的数量;根据PoW解的数量从待选区块的信息集合中选择区块强度最高的目标区块,PoW解的数量与区块强度正相关。
结合第一方面,在第六种可能的实现方式中,每个待选区块的信息中包括PoW解及至少两个目标值,至少两个目标值中最小的目标值为第一目标值,从信息集合中确定区块强度最高的目标区块,可以包括:确定信息集合中的待选区块中是否包含小于第一目标值的PoW解,小于第一目标值的PoW解为第一层级难度的PoW解,第一层级难度为最高层级难度;若待选区块中包含小于第一目标值的PoW解,则确定每个待选区块中小于第一目标值的PoW解的数量;根据第一层级难度的PoW解的数量确定区块强度最高的目标区块,PoW解的数量与区块强度正相关。
结合第一方面六种可能的实现方式,在第七种可能的实现方式中,该确定方法还包括:当待选区块中第一层级难度的PoW解的数量相同时,则根据PoW解计算对应的待选区块的区块hash值;比较每个待选区块中的第一层级难度的PoW解的强度,PoW解的强度与区块hash值负相关;确定PoW解的强度最高的待选区块为区块强度最高的目标区块。
结合第一方面六种可能的实现方式,在第八种可能的实现方式中,至少两个目标值还包含第二目标值,第二目标值大于第一目标值;该确定方法还包括:若待选区块中不包含小于第一目标值的PoW解,则确定每个待选区块中小于第二目标值的PoW解的数量,第二目标值对应PoW解的第二层级难度,第二层级难度为第一层级难度的下一个层级;根据第二层级难度的PoW解的数量确定区块强度最高的目标区块,PoW解的数量与区块强度正相关。
结合第一方面,在第九种可能的实现方式中,从信息集合中确定区块强度最高的目标区块包括:判断集合中是否包含属于不同支链的待选区块;若第二待选区块属于第一支链,第三待选区块属于第二支链,则根据第一支链的支链强度与第二支链的支链强度确定第二待选区块和第三待选区块的区块强度的大小,区块强度与支链强度正相关。
结合第一方面第九种可能的实现方式,在第十种可能的实现方式中,待选区块的信息中包含在区块链中待选区块的上一个区块的标识,判断集合中是否包含属于不同支链的待选区块,包括:检测信息集合中的每个待选区块中所包含的上一个区块的前区块标识;若第二待选区块中所包含的前区块标识与第三待选区块中所包含的前区块标识不同,则确定第二待选区块和第三待选区块在不同的支链上。
结合第一方面第九种或第十种可能的实现方式,在第十一种可能的实现方式中,当第一支链上上包括X个区块,X为第一支链上区块的个数,第二支链上包含Y个区块,Y为第二支链上区块的个数,根据第一支链的支链强度与第二支链的支链强度确定第二待选区块和第三待选区块的区块强度的大小,包括:获取第一支链上所包括的X个支链区块的信息,每个支链区块的信息中包含PoW解的数量;统计X个支链区块的PoW解的第一总数量;获取第二支链上所包括的Y个支链区块的信息;统计Y个支链区块的PoW解的第二总数量;根据第一总数量和第二总数量确定第一支链强度与第二支链强度的大小,支链强度与支链区块的PoW解的总数量正相关。
结合第一方面第九种或第十种可能的实现方式,在第十二种可能的实现方式中,当第一支链上包含X个第一支链区块,第二支链上包含Y个第二支链区块时,X为大于或者等于1的正整数,Y为大于或者等于1的正整数,每个支链区块的信息中包括PoW解及至少两个目标值,至少两个目标值中最小的目标值为第三目标值,根据第一支链强度与第二支链强度确定第二待选区块和第三待选区块的区块强度的大小,包括:确定X个第一支链区块中是否包含小于第三目标值的PoW解,小于第三目标值的PoW解为第一层级难度的PoW解;若第一支链区块中包含小于第三目标值的PoW解,则确定X个第一支链区块中小于第一目标值的PoW解的第三总数量;当第二支链区块中包含小于第三目标值的PoW解时,则确定Y个第二支链区块中小于第一目标值的PoW解的第四总数量;根据第三总数量和第四总数量比较第二待选区块和第三待选区块的区块强度的大小,PoW解的总数量与区块强度正相关。
结合第一方面第十二种可能的实现方式,在第十三种可能的实现方式中,至少两个目标值还包含第四目标值,第四目标值大于第三目标值;该确定方法还包括:当第三总数量和第四总数量相同时,确定X个第一支链区块中小于第四目标值的PoW解的第五总数量,第四目标值对应PoW解的第二层级难度,第二层级难度为第一层级难度的下一个层级;确定Y个第二支链区块中小于第四目标值的PoW解的第六总数量,根据第五总数量和第六总数量第二待选区块和第三待选区块的区块强度的大小。
结合第一方面第九种至第十三种中任一种可能的实现方式,在第十四种可能的实现方式中,当第三待选区块为目标区块时,第三待选区块为区块链上中第(M+L)个区块,且第一支链和第二支链的共同父区块为第M个区块,L为大于或者等于1的正整数;步骤:确定目标区块为新区块之后,该确定方法还包括:获取第二支链上从第(M+1)至第(M+L)的区块的信息;将第(M+1)至第(M+L)的区块的信息替换第一支链上已保存的第(M+1)至第(M+L)的区块的信息。
结合第一方面,在第十五种可能的实现方式中,该确定方法还包括:
当P小于阈值时,确定目标区块为新区块,并发出告警,告警用于指示区块链系统处于异常状态。
本申请第二方面提供一种节点设备,该节点设备应用于一种区块链系统,区块链系统包括N个节点设备,第二节点设备为在N个节点设备中除第一节点设备之外的(N-1)个节点设备,N为大于或者等于3的正整数,该节点设备被配置实现上述第一方面或第一方面任一可选的实现方式所提供的方法的功能,由硬件/软件实现,其硬件/软件包括与上述功能相应的单元。
本申请第三方面提供一种计算机存储介质,该计算机存储介质存储有上述第一方面或第一方面任一可选的实现方式的区块链中区块的确定方法的程序。
本申请第八方面提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面任一可选的实现方式的区块链中区块的确定方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
在一个区块链系统中,包括N个节点设备,其中,该N个节点设备包括第一节点设备,在预设时长内,例如,该预设时长可以为5分钟,该第一节点设备获取待选区块的信息集合,待选区块的信息集合包括N个节点设备中每个节点设备各自确定的区块强度最高的待选区块;然后,第一节点设备从待选区块的信息集合中确定区块强度最高的目标区块;当达到预置时刻时,第一节点设备广播目标区块的信息;以通知其他的节点设备该第一节点设备最终确定的区块强度最高的目标区块,然后,该第一节点设备会接收其他(N-1)个节点设备广播的各自最终确定的区块强度最高的待选区块,当有P个节点设备广播的待选区块信息为目标区块的信息时,P为小于或者等于N的正整数;当P大于或者等于阈值时,该第一节点设备就可以确定目标区块为新区块。例如,N可以为4,P可以为3,也有就是说当在全部节点中的大部分节点都确定该目标区块的区块强度最高,就可以达成共识该目标区块为新区块,本实施例中,通过比较各待选区块的区块强度,在一个预设时长内,P个节点设备确定的目标区块为新区块即达成共识,即可以确定目标区块为新区块,区块链产生新区块的时长为预设时长,确定了新区块产生的间隔时长,使得区块链技术可以应用在对交易完成时间要求比较苛刻的场景中。
附图说明
图1为本申请实施例中区块的结构示意图;
图2为本申请实施例中区块链系统的架构示意图;
图3为本申请实施例中一种区块链中区块的确定方法的一个实施例的步骤流程示意图;
图4为本申请实施例中一种区块链中区块的确定方法的另一个实施例的步骤流程示意图;
图5为本申请实施例中一种区块链中区块的确定方法的场景示意图;
图6为本申请实施例中一种区块链中区块的确定方法的另一个实施例的步骤流程示意图;
图7为本申请实施例中一种区块链中区块的确定方法的过程中时刻和时长的示意图;
图8为本申请实施例中一种包含支链的区块链示意图;
图9为本申请实施例中支链回归的示意图;
图10为本申请实施例中支链回归的示意图;
图11为本申请实施例中节点设备的一实施例示意图;
图12为本申请实施例中节点设备的另一实施例示意图;
图13为本申请实施例中节点设备的另一实施例示意图。
具体实施方式
本申请实施例提供了一种区块链中区块的确定方法及节点设备,可以使得区块链技术应用于对于交易时间比较苛刻的场景中,扩大区块链技术的适用性。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了方便理解,首先对本申请实施例中涉及的词语进行简要说明:
对等网络(Peer-to-peer networking,简写:P2P),即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。网络的节点共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在P2P网络环境中,彼此连接的多台节点设备之间都处于对等的地位,各台节点设备有相同的功能,无主从之分,一台节点设备既可作为服务器,设定共享资源供网络中其他计算机所使用,又可以作为工作站,整个网络一般来说不依赖专用的集中服务器,也没有专用的工作站。网络中的每一台节点设备既能充当网络服务的请求者,又对其它节点设备的请求做出响应。
区块链技术:区块链技术应用于对等网络,区块链狭义来说是一种保存记录(数据)的范式;广义上说基于可靠数据,通过智能合约执行去中心化、去信任的方式多个节点设备维护集体维护一个可靠数据库的技术方案。区块链系统中,区块链是由多个区块“链”在一起的,所有数据保存在区块中,每个区块均包括区块头和区块主体,其中区块主体记录交易信息,因此,可以理解的是,区块链为一个分布式的账本。产生新的区块的过程,其实就是确定哪个节点设备具有交易信息的记账权的过程,新写入的数据组成新的区块,添加在当前区块链末端链,形成区块链。
区块的结构:包含区块头和区块主体。请结合图1进行理解,图1为区块的结构示意图。其中,区块头(Block_Header)包括:
1、当前版本号(version),标示软件及协议的相关版本信息。
2、父区块哈希值(previous block hash),上一个区块的哈希值,引用的区块链中父区块头的哈希值,通过这个值每个区块才可以首尾相连组成了区块链,并且这个值对区块链的安全性起到了至关重要的作用。如果有人试图单独修改前一块中的数据,那么后面这块中保存的这个数就会对不上(“链”不上)。
3、Merkle根(Merkle root),这个值是由区块主体中所有交易的哈希值再逐级两两哈希计算出来的一个数值,主要用于检验一笔交易是否在这个区块中存在。交易Hash树的根节点Hash值,起校验作用,保障Block在网络传输过程中的数据一致性,有新交易加入即发生变化。
4、时间戳(timestamp),记录该区块产生的时间,精确到秒。每秒自增一,标记Block的生成时间,同时为block hash探寻引入一个频繁的变动因子。
5、难度值(bits),该区块相关数学题的难度目标。用于验证block hash难度是否达标。
6、随机数(nouce),记录解密该区块相关数学题的答案的值。在上面数个字段都固定的情况下,不停地更换随机数来探寻。
由于对等网络下存在较高的网络延迟,各个节点设备所观察到的事务先后顺序不可能完全一致。因此区块链系统需要设计一种机制对在差不多时间内发生的事务的先后顺序进行共识。这种对一个时间窗口内的事务的先后顺序达成共识的算法被称为“共识机制”。其中,工作量证明(Proof of Work,缩写PoW)是共识机制的一种。
工作量证明PoW:比特币在区块的生成过程中使用了PoW共识机制,比特币网络中任何一个节点设备,如果想生成一个新的区块并写入区块链,必须解出比特币网络中的工作量证明的解。这道题关键的三个要素是工作量证明函数、区块头中的数据(nouce值)及难度值。工作量证明函数是这道题的计算方法,区块头中的数据决定了这道题的输入数据,难度值决定了这道题的所需要的计算量。通过不断变换nouce值得到该区块的区块哈希值,当该区块哈希值小于一个目标值时,则该nouce值为该PoW解。可以理解的是,一个符合要求的区块哈希值由N个前导零构成,零的个数取决于网络的难度值(例如,图1中所示的该区块的区块哈希值的前导零有16个)。要得到合理的区块哈希值需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的区块哈希值,说明该节点设备确实经过了大量的尝试计算,也就是工作量证明。
工作量证明函数:比特币系统中使用的工作量证明函为安全散列算法(SecureHash Algorithm,缩写:SHA)256。SHA是一个密码散列函数家族。SHA256就是这个函数家族中的一个,是输出值为256位的哈希算法。
难度值:难度值(difficulty)是矿工们在挖矿时候的重要参考指标,它决定了矿工大约需要经过多少次哈希运算才能产生一个合法的区块。比特币的区块大约每10分钟生成一个,如果要在不同的全网算力条件下,新区块的产生保持都基本这个速率,难度值可以根据全网算力的变化进行调整。
目标值(Target):目标值=最大目标值/难度值
其中最大目标值为一个恒定值:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF。
目标值的大小与难度值成反比。比特币工作量证明的达成就是矿工计算出来的区块哈希值小于目标值。
比特币中矿工计算工作量证明的过程如下:
1、将所有准备打包进区块的交易组成交易列表,通过Merkle Tree算法生成merkle根哈希值(merkle_root_hash)。
2、把merkle_root_hash及其他相关字段组装成区块头,将区块头的数据作为工作量证明的输入。
3、不停的变更区块头中的随机数即nonce的数值,并对每次变更后的区块头中的数据做双重SHA256运算(即SHA256(SHA256(Block_Header))),将结果值与当前的目标值进行比较,如果该结果值小于目标值,则解题成功,获得工作量证明。该过程可以用如下公式1表示:
SHA256(SHA256(Block_Header))<=目标值
区块头中包括的父区块哈希值、本区块中所有交易的merkle根哈希、版本号、时间戳、难度值和随机数PoW解,其中,只有随机数在每次计算时候会变化,目标就是寻找符合以上公式的随机数,符合上述公式1的随机数就是PoW解。由于找到符合条件的随机数需要很大的计算量,中间无效的随机数不会对结果产生任何影响,寻找PoW解的过程也叫做挖矿。
本申请实施例中提供了一种区块链中区块的确定方法,该确定方法应用于区块链系统,请结合图2所示,图2为本申请实施例中区块链系统的架构示意图,该区块链系统应用于对等网络,该区块链系统可以为联盟链或者私有链。本申请实施例中区块链系统包括有限个节点设备,节点设备110的数量为N。N为大于或者等于3的正整数。其中,在该N个节点设备中,包括第一节点设备和第二节点设备,该第二节点设备为在N个节点设备中除第一节点设备之外的(N-1)个节点设备,如,该N以4为例,该4个节点设备分别为节点设备A,节点设备B,节点设备C和节点设备D。当第一节点设备为节点设备A时,则节点设备B,节点设备C和节点设备D为第二节点设备;当第一节点设备为节点设备B时,则节点设备A,节点设备C和节点设备D,也就是说,本申请实施例中定义第一节点设备的目的在于以N个节点设备中的一个节点设备进行说明,方便描述,本申请实施中的区块链中区块的确定方法适用于N个节点设备中的每个节点设备。
N个节点设备之间彼此知道身份(例如:节点的名字或者标识等可以表征节点设备身份的信息),每个节点设备都有各自的私钥与公钥,公钥公开,私钥用于签名自身发出的消息(例如,区块的信息,以及相应其它节点的查询请求)。
本申请实施例中的节点设备可以为终端设备,例如,该终端设备可以为手机、平板电脑、PDA(personal digital assistant,个人数字助理)、个人计算机(personalcomputer,缩写:PC)等。
本申请实施例提供了一种区块链中区块的确定方法,基于工作量证明的共识机制,可以将每个区块产生的时长限定在一个预置时长内,例如,该预置时长为5分钟,则从上一个区块添加到该区块链尾部后,最长5分钟就会产生新的区块,这样可以使得区块链技术可以应用于对于交易时间比较苛刻的场景中,扩大区块链技术的适用性。下面对本申请实施例进行详细描述,本实施例是以N个节点设备中的一个节点设备(如节点设备A)为例进行描述,请参阅图3所示,该区块链中区块的确定方法的一个实施例包括:
步骤301、在预设时长内,获取待选区块的信息集合,待选区块的信息集合包括N个节点设备中每个节点设备各自确定的区块强度最高的待选区块。
本申请实施例中,每个节点设备均会从本节点已知的区块的信息中来确定区块强度最高的区块,该区块强度最高的区块为待选区块。
每个节点设备通过挖矿或者监听其他的节点设备广播的区块的信息确定区块强度最高的区块,以第一节点设备为例:
若该第一节点通过挖矿找到一个区块,则该第一节点设备比较自己找到的区块信息和接收其他节点设备广播的区块的信息进行比较,确定区块强度最高的区块;若该第一节点设备通过挖矿并自身并没有找到区块,则该第一节点设备可以比较其他节点设备广播的区块的信息,然后从其他节点设备广播的区块的信息确定一个区块强度最高的待选区块。
例如,节点设备A确定的区块强度最高的区块(记作“区块-A”),节点设备B确定的区块强度最高的区块(记作“区块-B”),节点设备B确定的区块强度最高的区块(记作“区块-C”),节点设备C确定的区块强度最高的区块(记作“区块-D”),接收节点设备D确定的区块强度最高的区块(记作“区块-D”),则节点设备A从“区块-A”、“区块-B”、“区块-C”和“区块-D”中确定区块强度最高的目标区块。
需要说明的是,上述“区块-A”表示该区块是由节点设备A确定的区块强度最高的区块,“区块-B”表示该区块是由节点设备B确定的区块强度最高的区块,“区块-A”这种描述只是为了区分该区块是哪个节点设备广播的,并不是限定“区块-A”和“区块-B”中记录的数据不同,该“区块-A”和“区块-B”可能是同一个区块,即记录的数据相同,也可能是不同的区块,即“区块-A”和“区块-B”中记录的数据不同,本实施中对于“区块-C”和“区块-D”与“区块-A”的理解相同,此处不一一赘述。
其中,获取区块A的信息、区块B的信息、区块C的信息和区块D的信息的时刻的先后顺序并不限定。
步骤302、从待选区块的信息集合中确定区块强度最高的目标区块。
节点设备A再对“区块-A”、“区块-B”、“区块-C”和“区块-D”的区块强度进行比较,从这四个区块中选择区块强度最高的目标区块,该目标区块为区块A。
步骤303、当达到预置时刻时,广播目标区块的信息,预置时刻为预设时长内的时刻。
例如,该预设时长为5分钟,该预设时长分钟为从2017年4月26日16:40:00到2017年4月26日16:45:00,那么,该预置时刻为2017年4月26日16:44:00,到达该预置时刻,第一节点设备广播该目标区块的信息,当然,其他节点设备(第二节点设备)也会在该预置时刻,向该区块链系统广播该目标区块的信息。
需要说明的是,由于各节点设备广播目标区块的时刻是以各自的时间戳为准,因此,为了避免各节点设备的时间戳不同而导致各节点设备广播目标区块的信息的时刻产生较大差异,在每个节点设备获取待选区块的信息集合之前,各节点设备与中心服务器对时,同步本节点的本地时间。
步骤304、获取P个节点设备广播的目标区块的信息,P为小于或者等于N的正整数。
第一节点设备自身已经确定了目标区块,当接收到P-1个节点设备广播的该目标区块的信信息。
步骤305、当P大于或者等于阈值时,确定目标区块为新区块。
当到2017年4月26日16:45:00时,第一节点设备确定P的数量。例如,当N为4时,该P可以为3,当第一节点设备再接收到2个节点设备广播的目标区块的信息时,第一节点设备就确定该目标区块为新区块,将该新区块添加到区块链的尾部。需要说明的是,本申请实施例中对于N的数值和P的数值、预设时长的数值只是举例说明,并不造成本申请的限定性说明。
本申请实施例中,在预设时长内,第一节点设备通过获取待选区块的信息集合,并从该待选区块的信息集合中确定区块强度最高的目标区块,然后,到达预置时刻,广播该目标区块的信息,当获取到P个节点设备广播的目标区块的信息,且P大于或者等于阈值时,确定该目标区块为新区块,本实施例中P个节点设备最终广播的区块强度最高的区块均为目标区块(如区块A),也就是P个节点设备已经达成了共识,第一节点设备可以在预设时长内确定该目标区块为新区块,从而可以使区块链技术应用到对产生区块的时长较为苛刻的场景中。
上面图1对应的实施例中提供的一种区块链中区块的确定方法以第一节点为执行主体进行描述,请结合图4所示,本申请实施例中提供了一种区块链中区块的确定方法的另一个实施例,该实施例中N为3为例进行说明,三个节点设备分别为节点设备A、节点设备B和节点设备C,本实施例中简称为节点A、节点B和节点C。需要说明的是,在本实施例,为了体现各节点的动作的区别,又要体现各节点之间的交互流程,对每个节点的步骤流程进行分别编号,将节点A的步骤记作40a,节点B的步骤记作40b,节点C的步骤记作40c。
步骤40a1、节点A确定区块强度最高的第一区块,记作“区块A”,
步骤40a2、节点A将该第一区块的信息向节点B和节点C广播。
步骤40b1、节点B接收到节点A广播的第一区块的信息,比较已存储的第二区块和接收到的第一区块的区块强度,确定第二区块为区块强度最高的区块,第二区块记作“区块B”。
步骤40b2、节点B广播第二区块。
步骤40c1、节点C接收到节点A广播的第一区块的信息和节点B广播的第二区块,比较已存储的第三区块(记作区块C)和接收到的第一区块和第二区块的区块强度,确定第三区块为区块强度最高的区块。
步骤40c2、节点C向节点A和节点B广播该第三区块的信息。
步骤40a2、节点A接收到节点B广播的第二区块的信息,节点比较第一区块、第二区块和第三区块的区块强度,确定区块强度最高的第三区块。
步骤40a3、广播该第三区块。
由于节点A确定的区块强度最强的第三区块与上一次确定的区块强度最强(第一区块)的区块不同,因此,节点A要广播该第三区块的信息,以通知节点A和节点C,当前节点A确定的区块强度最高的区块为第三区块。
当节点B接收到节点A广播的第三区块的信息后,第三区块与节点B上一次确定的区块强度最高的区块相同,因此,节点B不再重复广播。
当节点B接收到节点A广播的第三区块的信息后,第三区块与节点C上一次确定的区块强度最高的区块相同,因此,节点C不再重复广播。
当达到预置时刻,各节点开始相互通知最后确定的区块强度最强的区块。
步骤40a4、节点A广播该第三区块的信息;
步骤40b3、节点B广播该第三区块的信息;
步骤40c3、节点C广播该第三区块的信息;
步骤40a5,节点A获取P个节点广播的第三区块的信息,当P大于或者等于2时,则节点A确定第三区块为新区块。
当P大于等于2时,就可以确定第三区块为新区块,节点A接收到2个节点发送的第三代选区块的信息,并且自己确定的区块最高的区块也为第三区块,也就是说,共有3个节点确定第三区块为区块强度最高的区块,节点A确定三个节点以达成共识,就可以确定第三区块为新区块。
步骤40b4,节点B获取P个节点广播的第三区块的信息,当P大于或者等于2时,则节点B确定第三区块为新区块。
步骤40c4,节点B获取P个节点广播的第三区块的信息,当P大于或者等于2时,则节点C确定第三区块为新区块。
需要说明的是,上述节点A步骤40a1至步骤40a5,上述步骤40b1至步骤40b4,步骤40c1至步骤40c4均在预设时长内执行,例如,该预设时长为从2017年4月29日12:20:00至2017年4月29日12:10:00,该预置时刻为该预设时长内的时刻,该预置时刻为2017年4月29日12:09:00。本实施例中对于节点的数量,预设时长及该预置时刻均为举例说明,并不造成对本申请的限定性说明。
请结合图5和图6进行理解,其中,图5为本申请实施例区块链中区块的确定方法的场景示意图,图6为以N个节点设备中的第一节点设备为执行主体的步骤流程示意图。本申请实施例中提供了区块链中区块的确定方法的另一个实施例,本实施中以区块链系统中包括节点A、节点B和节点C这三个节点设备为例进行说明。为了避免歧义,本实施例中“预备结果”和“预备选票”词语意思相同,“最终选票”和“最终结果”词语意思相同。本实施例中“待选区块”也可以称为“区块”。在介绍本实施例之前,首先对本实施例中区块链中区块的确定方法的过程中关键时刻和时长进行解释说明,请参阅图7所示,图7为区块链中区块的确定方法的过程中时刻和时长的示意图。预设时长包括第一时长和第二时长,整个过程包括的时刻点如下:
(T0)时刻:该预设时长的开始时刻,
第一预置时刻,该第一预置时刻为广播目标区块的时刻;
第二预置时刻,强制各节点出区块(广播目标区块)的时刻;
(T10)时刻:该预设时长的结束时刻。
其中,从(T0)时刻到第一预置时刻之间的时间段为第一时长,在该第一时长内各节点相互通知各自确定的区块强度最高的第一待选区块,并在第一待选区块中进一步的确定出区块强度最强的目标区块,从第一预置时刻到T10时刻为第二时长,在该第二时长内,各节点广播各自的目标区块,从而确定该目标区块为新区块。
步骤50a1、构建目标待选区块。
该目标待选区块是指不包含nounce值的区块,该构建的区块包含节点设备打算写入到本块中的所有交易的信息、写入交易的数目、父区块哈希值、Merkle根、时间戳、难度值等。
在将上一个通过共识的第(K-1)个区块添加到本节点设备的本地区块链的末尾之后,与一个中心服务器同步一次本地时间。确定目标待选区块为第第K个区块。
T0时刻:开始构建第K个区块,该第K个区块为目标待选区块。
节点A构建的第K个区块,记作{#K}_A块,节点A将父区块哈希值、Merkle根哈希值、时间戳、难度值和打算记录到本区块中的所有交易的信息、写入交易的数目等写入该目标待选区块。下面对该目标待选区块进行举例说明:
步骤50b1、节点B构建目标待选区块,为了区别于节点A,节点B构建的第K个区块,记作{#K}_B。
此步骤结合步骤50a1中节点A构建{#K}_A进行理解,此处不赘述。
步骤50c1、节点C构建目标待选区块,为了区别于节点A,节点B构建的第K个区块,记作{#K}_C。
此步骤结合步骤50c1中节点A构建{#K}_A进行理解,此处不赘述。
步骤50a2、根据该目标待选区块中的信息进行工作量证明计算,得到结果值。若结果值小于或者等于目标值,则节点A确定结果值为工作量证明PoW解。
T1时刻:节点A开始挖矿,根据该目标待选区块中的信息进行工作量证明计算,得到结果值。当结果值小于或者等于目标值时,则节点A确定结果值为工作量证明PoW解,
不停的变更区块头中的随机数即nonce的数值,并对每次变更后的区块头中的数据做双重SHA256运算(即SHA256(SHA256(Block_Header))),将结果值与当前的目标值进行比较,如果该结果值小于目标值,则解题成功,获得PoW解(记作PoW-D2)。
将PoW解(nounce)写入目标待选区块,得到构建区块。则将该nounce放入{#K}_A区块的区块头中的”nounce”部分,同时把该nounce对应的”hash”字段写入区块头,得到构建区块,该构建区块记作{#K}_A1,该{#K}_A1如下:
步骤50a3、节点A确定当前区块强度最高的第一待选区块,并广播第一待选区块的信息。
节点A找到了PoW解,节点A接收到了构建区块{#K}_A1的信息,但是并没有收到第二节点设备(节点B和/或节点C)发送的待选区块的信息,此时,节点A确定{#K}_A1为区块强度最高的第一待选区块。
然后,节点A向节点B和节点C广播该{#K}_A1的信息,节点A广播该{#K}_A1的信息的目的在于通知节点B和节点C,当前节点A确定的区块强度最高的第一待选区块为{#K}_A1。
可选的,将第一待选区块的信息写入第一预备结果之后进行广播,该第一预备结果中会记载该预备结果的发送方,有利于其他的节点(节点B和节点C可以确定该预备结果的中的第一待选区块是哪个节点发送的)。
需要说明的是,本实施例中,节点接收的预备结果为第一预备结果,为了区分,节点广播的预备结果为第二预备结果。第一预备结果和第二预备结果为相对的概念,第一预备结果和第二预备结果是以一个节点为执行主体区分的,举个例子,节点A广播第一预备结果A,当节点B接收到节点A广播的预备结果A时,该预备结果为节点B“接收到的”,因此,当以节点B为执行主体时,应描述为节点B接收节点A广播的第二预备结果B,可以理解的是,本实施例中“第一”可以理解为对“广播”和“接收”的区分。
该第一预备结果为该第一待选区块的信息的载体,也就是说,该第一预备结果可以作为承载该第一待选区块的一种形式,该第一预备结果可以理解为多个节点对于第一待选区块的预备投票,第一待选区块的信息承载于该第一预备结果中,下面对该节点A广播的第一预备结果的示例如下:
第一预备结果的作用是让一个节点通知其他节点自己目前所知的区块强度最高的待选区块的信息。预备结果中只能包含一个区块的信息,但是如果节点在任何时间通过自己挖掘到区块强度更强的区块,或者接收到第二节点的区块强度更高的待选区块的信息(其他节点同样以第一预备结果的形式广播出来),在验证这个待选区块中所有交易的有效性之后,可以修改预备结果中所包含的待选区块的信息,重新向区块链系统中的其他节点(节点B和节点C)广播。
步骤50b2、节点B接收到节点A的预备结果A(预备投票),与本地保存的带有PoW解的区块进行比较,确定强度最高的第一待选区块。
节点B确定{#N}_A1是区块强度最高的第一待选区块,将对第一待选区块写入第一预备结果B,该节点B广播的第一预备结果B与节点A广播的第一预备结果A中携带的待选区块信息相同,但是第一预备结果B中发送方不同,发送方为节点B,如:"voter":"node-A",//预备投票人的身份是节点B,然后节点B广播该第一预备结果B,以通知其它节点。
步骤50c2、节点C接收到节点A的预备结果,该预备结果携带{#N}_A1的信息,节点C自己没有找到带有PoW解的区块,节点C确定接收到的{#N}_A1为区块强度最高的第一待选区块。并将该{#N}_A1写入第一预备结果C进行投票,通知节点A和节点B自己确定的区块强度最高的区块为{#N}_A1。
步骤50b2和步骤50c2并没有时序上的限定。
步骤50a4、节点A收到节点B对{#N}_A1(PoW-D2)的预备结果(预备选票),发现本节点当前的预备选票就是投给该区块的({#N}_A1),不必重新投票或通知其它节点。
步骤50c3、节点C找到了PoW解(记作PoW-D1),节点C将PoW-D1写入{#K}_C,得到构建区块{#K}_C1,节点C比较{#K}_C1和{#N}_A1的区块强度,确定{#K}_C1的区块强度比{#N}_A1的区块强度高,将自己的预备选票改投给{#K}_C1,并通知节点A和节点B。
步骤50b3、节点B收到节点C的预备投票。与本地保存的{#K}_A1相比,{#K}_C1)是强度最高的区块,对{#K}_C1投出预备选票,并通知节点A和节点C。
步骤50a5、节点A收到节点C的预备投票。与本地保存的{#N}_A1相比,{#K}_C1是区块强度最高的区块,对{#K}_C1投出预备选票,并通知节点B和节点C。
节点B接收到节点A投出的预备选票,发现该预备选票中携带的{#K}_C1,这与节点B上一次确定的区块强度最高的区块强度相同,则节点B不需要重新广播该{#K}_C1的预备选票。
节点C接收到节点A投出的预备选票,发现该预备选票中携带的{#K}_C1,这与节点C上一次确定的区块强度最高的区块强度相同,则节点C不需要重新广播该{#K}_C1的预备选票。
当达到阈值时刻,到达最终投票时间,各节点开始投出最终的结果,各节点将各自最后确定的结果通知给其他节点。结合图7进行理解,如果最终投票时刻是预置时刻,那么在T0到预置时刻之间的第一预置时长内,各个节点都可以投出或者修改后再投出预备结果,而在预置时刻(以节点的本地时间为准),节点A需要投出最终结果,最终结果包含目标区块的信息。
该预置时刻为设定一个最终投票时间,在第一预置时长内,各节点已经确定了强度最高的目标区块,当达到最终投票时间,各节点开始广播各自确定的区块强度最强的目标区块的信息。
可选的,为了区分第一预置时间段的预备结果,本步骤中,可以将该目标区块的信息写入最终结果中,将最终结果作为目标区块的信息的载体,并进行广播。最终选票的格式与预备选票类似,不同之处是”vote_type”是”final_vote”而不是”pre_vote”。最终选票所指向的区块是投票节点在投票时刻所知道的强度最高的区块,并且投出之后不再修改。
该最终结果如下所示:
可选的,为了避免网络延时和各节点的本地时间不同步从而影响到一个节点接收其他节点广播的最终结果,该预置时刻包括第一预置时刻和第二预置时刻,该第二预置时刻在第一预置时刻之后,其中,第一预置时刻为广播最终结果的时刻,第二预置时刻为“强制出块时刻”,设定第二预置时刻可以使得在广播最终结果的时刻和强制出块时刻之间的时间段足够使得各节点之间互发的最终结果可以接收到。
步骤50a6、当达到预置时刻时,节点A广播目标区块的信息,预置时刻为预设时长内的时刻。目标区块为最终确定的区块强度最高的区块。
节点A根据当前时刻所判断的区块强度最强的区块是{#K}_C1,因此对该区块{#K}_C1投出最终结果,并等待其它节点的投票结果。
步骤40a7、节点A收到了2张对{#K}_C1的最终投票,算上本节点一共3票,{#K}_C1的最终投票的得票率超过66%(2/3),将{#K}_C1(作为本基点区块链的{#K}区块。
在投出最终选票之后,节点等待其它节点的最终选票,如果收到同一个节点的两个最终选票,无论这两个选票都包含同一个区块还是不同的区块,只认可其中之一。如果本节点所投的最终选票中包含的区块获得了超过66%以上的最终选票(3个节点的系统中,算本节点的投票共需要2票或以上),则将这个最终选票中包含的目标区块作为新的区块{#K}块。
步骤50b3、节点B对该区块{#K}_C1投出最终结果,以通知节点A和C。
步骤50c4、节点C对该区块{#K}_C1投出最终结果,以通知节点A和B。
步骤50b4、节点B在对{#K}_C1投出最终选票以后,待各自统计到2张对{#K}_C1的最终选票时,可以将{#K}_C1作为自己本地区块链的第K个区块,{#K}区块
步骤50c5、节点C统统计两个节点在对{#K}_C1投出最终选票以后,待各自统计到2张对{#K}_C1的最终选票时,可以将{#K}_C1作为本节点区块链的{#K}区块。
本申请实施例中,为了方便描述,以节点A和节点C找到工作量证明的解,而节点B并没有找到PoW解为例进行示例性说明,在实际应用中区块链中的各节点找到PoW解的情况有很多种,但是原理与上述方法实施例相似,可以参照上述方法实施例中的方法进行理解,本申请实施例中的示例性说明病不造成对本申请的限定性说明。本申请实施例中提供了一种在有限个节点中使用PoW进行共识的方法,该方法克服了当前PoW算法中确定新区块的时间与预期不符的情况,本实施例中提供的方法能够使区块链系统在规定的时间内产生通过共识的区块,以保证区块链系统的写入吞吐量的稳定性。提高了PoW算法在有限节点构成的区块链系统中的实用性。
本申请实施例中,上述图3、图4和图5对应的方法实施例中,均涉及到各区块的区块强度的比较,下面针对上述方法实施例中步骤301、步骤302、步骤40a1、步骤40b1、步骤40c1、步骤40a2、步骤50a3、步骤50c3、步骤50a5中对区块强度比较进行详细说明。下面的具体说明以节点A为例进行说明,其他节点比较区块的区块强度的方法参照节点A进行理解。
在一种实现方式中,确定每个待选区块中PoW解的数量,在节点挖矿的过程中,该PoW解并不唯一,可以通过待选区块中PoW解的数量来比较待选区块之间的区块强度。
根据PoW解的数量从待选区块的信息集合中选择区块强度最高的目标区块,PoW解的数量与区块强度正相关。PoW解的数量越多,则区块的区块强度越大。
例如,在区块A中,"nonce":[2964215930],PoW解的数量为1;
在区块B中,"nonce":[2964215930,1325863008],PoW解的数量为2;
在区块C中,"nonce":[2964215930,1325863008,6576382304],PoW解的数量为3。则第一节点确定区块C的区块强度最大。
另一种实现方式,在此种方式介绍之前,为了方便理解,先解释一个词语:PoW解的强度
区块的信息中包括PoW解及至少两个目标值,至少两个目标值中最小的目标值为第一目标值,目标值与难度值为反比关系,可以理解的是,每个区块中设置两个难度值,两个难度值对应两个难度层级,其中,难度层级包括第一层级难度和第二层级难度,第一层级第一层级难度为最高层级难度;第二层级难度为次高级难度,需要说明的是,本申请实施例中为了方便说明只举了两个层级难度,在实际应用中,区块中包括的难度值并不限定,也就是说层级难度的等级并不限定。
本实施例中以比较两个区块为例进行说明,当然多个区块之间比较区块的区块强度与两个区块之间比较区块强度原理相同:
比较区块的区块强度具有优先级顺序:
先比较两个区块第一层级难度PoW解的个数;如果第一层级难度PoW解的个数相同,则比较第一层级难度对应的最强的PoW解的强度。如果两个区块都没有第一层级难度的PoW解,则比较第二层级难度,仍然是先比较第二层级难度PoW解的数量,如果第二层级难度对应的PoW解的数量相同,再比较第二层级难度中最强的PoW解的强度,以此类推。如果PoW解强度都相同(几率非常低),则比较次强度的PoW解的强度,以此类推,如果都相同,则区块强度相同。
举例说明:
首先,比较两个区块第一层级难度对应的PoW解的数量;若区块A中第一层级难度对应的PoW解的数量大于区块B中第一层级难度对应的PoW解的数量,则区块A的区块强度大于区块B的区块强度。
例如,区块A中"nonce":[2964215930,1325863008,6576382304],其中“2964215930,1325863008”对应第一层级难度,而6576382304对应第二层级难度。
区块B中"nonce":[2321565930,6576234504],其中,“2321565930”对应第一层级难度,而6576234504对应第二层级难度。
比较两个区块第一层级难度对应的PoW解的数量,第一层级难度对应的PoW解的数量为2个,而第二层级难度对应的PoW解的数量为1个。则区块A的区块强度大于区块B的区块强度。
其次,若区块A和区块B第一层级难度对应的PoW解的数量相同,则进行下一个优先级比较。
即比较两个区块中第一层级难度的PoW解的强度,为了方便理解,此处先解释PoW解的强度。
PoW解的强度:一个区块PoW解的强度与该PoW解对应的区块的Hash结果有关,PoW解的强度与区块hash值负相关;该区块Hash值越小(取值范围在0~1.57e77之间),则解的强度越高。对于PoW1和PoW2,如果SHA256(SHA256(Block_header(PoW1)))<SHA256(SHA256(Block_header(PoW2))),则PoW1的强度大于PoW2的强度。
然后,若待选区块中不包含小于第一目标值的PoW解,也就是说,若两个区块中不包含第一层级难度的PoW解,则比较区块A和区块B中第二层级难度对应的述PoW解的数量。
难度对应的述PoW解的数量与区块强度正相关,根据第二层级难度的PoW解的数量越大,则区块强度越大。
本实施例中,通过设置至少两个难度值,也就是说设置至少两个难度层级,从而使得不同的难度层级可以具有对应的PoW解,在多个区块中可能存在不同层级难度的PoW解,这样在比较区块强度的过程中就可以从不同的层级难度进行比较,即保证了在区块链系统中在预设时长内一定有PoW解的产生,而且在至少两个区块中通过不同层级难度PoW解的比较,确定出区块强度最高的区块。
需要说明的是,上述实施例中,一个区块中可以包括至少两个难度值,并且区块中的难度值是可以动态调整的,下面举例说明:
难度值的设置:如果发现第一层级难度PoW解出现的多(例如,每个区块都包含多个第一层级难度的PoW解),则需要提高第一层级难度对应的难度值,同时同比例提高各个层级难度的难度值的设定(本实施例中包括第二层级难度对应的难度值)。
例如,平均每个合法的区块中有1到2个第一层级难度的PoW解,为合理范围;如果发现第一层级难度甚至最低层级难度的PoW解出现的都比较少,则适当降低难度,对应的调整难度值。
最低层级难度要设定的足够低,例如,强制出块时间是10min,则最低难度的期望时间应该是1分钟。如果以4台节点计算,10min没有出现1个最低难度PoW的概率是(2.56e-12)%,计算过程如下:
单个节点10分钟没找到最低层级难度的工作量证明的概率,依泊松分布:P[N(10)=0]=(1*10)*e^(-1*10)/0!=0.0004,四个节点都没有找到的概率是(0.0004)^4=2.56e-14,依照计算结果调整对最低层级难度的期望时间,目的是使得系统内各节点中保证有至少一个节点可以找到PoW解。
本申请实施例中提供了比较区块强度的另一个示例,在区块链系统中,在网络隔离的情况下,各节点之间可能从某一个区块开始没有达成共识,各自独立产生区块,从最后一个相同的块开始,该区块链可能会产生支链。请结合图8进行理解,图8为包含支链的区块链示意图,从第M个区块(记作区块{#M})开始,区块链产生了支链。下面对在支链上区块的区块强度的比较方式进行说明。
在比较两个区块(如第二待选区块(记作区块{#M+3}′)和第三待选区块(记作区块{#M+3}))的区块强度之前,可以先判断这两个区块是否属于不同支链的区块,具体的方法可以为:
首先,检测信息集合中的每个待选区块中所包含的上一个区块的前区块标识;该前区块标识可以为父区块哈希值(previous block hash),若区块A和区块B中所包含的前区块标识不同,则确定第二待选区块和第三待选区块在不同的支链上。可以理解的是,当两个区块在不同的支链上时,比较两个区块的区块强度需要根据支链强度进行比较。
具体的,若第二待选区块(区块{#M+3}※)属于第一支链,第三待选区块属于第二支链(区块{#M+6}),则根据第一支链的支链强度与第二支链的支链强度确定第二待选区块和第三待选区块的区块强度的大小,区块强度与支链强度正相关。
请结合图8进行理解,在图8中,左侧的支链为第一支链,右侧的支链为第一支链,当第一支链上包括X个第一支链区块,X为第一支链上区块的个数,第二支链上包含Y个第二支链区块,Y为第二支链上区块的个数,本实施例中X以3为例进行说明,Y以6为例进行说明,本实施例中对于第一支链和第二支链所包含的区块的个数只是举例说明,并不造成对本申请的限定性说明。
比较第一支链的支链强度和第二支链的支链强度的具体方式可以为:
在一种可以实现的方式中,获取第一支链上所包括的X个支链区块的信息,每个支链区块的信息中包含PoW解的数量,例如,获取区块({#M+1}※),区块({#M+2}※)和区块({#M+3}※)中每个区块中包括的PoW解的数量,然后,统计X个支链区块的PoW解的第一总数量;获取第二支链上所包括的Y个支链区块的信息;统计Y个支链区块的PoW解的第二总数量;
根据第一总数量和第二总数量确定第一支链强度与第二支链强度的大小,支链强度与支链区块的PoW解的总数量正相关。
请结合下表1进行理解,下表1为第一支链强度和第二支链强度的示例性说明:
表1
从上表1可以看出,第一支链上X个支链区块的PoW解的第一总数量为5,而,第一支链上Y个支链区块的PoW解的第二总数量为10,第二支链强度大于第一支链强度,因此,第三待选区块的区块强度大于第二待选区块的区块强度。本种实现方式中,通过支链上所有的支链区块的PoW解的总数量来比较两个支链强度的大小,进而比较两个支链区块的区块强度。
在另一种可能实现的方式中,当第一支链上包含X个第一支链区块,第二支链上包含Y个第二支链区块时,每个支链区块的信息中包括PoW解及至少两个目标值,至少两个目标值中最小的目标值为第三目标值。可以理解的是,由于目标值与难度值呈反比,因此每个支链区块中包括两个难度值,也就是说,每个支链区块若可以找到PoW解,则PoW解可能包括两个层级难度比较述第一支链强度和第二支链强度的具体方式可以为:
首先,可以先比较两个支链中所有区块的第一层级难度(最高级难度)的PoW解的总数目,PoW解的总数量与区块强度正相关,该P oW解的总数量越大,则该支链强度越大,区块强度也就越大。
其次,如果数目相同,比较第二层级难度(次高难度)的所有PoW解的数量,第二层级难度是第一层级难度的下一个层级。
然后,如果相同,再继续比较第二层级难度的下一个层级的所有PoW解的数量。
如果有所层级的PoW解的数目都相同,则两个支链上所有PoW解中各自的最高强度的PoW解的强度,如果相同(概率很低),则比较各自次高强度的PoW解,以此类推,此处不赘述。
下面进行具体的描述:
首先,确定X个第一支链区块中是否包含小于第三目标值的PoW解,小于第三目标值的PoW解对应第一层级难度。
若第一支链区块中包含小于第三目标值的PoW解,则确定X个第一支链区块中小于第一目标值的PoW解的第三总数量;当第二支链区块中包含小于第三目标值的PoW解时,则确定Y个第二支链区块中小于第一目标值的PoW解的第四总数量;然后,根据第三总数量和第四总数量比较第二待选区块和第三待选区块的支链强度的大小,若第三总数量大于第四总数量,则第二待选区块的支链强度大于第三待选区块的支链强度,也就是说,第二待选区块的区块强度大于第三待选区块的区块强度。
进一步的,至少两个目标值还包含第四目标值,第四目标值大于第三目标值。
当第三总数量和第四总数量相同时,确定X个第一支链区块中小于第四目标值的PoW解的第五总数量,第四目标值对应PoW解的第二层级难度,第二层级难度为第一层级难度的下一个层级;
确定Y个第二支链区块中小于第四目标值的PoW解的第六总数量,根据第五总数量和第六总数量第二待选区块和第三待选区块的区块强度的大小。
本实施例中,当比较两个在不同支链上的区块的区块强度时,通过比较这两个区块的支链强度的大小,来比较两个这两个区块的区块强度,在比较支链强度的过程中,通过计算支链上所有区块的不同层级难度对应的PoW解的数量来比较支链强度,几乎保证可以比较出两个支链的支链强度的大小,提高了PoW算法在有限节点构成的区块链系统中的实用性。
在图3、图4和图5对应的方法实施例中,描述了当第一节点统计到P个节点广播的目标区块的信息,且P大于或者等于阈值时的情况,也就是说,本实施例中以区块链中有三个节点为例(节点A、节点B和节点C),该阈值为3,也就是说,当一个节点获取到三个节点广播的目标区块的信息时,则确定该目标区块为新区块。
在另一个实施例中,提供了当P小于阈值时的进一步的实现方式,例如,节点A本身确定了目标区块,但是在预设时长内并没有接收到其他节点广播的该目标区块的信息,或者只接收到了一个节点(节点B)广播的该目标区块的信息时:在一种可以实现的方式中,若节点B(或者节点C)广播的待选区块与目标区块不同。例如,节点A最终确定的目标区块为“区块A”,节点A没有收到节点B和节点C广播的目标区块的信息,若节点A收到节点B广播的“节点B”的信息,且“区块B”与“区块A”不同,节点A则比较本身确定的区块强度最高的目标区块,和接收到的与目标区块不同区块的区块强度,例如,比较“区块A”和“节点B”的区块强度,将区块强度最强的区块作为新区块(区块{#K}),并开始找下一块(第{#K+1})。
在另一种可能实现的方式中,节点A同样可以确定目标区块为新区块,继续寻找下一块(第{#K+1}区块)。
但是,无论上述哪种情况出现,节点A都可以判定当前区块链系统出现异常,例如,该区块链系统中出现节点A断网、其它节点断网、其它节点撒谎等情况,节点A在预置时刻之后,在T10时刻之前,没有搜集到符合阈值条件的P个节点广播的目标区块的信息。如果有用户查询消息时,发出告警,告警用于指示区块链系统处于异常状态。
然后,各节点应该继续按照上述方法实施例中的方式持续确定新的区块以维持区块链的增长,此时区块链出现分叉,也就是说该区块链包括支链了,并不是一条链了,如图8所示例,节点在触发预置条件后,节点就可以从分叉回归,或者帮助其它节点从分叉回归主链。
具体的,当区块链系统出现网络隔离,会出现支链;各节点,可能分成几个小群组各自挖矿。待网络恢复以后,各节点会陆续收到预备结果(预置时刻之前)或者最终结果(预置时刻之后,预设时长结束之前)的信息(取决于节点所在的状态),如果节点A正好是处于预置时刻之后,T10时刻之前,则分叉会持续下一个区块,等待下一个广播预备结果时段(图7中的第一时长)。
在第一时长内,各节点会收到新的预备结果,但是接收节点会发现该新的预备结果中包含的区块与本节点构建的区块来自不同的支链(prev_block中的hash值不同)。此后,接收节点(如节点A)向发送节点(如节点B)请求该新的预备结果中包含区块的父系区块(序号靠前一位的区块,如果目前是第M块,则请求M-1块),以及序号更靠前的区块,直到找到两个支链共同的父系块。
当第三待选区块为目标区块时,第三待选区块为区块链上中第(M+L)个区块,且第一支链和第二支链的共同父区块为第M个区块;获取第二支链上从第(M+1)至第(M+L)的区块的信息;将第(M+1)至第(M+L)的区块的信息替换第一支链上已保存的第(M+1)至第(M+L)的区块的信息。
请结合图9进行理解,图9为支链回归的步骤流程示意图。
10、节点A正在寻找第{#(M+L)}块,自己构建的区块为第二待选区块(记作Ka块)。
20、收到其他节点(如节点B)对{#(M+L)}块的预备结果,该预备结果中包括第三待选区块(记作Kb块)的信息。
30、节点A判断该Kb块的父块与Ka块的父块是否相同。
40、当节点A确定Kb块的父块与Ka块的父块不同,节点A向所有广播Kb块的节点询问Kb块之前的若干区块,直到查询到第M块,即第{#M}块并验证所有这些区块的有效性。与自己记录的链的第{#K}块相同。也就是说,第第M块为Ka块和Kb的共同父区块。
50、节点A计算从其它节点(节点B和/或节点C)查询到的{#M+1}至{#M+L}的区块的区块强度总和(记Q1),结合图8对应的例子可以看出,节点A计算({#M+1}、{#M+2}、{#M+3}、{#M+4}和{#M+5}的区块强度总和。与本节点保存的{#M}至{#K+L}块({#M+1}※、{#M+2}※和{#M+3}※)的区块强度总和(记Q2)。比较Q1和Q2的大小。
60、如果Q1>Q2,则对Ka投出预备结果,如果Q1<Q2,则对Ka投出预备结果(如果已经对Kb投过预备选票则不用重复投)。
70、在投出最终结果后,如果最终结果的数量超过阈值的区块来自第二支链的({#M}~{#M+L}),本节点A将使用该({#M}~{#M+L})替代自己本地保存的({#M}~{#M+L})区块,该节点A的分叉状态解除,与主链保持一致。例如,将区块({#M+1})至({#M+5})替换本节点A保存的({#M+1}※)至({#M+3}※)。
上面图9对应的示例是以第一节点(节点A)为执行主体进行描述的,下面请结合图10进行理解,图10为支链回归的示意图。该信息交互图描述了处于分叉(第一支链)中的节点A如何恢复与主链同步。在{#M}块开始,节点A与节点B和C所维护的主链有了分叉。在寻找第{#M+L}块时,节点A恢复与节点B和C的网络通讯,并通过和节点B交互,将自己本地的区块链记录与主链的记录进行了同步。为了简洁描述,忽略了节点C的行为。实际上其行为模式与节点B相同。节点A构建第{#M+L}区块,记作{#M+L}_A,节点B构建{#M+L}_B。
10b1、节点B找到PoW的解,记作(PoW-D1)。
10b2、节点B将对{#M+L}_B(PoW-D1)的预备结果进行广播(到节点A)。
10a1、节点A发现{#M+L}_B(PoW-D1)与本节点构建的{#K+m}_A具有不同的父区块。
10a2、节点A向节点B询问{#M+L}_B的父区块。
10b3、节点B按照节点A要求返回{#M+L}_B的父块{#M+L-1}_B
10a3、比较{#M+L-1}_B与{#M+L-1}_A,如果不一致,则继续查询{#M+L-1}_B的父系块,每查询一块,都要验证块的有效性,如果是无效区块,则终止查询,继续本节点的挖矿流程。
10a4、节点A不断向节点B查询,直到获得某区块{#K}_B与节点A保存的{#K}_A相同。当达到阈值时刻:
10a5、节点A对区块{#M+L}_B投出最终结果。
10a6、节点A在收到对{#M+L}_B的另外两张最终投票后,确定该区块为新的{#M+L}块,并用其父系区块链({#M+1}_B至{#M+L}_B)区块代替本节点上的({#M+1}_A至{#M+L}_A)区块,完成与主链的同步。
本实施例中,对于若节接收到其他节点广播的预备结果后,确定本节点为维护的区块链产生了分叉,若通过不断查询两个支链的父区块,并且比较两个支链的支链强度,来确定第一支链和第二支链哪个是主链,哪个是分叉,例如,第一支链为分叉所在的支链,而第二支链为主链所在的支链,当确定本节点找到的区块在分叉的支链上,则将父区块之后的区块进行替换,完成与主链同步,解决了网络隔离对区块链产生分叉的问题。
上面对本申请提供的一种区块链中区块的确定方法分实施例进行描述,下面对一种区块链中区块的确定方法在一个应用场景中进行描述。
在一个应用场景中:
区块链系统由4个节点构建而成,分别是节点A、节点B、节点C和节点D,各自在相同的第100个区块(记作{#100})基础上寻找第101块区块(记作{#101})的工作量证明,并通过预备结果和最终结果选择了节点B构建的{#101}块作为4个节点公认的新区块,添加到各自区块链记录的末尾。预设时长为5分钟,预置时刻为在第4分钟时,设置两个难度值,第一层级难度要求工作量证明对应的hash有16个前导0,第二层级难度要求工作量证明对应的hash有10个前导0,确定新区块需要75%(3/4)的最终选票。本实施例中,为了叙述的简洁,假设节点C和节点D都没有找到工作量证明,节点A和节点B各自为本节点构建的区块找到了工作量证明并相继根据流程投出预备选票和最终选票,最后四个节点都对节点B的区块投出最终选票,
四个节点共同的记录的{#100}的信息如下:
{
"hash":"0000000000000bae09a7a393a8acded75aa67e46cb81f7acaa5ad94f9eacd103",
"head_hash":"9030c0a6ccbf8d07af074b8655b4d5bf34394099a946274a2b86226c3a8034f7",
"ver":1,
"prev_block":"00000000000007d0f98d9edca880a6c124e25095712df8952e0439ac7409738a",
"mrkl_root":"935aa0ed2e29a4b81e0c995c39e06995ecce7ddbebb26ed32d550a72e8200bf5",
"time":1322131230,
"bits":[437129626,327054762,148672008],
"nonce":[2964215930,1325863008,6576382304],
"n_tx":3,
"size":9195,
"height":100,//说明这是第100块
"relayed_by":"node-A",
"tx":[交易信息]
}。
节点A、B、C、D首先通过服务器同步各自的本地时间,保证误差在秒级。然后在{#100}区块的基础上构建各自的{#101}块,以下为节点构建的A{#101}_A区块,分别记为{#101}_A,{#101}_B,节点C和节点D构建的区块{#101}_C,{#101}_D,节点B、节点C和节点D构建的区块不一一举例。四个节点准备的区块除了时间戳不会完全一致外,主要区别是选择了不同交易包含在本区块中。所有的nounce都是空的,因为还没有开始挖矿,相应地,”hash”字段也是空的。
节点A和节点B在构建完成后开始针对自己构建的节点挖矿,四个节点没有找到任何工作量证明直到节点A开始挖矿1分钟后,节点A发现了一个第二难度的工作量证明2964228830,计算的Hash是(10个0开头)
“0000000000nhdbae09a7a393a8acded75aa67e46cb81f7acaa5ad94f9eacd103”。由于节点A还没有收到任何其他带有工作量证明的区块,该带有工作量证明的区块是节点A所知的强度最高的区块,因此对其投出预备选票,预备选票格式如下:
节点B、C、D在收到节点A的预备选票消息后,与本节点保存的其它带有工作量证明的区块比较强度,发现没有比较对象,则对节点A发来的区块投出预备选票,并在网络中广播,节点B的预备选票,该预备选票与节点A的预备选票唯一的不同是vote_info中的voter信息,表明投票中包含的是节点B目前知道强度最高的区块。
节点A收到节点B发来的预备选票,与自己本地保存的强度最高的区块相比,是同一个区块,则不必再次发出预备选票,节点C和节点D都会相继收到节点A的预备选票和节点B的预备选票,无论先收到哪一个,都会发现第二次收到的预备选票和第一次收到的预备选票中的指向的区块一致,只会在第一次收到预备选票后投出自己的预备选票并包{#101}_A,不会重复投出预备选票,
此后各个节点继续挖矿。节点B在开始挖矿后的第3分钟发现了一个第一层级难度的工作量证明4936878531,计算的hash是(17个0开头)00000000000000000fh89jthjwekrut894jgo3ip4u5h205ok12y3049837uio3j,与目前节点B已知的{#101}_A区块的强度相比,{#101}_A只有一个第二层级难度的工作量证明,而节点B的{#101}_B现在有一个第一层级难度的工作量证明,强度更高,因此需要对该区块投出预备选票,格式如下,注意该工作量证明对应的hash前面的前导零为17个,符合第一难度的要求
节点A、C、D在收到节点B的预备投票之后,将其中的{#101}_B与各自本地的{#101}_A区块比较强度,发现{#101}_B有一个第一层级难度的工作量证明,而{#101}_A没有,因此{#101}_B是每个节点已知的区块强度最高的区块并且没有对其进行过预备投票,因此重新对{#101}_B投出预备选票,其中节点A投出的格式如下(为叙述简洁,节点C、D的略,唯一不同是voter不同):
节点B无论在收到来自节点A、C、D对{#101_B}的选票之后,都不会再次投票,因为节点B已经对相同的区块{#101_B}投出过预备投票;节点A、C、D在投出对{#101_B}的选票之后,出于相同的原因,也不会再次投票。
在节点A挖矿到第4分钟0秒时,没有找到新的PoW也没有收到新的预备选票。于是根据自己目前已知的带有工作量证明的{#101}_A和{#101}_B,对强度更高的后者投出最终选票,格式如下:
节点A开始等待其它节点的最终投票结果,节点B的本地时间实际比节点A慢了0.5秒,但是在本地时间开始挖矿后的4分0秒,开始投最终选票。同样,节点B在{#101}_A和{#101}_B之间选择了区块强度更高的后者{#101}_B,对其投出最终选票,格式如下,与节点A的最终选票的不同之处在于投票人不同
节点B开始等待其它节点的投票结果。此时收到了节点A发来的对{#101}_B的最终投票,节点B已经有50%对{#101}_B的最终投票率,节点C和节点D也在各自开始挖矿后的4分0秒后投出了最终选票,基于和节点A、B相同的判断,对{#101}_B的投出了最终选票,然后开始等待其它节点的最终选票,实际上,4个节点很快会收到其它3个节点对{#101}_B的最终选票,在收到第二个时,加上本身对{#101}_B的最终选票,就达成了75%的对{#101}_B的最终选票支持率,可以将{#101}_B作为本节点的{#101}块,添加到本地保存的区块链末尾。在网络正常情况下,各个节点收到和统计最终选票最多用1-2秒的时间,于是在各自的本地时间开始挖矿的4分01至4分02秒,产生了{#101}块,小于5分钟的强制出块时间。之后,四个节点可以开始各自构建{#102}块,分别保存的{#101}块的信息,为:
本申请实现了一种在有限个节点中使用PoW进行共识的方法,该方法克服了当前PoW算法中产生新区块的时长不能确定的问题,本实施例中提供的方法能够使区块链系统在预设时长内产生经过共识的区块,保证了区块链系统的写入吞吐量的稳定性。提高了PoW算法在有限节点构成的区块链系统中的实用性。
以上实施例是对区块链中区块的确定方法的描述,下面结合附图介绍本申请实施例中的节点设备。
如图11所示,本申请实施例提供的节点设备1100的一实施例包括中,该节点设备1100应用于一种区块链系统,该区块链系统包括N个节点设备,第二节点设备为在所述N个节点设备中除所述第一节点设备之外的(N-1)个节点设备,所述N为大于或者等于3的正整数,该节点设备1100包括:
第一获取模块1101,用于在预设时长内,获取待选区块的信息集合,所述待选区块的信息集合包括所述N个节点设备中每个节点设备各自确定的区块强度最高的待选区块;
第一确定模块1102,用于从所述获取模块1101获取的所述待选区块的信息集合中确定区块强度最高的目标区块;
发送模块1103,用于当达到预置时刻时,广播所述第一确定模块1102确定的所述目标区块的信息,所述预置时刻为所述预设时长内的时刻;
第二获取模块1104,用于获取P个节点设备通过发送模块1103广播的所述目标区块的信息,所述P为小于或者等于N的正整数;
区块确定模块1105,用于当所述第二获取模块1104获取的目标信息块的信息来自于节点设备P大于或者等于阈值时,确定所述第一确定模块1102确定的所述目标区块为新区块。
可选地,如图12所示,本申请实施例提供的节点设备的另一实施例中,所述第一获取模块1101还包括:确定单元11011,写入单元11012,广播单元11013和接收单元11014;
所述确定单元11011,用于确定区块强度最高的第一待选区块;
所述写入单元11012,用于将所述确定单元11011确定的所述第一待选区块的信息写入第一预备结果;
所述广播单元11013,用于广播所述写入单元11012写入的所述第一预备结果,该第一预备结果用于通知所述第二节点设备中的每个节点设备以根据接收的所述第一待选区块来各自确定区块强度最高的待选区块;
所述接收单元11014,用于接收所述第二节点设备中每个节点设备广播的第二预备结果,所述第二预备结果包括所述第二节点设备中每个节点设备各自确定的区块强度最高的待选区块的信息。
可选地,如图12所示,所述第一获取模块还包括待选区块构建单元11015;
所述待选区块构建单元11015具体用于:
确定目标待选区块;
根据所述目标待选区块中的信息进行工作量证明计算,得到结果值;
若所述结果值小于或者等于目标值,则确定所述结果值为所述工作量证明PoW解;
将所述PoW解写入所述目标待选区块,得到构建区块。
可选地,所述确定单元11011还具体用于:
根据所述构建区块的信息和已接收的第二节点设备发送的待选区块的信息,确定区块强度最高的第一待选区块。
可选地,所述确定单元11011还具体用于:
当所述结果值大于所述目标值时,根据已接收的第二节点设备发送的待选区块的信息,确定区块强度最高的第一待选区块。
可选地,所述第一确定模块1102还具体用于:若每个所述待选区块中包括工作量证明PoW解,
确定每个所述待选区块中PoW解的数量;
根据所述PoW解的数量从所述待选区块的信息集合中选择区块强度最高的目标区块,所述PoW解的数量与所述区块强度正相关。
可选地,所述第一确定模块1102还具体用于:
若每个待选区块的信息中包括PoW解及至少两个目标值,所述至少两个目标值中最小的目标值为第一目标值,
确定所述信息集合中的待选区块中是否包含小于第一目标值的PoW解,所述小于第一目标值的PoW解为第一层级难度的PoW解,所述第一层级难度为最高层级难度;
若待选区块中包含小于所述第一目标值的PoW解,则确定每个待选区块中小于第一目标值的PoW解的数量;
根据所述第一层级难度的PoW解的数量确定区块强度最高的目标区块,所述PoW解的数量与区块强度正相关。
可选地,所述第一确定模块1102还具体用于:
当所述待选区块中所述第一层级难度的PoW解的数量相同时,根据所述PoW解计算对应的待选区块的区块hash值;
比较每个待选区块中的所述第一层级难度的PoW解的强度,所述PoW解的强度与所述区块hash值负相关;
确定所述PoW解的强度最高的待选区块为区块强度最高的目标区块。
可选地,所述第一确定模块1102还具体用于:
若所述至少两个目标值还包含第二目标值,所述第二目标值大于所述第一目标值;
当待选区块中不包含小于第一目标值的PoW解,确定每个待选区块中小于第二目标值的PoW解的数量,所述第二目标值对应PoW解的第二层级难度,所述第二层级难度为所述第一层级难度的下一个层级;
根据所述第二层级难度的PoW解的数量确定区块强度最高的目标区块,所述PoW解的数量与区块强度正相关。
可选地,所述第一确定模块1102还具体用于:
判断所述集合中是否包含属于不同支链的待选区块;
若第二待选区块属于第一支链,第三待选区块属于第二支链,则根据所述第一支链的支链强度与所述第二支链的支链强度确定所述第二待选区块和所述第三待选区块的区块强度的大小,所述区块强度与支链强度正相关。
可选地,所述第一确定模块1102还具体用于:
若所述待选区块的信息中包含在区块链中所述待选区块的上一个区块的标识,
检测所述信息集合中的每个待选区块中所包含的上一个区块的前区块标识;
若所述第二待选区块中所包含的前区块标识与所述第三待选区块中所包含的前区块标识不同,则确定所述第二待选区块和所述第三待选区块在不同的支链上。
可选地,所述第一确定模块1102还具体用于:
当所述第一支链上上包括X个区块,所述X为所述第一支链上区块的个数,所述第二支链上包含Y个区块,所述Y为所述第二支链上区块的个数,
获取所述第一支链上所包括的X个支链区块的信息,每个所述支链区块的信息中包含PoW解的数量;
统计X个支链区块的PoW解的第一总数量;
获取所述第二支链上所包括的Y个支链区块的信息;
统计Y个支链区块的PoW解的第二总数量;
根据所述第一总数量和第二总数量确定所述第一支链强度与所述第二支链强度的大小,支链强度与支链区块的PoW解的总数量正相关。
可选地,所述第一确定模块1102还具体用于:
当所述第一支链上包含X个第一支链区块,所述第二支链上包含Y个第二支链区块时,所述X为大于或者等于1的正整数,所述Y为大于或者等于1的正整数,每个支链区块的信息中包括PoW解及至少两个目标值,所述至少两个目标值中最小的目标值为第三目标值,
确定所述X个第一支链区块中是否包含小于第三目标值的PoW解,所述小于第三目标值的PoW解为第一层级难度的PoW解;
若第一支链区块中包含小于第三目标值的PoW解,则确定所述X个第一支链区块中小于第一目标值的PoW解的第三总数量;
当所述第二支链区块中包含小于第三目标值的PoW解时,则确定所述Y个第二支链区块中小于第一目标值的PoW解的第四总数量;
根据所述第三总数量和第四总数量比较第二待选区块和所述第三待选区块的区块强度的大小,所述PoW解的总数量与区块强度正相关。
可选地,所述第一确定模块1102还具体用于:若所述至少两个目标值还包含第四目标值,所述第四目标值大于所述第三目标值;
当所述第三总数量和所述第四总数量相同时,确定所述X个第一支链区块中小于第四目标值的PoW解的第五总数量,所述第四目标值对应PoW解的第二层级难度,所述第二层级难度为所述第一层级难度的下一个层级;
确定所述Y个第二支链区块中小于所述第四目标值的PoW解的第六总数量,
根据所述第五总数量和所述第六总数量第二待选区块和第三待选区块的大小。
可选地,如图12所示,所述节点设备1100还包括:第三获取模块1106和替换模块1107;
当所述第一确定模块1102确定所述第三待选区块为目标区块时,所述第三待选区块为所述区块链上中第(M+L)个区块,且所述第一支链和所述第二支链的共同父区块为第M个区块,所述L为大于或者等于1的正整数;
所述第三获取模块1106,用于获取所述第二支链上从第(M+1)至第(M+L)的区块的信息;
所述替换模块1107,用于将所述第三获取模块获取的所述第(M+1)至第(M+L)的区块的信息替换所述第一支链上已保存的第(M+1)至第(M+L)的区块的信息。
可选地,如图12所示,所述节点设备1100还包括:第二确定模块1108和告警模块1109;
所述第二确定模块1108,用于当所述第二获取模块1104获取的所述P小于所述阈值时,确定所述目标区块为新区块;
所述告警模块1109,用于当所述第二获取模块1104获取的所述P小于所述阈值时发出告警,所述告警用于指示所述区块链系统处于异常状态。
如图13所示对本实施例所提供的节点设备的具体结构进行说明,其中,图13为本发明所提供的节点设备的一种实施例结构示意图,其中,本实施例所示的节点设备应用于一种区块链系统中的任一节点设备,所述区块链系统包括N个节点设备,所述N为大于或者等于3的正整数。所述节点设备1300包括至少一个处理器1301,通信总线1302,存储器1303以及至少一个通信接口1304。
处理器1301可以是一个通用中央处理器(central processing unit,CPU),微处理器,特定应用集成电路(application‐specific integrated circuit,ASIC),或一个或多个用于控制本发明方案程序执行的集成电路。
通信总线1302可包括一通路,在上述组件之间传送信息。
通信接口1304,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(wireless local areanetworks,WLAN)等。
存储器1303可以是只读存储器(read‐only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read‐only memory,EEPROM)、只读光盘(compactdisc read‐only memory,CD‐ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。
其中,存储器1303用于存储执行本发明方案的应用程序代码,并由处理器1301来控制执行。处理器1301用于执行存储器1303中存储的应用程序代码,从而实现所述节点设备1300的逻辑功能,以执行上述实施例所示的与直播方法相关联的功能。
在具体实现中,作为一种实施例,处理器1301可以包括一个或多个CPU,例如图13中的CPU0和CPU1。
在具体实现中,作为一种实施例,节点设备1300可以包括多个处理器,例如图13中的处理器1301和处理器1308。这些处理器中的每一个可以是一个单核(single‐CPU)处理器,也可以是一个多核(multi‐CPU)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
在具体实现中,作为一种实施例,节点设备1300还可以包括输出设备1305和输入设备1306。输出设备1305和处理器1301通信,可以以多种方式来显示信息。上述的节点设备1300可以是一个通用节点设备或者是一个专用节点设备。
本发明实施例还提供了一种计算机存储介质,用于储存实现上述方法实施例所示的区块链中区块的确定方法,其包含用于执行上述方法实施例所设计的程序。通过执行存储的程序,可以实现本发明实施例提供的区块链中区块的确定。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
尽管在此结合各实施例对本发明进行了描述,然而,在实施所要求保护的本发明过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实现所述公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。
本领域技术人员应明白,本发明的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‐ROM、光学存储器等)上实施的计算机程序产品的形式。计算机程序存储/分布在合适的介质中,与其它硬件一起提供或作为硬件的一部分,也可以采用其他分布形式,如通过Internet或其它有线或无线电信系统。
本发明是参照本发明实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管结合具体特征及其实施例对本发明进行了描述,显而易见的,在不脱离本发明的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本发明的示例性说明,且视为已覆盖本发明范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (34)
1.一种区块链中区块的确定方法,其特征在于,应用于一种区块链系统中的任一节点设备,所述区块链系统包括N个节点设备,所述N为大于或者等于3的正整数,所述确定方法包括:
在预设时长内,获取待选区块的信息集合,所述待选区块的信息集合包括所述N个节点设备中每个节点设备各自确定的区块强度最高的待选区块;
从所述待选区块的信息集合中确定区块强度最高的目标区块;
当达到预置时刻时,广播所述目标区块的信息,所述预置时刻为所述预设时长内的时刻;
获取P个节点设备广播的所述目标区块的信息,所述P为小于或者等于N的正整数;
当所述P大于或者等于阈值时,确定所述目标区块为新区块。
2.根据权利要求1所述的区块链中区块的确定方法,其特征在于,获取待选区块信息集合,包括:
确定区块强度最高的第一待选区块;
将所述第一待选区块的信息写入第一预备结果;
广播所述第一预备结果,该第一预备结果用于通知所述第二节点设备中的每个节点设备以根据接收的所述第一待选区块来各自确定区块强度最高的待选区块;
接收所述第二节点设备中每个节点设备广播的第二预备结果,所述第二预备结果包括所述第二节点设备中每个节点设备各自确定的区块强度最高的待选区块的信息。
3.根据权利要求2所述的区块链中区块的确定方法,其特征在于,所述确定区块强度最高的第一待选区块之前,所述确定方法还包括:
确定目标待选区块;
根据所述目标待选区块中的信息进行工作量证明计算,得到结果值;
若所述结果值小于或者等于目标值,则确定所述结果值为所述工作量证明PoW解;
将所述PoW解写入所述目标待选区块,得到构建的待选区块。
4.根据权利要求3所述的区块链中区块的确定方法,其特征在于,所述确定区块强度最高的第一待选区块,包括:
根据所述构建区块的信息和已接收的第二节点设备发送的待选区块的信息,确定区块强度最高的第一待选区块。
5.根据权利要求3所述的区块链中区块的确定方法,其特征在于,所述确定方法还包括:
若所述结果值大于所述目标值,则根据已接收的第二节点设备发送的待选区块的信息,确定区块强度最高的第一待选区块。
6.根据权利要求1所述的区块链中区块的确定方法,其特征在于,每个所述待选区块中包括工作量证明PoW解,所述从所述待选区块的信息集合中确定区块强度最高的目标区块,包括:
确定每个所述待选区块中PoW解的数量;
根据所述PoW解的数量从所述待选区块的信息集合中选择区块强度最高的目标区块,所述PoW解的数量与所述区块强度正相关。
7.根据权利要求1所述的区块链中区块的确定方法,其特征在于,每个待选区块的信息中包括PoW解及至少两个目标值,所述至少两个目标值中最小的目标值为第一目标值,所述从所述信息集合中确定区块强度最高的目标区块,包括:
确定所述信息集合中的待选区块中是否包含小于第一目标值的PoW解,所述小于第一目标值的PoW解为第一层级难度的PoW解,所述第一层级难度为最高层级难度;
若待选区块中包含小于所述第一目标值的PoW解,则确定每个待选区块中小于第一目标值的PoW解的数量;
根据所述第一层级难度的PoW解的数量确定区块强度最高的目标区块,所述PoW解的数量与区块强度正相关。
8.根据权利要求7所述的区块链中区块的确定方法,其特征在于,所述确定方法还包括:
当所述待选区块中所述第一层级难度的PoW解的数量相同时,则根据所述PoW解计算对应的待选区块的区块hash值;
比较每个待选区块中的所述第一层级难度的PoW解的强度,所述PoW解的强度与所述区块hash值负相关;
确定所述PoW解的强度最高的待选区块为区块强度最高的目标区块。
9.根据权利要求7所述的区块链中区块的确定方法,其特征在于,所述至少两个目标值还包含第二目标值,所述第二目标值大于所述第一目标值;
所述确定方法还包括:
若待选区块中不包含小于第一目标值的PoW解,则确定每个待选区块中小于第二目标值的PoW解的数量,所述第二目标值对应PoW解的第二层级难度,所述第二层级难度为所述第一层级难度的下一个层级;
根据所述第二层级难度的PoW解的数量确定区块强度最高的目标区块,所述PoW解的数量与区块强度正相关。
10.根据权利要求1所述的区块链中区块的确定方法,其特征在于,所述从所述信息集合中确定区块强度最高的目标区块包括:
判断所述集合中是否包含属于不同支链的待选区块;
若第二待选区块属于第一支链,第三待选区块属于第二支链,则根据所述第一支链的支链强度与所述第二支链的支链强度确定所述第二待选区块和所述第三待选区块的区块强度的大小,所述区块强度与支链强度正相关。
11.根据权利要求10所述的区块链中区块的确定方法,其特征在于,所述待选区块的信息中包含在区块链中所述待选区块的上一个区块的标识,所述判断所述集合中是否包含属于不同支链的待选区块,包括:
检测所述信息集合中的每个待选区块中所包含的上一个区块的前区块标识;
若所述第二待选区块中所包含的前区块标识与所述第三待选区块中所包含的前区块标识不同,则确定所述第二待选区块和所述第三待选区块在不同的支链上。
12.根据权利要求10或11所述的区块链中区块的确定方法,其特征在于,当所述第一支链上上包括X个区块,所述X为所述第一支链上区块的个数,所述第二支链上包含Y个区块,所述Y为所述第二支链上区块的个数,所述根据所述第一支链的支链强度与所述第二支链的支链强度确定所述第二待选区块和所述第三待选区块的区块强度的大小,包括:
获取所述第一支链上所包括的X个支链区块的信息,每个所述支链区块的信息中包含PoW解的数量;
统计X个支链区块的PoW解的第一总数量;
获取所述第二支链上所包括的Y个支链区块的信息;
统计Y个支链区块的PoW解的第二总数量;
根据所述第一总数量和第二总数量确定所述第一支链强度与所述第二支链强度的大小,支链强度与支链区块的PoW解的总数量正相关。
13.根据权利要求10或11所述的区块链中区块的确定方法,其特征在于,当所述第一支链上包含X个第一支链区块,所述第二支链上包含Y个第二支链区块时,所述X为大于或者等于1的正整数,所述Y为大于或者等于1的正整数,每个支链区块的信息中包括PoW解及至少两个目标值,所述至少两个目标值中最小的目标值为第三目标值,所述根据所述第一支链强度与所述第二支链强度确定所述第二待选区块和所述第三待选区块的区块强度的大小,包括:
确定所述X个第一支链区块中是否包含小于第三目标值的PoW解,所述小于第三目标值的PoW解为第一层级难度的PoW解;
若第一支链区块中包含小于第三目标值的PoW解,则确定所述X个第一支链区块中小于第一目标值的PoW解的第三总数量;
当所述第二支链区块中包含小于第三目标值的PoW解时,则确定所述Y个第二支链区块中小于第一目标值的PoW解的第四总数量;
根据所述第三总数量和第四总数量比较第二待选区块和所述第三待选区块的区块强度的大小,所述PoW解的总数量与区块强度正相关。
14.根据权利要求13所述的区块链中区块的确定方法,其特征在于,所述至少两个目标值还包含第四目标值,所述第四目标值大于所述第三目标值;
所述确定方法还包括:
当所述第三总数量和所述第四总数量相同时,确定所述X个第一支链区块中小于第四目标值的PoW解的第五总数量,所述第四目标值对应PoW解的第二层级难度,所述第二层级难度为所述第一层级难度的下一个层级;
确定所述Y个第二支链区块中小于所述第四目标值的PoW解的第六总数量,
根据所述第五总数量和所述第六总数量第二待选区块和第三待选区块的区块强度的大小。
15.根据权利要求10至14中任一项所述的区块链中区块的确定方法,其特征在于,当所述第三待选区块为目标区块时,所述第三待选区块为所述区块链上中第(M+L)个区块,且所述第一支链和所述第二支链的共同父区块为第M个区块,所述L为大于或者等于1的正整数;
所述确定所述目标区块为新区块之后,所述确定方法还包括:
获取所述第二支链上从第(M+1)至第(M+L)的区块的信息;
将所述第(M+1)至第(M+L)的区块的信息替换所述第一支链上已保存的第(M+1)至第(M+L)的区块的信息。
16.根据权利要求1所述的区块链中区块的确定方法,其特征在于,所述确定方法还包括:
当所述P小于所述阈值时,确定所述目标区块为新区块,并发出告警,所述告警用于指示所述区块链系统处于异常状态。
17.一种节点设备,其特征在于,应用于一种区块链系统,所述区块链系统包括N个节点设备,第二节点设备为在所述N个节点设备中除所述第一节点设备之外的(N-1)个节点设备,所述N为大于或者等于3的正整数,所述节点设备包括:
第一获取模块,用于在预设时长内,获取待选区块的信息集合,所述待选区块的信息集合包括所述N个节点设备中每个节点设备各自确定的区块强度最高的待选区块;
第一确定模块,用于从所述获取模块获取的所述待选区块的信息集合中确定区块强度最高的目标区块;
发送模块,用于当达到预置时刻时,广播所述第一确定模块确定的所述目标区块的信息,所述预置时刻为所述预设时长内的时刻;
第二获取模块,用于获取P个节点设备广播的所述目标区块的信息,所述P为小于或者等于N的正整数;
区块确定模块,用于当所述P大于或者等于阈值时,确定所述第一确定模块确定的所述目标区块为新区块。
18.根据权利要求17所述的节点设备,其特征在于,所述第一获取模块还包括:确定单元,写入单元,广播单元和接收单元;
所述确定单元,用于确定区块强度最高的第一待选区块;
所述写入单元,用于将所述确定单元确定的所述第一待选区块的信息写入第一预备结果;
所述广播单元,用于广播所述写入单元写入的所述第一预备结果,该第一预备结果用于通知所述第二节点设备中的每个节点设备以根据接收的所述第一待选区块来各自确定区块强度最高的待选区块;
所述接收单元,用于接收所述第二节点设备中每个节点设备广播的第二预备结果,所述第二预备结果包括所述第二节点设备中每个节点设备各自确定的区块强度最高的待选区块的信息。
19.根据权利要求18所述的节点设备,其特征在于,所述第一获取模块还包括待选区块构建单元;
所述待选区块构建单元具体用于:
确定目标待选区块;
根据所述目标待选区块中的信息进行工作量证明计算,得到结果值;
若所述结果值小于或者等于目标值,则确定所述结果值为所述工作量证明PoW解;
将所述PoW解写入所述目标待选区块,得到构建区块。
20.根据权利要求19所述的节点设备,其特征在于,
所述确定单元还具体用于:
根据所述构建区块的信息和已接收的第二节点设备发送的待选区块的信息,确定区块强度最高的第一待选区块。
21.根据权利要求19所述的节点设备,其特征在于,
所述确定单元还具体用于:
当所述结果值大于所述目标值时,根据已接收的第二节点设备发送的待选区块的信息,确定区块强度最高的第一待选区块。
22.根据权利要求17所述的节点设备,其特征在于,每个所述待选区块中包括工作量证明PoW解,所述第一确定模块还具体用于:
确定每个所述待选区块中PoW解的数量;
根据所述PoW解的数量从所述待选区块的信息集合中选择区块强度最高的目标区块,所述PoW解的数量与所述区块强度正相关。
23.根据权利要求17所述的节点设备,其特征在于,每个待选区块的信息中包括PoW解及至少两个目标值,所述至少两个目标值中最小的目标值为第一目标值,
所述第一确定模块,还具体用于:确定所述信息集合中的待选区块中是否包含小于第一目标值的PoW解,所述小于第一目标值的PoW解为第一层级难度的PoW解,所述第一层级难度为最高层级难度;
若待选区块中包含小于所述第一目标值的PoW解,则确定每个待选区块中小于第一目标值的PoW解的数量;
根据所述第一层级难度的PoW解的数量确定区块强度最高的目标区块,所述PoW解的数量与区块强度正相关。
24.根据权利要求23所述的节点设备,其特征在于,所述第一确定模块,还具体用于:
当所述待选区块中所述第一层级难度的PoW解的数量相同时,根据所述PoW解计算对应的待选区块的区块hash值;
比较每个待选区块中的所述第一层级难度的PoW解的强度,所述PoW解的强度与所述区块hash值负相关;
确定所述PoW解的强度最高的待选区块为区块强度最高的目标区块。
25.根据权利要求23所述的节点设备,其特征在于,所述至少两个目标值还包含第二目标值,所述第二目标值大于所述第一目标值;
所述第一确定模块,还具体用于:
当待选区块中不包含小于第一目标值的PoW解,确定每个待选区块中小于第二目标值的PoW解的数量,所述第二目标值对应PoW解的第二层级难度,所述第二层级难度为所述第一层级难度的下一个层级;
根据所述第二层级难度的PoW解的数量确定区块强度最高的目标区块,所述PoW解的数量与区块强度正相关。
26.根据权利要求17所述的节点设备,其特征在于,所述第一确定模块还具体用于:
判断所述集合中是否包含属于不同支链的待选区块;
若第二待选区块属于第一支链,第三待选区块属于第二支链,则根据所述第一支链的支链强度与所述第二支链的支链强度确定所述第二待选区块和所述第三待选区块的区块强度的大小,所述区块强度与支链强度正相关。
27.根据权利要求26所述的节点设备,其特征在于,所述待选区块的信息中包含在区块链中所述待选区块的上一个区块的标识,所述第一确定模块,还具体用于:
检测所述信息集合中的每个待选区块中所包含的上一个区块的前区块标识;
若所述第二待选区块中所包含的前区块标识与所述第三待选区块中所包含的前区块标识不同,则确定所述第二待选区块和所述第三待选区块在不同的支链上。
28.根据权利要求26或27所述的节点设备,其特征在于,当所述第一支链上上包括X个区块,所述X为所述第一支链上区块的个数,所述第二支链上包含Y个区块,所述Y为所述第二支链上区块的个数,所述第一确定模块还具体用于:
获取所述第一支链上所包括的X个支链区块的信息,每个所述支链区块的信息中包含PoW解的数量;
统计X个支链区块的PoW解的第一总数量;
获取所述第二支链上所包括的Y个支链区块的信息;
统计Y个支链区块的PoW解的第二总数量;
根据所述第一总数量和第二总数量确定所述第一支链强度与所述第二支链强度的大小,支链强度与支链区块的PoW解的总数量正相关。
29.根据权利要求26或27所述的节点设备,其特征在于,当所述第一支链上包含X个第一支链区块,所述第二支链上包含Y个第二支链区块时,所述X为大于或者等于1的正整数,所述Y为大于或者等于1的正整数,每个支链区块的信息中包括PoW解及至少两个目标值,所述至少两个目标值中最小的目标值为第三目标值,所述第一确定模块还具体用于:
确定所述X个第一支链区块中是否包含小于第三目标值的PoW解,所述小于第三目标值的PoW解为第一层级难度的PoW解;
若第一支链区块中包含小于第三目标值的PoW解,则确定所述X个第一支链区块中小于第一目标值的PoW解的第三总数量;
当所述第二支链区块中包含小于第三目标值的PoW解时,则确定所述Y个第二支链区块中小于第一目标值的PoW解的第四总数量;
根据所述第三总数量和第四总数量比较第二待选区块和所述第三待选区块的区块强度的大小,所述PoW解的总数量与区块强度正相关。
30.根据权利要求29所述的节点设备,其特征在于,所述至少两个目标值还包含第四目标值,所述第四目标值大于所述第三目标值;
所述第一确定模块还具体用于:
当所述第三总数量和所述第四总数量相同时,确定所述X个第一支链区块中小于第四目标值的PoW解的第五总数量,所述第四目标值对应PoW解的第二层级难度,所述第二层级难度为所述第一层级难度的下一个层级;
确定所述Y个第二支链区块中小于所述第四目标值的PoW解的第六总数量,
根据所述第五总数量和所述第六总数量第二待选区块和第三待选区块的大小。
31.根据权利要求26至30中任一项所述的节点设备,其特征在于,当所述第一确定模块确定所述第三待选区块为目标区块时,所述第三待选区块为所述区块链上中第(M+L)个区块,且所述第一支链和所述第二支链的共同父区块为第M个区块,所述L为大于或者等于1的正整数;
所述节点设备还包括第三获取模块和替换模块;
所述第三获取模块,用于获取所述第二支链上从第(M+1)至第(M+L)的区块的信息;
所述替换模块,用于将所述第三获取模块获取的所述第(M+1)至第(M+L)的区块的信息替换所述第一支链上已保存的第(M+1)至第(M+L)的区块的信息。
32.根据权利要求17所述的节点设备,其特征在于,所述节点设备还包括第二确定模块和告警模块;
所述第二确定模块,用于当所述第二获取模块获取的所述P小于所述阈值时,确定所述目标区块为新区块;
所述告警模块,用于当所述第二获取模块获取的所述P小于所述阈值时发出告警,所述告警用于指示所述区块链系统处于异常状态。
33.一种节点设备,其特征在于,应用于一种区块链系统,所述区块链系统包括N个节点设备,第二节点设备为在所述N个节点设备中除所述第一节点设备之外的(N-1)个节点设备,所述N为大于或者等于3的正整数,所述节点设备包括:处理器和存储器和收发器,所述存储器中存储有指令;
所述处理器运行所述指令,执行如权利要求1-16任一所述的区块链中区块的确定方法。
34.一种计算机可读存储介质,其特征在于,述计算机可读存储介质中存储有指令,所述指令用于执行如权利要求1-16任一所述的区块链中区块的确定方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710519236.XA CN109218348B (zh) | 2017-06-29 | 2017-06-29 | 一种区块链中区块的确定方法及节点设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710519236.XA CN109218348B (zh) | 2017-06-29 | 2017-06-29 | 一种区块链中区块的确定方法及节点设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109218348A true CN109218348A (zh) | 2019-01-15 |
CN109218348B CN109218348B (zh) | 2020-12-01 |
Family
ID=64960926
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710519236.XA Active CN109218348B (zh) | 2017-06-29 | 2017-06-29 | 一种区块链中区块的确定方法及节点设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109218348B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109787867A (zh) * | 2019-02-28 | 2019-05-21 | 矩阵元技术(深圳)有限公司 | 区块生成方法、装置、计算机设备和存储介质 |
CN110086856A (zh) * | 2019-04-01 | 2019-08-02 | 深圳前海达闼云端智能科技有限公司 | 区块链节点的控制方法、装置、存储介质及电子设备 |
CN110096359A (zh) * | 2019-04-15 | 2019-08-06 | 华南理工大学 | 一种快速收敛的区块链工作量证明共识难度调整方法 |
CN110223174A (zh) * | 2019-05-23 | 2019-09-10 | 北京清红微谷技术开发有限责任公司 | 区块交易记账方法和系统、数据处理终端、区块链系统 |
CN110324421A (zh) * | 2019-07-03 | 2019-10-11 | 广东投盟科技有限公司 | 一种信息处理方法和区块链节点设备 |
CN110853214A (zh) * | 2019-11-06 | 2020-02-28 | 杭州复杂美科技有限公司 | 区块生成方法、设备和存储介质 |
CN110933155A (zh) * | 2019-11-25 | 2020-03-27 | 庄定善 | 一种新型区块链 |
CN110990490A (zh) * | 2019-12-19 | 2020-04-10 | 北京海益同展信息科技有限公司 | 区块链网络中区块链的入账方法、装置、设备及介质 |
CN111190862A (zh) * | 2019-12-28 | 2020-05-22 | 广州创想云科技有限公司 | 区块链的实现方法 |
CN111641666A (zh) * | 2019-03-01 | 2020-09-08 | 湖南天河国云科技有限公司 | 一种主链选择方法、装置及计算机可读存储介质 |
CN112100690A (zh) * | 2020-11-23 | 2020-12-18 | 长沙树根互联技术有限公司 | 基于区块链的出块方法、装置和可读存储介质 |
CN113157805A (zh) * | 2021-04-16 | 2021-07-23 | 西安瓜大网络科技有限公司 | 一种事务定序共识方法和系统 |
CN114971421A (zh) * | 2022-07-22 | 2022-08-30 | 中国长江三峡集团有限公司 | 一种基于区块链技术的水电站运行风险管控系统 |
US20230119902A1 (en) * | 2021-10-19 | 2023-04-20 | Mastercard International Incorporated | Method and system of faster proof-of-work in distributed ledger |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012089931A (ja) * | 2010-10-15 | 2012-05-10 | Sony Corp | 情報処理装置、情報処理方法およびプログラム |
CN104239325A (zh) * | 2013-06-17 | 2014-12-24 | 阿里巴巴集团控股有限公司 | 区块定位方法和装置 |
CN106445711A (zh) * | 2016-08-28 | 2017-02-22 | 杭州云象网络技术有限公司 | 一种应用于区块链的拜占庭容错共识方法 |
CN106504008A (zh) * | 2016-10-24 | 2017-03-15 | 中山大学 | 一种基于区块链的公平合同签署方法 |
CN106603698A (zh) * | 2016-12-28 | 2017-04-26 | 北京果仁宝科技有限公司 | 基于dpos的区块链共识方法和节点 |
CN106651346A (zh) * | 2016-11-28 | 2017-05-10 | 上海凯岸信息科技有限公司 | 基于区块链的征信数据共享与交易系统 |
CN106716421A (zh) * | 2016-12-30 | 2017-05-24 | 深圳前海达闼云端智能科技有限公司 | 数据查询方法、装置及节点设备 |
-
2017
- 2017-06-29 CN CN201710519236.XA patent/CN109218348B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012089931A (ja) * | 2010-10-15 | 2012-05-10 | Sony Corp | 情報処理装置、情報処理方法およびプログラム |
CN104239325A (zh) * | 2013-06-17 | 2014-12-24 | 阿里巴巴集团控股有限公司 | 区块定位方法和装置 |
CN106445711A (zh) * | 2016-08-28 | 2017-02-22 | 杭州云象网络技术有限公司 | 一种应用于区块链的拜占庭容错共识方法 |
CN106504008A (zh) * | 2016-10-24 | 2017-03-15 | 中山大学 | 一种基于区块链的公平合同签署方法 |
CN106651346A (zh) * | 2016-11-28 | 2017-05-10 | 上海凯岸信息科技有限公司 | 基于区块链的征信数据共享与交易系统 |
CN106603698A (zh) * | 2016-12-28 | 2017-04-26 | 北京果仁宝科技有限公司 | 基于dpos的区块链共识方法和节点 |
CN106716421A (zh) * | 2016-12-30 | 2017-05-24 | 深圳前海达闼云端智能科技有限公司 | 数据查询方法、装置及节点设备 |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109787867A (zh) * | 2019-02-28 | 2019-05-21 | 矩阵元技术(深圳)有限公司 | 区块生成方法、装置、计算机设备和存储介质 |
CN111641666B (zh) * | 2019-03-01 | 2023-04-07 | 湖南天河国云科技有限公司 | 一种主链选择方法、装置及计算机可读存储介质 |
CN111641666A (zh) * | 2019-03-01 | 2020-09-08 | 湖南天河国云科技有限公司 | 一种主链选择方法、装置及计算机可读存储介质 |
CN110086856A (zh) * | 2019-04-01 | 2019-08-02 | 深圳前海达闼云端智能科技有限公司 | 区块链节点的控制方法、装置、存储介质及电子设备 |
CN110096359B (zh) * | 2019-04-15 | 2021-01-19 | 华南理工大学 | 一种快速收敛的区块链工作量证明共识难度调整方法 |
CN110096359A (zh) * | 2019-04-15 | 2019-08-06 | 华南理工大学 | 一种快速收敛的区块链工作量证明共识难度调整方法 |
CN110223174A (zh) * | 2019-05-23 | 2019-09-10 | 北京清红微谷技术开发有限责任公司 | 区块交易记账方法和系统、数据处理终端、区块链系统 |
CN110223174B (zh) * | 2019-05-23 | 2021-07-09 | 北京清红微谷技术开发有限责任公司 | 区块交易记账方法和系统、数据处理终端、区块链系统 |
CN110324421A (zh) * | 2019-07-03 | 2019-10-11 | 广东投盟科技有限公司 | 一种信息处理方法和区块链节点设备 |
CN110324421B (zh) * | 2019-07-03 | 2021-08-27 | 广东投盟科技有限公司 | 一种信息处理方法和区块链节点设备 |
CN110853214A (zh) * | 2019-11-06 | 2020-02-28 | 杭州复杂美科技有限公司 | 区块生成方法、设备和存储介质 |
CN110933155A (zh) * | 2019-11-25 | 2020-03-27 | 庄定善 | 一种新型区块链 |
CN110933155B (zh) * | 2019-11-25 | 2022-04-26 | 庄定善 | 一种新型区块链网络 |
CN110990490A (zh) * | 2019-12-19 | 2020-04-10 | 北京海益同展信息科技有限公司 | 区块链网络中区块链的入账方法、装置、设备及介质 |
CN110990490B (zh) * | 2019-12-19 | 2023-09-01 | 京东科技信息技术有限公司 | 区块链网络中区块链的入账方法、装置、设备及介质 |
CN111190862A (zh) * | 2019-12-28 | 2020-05-22 | 广州创想云科技有限公司 | 区块链的实现方法 |
CN111190862B (zh) * | 2019-12-28 | 2023-06-30 | 广州创想云科技有限公司 | 区块链的实现方法 |
CN112100690B (zh) * | 2020-11-23 | 2021-02-23 | 长沙树根互联技术有限公司 | 基于区块链的出块方法、装置和可读存储介质 |
CN112100690A (zh) * | 2020-11-23 | 2020-12-18 | 长沙树根互联技术有限公司 | 基于区块链的出块方法、装置和可读存储介质 |
CN113157805A (zh) * | 2021-04-16 | 2021-07-23 | 西安瓜大网络科技有限公司 | 一种事务定序共识方法和系统 |
CN113157805B (zh) * | 2021-04-16 | 2024-05-03 | 西安瓜大网络科技有限公司 | 一种事务定序共识方法和系统 |
US20230119902A1 (en) * | 2021-10-19 | 2023-04-20 | Mastercard International Incorporated | Method and system of faster proof-of-work in distributed ledger |
US11972400B2 (en) * | 2021-10-19 | 2024-04-30 | Mastercard International Incorporated | Method and system of faster proof-of-work in distributed ledger |
CN114971421A (zh) * | 2022-07-22 | 2022-08-30 | 中国长江三峡集团有限公司 | 一种基于区块链技术的水电站运行风险管控系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109218348B (zh) | 2020-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109218348A (zh) | 一种区块链中区块的确定方法及节点设备 | |
Bodkhe et al. | A survey on decentralized consensus mechanisms for cyber physical systems | |
CN110113388B (zh) | 一种基于改进型聚类算法的区块链系统共识的方法和装置 | |
Otoum et al. | Blockchain-supported federated learning for trustworthy vehicular networks | |
Yu et al. | LayerChain: A hierarchical edge-cloud blockchain for large-scale low-delay industrial Internet of Things applications | |
WO2018223995A1 (zh) | 实现区块链跨链通信的方法、装置及系统 | |
CN113347164B (zh) | 基于区块链的分布式共识系统及方法、设备、存储介质 | |
CN109242685A (zh) | 基于区块链的共识和验证方法及装置 | |
CN109478055A (zh) | 在通用、智能系统中使用智能节点用于监测工业过程 | |
CN109949160A (zh) | 一种区块链的分片方法及装置 | |
CN108491504A (zh) | 用于分布式配置管理的方法及装置 | |
CN112468255B (zh) | 基于网络共识结合vrf算法的区块链节点时间同步方法 | |
Nayak et al. | Blockchain-Based Cloud Resource Allocation Mechanism for Privacy Preservation | |
Cole et al. | Modeling the energy consumption of blockchain consensus algorithms | |
CN110506285A (zh) | 基于有向无环图的区块创建、添加、账本建立方法和装置 | |
CN103929377A (zh) | 一种有线网络与无线网络联合调度方法、相关设备及系统 | |
Fan et al. | Secure time synchronization scheme in iot based on blockchain | |
CN117171786A (zh) | 一种抵御投毒攻击的去中心化联邦学习方法 | |
Zhang et al. | Blockchain-based secure aggregation for federated learning with a traffic prediction use case | |
CN116957110B (zh) | 一种基于联盟链的可信联邦学习方法及系统 | |
CN109309671A (zh) | 一种基于区块链的通信设备数据管理方法和装置 | |
CN111953546B (zh) | 基于区块链系统的物联网设备管理方法和智能家居系统 | |
Zakariae | A lightweight blockchain framework for IoT integration in smart cities | |
CN113992694B (zh) | 一种基于联邦学习的区块链节点集群监控方法及设备 | |
Chen et al. | A blockchain-based scheme for edge–edge collaboration management in time-sensitive networking |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |