会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 区块链 / 区块链的结块方法、区块链的节点和区块链

区块链的结块方法、区块链的节点和区块链

申请号 CN201811090358.2 申请日 2018-09-18 公开(公告)号 CN109218311A 公开(公告)日 2019-01-15
申请人 北京京东尚科信息技术有限公司; 北京京东世纪贸易有限公司; 发明人 邵珠光; 孙海波; 张伟;
摘要 本公开涉及一种区块链的结块方法、区块链的节点和区块链,涉及区块链技术领域。该方法包括:区块链中的任意请求节点向其他节点发送选举共识请求;接收其他节点返回的选举共识应答,选举共识应答中包括第一协议节点ID,第一协议节点ID为其他节点根据选取策略,从选举共识请求中的请求节点对应的第一请求节点ID和其他节点生成的第一本地节点ID中选取;在判断结果为有效的选举共识应答的数量大于第一阈值的情况下,根据选取策略,在接收到的各第一协议节点ID中选取结块节点ID,并将与结块节点ID对应的节点确定为结块节点。本公开的技术方案能够提高区块链的可靠性。
权利要求

1.一种区块链的结块方法,包括:

区块链中的任意请求节点向其他节点发送选举共识请求;

接收所述其他节点返回的选举共识应答,所述选举共识应答中包括第一协议节点ID,所述第一协议节点ID为所述其他节点根据选取策略,从所述选举共识请求中的所述请求节点对应的第一请求节点ID和所述其他节点生成的第一本地节点ID中选取;

在接收到的所述选举共识应答的数量大于第一阈值的情况下,根据所述选取策略,在接收到的各第一协议节点ID中选取结块节点ID,并将与所述结块节点ID对应的节点确定为结块节点来进行结块处理。

2.根据权利要求1中的结块方法,其中,

所述选举共识请求中包括第一请求区块高度;

所述第一协议节点ID为所述其他节点在所述第一请求区块高度大于本地最大区块高度的情况下选取。。

3.根据权利要求2中的结块方法,其中,

所述选举共识应答中包括选取所述第一协议节点ID用到的第一请求节点ID;

所述结块方法还包括:

所述请求节点对比自身发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID是否一致;

在所述发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID一致的情况下,将接收到的所述选举共识应答的数量加1;

在所述发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID不一致的情况下,不改变接收到的所述选举共识应答的数量。

4.根据权利要求1中的结块方法,还包括:

在检测到所述结块节点不在线的次数大于第二阈值的情况下,在所述区块链中各节点生成的第二协议节点ID中确定备选结块ID,以便在所述结块节点不在线的情况下由所述备选结块ID对应的节点进行结块处理。

5.根据权利要求4中的结块方法,其中,所述确定备选结块ID包括:向所述其他节点发送检测共识请求,以便所述其他节点通过检测所述结块节点是否不在线,判断所述检测共识请求是否有效;

接收所述检测共识应答,所述检测共识应答中包括判断结果和所述第二协议节点ID,所述第二协议节点ID为所述其他节点在所述判断结果为有效的情况下根据所述选取策略,在所述检测共识请求中的所述请求节点对应的第二请求节点ID和所述其他节点生成的第二本地节点ID中选取;

在接收到的所述检测共识应答的数量小于等于第三阈值的情况下,重新向所述其他节点发送检测共识请求;

在接收到的所述检测共识应答的数量大于所述第三阈值的情况下,根据所述选取策略,在接收到的各第二协议节点ID中选取所述备选结块节点ID。

6.根据权利要求4中的结块方法,其中,所述进行结块处理包括:接收想要结块的节点发来的结块请求,所述结块请求中包括区块信息、第二请求区块高度、所述想要结块的节点的ID;

根据所述第二请求区块高度、所述想要结块的节点的ID和所述结块节点ID对所述结块请求进行结块校验;

在通过所述结块校验的情况下,将所述区块信息写入本地账本;

在未通过所述结块校验的情况下,根据所述想要结块的节点的ID和所述备选结块节点ID是否一致,确定是否存储所述区块信息。

7.根据权利要求6中的结块方法,其中,所述对所述结块请求进行结块校验包括:在所述第二请求区块高度和所述第一请求区块高度不一致的情况下,不通过所述结块校验;

在所述第二请求区块高度和所述第一请求区块高度一致的情况下,对比所述想要结块的节点的ID和所述结块节点ID是否一致;

在所述想要结块的节点的ID和所述结块节点ID一致的情况下,通过所述结块校验;

在所述想要结块的节点的ID和所述结块节点ID不一致的情况下,不通过所述结块校验。

8.根据权利要求6中的结块方法,其中,所述确定是否存储所述区块信息包括:在所述想要结块的节点的ID和所述备选结块节点ID一致的情况下,将所述区块信息写入本地缓存;

