区块链系统中防止出现硬分叉现象的方法、介质、装置和区块链系统与流程

文档序号:16926401发布日期:2019-02-22 19:54阅读:227来源:国知局
区块链系统中防止出现硬分叉现象的方法、介质、装置和区块链系统与流程

本发明涉及区块链技术领域,特别涉及一种区块链系统中防止出现硬分叉现象的方法、介质、装置和区块链系统。



背景技术:

区块链系统,是一种以去中心化、去信任的方式维护可靠数据库的技术方案;因其去中心化、去信任式以及数据难以篡改的特点而受到广泛地应用。

在现有的区块链系统中,当区块链系统要进行功能扩展或者其他需求需要对组成的节点进行升级时,经常会出现部分节点不接受升级的情况发生,进而导致该部分不接受升级的节点仍然在旧有的区块链系统上进行区块的生产,而升级后的节点在新的区块链系统上进行区块的生产,使得区块链系统出现硬分叉,进而导致两个版本系统的同时存在致使用户被分流。



技术实现要素:

本发明旨在至少在一定程度上解决上述技术中的技术问题之一。为此,本发明的一个目的在于提出一种区块链系统中防止出现硬分叉现象的方法,能够实现通过监控区块链系统中在线节点数量,并根据在线节点数量判别系统升级状况,以及根据判别控制区块链系统状态,防止因区块链系统而导致的区块链系统硬分叉现象的发生。

本发明的第二个目的在于提出一种计算机可读存储介质。

本发明的第三个目的在于提出一种区块链系统中防止出现硬分叉现象的装置。

本发明的第四个目的在于提出一种区块链系统。

为达到上述目的,本发明第一方面实施例提出了一种区块链系统中防止出现硬分叉现象的方法,包括以下步骤:每当所述区块链系统中生产节点进行当前区块生产时,获取所述区块链系统的当前在线节点总数n,并对所述生产节点生产的当前区块进行编号;通过解析第m个区块的内容以获取第m个区块生产时所述区块链系统的在线节点总数nm,其中,m=u-i,u为当前区块的编号,i小于u且为预设值,u、i和nm均为正整数;获取nm与n之间的差值,并判断所述差值是否小于n/2;如果所述差值小于n/2,则控制当前生产节点继续进行当前区块生产;如果所述差值大于等于n/2,则控制当前生产节点停止当前区块生产,并通过当前生产节点全网广播所述区块链系统当前处于不可用状态。

根据本发明实施例的区块链系统中防止出现硬分叉现象的方法,首先,每当区块链系统中生产节点进行当前区块生产时,获取区块链系统的当前在线节点总数n,并对生产节点生产的当前区块进行编号;接着,通过解析第m个区块的内容以获取第m个区块生产时区块链系统的在线节点总数nm,其中,m=u-i,u为当前区块的编号,i小于u且为预设值,u、i和nm均为正整数;然后,获取nm与n之间的差值,并判断差值是否小于n/2;接着,如果差值小于n/2,则控制当前生产节点继续进行当前区块生产;然后,如果差值大于等于n/2,则控制当前生产节点停止当前区块生产,并通过当前生产节点全网广播区块链系统当前处于不可用状态;从而实现通过监控区块链系统中在线节点数量,并根据在线节点数量判别系统升级状况,以及根据判别控制区块链系统状态,防止因区块链系统升级而导致的区块链系统硬分叉现象的发生。

另外,根据本发明上述实施例提出的区块链系统中防止出现硬分叉现象的方法还可以具有如下附加的技术特征:

可选地,当所述区块链系统中任意一个节点接收到新节点接入请求时,对新节点的连接地址进行监听以判断所述新节点是否连入所述区块链系统,并在所述新节点连入所述区块链系统时进行全网广播,以便所述生产节点对所述区块链系统的在线节点总数进行加1操作。

可选地,还通过对所述区块链系统中每个节点的地址进行监听以判断所述区块链系统中是否存在下线节点,并在所述区块链系统中存在任意一个下线节点时进行全网广播,以便所述生产节点对所述区块链系统的在线节点总数进行减1操作。

可选地,当所述区块链系统中的任意一个节点接收到所述区块链系统当前处于不可用状态的广播时,进入休眠状态。

为达到上述目的,本发明第二方面实施例提出了一种计算机可读存储介质,其上存储有区块链系统中防止出现硬分叉现象的程序,该区块链系统中防止出现硬分叉现象的程序被处理器执行时实现上述的区块链系统中防止出现硬分叉现象的方法。

