本申请涉及区块链技术领域,尤其涉及pbft的共识方法及其装置。
背景技术:
分布式共识算法是分布式系统中保证系统状态一致性的重要技术,是分布式文件系统、分布式数据库的重要基础。区块链采用分布式共识算法在无中心节点控制,又可能存在破坏节点的环境下确立系统状态,从而建立信任。
现有的工作量证明共识机制(proofofwork,pow),去中心化程度高,但是每产生一个区块需要10分钟左右,效率低下,不能满足各种应用数据需求。
此外,实用拜占庭容错系统(practicalbyzantinefaulttolerance,pbft)的共识机制,采用强一致性协议,效率相对pow要高,能够10-20s产生一个区块;但是中心化程度低。
因此,如何根据pbft和pow的特点,找到一种区块链的共识机制,既能够解决出块的效率问题,也能够保证区块链系统的去中心化程度和安全性,来满足各种新场景的数据上链需求,显得至关重要。
上述内容仅用于辅助理解本申请的技术方案,并不代表承认上述内容是现有技术。
技术实现要素:
为了解决上述问题,本申请提供一种涉及pbft的共识方法及其装置,该方法能够让在满足去中心化的条件下,提高出块的效率,并保证了区块链的安全性。
本申请第一方面公开了一种涉及pbft的共识方法,所述方法包括:
区块链节点通过工作量证明的方式,从备选出块节点组中确定出块节点组;其中,所述区块链节点为所述备选出块节点组中的任一备选出块节点;
所述区块链节点接收客户端发送的交易请求,所述交易请求包括发起方地址、接收方地址、交易金额、客户端签名以及时间戳;
所述区块链节点将所述交易请求发送给所述出块节点组中任一出块节点,以便于所述出块节点采用实用拜占庭容错共识的方式,验证通过所述交易请求,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链。
在一种可能的实施方式中,所述备选出块节点组中都是完全节点,所述完全节点的节点本地存储有区块链完整的账本数据;所述出块节点的数量为3n+1,n为正整数。
在一种可能的实施方式中,所述区块链节点通过工作量证明的方式,从备选出块节点组中确定出块节点组;具体包括:
所述备选出块节点组中一个或多个出块节点,通过对上一个区块的区块头进行第一哈希运算,得到第一哈希值;并将所述第一哈希值和附加随机数进行第二哈希运算,得到第二哈希值;所述上一个区块的区块头包括区块版本号、前一个区块的哈希值、梅克尔根、时间戳、当前难度值以及随机数;其中,所述第一哈希运算和所述运算为相同的哈希运算;
所述备选出块节点组的一个或多个,若自身计算的所述第二哈希值小于预设值时,确定自身成为出块节点。
在一种可能的实施方式中,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链;具体包括:
所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,并采用实用拜占庭容错共识的方式对所述区块进行验证,以便于所述区块通过验证后上链。
在一种可能的实施方式中,所述方法还包括:所述备选出块节点组中除被选的出块节点以外的备选出块节点,对所述出块节点进行工作量证明的校验,确认所述出块节点的资格;其中,
所述工作量证明校验包括校验一个或多个所述出块节点自身计算的所述第二哈希值是否小于预设值。
本申请第二方面公开了一种涉及pbft的共识装置,所述装置为区块链节点,所述区块链节点包括处理单元、接收单元以及发送单元;其中,
所述处理单元,通过工作量证明的方式,从备选出块节点组中确定出块节点组;其中,所述区块链节点为所述备选出块节点组中的任一备选出块节点;
所述接收单元,接收客户端发送的交易请求,所述交易请求包括发起方地址、接收方地址、交易金额、客户端签名以及时间戳;
所述发送单元,将所述交易请求发送给所述出块节点组中任一出块节点,以便于所述出块节点采用实用拜占庭容错共识的方式,验证通过所述交易请求,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链。
在一种可能的实施方式中,所述备选出块节点组中都是完全节点,所述完全节点的节点本地存储有区块链完整的账本数据;所述出块节点的数量为3n+1,n为正整数。
在一种可能的实施方式中,所述处理单元,通过工作量证明的方式,从备选出块节点组中确定出块节点组;具体包括:
所述备选出块节点组中一个或多个出块节点,通过对上一个区块的区块头进行第一哈希运算,得到第一哈希值;并将所述第一哈希值和附加随机数进行第二哈希运算,得到第二哈希值;所述上一个区块的区块头包括区块版本号、前一个区块的哈希值、梅克尔根、时间戳、当前难度值以及随机数;其中,所述第一哈希运算和所述运算为相同的哈希运算;
所述备选出块节点组的一个或多个,若自身计算的所述第二哈希值小于预设值时,确定自身成为出块节点。
在一种可能的实施方式中,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链;具体包括:
所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,并采用实用拜占庭容错共识的方式对所述区块进行验证,以便于所述区块通过验证后上链。
在一种可能的实施方式中,所述备选出块节点组中除被选的出块节点以外的备选出块节点,对所述出块节点进行工作量证明的校验,确认所述出块节点的资格;其中,
所述工作量证明校验包括校验一个或多个所述出块节点自身计算的所述第二哈希值是否小于预设值。
本申请第三方面提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行以下程序步骤:
区块链节点通过工作量证明的方式,从备选出块节点组中确定出块节点组;其中,所述区块链节点为所述备选出块节点组中的任一备选出块节点;
所述区块链节点接收客户端发送的交易请求,所述交易请求包括发起方地址、接收方地址、交易金额、客户端签名以及时间戳;
所述区块链节点将所述交易请求发送给所述出块节点组中任一出块节点,以便于所述出块节点采用实用拜占庭容错共识的方式,验证通过所述交易请求,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链。
本申请第四方面提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现以下程序步骤:
区块链节点通过工作量证明的方式,从备选出块节点组中确定出块节点组;其中,所述区块链节点为所述备选出块节点组中的任一备选出块节点;
所述区块链节点接收客户端发送的交易请求,所述交易请求包括发起方地址、接收方地址、交易金额、客户端签名以及时间戳;
所述区块链节点将所述交易请求发送给所述出块节点组中任一出块节点,以便于所述出块节点采用实用拜占庭容错共识的方式,验证通过所述交易请求,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链。
本申请基于pbft共识机制,让全节点通过pow的方式随机选出出块节点组,然后由出块节点组通过pbft的方式进行共识;且可以调节pow的计算难度,不仅能够提高出块效率,而且避免了去中心化程度降低,并通过随机的方式提升了区块链系统的安全性。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。
图1为本申请实施例提供的一种涉及pbft的共识方法流程示意图;
图2为本申请实施例提供的一种涉及pbft的共识装置结构示意图;
图3为本申请实施例提供的一种涉及pbft的计算设备结构示意图。
具体实施方式
为了更清楚的阐释本申请的整体构思,下面结合说明书附图以示例的方式进行详细说明。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的顺序在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。
此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。术语“共识机制”通常是指区块链系统中实现不同节点之间建立信任、获取权益的数学算法。
本申请实施例中所称的节点,可以理解为响应外界特定触发条件,并按一定规则做状态转换的抽象机器,可以是手机、平板电脑、掌上电脑、个人pc电脑等可以安装应用软件且能够联网的设备。
如图1所示,一种涉及pbft的共识方法,所述方法包括步骤s101-s103。
s101,区块链节点通过工作量证明的方式,从备选出块节点组中确定出块节点组;其中,所述区块链节点为所述备选出块节点组中的任一备选出块节点。
s102,所述区块链节点接收客户端发送的交易请求,所述交易请求包括发起方地址、接收方地址、交易金额、客户端签名以及时间戳。
s103,所述区块链节点将所述交易请求发送给所述出块节点组中任一出块节点,以便于所述出块节点采用实用拜占庭容错共识的方式,验证通过所述交易请求,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链。
在一个示例中,所述备选出块节点组中都是完全节点,所述完全节点的节点本地存储有区块链完整的账本数据;所述出块节点组中的出块节点的数量为3n+1,n为正整数。
需要说明的是,完全节点的数量越多,区块链系统的去中心化程度越高;本申请中可以从若干个备选出块节点中选择3n+1个出块节点,进行pbft共识,保证了区块链系统的去中心化程度。上述的每隔预设时间段,可以是2周时间,也可以是1周时间,也可以是若干个出块时间,可以根据实际的情况进行设置。
在一个示例中,所述区块链节点通过工作量证明的方式,从备选出块节点组中确定出块节点组;具体包括:所述备选出块节点组中一个或多个出块节点,通过对上一个区块的区块头进行第一哈希运算,得到第一哈希值;并将所述第一哈希值和附加随机数进行第二哈希运算,得到第二哈希值;所述上一个区块的区块头包括区块版本号、前一个区块的哈希值、梅克尔根、时间戳、当前难度值以及随机数;其中,所述第一哈希运算和所述运算为相同的哈希运算;所述备选出块节点组的一个或多个,若自身计算的所述第二哈希值小于预设值时,确定自身成为出块节点。
此时,第一哈希运算和第二哈希运算可以均是hash256;在另外的示例中,第一哈希运算和第二哈希运算可以采用不同的哈希函数进行运算。
举例来说:hash256(hash256(上一个区块的区块头)+附加随机数)<预设值,此时,该备选出块节点获得出块节点的资格,从而对新产生的交易和区块进行验证。
此外,上述的预设值会根据当前难度值进行调整;由于备选出块节点组先对上一个区块的区块头进行第一哈希运算,该上一个区块的区块头的第一哈希值是确定。因此,需要将第一哈希值和附加随机数,进行第二哈希运算;即,备选出块节点组中的节点,可以不断尝试附加随机数,直到计算出来的第二哈希值小于预设值即可。
需要指出的是,在一次从备选出块节点组中选择出块节点组,可以有多个备选出块节点计算出的第二哈希值小于预设值;此时,根据该多个备选出块节点计算出该第二哈希值的时间,进行排序,选择先计算出来的多个备选出块节点作为出块节点。因本申请实施例中采用pbft的共识方法,选出的出块节点的数量为3n+1,n为正整数。
在一个示例中,预设值=最大预设值/当前难度值。最大预设值是一个恒定值:
0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff。并且,该预设值可以调节,当前难度值=旧难度值*(过去2016个区块花费实际时长/过去2016个区块花费的期望时长)。
此外,备选出块节点成为出块节点后,会对新接收到的交易或产生的区块进行验证,该验证包括验证每笔交易中的数字签名、交易发起方的余额是否充足、梅克尔根、交易的格式是否正确等。对此不进行详细说明。
在一个示例中,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链;具体包括:所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,并采用实用拜占庭容错共识的方式对所述区块进行验证,以便于所述区块通过验证后上链。
在一个示例中,所述方法还包括:所述备选出块节点组中除被选的出块节点以外的备选出块节点,对所述出块节点进行工作量证明的校验,确认所述出块节点的资格;其中,所述工作量证明校验包括校验一个或多个所述出块节点自身计算的所述第二哈希值是否小于预设值。
下面对pbft的共识过程进行简单说明,pbft共识过程采用一致性协议,本申请中采用pbft的3n+1个出块节点,任意一个出块节点接收到客户端发送的交易,或者产生了新的区块,都需要发起共识过程。该共识过程可以分为5个阶段:1,request请求阶段;2,rre-prepare(序号分配)阶段,序列号是为了保证命令执行的顺序;3,prepare(交互)阶段;4,commit(序号确认)阶段;5,response(响应)阶段。
此时,各出块节点接收到2n+1个commit消息后,将执行对应的操作;如果是交易,就将共识成功的交易放在本地的交易池中,等待被打包;如果是区块,就将共识成功的区块放在本地的区块链账本上。对发起交易的客户端来说,客户端等待来自不同节点的响应,若有n+1个响应相同,则该响应为pbft的共识结果。也就是说,pbft能够保证系统各出块节点按相同的顺序执行相同的命令,形成相同的结果,能够提高共识的效率。
如图2所示,一种涉及pbft的共识装置,所述装置为区块链节点,所述区块链节点包括处理单元、接收单元以及发送单元。
所述处理单元,通过工作量证明的方式,从备选出块节点组中确定出块节点组;其中,所述区块链节点为所述备选出块节点组中的任一备选出块节点;
所述接收单元,接收客户端发送的交易请求,所述交易请求包括发起方地址、接收方地址、交易金额、客户端签名以及时间戳;
所述发送单元,将所述交易请求发送给所述出块节点组中任一出块节点,以便于所述出块节点采用实用拜占庭容错共识的方式,验证通过所述交易请求,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链。
在一个示例中,所述备选出块节点组中都是完全节点,所述完全节点的节点本地存储有区块链完整的账本数据;所述出块节点的数量为3n+1,n为正整数。
在一个示例中,所述处理单元,通过工作量证明的方式,从备选出块节点组中确定出块节点组;具体包括:
所述备选出块节点组中一个或多个出块节点,通过对上一个区块的区块头进行第一哈希运算,得到第一哈希值;并将所述第一哈希值和附加随机数进行第二哈希运算,得到第二哈希值;所述上一个区块的区块头包括区块版本号、前一个区块的哈希值、梅克尔根、时间戳、当前难度值以及随机数;其中,所述第一哈希运算和所述运算为相同的哈希运算;
所述备选出块节点组的一个或多个,若自身计算的所述第二哈希值小于预设值时,确定自身成为出块节点。
在一个示例中,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链;具体包括:
所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,并采用实用拜占庭容错共识的方式对所述区块进行验证,以便于所述区块通过验证后上链。
在一个示例中,所述备选出块节点组中除被选的出块节点以外的备选出块节点,对所述出块节点进行工作量证明的校验,确认所述出块节点的资格;其中,所述工作量证明校验包括校验一个或多个所述出块节点自身计算的所述第二哈希值是否小于预设值。
本申请基于pbft共识机制,让全节点通过pow的方式随机选出出块节点组,然后由出块节点组通过pbft的方式进行共识;且可以调节pow的计算难度,不仅能够提高出块效率,而且避免了去中心化程度降低,并通过随机的方式提升了区块链系统的安全性。
上述实施例中,与方法实施例中相同或相近之处皆可参见,不再赘述。
本申请实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行以下程序步骤:
区块链节点通过工作量证明的方式,从备选出块节点组中确定出块节点组;其中,所述区块链节点为所述备选出块节点组中的任一备选出块节点;
所述区块链节点接收客户端发送的交易请求,所述交易请求包括发起方地址、接收方地址、交易金额、客户端签名以及时间戳;
所述区块链节点将所述交易请求发送给所述出块节点组中任一出块节点,以便于所述出块节点采用实用拜占庭容错共识的方式,验证通过所述交易请求,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现以下程序步骤:
区块链节点通过工作量证明的方式,从备选出块节点组中确定出块节点组;其中,所述区块链节点为所述备选出块节点组中的任一备选出块节点;
所述区块链节点接收客户端发送的交易请求,所述交易请求包括发起方地址、接收方地址、交易金额、客户端签名以及时间戳;
所述区块链节点将所述交易请求发送给所述出块节点组中任一出块节点,以便于所述出块节点采用实用拜占庭容错共识的方式,验证通过所述交易请求,所述出块节点每隔预设时间段将多个验证通过的交易请求打包成区块,且将所述区块上链。
图3示出了本说明书实施例所提供的一种计算机设备结构示意图,该计算机设备可以包括:处理器310、存储器320、输入/输出接口330、通信接口340和总线350。其中处理器310、存储器320、输入/输出接口330和通信接口340通过总线350实现彼此之间在设备内部的通信连接。
处理器310可以采用通用的cpu(centralprocessingunit,中央处理器)、微处理器、应用专用集成电路(applicationspecificintegratedcircuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器320可以采用rom(readonlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器320可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器320中,并由处理器310来调用执行。
输入/输出接口330用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口340用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。
总线350包括一通路,在设备的各个组件(例如处理器310、存储器320、输入/输出接口330和通信接口340)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器310、存储器320、输入/输出接口330、通信接口340以及总线350,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。