在预设时间内没有接到新的结块请求的情况下,将所述区块信息写入所述本地账本;

在所述预设时间内接到新的结块请求的情况下,对所述新的结块请求进行所述结块校验。

9.根据权利要求1-8中任一项所述的结块方法,其中,所述第一请求节点ID由所述请求节点的媒体访问控制MAC地址和所述请求节点生成的随机数组成。

10.一种区块链的节点,包括:

发送单元,用于向其他节点发送选举共识请求;

接收单元,用于接收所述其他节点返回的选举共识应答,所述选举共识应答中包括第一协议节点ID,所述第一协议节点ID为所述其他节点根据选取策略,从所述选举共识请求中的所述区块链的节点对应的第一请求节点ID和所述其他节点生成的第一本地节点ID中选取;

确定单元,用于在接收到的所述选举共识应答的数量大于第一阈值的情况下,根据所述选取策略,在接收到的各第一协议节点ID中选取结块节点ID,并将与所述结块节点ID对应的节点确定为结块节点来进行结块处理。

11.根据权利要求10中的区块链的节点,其中,

所述选举共识请求中包括第一请求区块高度;

所述第一协议节点ID为所述其他节点在所述第一请求区块高度大于本地最大区块高度的情况下选取。

12.根据权利要求11中的区块链的节点,其中,

所述选举共识应答中包括选取所述第一协议节点ID用到的第一请求节点ID;

确定单元对比自身发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID是否一致,在所述发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID一致的情况下,将接收到的所述选举共识应答的数量加1;

在所述发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID不一致的情况下,不改变接收到的所述选举共识应答的数量。

13.根据权利要求10中的区块链的节点,其中,

所述确定单元在检测到所述结块节点不在线的次数大于第二阈值的情况下,在所述区块链中各节点生成的第二协议节点ID中确定备选结块ID,以便在所述结块节点不在线的情况下由所述备选结块ID对应的节点进行结块处理。

14.根据权利要求13中的区块链的节点,其中,

所述发送单元向所述其他节点发送检测共识请求,以便所述其他节点通过检测所述结块节点是否不在线,判断所述检测共识请求是否有效;

所述接收单元接收所述检测共识应答,所述检测共识应答中包括判断结果和所述第二协议节点ID,所述第二协议节点ID为所述其他节点在所述判断结果为有效的情况下根据所述选取策略,在所述检测共识请求中的所述区块链的节点对应的第二请求节点ID和所述其他节点生成的第二本地节点ID中选取;

所述发送单元在接收到的所述检测共识应答的数量小于等于第三阈值的情况下,重新向所述其他节点发送检测共识请求;

所述确定单元在接收到的所述检测共识应答的数量大于所述第三阈值的情况下,根据所述选取策略,在接收到的各第二协议节点ID中选取所述备选结块节点ID。

15.根据权利要求13中的区块链的节点,其中,

所述接收单元接收想要结块的节点发来的结块请求,所述结块请求中包括区块信息、第二请求区块高度、所述想要结块的节点的ID;

所述区块链的节点还包括:

校验单元,用于根据所述第二请求区块高度、所述想要结块的节点的ID和所述结块节点ID对所述结块请求进行结块校验;

写入单元,用于在通过所述结块校验的情况下,将所述区块信息写入本地账本;

其中,所述确定单元在未通过所述结块校验的情况下,根据所述想要结块的节点的ID和所述备选结块节点ID是否一致,确定是否存储所述区块信息。

16.根据权利要求15中的区块链的节点,其中,

所述校验单元在所述第二请求区块高度和所述第一请求区块高度不一致的情况下,不通过所述结块校验,在所述第二请求区块高度和所述第一请求区块高度一致的情况下,对比所述想要结块的节点的ID和所述结块节点ID是否一致,在所述想要结块的节点的ID和所述结块节点ID一致的情况下,通过所述结块校验,在所述想要结块的节点的ID和所述结块节点ID不一致的情况下,不通过所述结块校验。

17.根据权利要求15中的区块链的节点,其中,

所述写入单元在所述想要结块的节点的ID和所述备选结块节点ID一致的情况下,将所述区块信息写入本地缓存,在预设时间内没有接到新的结块请求的情况下,将所述区块信息写入所述本地账本;

所述校验单元在所述预设时间内接到新的结块请求的情况下,对所述新的结块请求进行所述结块校验。

18.一种区块链,包括:

多个如权利要求10-17中所述的区块链的节点。

19.一种区块链的节点,包括:

存储器;和

耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器装置中的指令,执行权利要求1-9任一项所述的区块链的结块方法。

20.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现权利要求1-9任一项所述的区块链的结块方法。

说明书全文

区块链的结块方法、区块链的节点和区块链

技术领域

[0001] 本公开涉及区块链技术领域,特别涉及一种区块链的结块方法、区块链的节点、区块链和计算机可读存储介质。