为达到上述目的,本发明第三方面实施例提出了一种区块链系统中防止出现硬分叉现象的装置,包括:获取模块,用于每当所述区块链系统中生产节点进行当前区块生产时,获取所述区块链系统的当前在线节点总数n,并对所述生产节点生产的当前区块进行编号;解析模块,用于通过解析第m个区块的内容以获取第m个区块生产时所述区块链系统的在线节点总数nm,其中,m=u-i,u为当前区块的编号,i小于u且为预设值,u、i和nm均为正整数;控制模块,用于获取nm与n之间的差值,并判断所述差值是否小于n/2,其中,如果所述差值小于n/2,则控制当前生产节点继续进行当前区块生产;如果所述差值大于等于n/2,则控制当前生产节点停止当前区块生产,并通过当前生产节点全网广播所述区块链系统当前处于不可用状态。

根据本发明实施例的区块链系统中防止出现硬分叉现象的装置,获取模块,用于每当区块链系统中生产节点进行当前区块生产时,获取区块链系统的当前在线节点总数n,并对生产节点生产的当前区块进行编号;解析模块,用于通过解析第m个区块的内容以获取第m个区块生产时区块链系统的在线节点总数nm,其中,m=u-i,u为当前区块的编号,i小于u且为预设值,u、i和nm均为正整数;控制模块,用于获取nm与n之间的差值,并判断差值是否小于n/2,其中,如果差值小于n/2,则控制当前生产节点继续进行当前区块生产;如果差值大于等于n/2,则控制当前生产节点停止当前区块生产,并通过当前生产节点全网广播区块链系统当前处于不可用状态;从而实现通过监控区块链系统中在线节点数量,并根据在线节点数量判别系统升级状况,以及根据判别控制区块链系统状态,防止因区块链系统升级而导致的区块链系统硬分叉现象的发生。

另外,根据本发明上述实施例提出的区块链系统中防止出现硬分叉现象的装置还可以具有如下附加的技术特征:

可选地,所述获取模块还用于,当所述区块链系统中任意一个节点接收到新节点接入请求时,对新节点的连接地址进行监听以判断所述新节点是否连入所述区块链系统,并在所述新节点连入所述区块链系统时进行全网广播,以便所述生产节点对所述区块链系统的在线节点总数进行加1操作。

可选地,所述获取模块还用于,通过对所述区块链系统中每个节点的地址进行监听以判断所述区块链系统中是否存在下线节点,并在所述区块链系统中存在任意一个下线节点时进行全网广播,以便所述生产节点对所述区块链系统的在线节点总数进行减1操作。

可选地,当所述区块链系统中的任意一个节点接收到所述区块链系统当前处于不可用状态的广播时,进入休眠状态。

为达到上述目的,本发明第四方面实施例提出了一种区块链系统,包括上述的区块链系统中防止出现硬分叉现象的装置。

附图说明

图1为根据本发明实施例的区块链系统中防止出现硬分叉现象的方法的流程示意图;

图2为根据本发明实施例的在线节点统计方法的流程示意图;

图3为根据本发明实施例的区块链系统中防止出现硬分叉现象的装置的方框示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。

现有的区块链系统中,当区块链系统要进行功能扩展或者其他需求需要对组成的节点进行升级时,经常会导致区块链系统硬分叉现象的产生;根据本发明实施例的区块链系统中防止出现硬分叉现象的方法,首先,每当区块链系统中生产节点进行当前区块生产时,获取区块链系统的当前在线节点总数n,并对生产节点生产的当前区块进行编号;接着,通过解析第m个区块的内容以获取第m个区块生产时区块链系统的在线节点总数nm,其中,m=u-i,u为当前区块的编号,i小于u且为预设值,u、i和nm均为正整数;然后,获取nm与n之间的差值,并判断差值是否小于n/2;接着,如果差值小于n/2,则控制当前生产节点继续进行当前区块生产;然后,如果差值大于等于n/2,则控制当前生产节点停止当前区块生产,并通过当前生产节点全网广播区块链系统当前处于不可用状态;从而实现通过监控区块链系统中在线节点数量,并根据在线节点数量判别系统升级状况,以及根据判别控制区块链系统状态,防止因区块链系统升级而导致的区块链系统硬分叉现象的发生。

为了更好的理解上述技术方案,下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。

为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。

图1为根据本发明实施例提出的区块链系统中防止出现硬分叉现象的方法的流程示意图,如图1所示,该区块链系统中防止出现硬分叉现象的方法包括以下步骤:

s101,每当区块链系统中生产节点进行当前区块生产时,获取区块链系统的当前在线节点总数n,并对生产节点生产的当前区块进行编号。

其中,获取区块链系统的当前在线节点总数n的方式有多种,例如,通过区块链系统中任意节点每隔预设时间向自身连接的节点发送问询包,以问询自身连接节点的状态,接收到问询包之后,向发送节点返回自身节点编号,发送问询包的节点在接收到返回的节点编号之后,对该节点编号进行广播,以便区块链生产者根据广播的节点编号对当前在线的节点数量进行统计;或者,当有新节点接入系统时,与新节点直接相连的系统内节点对新节点进行监听(例如,每隔一段时间ping该新节点的ip地址),并将监听结果进行全网广播,以便区块链系统中的生产者对当前在线节点数量进行统计。