背景技术

[0002] 区块链技术可以基于共识机制进行结块处理来保存信息,从而保证信息不可篡改,提高信息安全性。
[0003] 在相关技术中,区块链技的共识机制包括:POW(Proof of Work,工作量证明)、POS(Proof of Stake,权益证明)、DPOS(Delegated Proof of Stake,委任权益证明)、PoET(Proof of Elapsed Time,消逝时间证明)、PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)等。

发明内容

[0004] 本公开的发明人发现上述相关技术中存在如下问题:结块节点的选取过程有中心化趋势,导致区块链的可靠性差。
[0005] 鉴于此,本公开提出了一种区块链的结块技术方案,能够提高区块链的可靠性。
[0006] 根据本公开的一些实施例,提供了一种区块链的结块方法,包括:区块链中的任意请求节点向其他节点发送选举共识请求;接收所述其他节点返回的选举共识应答,所述选举共识应答中包括第一协议节点ID,所述第一协议节点ID为所述其他节点根据选取策略,从所述选举共识请求中的所述请求节点对应的第一请求节点ID和所述其他节点生成的第一本地节点ID中选取;在接收到的所述选举共识应答的数量大于第一阈值的情况下,根据所述选取策略,在接收到的各第一协议节点ID中选取结块节点ID,并将与所述结块节点ID对应的节点确定为结块节点来进行结块处理。
[0007] 在一些实施例中,所述选举共识请求中包括第一请求区块高度;所述第一协议节点ID为所述其他节点在所述第一请求区块高度大于本地最大区块高度的情况下选取。
[0008] 在一些实施例中,所述选举共识应答中包括选取所述第一协议节点ID用到的第一请求节点ID;所述结块方法还包括:所述请求节点对比自身发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID是否一致;在所述发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID一致的情况下,将接收到的所述选举共识应答的数量加1;在所述发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID不一致的情况下,不改变接收到的所述选举共识应答的数量。
[0009] 在一些实施例中,该方法还包括:在检测到所述结块节点不在线的次数大于第二阈值的情况下,在所述区块链中各节点生成的第二协议节点ID中确定备选结块ID,以便在所述结块节点不在线的情况下由所述备选结块ID对应的节点进行结块处理。
[0010] 在一些实施例中,向所述其他节点发送检测共识请求,以便所述其他节点通过检测所述结块节点是否不在线,判断所述检测共识请求是否有效;接收所述检测共识应答,所述检测共识应答中包括判断结果和所述第二协议节点ID,所述第二协议节点ID为所述其他节点在所述判断结果为有效的情况下根据所述选取策略,在所述检测共识请求中的所述请求节点生成的第二请求节点ID和所述其他节点生成的第二本地节点ID中选取;在接收到的所述检测共识应答的数量小于等于第三阈值的情况下,重新向所述其他节点发送检测共识请求;在接收到的所述检测共识应答的数量大于所述第三阈值的情况下,根据所述选取策略,在接收到的各第二协议节点ID中选取所述备选结块节点ID。
[0011] 在一些实施例中,接收想要结块的节点发来的结块请求,所述结块请求中包括区块信息、第二请求区块高度、所述想要结块的节点的ID;根据所述第二请求区块高度、所述想要结块的节点的ID和所述结块节点ID对所述结块请求进行结块校验;在通过所述结块校验的情况下,将所述区块信息写入本地账本;在未通过所述结块校验的情况下,根据所述想要结块的节点的ID和所述备选结块节点ID是否一致,确定是否存储所述区块信息。
[0012] 在一些实施例中,在所述第二请求区块高度和所述第一请求区块高度不一致的情况下,不通过所述结块校验;在所述第二请求区块高度和所述第一请求区块高度一致的情况下,对比所述想要结块的节点的ID和所述结块节点ID是否一致;在所述想要结块的节点的ID和所述结块节点ID一致的情况下,通过所述结块校验;在所述想要结块的节点的ID和所述结块节点ID不一致的情况下,不通过所述结块校验。
[0013] 在一些实施例中,在所述想要结块的节点的ID和所述备选结块节点ID一致的情况下,将所述区块信息写入本地缓存;在预设时间内没有接到新的结块请求的情况下,将所述区块信息写入所述本地账本;在所述预设时间内接到新的结块请求的情况下,对所述新的结块请求进行所述结块校验。
[0014] 在一些实施例中,所述第一请求节点ID由所述请求节点的MAC(Media Access Control,媒体访问控制地址)和所述请求节点生成的随机数组成。
[0015] 根据本公开的另一些实施例,提供一种区块链的节点,包括:发送单元,用于向其他节点发送选举共识请求;接收单元,用于接收所述其他节点返回的所述选举共识应答,所述选举共识应答中包括第一协议节点ID,所述第一协议节点ID为所述其他节点根据选取策略,从所述选举共识请求中的所述区块链的节点对应的第一请求节点ID和所述其他节点生成的第一本地节点ID中选取;确定单元,用于在接收到的所述选举共识应答的数量大于第一阈值的情况下,根据所述选取策略,在接收到的各第一协议节点ID中选取结块节点ID,并将与所述结块节点ID对应的节点确定为结块节点来进行结块处理。
[0016] 在一些实施例中,所述选举共识请求中包括第一请求区块高度;所述第一协议节点ID为所述其他节点在所述第一请求区块高度大于本地最大区块高度的情况下选取。
[0017] 在一些实施例中,所述选举共识应答中包括选取所述第一协议节点ID用到的第一请求节点ID;确定单元对比自身发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID是否一致,在所述发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID一致的情况下,将接收到的所述选举共识应答的数量加1;在所述发送的第一请求节点ID和所述选举共识应答中的第一请求节点ID不一致的情况下,不改变接收到的所述选举共识应答的数量。
[0018] 在一些实施例中,所述确定单元在检测到所述结块节点不在线的次数大于第二阈值的情况下,在所述区块链中各节点生成的第二协议节点ID中确定备选结块ID,以便在所述结块节点不在线的情况下由所述备选结块ID对应的节点进行结块处理。
[0019] 在一些实施例中,所述发送单元向所述其他节点发送检测共识请求,以便所述其他节点通过检测所述结块节点是否不在线,判断所述检测共识请求是否有效;所述接收单元接收所述检测共识应答,所述检测共识应答中包括判断结果和所述第二协议节点ID,所述第二协议节点ID为所述其他节点在所述判断结果为有效的情况下根据所述选取策略,在所述检测共识请求中的所述区块链的节点生成的第二请求节点ID和所述其他节点生成的第二本地节点ID中选取;所述发送单元在接收到的所述检测共识应答的数量小于等于第三阈值的情况下,重新向所述其他节点发送检测共识请求;所述确定单元在接收到的所述检测共识应答的数量大于所述第三阈值的情况下,根据所述选取策略,在接收到的各第二协议节点ID中选取所述备选结块节点ID。
[0020] 在一些实施例中,所述接收单元接收想要结块的节点发来的结块请求,所述结块请求中包括区块信息、第二请求区块高度、所述想要结块的节点的ID;所述区块链的节点还包括:校验单元,用于根据所述第二请求区块高度、所述想要结块的节点的ID和所述结块节点ID对所述结块请求进行结块校验;写入单元,用于在通过所述结块校验的情况下,将所述区块信息写入本地账本;其中,所述确定单元在未通过所述结块校验的情况下,根据所述想要结块的节点的ID和所述备选结块节点ID是否一致,确定是否存储所述区块信息。
[0021] 在一些实施例中,所述校验单元在所述第二请求区块高度和所述第一请求区块高度不一致的情况下,不通过所述结块校验,在所述第二请求区块高度和所述第一请求区块高度一致的情况下,对比所述想要结块的节点的ID和所述结块节点ID是否一致,在所述想要结块的节点的ID和所述结块节点ID一致的情况下,通过所述结块校验,在所述想要结块的节点的ID和所述结块节点ID不一致的情况下,不通过所述结块校验。
[0022] 在一些实施例中,所述写入单元在所述想要结块的节点的ID和所述备选结块节点ID一致的情况下,将所述区块信息写入本地缓存,在预设时间内没有接到新的结块请求的情况下,将所述区块信息写入所述本地账本;所述校验单元在所述预设时间内接到新的结块请求的情况下,对所述新的结块请求进行所述+结块校验。
[0023] 根据本公开的又一些实施例,提供一种区块链,包括多个上述任一个实施例中的区块链的节点。
[0024] 根据本公开的又一些实施例,提供一种区块链的节点,包括:存储器;和耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器装置中的指令,执行上述任一个实施例中的区块链的结块方法。
[0025] 根据本公开的再一些实施例,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一个实施例中的区块链的结块方法。
[0026] 在上述实施例中,区块链根据选取策略、请求的区块高度和请求的节点ID在多个节点发送的协议节点ID中选举出一个结块节点来进行结块处理。这样,可以使得每个节点都有平等的结块权力,从而提高了区块链的可靠性。