s102,通过解析第m个区块的内容以获取第m个区块生产时区块链系统的在线节点总数nm,其中,m=u-i,u为当前区块的编号,i小于u且为预设值,u、i和nm均为正整数。

也就是说,在生产节点对第u个区块进行生产时,解析第m个区块的内容,以获取第m个区块生产时区块链系统的在线节点总数nm;其中,m=u-i,u为当前区块的编号,i小于u且为预设值,u、i和nm均为正整数。

作为一种示例,当区块链系统中第u个区块对应的生产者产生时,或者当第u个区块的生产条件达到,即将对第u个区块进行生产时;第u个区块对应的生产者通过查询系统预设变量i,并根据该预设变量i和当前区块编号u计算获得m,以及根据m对第m个区块进行解析以获取第m个区块生产时区块链系统的在线节点总数nm;以便于后续根据nm以及当前区块链在线节点总数进行区块链系统状态的判断。

s103,获取nm与n之间的差值,并判断差值是否小于n/2。

也就是说,计算第m个区块生产时区块链系统的在线节点总数nm与区块链系统的当前在线节点总数n之间的差值,并判断该差值是否小于n/2。

s104,如果差值小于n/2,则控制当前生产节点继续进行当前区块生产。

s105,如果差值大于等于n/2,则控制当前生产节点停止当前区块生产,并通过当前生产节点全网广播区块链系统当前处于不可用状态。

也就是说,如果nm与n的差值小于n/2,控制当前生产节点继续进行当前区块生产;如果nm与n的差值大于n/2,控制当前生产节点停止当前区块生产,并通过当前生产节点全网广播区块链系统当前处于不可用状态;

作为一种示例,当该nm与n的差值大于n/2的区块链系统中的任意一个节点在接收到区块链系统当前处于不可用状态的广播之后,进入休眠状态停止区块的生产,以防止区块链分叉现象的发生。

综上所述,根据本发明实施例的区块链系统中防止出现硬分叉现象的方法,首先,每当区块链系统中生产节点进行当前区块生产时,获取区块链系统的当前在线节点总数n,并对生产节点生产的当前区块进行编号;接着,通过解析第m个区块的内容以获取第m个区块生产时区块链系统的在线节点总数nm,其中,m=u-i,u为当前区块的编号,i小于u且为预设值,u、i和nm均为正整数;然后,获取nm与n之间的差值,并判断差值是否小于n/2;接着,如果差值小于n/2,则控制当前生产节点继续进行当前区块生产;然后,如果差值大于等于n/2,则控制当前生产节点停止当前区块生产,并通过当前生产节点全网广播区块链系统当前处于不可用状态;从而实现通过监控区块链系统中在线节点数量,并根据在线节点数量判别系统升级状况,以及根据判别控制区块链系统状态,防止因区块链系统升级而导致的区块链系统硬分叉现象的发生。

如图2所示,在一些实施例中,本发明实施例提出的区块链系统中防止出现硬分叉现象的方法中,当有新节点需要接入区块链系统时,该区块链系统中防止出现硬分叉现象的方法还包括以下步骤:

s201,通过区块链系统中任意一个节点接收新节点的接入请求。

也就是说,在区块链系统构建完成之后,需要加入区块链系统的新节点可向区块链系统中任意一个节点发起接入请求以链入区块链系统。

s202,对新节点的连接地址进行监听以判断新节点是否连入区块链系统。

也就是说,区块链系统在接收到新节点发起的接入请求之后,根据接入请求对新节点的连接地址进行监听以判断新节点是否连入区块链系统。

其中,对新节点的连接地址进行监听的方式有多种。例如,与新节点直接连接的区块链系统中的节点每隔预设时间ping该新节点的连接ip地址,以判断该新节点是否与自身连接成功,并在操作成功之后,判断该新节点与自身连接成功,以及确认该新节点连入区块链系统;或者,首先,通过区块链系统中的任意一个节点每隔预设时间向与其连接的节点发送问询包,然后,接收到问询包的节点返回自身节点对应的编号和在线标识以对该问询包进行应答;接着,接收到节点发送的编号和在线标识的任意节点对该编号和在线标识进行全网广播,以便生产者在接收到该编号和在线标识之后对在线节点进行统计。

作为一种示例,还对区块链系统中每个节点的地址进行监听,以判断区块链系统中是否存在下线节点,并在区块链系统中存在任意一个下线节点时进行全网广播,以便生产节点对区块链系统的在线节点总数进行减1操作。

s203,当判断结果为是时,对新节点连入区块链系统的消息进行全网广播,以便生产节点对区块链系统的在线节点总数进行加1操作。

也就是说,当确定新节点连入区块链系统时,对新节点连入区块链系统的消息进行全网广播,以便当前生产节点在接收到该消息之后对在线节点总数进行加1,以对在线节点总数进行统计。

综上所述,本发明实施例提出的区块链系统中防止出现硬分叉现象的方法,首先,通过区块链系统中任意一个节点接收新节点的接入请求;接着,对新节点的连接地址进行监听以判断新节点是否连入区块链系统;然后,当判断结果为是时,对新节点连入区块链系统的消息进行全网广播,以便生产节点对区块链系统的在线节点总数进行加1操作;从而在区块链系统有新的节点加入时,对当前在线节点进行统计,便于后续区块链系统对当前状态的判断。

为了实现上述实施例,本发明实施例还提出了一种计算可读存储介质,其上存储有区块链系统中防止出现硬分叉现象的程序,该区块链系统中防止出现硬分叉现象的程序被处理器执行时实现上述的区块链系统中防止出现硬分叉现象的方法。

如图3所示,为了实现上述实施例,本发明实施例还提出了一种区块链系统中防止出现硬分叉现象的装置,包括:获取模块10,解析模块20和控制模块30。

获取模块10,用于每当区块链系统中生产节点进行当前区块生产时,获取区块链系统的当前在线节点总数n,并对生产节点生产的当前区块进行编号。

解析模块20,用于通过解析第m个区块的内容以获取第m个区块生产时区块链系统的在线节点总数nm,其中,m=u-i,u为当前区块的编号,i小于u且为预设值,u、i和nm均为正整数。

控制模块30,用于获取nm与n之间的差值,并判断差值是否小于n/2,其中,如果差值小于n/2,则控制当前生产节点继续进行当前区块生产;如果差值大于等于n/2,则控制当前生产节点停止当前区块生产,并通过当前生产节点全网广播区块链系统当前处于不可用状态。

综上所述,根据本发明实施例的区块链系统中防止出现硬分叉现象的装置,获取模块,用于每当区块链系统中生产节点进行当前区块生产时,获取区块链系统的当前在线节点总数n,并对生产节点生产的当前区块进行编号;解析模块,用于通过解析第m个区块的内容以获取第m个区块生产时区块链系统的在线节点总数nm,其中,m=u-i,u为当前区块的编号,i小于u且为预设值,u、i和nm均为正整数;控制模块,用于获取nm与n之间的差值,并判断差值是否小于n/2,其中,如果差值小于n/2,则控制当前生产节点继续进行当前区块生产;如果差值大于等于n/2,则控制当前生产节点停止当前区块生产,并通过当前生产节点全网广播区块链系统当前处于不可用状态;从而实现通过监控区块链系统中在线节点数量,并根据在线节点数量判别系统升级状况,以及根据判别控制区块链系统状态,防止因区块链系统升级而导致的区块链系统硬分叉现象的发生。

在一些实施例中,本发明实施例提出的区块链系统中防止出现硬分叉现象的装置中,获取模块10还用于,当区块链系统中任意一个节点接收到新节点接入请求时,对新节点的连接地址进行监听以判断新节点是否连入区块链系统,并在新节点连入区块链系统时进行全网广播,以便生产节点对区块链系统的在线节点总数进行加1操作。

在一些实施例中,本发明实施例提出的区块链系统中防止出现硬分叉现象的装置中,获取模块10还用于,通过对区块链系统中每个节点的地址进行监听以判断区块链系统中是否存在下线节点,并在区块链系统中存在任意一个下线节点时进行全网广播,以便生产节点对区块链系统的在线节点总数进行减1操作。

在一些实施例中,本发明实施例提出的区块链系统中防止出现硬分叉现象的装置中,当区块链系统中的任意一个节点接收到区块链系统当前处于不可用状态的广播时,进入休眠状态。

需要说明的是,上述关于图1中区块链系统中防止出现硬分叉现象的方法的描述同样适用于该区块链系统中防止出现硬分叉现象的装置,在此不做赘述。

为了实现上述实施例,本发明实施例还提出了一种区块链系统,包括上述的区块链系统中防止出现硬分叉现象的装置。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

应当注意的是,在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的部件或步骤。位于部件之前的单词“一”或“一个”不排除存在多个这样的部件。本发明可以借助于包括有若干不同部件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

在本发明的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。

在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

在本发明中,除非另有明确的规定和限定,第一特征在第二特征“上”或“下”可以是第一和第二特征直接接触,或第一和第二特征通过中间媒介间接接触。而且,第一特征在第二特征“之上”、“上方”和“上面”可是第一特征在第二特征正上方或斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”可以是第一特征在第二特征正下方或斜下方,或仅仅表示第一特征水平高度小于第二特征。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不应理解为必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

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