附图说明

[0027] 构成说明书的一部分的附图描述了本公开的实施例,并且连同说明书一起用于解释本公开的原理。
[0028] 参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:
[0029] 图1示出本公开的区块链的结块方法的一些实施例的流程图;
[0030] 图2示出本公开计算选举共识应答数量的方法的一些实施例的流程图;
[0031] 图3示出本公开确定备选结块ID的方法的一些实施例的流程图;
[0032] 图4示出本公开的区块链的结块方法的另一些实施例的流程图;
[0033] 图5示出图4中的步骤420的一些实施例的流程图;
[0034] 图6示出图4中的步骤450的一些实施例的流程图;
[0035] 图7示出本公开的区块链的节点的一些实施例的框图;
[0036] 图8示出本公开的区块链的一些实施例的框图;
[0037] 图9示出本公开的区块链的节点的另一些实施例的框图;
[0038] 图10示出本公开的区块链的节点的又一些实施例的框图。

具体实施方式

[0039] 现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
[0040] 同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
[0041] 以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。
[0042] 对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。
[0043] 在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。
[0044] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
[0045] 图1示出本公开的区块链的结块方法的一些实施例的流程图。
[0046] 如图1所示,该方法包括:步骤110,发送选举共识请求;步骤120,接收选举共识应答;和步骤130,确定结块节点。
[0047] 在步骤110中,区块链中的任意请求节点向其他节点发送选举共识请求。例如,选举共识请求中包括第一请求节点ID,还可以包括请求类型字段(例如值为普通共识)和其他信息字段(例如值为空)。
[0048] 在一些实施例中,区块链中的节点上线后可以发送上线广播消息。收到上线广播消息的其他节点可以更新各自的本地缓存中的周围节点信息,并对发出上线广播消息的节点返回上线应答。发出上线广播消息的节点可以维护这些应答节点的节点信息,以便根据心跳机制检测这些应答节点是否在线,或者向这些应答节点发送选举共识请求。
[0049] 在一些实施例中,第一请求节点ID可以由节点的MAC地址和该节点生成的随机数组成。例如,第一请求节点ID也可以成为选举ID,即参与选举成为下一个进行结块的节点的ID。MAC地址(如大小为48bit)可以保证第一请求节点ID的唯一性,随机数(如大小为16bit)可以保证第一请求节点ID的随机性,从而提高区块链的可靠性。
[0050] 在一些实施例中,节点生成了第一请求节点ID后可以暂且将其作为结块节点ID保存,直到收到第一协议节点ID。节点生成了第一请求节点ID后还可以将有效的选举共识应答的数量加1,作为数量的初始值。
[0051] 在一些实施例中,其他节点收到选举共识请求后,判断选举共识请求中的第一区块高度是否大于本地最大区块高度。例如,第一请求区块高度可以是请求节点想要生成的区块高度。在不大于的情况下,判断本次选举共识请求为无效;在大于的情况下,判断本次选举共识请求为有效。
[0052] 在步骤120中,接收其他节点返回的选举共识应答。选举共识应答中包括第一协议节点ID。第一协议节点ID为其他节点根据选取策略和选举共识请求中的请求节点相应的第一请求节点ID确定。例如,选取策略可以是选取所有节点ID中的最大ID,也可以是选取所有节点ID中的最小ID。
[0053] 在一些实施例中,第一协议节点ID为其他节点在判断本次选举共识请求为有效的情况下,根据选取策略从第一请求节点ID和其他节点生成的第一本地节点ID中选取。第一本地节点ID可以为其他节点利用与生成第一请求节点ID的方法(例如,根据自身MAC地址和随机数)生成。
[0054] 例如,其他节点可以比较内存中的第一本地节点ID(例如,可以是其他节点暂存的结块节点ID)与第一请求节点ID的大小。根据选取策略,将其中大的一个(也可以是小的一个)作为第一协议节点ID。第一协议节点ID是该其他节点选定的结块节点ID,该其他节点可以将第一协议节点ID暂存为结块节点ID,直到收到其他协议节点ID。
[0055] 在一些实施例中,选举共识应答中可以包括标识位,用于标识选举共识请求是否有效。选举共识应答中还可以包括接收到的第一请求区块高度。
[0056] 在一些实施例中,在判断结果为有效的情况下,选举共识应答中包括选取第一协议节点ID用到的第一请求节点ID。例如,第一协议节点ID是从第一请求节点ID和第一本地节点ID中选取的,则选举共识应答中包括该第一请求节点ID。这样,发起选举共识请求的节点验证接收到的选举共识应答是否是针对自己发出的选举共识请求返回的,例如图2中的实施例。
[0057] 图2示出本公开计算选举共识应答数量的方法的一些实施例的流程图。
[0058] 如图2所示,该方法包括:步骤121,对比发送的和接收的第一请求节点ID;和步骤122,更新接收到的选举共识应答的数量。
[0059] 在步骤121中,请求节点对比自身发送的第一请求节点ID和选举共识应答中的第一请求节点ID是否一致。例如,请求节点先获取选举共识应答中的判断结果是否为有效。在无效的情况下,不做后续处理;在有效的情况下,对比自身发送的第一请求节点ID和选举共识应答中的第一请求节点ID是否一致。
[0060] 在步骤122中,在发送的第一请求节点ID和选举共识应答中的第一请求节点ID一致的情况下,将接收到的选举共识应答的数量加1。这样,可以防止有节点恶意发送选举共识应答的情况,还可以防止接收到的选举共识应答与发送的选举共识请求不匹配的情况,从而提高区块链的可靠性。
[0061] 计算接收到的举共识应答数量后,就可以通过图1中的步骤130确定结块节点了。
[0062] 在步骤130中,在接收到的选举共识应答的数量大于第一阈值的情况下,根据选取策略,在接收到的各第一协议节点ID中选取结块节点ID,并将与结块节点ID对应的节点确定为结块节点来进行结块处理。结块处理,即将信息以区块的数据结构保存在区块链中。
[0063] 在一些实施例中,在满足生成结块节点ID的超时机制的情况下(例如,超过预设的生成时间),统计接收到的选举共识应答数量。例如,在选举共识应答数量超过发送的选举共识请求数量的一半情况下,在所有接收到的第一协议节点ID中选取最大的作为结块节点ID,并实时检测对应的结块节点的连接情况,防止结块节点异常导致无法结块;在选举共识应答数量未超过发送的选举共识请求数量的一半情况下,可以重新发起选举共识请求。
[0064] 在一些实施例中,在检测到结块节点不在线的次数大于第二阈值的情况下,在区块链中各节点生成的第二协议节点ID中确定备选结块ID,以便在结块节点不在线的情况下由备选结块ID对应的节点进行结块处理。
[0065] 例如,节点C为结块节点,节点A可以利用心跳机制检测节点C是否在线。在心跳检测失败的次数大于第二阈值(如连续5次)的情况下,节点A可以向区块链发起检测共识请求,以确定备选结块ID。例如,可以通过图3中的实施例确定备选结块ID。
[0066] 图3示出本公开确定备选结块ID的方法的一些实施例的流程图。
[0067] 如图3所示,该方法包括:步骤310,发送检测共识请求;步骤320,接收检测共识应答;步骤330,判断接收到的检测共识应答数量是否大于第三阈值;和步骤340,确定备选结块节点ID。
[0068] 在步骤310中,向其他节点发送检测共识请求,以便其他节点通过检测结块节点是否不在线,判断检测共识请求是否有效。例如,检测共识请求可以包括请求类型字段(例如,值为异常共识)、结块节点ID、区块高度字段(例如,值为结块节点的区块高度)和其他信息字段(例如,值为其他节点的相关信息)。
[0069] 在一些实施例中,节点B收到节点A的检测共识请求后,可以根据区块高度字段是否符合区块链的当前区块高度。如果符合,节点B可以获取节点C(结块节点)的相关信息(例如,IP、端口等),然后利用心跳机制,检测与节点C之间的连接情况。
[0070] 例如,在心跳检测失败的次数大于第四阈值(如连续3次)的情况下,节点B可以确定节点C连接异常,即检测共识请求有效;在心跳检测失败的次数小于等于第三阈值的情况下,节点B可以确定节点C连接正常,即检测共识请求无效。
[0071] 在步骤320中,接收检测共识应答,检测共识应答中包括判断结果和第二协议节点ID。第二协议节点ID为其他节点在判断结果为有效的情况下根据选取策略,在检测共识请求中的请求节点相应的第二请求节点ID和其他节点生成的第二本地节点ID中选取。
[0072] 在一些实施例中,节点B确定节点C连接异常,则重新生成第二本地节点ID,将第二请求节点ID和第二本地节点ID中大的一个作为第二协议节点ID,并将第二协议节点ID暂存为备选结块节点ID。
[0073] 在步骤330中,在接收到的检测共识应答数量是否大于第三阈值。在大于的情况下,执行步骤340;在不大于的情况下,返回执行步骤310,重新向其他节点发送检测共识请求。
[0074] 在一些实施例中,节点A收到其他节点的检测共识应答后,会进行一系列判断,并更新内存中的备选结块节点ID。例如,检测共识应答中还可以包括用于确定第二协议节点ID的第二请求节点ID。节点A可以对比检测共识应答中的第二请求节点ID和自身发送的第二请求节点ID是否一致,如果一致则将接收到的检测共识应答的数量加1,如果不一致则不改变接收到的检测共识应答的数量。
[0075] 在步骤340中,根据选取策略,在接收到的各第二协议节点ID中选取所述备选结块节点ID。
[0076] 例如,在检测共识应答中的判断结果为有效的情况下,将第二协议节点ID设置为备选结块节点ID;在检测共识应答中的判断结果为无效的情况下,不更新备选结块节点ID。也可以将所有判断结果为有效的检测共识应答中的最大(或最小)的第二协议节点ID设置为备选结块节点ID。
[0077] 在一些实施例中,可以实时检测备选结块节点ID对应节点的连接情况,防止对应节点异常导致无法结块。例如,在通过心跳检测发现备选结块节点连接异常,发起检测共识请求的情况下,可以再次更新备选结块节点ID,而无需更新结块节点ID。
[0078] 这样,可以在结块节点无法连接的情况下,仍然能够利用备选结块节点保证结块的顺利进行,提高了区块链的可靠性。
[0079] 图4示出本公开的区块链的结块方法的另一些实施例的流程图。
[0080] 如图4所示,相比于前面实施例,该方法还可以包括:步骤410,接收结块请求;步骤420,进行结块校验;步骤430,判断是否通过结块校验;步骤440,将区块信息写入本地账本;
和步骤450,确定是否存储区块信息。
[0081] 在步骤410中,接收想要结块的节点发来的结块请求,结块请求中包括区块信息、第二请求区块高度、想要结块的节点的ID。例如,节点C(结块节点)将交易写入本地账本,然后向其他节点发送结块请求至。
[0082] 在步骤420中,根据第二请求区块高度、想要结块的节点的ID和结块节点ID对结块请求进行结块校验。例如,可以通过图5中的实施例来执行步骤420。
[0083] 图5示出图4中的步骤420的一些实施例的流程图。
[0084] 如图5所示,步骤420可以包括:步骤4210,获取第一区块高度和第二区块高度;步骤4220,判断第一区块高度和第二区块高度是否一致;步骤4230,想要结块的节点的ID与结块节点ID是否一致;步骤4240,通过结块校验;和步骤4250,不通过结块校验。
[0085] 在步骤4210中,区块链中的节点在接收到的结块请求中获取第一区块高度(想要结块的高度),并从本地获取第二区块高度(区块链最大区块高度)。
[0086] 在步骤4220中,判断第一区块高度和第二区块高度是否一致。如果一致,则执行步骤4230;如果不一致,则执行步骤4250。
[0087] 在步骤4230中,对比想要结块的节点的ID和结块节点ID是否一致。如果一致,则执行步骤4240;如果不一致,则执行步骤4250。
[0088] 在步骤4240中,通过结块校验。
[0089] 在步骤4250中,不通过结块校验。
[0090] 再进行结块校验后,就可以继续通过图4中的步骤430-450存储区块信息了。
[0091] 在步骤430中,判断是否通过结块校验。如果通过,则执行步骤440;如果不通过,则执行步骤450。
[0092] 在步骤440中,将区块信息写入本地账本。
[0093] 在步骤450中,根据想要结块的节点的ID和备选结块节点ID是否一致,确定是否存储区块信息。例如,可以通过图6中的实施例执行步骤450。
[0094] 图6示出图4中的步骤450的一些实施例的流程图。
[0095] 如图6所示,步骤450可以包括:步骤4510,将区块信息写入本地缓存;和步骤4520,判断是否接到新的结块请求。
[0096] 在步骤4510中,在想要结块的节点的ID和备选结块节点ID一致的情况下,将区块信息写入本地缓存。在一些实施例中,在想要结块的节点的ID和备选结块节点ID不一致的情况下,表示本次结块请求无效,放弃根据相应的区块消息写入本地账本。
[0097] 在步骤4520中,判断在预设时间(例如,1分钟)内是否接到新的结块请求。如果接到,则执行步骤420,采用上述实施例中的方法对新街道的结块请求进行结块校验;如果未接到,则执行步骤440。
[0098] 在上述实施例中,区块链根据选取策略、请求的区块高度和请求的节点ID在多个节点发送的协议节点ID中选举出一个结块节点来进行结块处理。这样,可以使得每个节点都有平等的结块权力,从而提高了区块链的可靠性。
[0099] 图7示出本公开的区块链的节点的一些实施例的框图。
[0100] 如图7所示,区块链的节点7包括:发送单元71、接收单元72和确定单元73。
[0101] 发送单元71向其他节点发送选举共识请求。
[0102] 接收单元72接收其他节点返回的选举共识应答。选举共识应答中包括第一协议节点ID。第一协议节点ID为其他节点根据选取策略从选举共识请求中的区块链的节点7相应的第一请求节点ID和其他节点生成的第一本地节点ID中选取。
[0103] 在一些实施例中,选举共识请求中包括第一请求区块高度;第一协议节点ID为其他节点在第一请求区块高度大于本地最大区块高度的情况下选取。确定单元73在接收到的选举共识应答的数量大于第一阈值的情况下,根据选取策略,在接收到的各第一协议节点ID中选取结块节点ID,并将与结块节点ID对应的节点确定为结块节点来进行结块处理。
[0104] 在一些实施例中,选举共识应答中包括选取第一协议节点ID用到的第一请求节点ID。确定单元73对比自身发送的第一请求节点ID和选举共识应答中的第一请求节点ID是否一致。在发送的第一请求节点ID和选举共识应答中的第一请求节点ID一致的情况下,将接收到的选举共识应答的数量加1。在发送的第一请求节点ID和选举共识应答中的第一请求节点ID不一致的情况下,不改变接收到的选举共识应答的数量。
[0105] 在一些实施例中,在检测到结块节点不在线的次数大于第二阈值的情况下,确定单元73在区块链中各节点生成的第二协议节点ID中确定备选结块ID,以便在结块节点不在线的情况下由备选结块ID对应的节点进行结块处理。
[0106] 例如,发送单元71向其他节点发送检测共识请求,以便其他节点通过检测结块节点是否不在线,判断检测共识请求是否有效。接收单元72接收检测共识应答,检测共识应答中包括判断结果和第二协议节点ID。第二协议节点ID为其他节点在判断结果为有效的情况下根据选取策略,在检测共识请求中的区块链的节点7相应的第二请求节点ID和其他节点生成的第二本地节点ID中选取。
[0107] 在接收到的检测共识应答的数量小于等于第三阈值的情况下,发送单元71重新向其他节点发送检测共识请求。在接收到的检测共识应答的数量大于第三阈值的情况下,确定单元73根据选取策略,在接收到的各第二协议节点ID中选取备选结块节点ID。
[0108] 在一些实施例中,接收单元72接收想要结块的节点发来的结块请求。结块请求中包括区块信息、第二请求区块高度、想要结块的节点的ID。区块链的节点7还包括:校验单元74、写入单元75。校验单元74根据第二请求区块高度、想要结块的节点的ID和结块节点ID对结块请求进行结块校验。
[0109] 例如,在第二请求区块高度和第一请求区块高度不一致的情况下,校验单元74不通过结块校验。在第二请求区块高度和第一请求区块高度一致的情况下,校验单元74对比想要结块的节点的ID和结块节点ID是否一致。在想要结块的节点的ID和结块节点ID一致的情况下,校验单元74通过结块校验。在想要结块的节点的ID和结块节点ID不一致的情况下,校验单元74不通过结块校验。
[0110] 在通过结块校验的情况下,写入单元75将区块信息写入本地账本。在未通过结块校验的情况下,确定单元73根据想要结块的节点的ID和备选结块节点ID是否一致,确定是否存储区块信息。
[0111] 例如,在想要结块的节点的ID和备选结块节点ID一致的情况下,写入单元75将区块信息写入本地缓存。在预设时间内没有接到新的结块请求的情况下,写入单元75将区块信息写入本地账本。在预设时间内接到新的结块请求的情况下,校验单元74对新的结块请求进行结块校验。
[0112] 在上述实施例中,区块链根据选取策略、请求的区块高度和请求的节点ID在多个节点发送的协议节点ID中选举出一个结块节点来进行结块处理。这样,可以使得每个节点都有平等的结块权力,从而提高了区块链的可靠性。
[0113] 图8示出本公开的区块链的一些实施例的框图。
[0114] 如图8所示,区块链8包括多个上述任一个实施例中的区块链的节点81。
[0115] 图9示出本公开的区块链的节点的另一些实施例的框图。
[0116] 如图9所示,该实施例的区块链的节点9包括:存储器91以及耦接至该存储器91的处理器92,处理器92被配置为基于存储在存储器91中的指令,执行本公开中任意一个实施例中的区块链的结块方法。
[0117] 其中,存储器91例如可以包括系统存储器、固定非易失性存储介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序(Boot Loader)、数据库以及其他程序等。
[0118] 图10示出本公开的区块链的节点的又一些实施例的框图。
[0119] 如图10所示,该实施例的区块链的节点10包括:存储器1010以及耦接至该存储器1010的处理器1020,处理器1020被配置为基于存储在存储器1010中的指令,执行前述任意一个实施例中的区块链的结块方法。
[0120] 存储器1010例如可以包括系统存储器、固定非易失性存储介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序(Boot Loader)以及其他程序等。
[0121] 区块链的结块10还可以包括输入输出接口1030、网络接口1040、存储接口1050等。这些接口1030、1040、1050以及存储器1010和处理器1020之间例如可以通过总线1060连接。
其中,输入输出接口1030为显示器、鼠标、键盘、触摸屏等输入输出设备提供连接接口。网络接口1040为各种联网设备提供连接接口。存储接口1050为SD卡、U盘等外置存储设备提供连接接口。
[0122] 本领域内的技术人员应当明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0123] 至此,已经详细描述了根据本公开的区块链的结块方法、区块链的节点、区块链和计算机可读存储介质。为了避免遮蔽本公开的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。
[0124] 可能以许多方式来实现本公开的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和系统。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
[0125] 虽然已经通过示例对本公开的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本公开的范围。本领域的技术人员应该理解,可在不脱离本公开的范围和精神的情况下,对以上实施例进行修改。本公开的范围由所附权利要求来限定。