区块链监测方法及装置转让专利

申请号 : CN202111461828.3

文献号 : CN113868216B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 谢家贵李志平王佳慧陈玉英李悦

申请人 : 中国信息通信研究院

摘要 :

本申请实施例中提供了一种区块链监测方法及装置,通过获取区块链每个节点在当前周期的第一节点特征,并获取每个节点在当前周期的上一周期的第二节点特征;根据第一节点特征预测第一状态结果,根据第二节点特征预测第二状态结果;其中,节点的状态结果反映了当前周期内区块链中是否存在异常节点,如果存在异常节点,则状态结果还反映了该节点是否为异常节点;根据每个节点的第一状态结果和第二状态结果,从区块链的多个节点中确定目标节点,并针对目标节点进行监测。本申请根据节点特征预测节点状态,并根据节点状态确定出目标节点,最后对目标节点进行监测,从而通过对目标节点的监测,及时发现区块链个别节点的异常问题。

权利要求 :

1.一种区块链监测方法,其特征在于,所述方法包括:根据区块链监测的锚点时刻,获取区块链的每个节点在当前周期的第一节点特征,并获取每个节点在所述当前周期的上一周期的第二节点特征;

将每个节点的第一节点特征输入第一分类模型,获得所述第一分类模型为每个节点预测的第一状态结果,每个节点的第一状态结果用于表征:在所述当前周期内所述区块链中是否存在异常节点,如果存在异常节点,则第一状态结果还用于表征:第一状态结果对应的节点是否为异常节点;

将每个节点的第二节点特征输入第二分类模型,获得所述第二分类模型为每个节点预测的第二状态结果,每个节点的第二状态结果用于表征:在所述当前周期内所述区块链中是否存在异常节点,如果存在异常节点,则第二状态结果还用于表征:第二状态结果对应的节点是否为异常节点;

根据每个节点的第一状态结果和第二状态结果,从所述区块链的多个节点中确定目标节点,并针对所述目标节点进行监测。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:训练所述第一分类模型和所述第二分类模型;

所述第一分类模型和所述第二分类模型的训练过程包括:周期性地采集所述区块链的每个节点的节点特征,并根据所述区块链的监测时间和每个节点特征的采集时间,判断每个节点特征是否属于所述监测时间内的节点特征,将属于所述监测时间内的节点特征作为监测时特征,将属于所述监测时间之前的节点特征作为监测前特征;

根据所述监测时间对应的监测结果,为每个节点的监测时特征和监测前特征添加状态标签,所述状态标签用于表征:在所述监测时间内所述区块链是否存在异常节点,如果存在异常节点,则状态标签还用于表征:监测时特征和监测前特征对应的节点是否为异常节点;

针对每个节点的监测时特征和监测前特征,将所述监测时特征输入所述第一分类模型,获得所述第一分类模型预测的第三状态结果,将所述监测前特征输入所述第二分类模型,获得所述第二分类模型预测的第四状态结果;

根据所述第三状态结果、所述第四状态结果、所述监测时特征的状态标签以及所述监测前特征的状态标签,对所述第一分类模型和所述第二分类模型进行更新。

3.根据权利要求2所述的方法,其特征在于,所述根据所述第三状态结果、所述第四状态结果、所述监测时特征的状态标签以及所述监测前特征的状态标签,对所述第一分类模型和所述第二分类模型进行更新,包括:根据所述第三状态结果和所述监测时特征的状态标签,确定第一损失值;

根据所述第四状态结果和所述监测前特征的状态标签,确定第二损失值;

根据所述第三状态结果和所述第四状态结果,确定第三损失值;

根据所述第一损失值、所述第二损失值以及所述第三损失值,确定总损失值,并根据所述总损失值,对所述第一分类模型和所述第二分类模型进行更新。

4.根据权利要求1所述的方法,其特征在于,所述根据每个节点的第一状态结果和第二状态结果,从所述区块链的多个节点中确定目标节点,并针对所述目标节点进行监测,包括:

根据每个节点的第一状态结果和第二状态结果,判断所述区块链的所有节点中是否存在第一目标节点;其中,所述第一目标节点的第一状态结果和第二状态结果均表征:所述当前周期内所述区块链中存在异常节点,且所述第一目标节点是异常节点;

在所述区块链的所有节点中存在第一目标节点的情况下,将所述区块链的所有节点确定为目标节点,并针对所述目标节点进行监测。

5.根据权利要求4所述的方法,其特征在于,所述根据每个节点的第一状态结果和第二状态结果,从所述区块链的多个节点中确定目标节点,并针对所述目标节点进行监测,还包括:

在所述区块链的所有节点中不存在第一目标节点的情况下,根据每个节点的第一状态结果和第二状态结果,判断所述区块链的所有节点中是否存在第二目标节点;其中,所述第二目标节点的第一状态结果和第二状态结果均表征:所述当前周期内所述区块链中不存在异常节点;

对所述第二目标节点各自的新增区块数据和共识情况进行监测;

根据每个节点的第一状态结果和第二状态结果,判断所述区块链的所有节点中是否存在第三目标节点;其中,所述第三目标节点的第一状态结果和第二状态结果两者中的一者表征:所述当前周期内所述区块链中存在异常节点,且所述第三目标节点是异常节点;

以所述第二目标节点的新增区块数据为基准,监测所述第三目标节点的新增区块数据是否异常。

6.根据权利要求5所述的方法,其特征在于,所述根据每个节点的第一状态结果和第二状态结果,从所述区块链的多个节点中确定目标节点,并针对所述目标节点进行监测,还包括:

根据每个节点的第一状态结果和第二状态结果,判断所述区块链的所有节点中是否存在第四目标节点;其中,所述第四目标节点的第一状态结果和第二状态结果两者中的至少一者表征:所述当前周期内所述区块链中存在异常节点,且所述第四目标节点不是异常节点;

以所述第二目标节点的新增区块数据为基准,监测所述第四目标节点的新增区块数据是否异常。

7.根据权利要求1所述的方法,其特征在于,所述针对所述目标节点进行监测,包括:向每个目标节点发送锚点时刻,使得每个目标节点根据所述锚点时刻,返回在所述锚点时刻之后的新增区块数据,并返回所述新增区块数据对应的第一出块速度;

根据区块链网络时延、区块链共识周期以及每个目标节点的第一出块速度,确定偏离阈值;

比较每个目标节点的新增区块数据之间是否存在差异,确定存在差异的新增区块数据;

根据存在差异的新增区块数据各自对应的区块高度,确定区块高度差值;

根据所述区块高度差值和所述偏离阈值,确定所述目标节点之间的数据一致性是否存在异常。

8.根据权利要求7所述的方法,其特征在于,所述根据区块链网络时延、区块链共识周期以及每个目标节点的第一出块速度,确定偏离阈值,包括:根据每个目标节点的第一出块速度,确定第二出块速度;

将所述第二出块速度和区块链共识周期两者相加的和,除以区块链共识周期,得到比值,并根据所述比值确定偏离阈值。

9.根据权利要求1所述的方法,其特征在于,所述针对所述目标节点进行监测,包括:向每个目标节点发送携带有锚点时刻的日志解析请求,使得每个目标节点根据所述锚点时刻,返回在所述锚点时刻之后的第一日志记录;其中,所述第一日志记录包括:目标节点的共识消息接收记录、共识消息发送记录以及视图切换记录;

针对每个目标节点的每个区块,判断该区块对应的共识消息接收记录是否达到预设阈值;

在所述区块对应的共识消息接收记录达到预设阈值的情况下,对于每条共识消息接收记录,确定该条共识消息接收记录的发送节点,并判断所述发送节点的相应区块是否对应有相关的共识消息发送记录,如果存在,则确定该条共识消息接收记录是正确的;

在每个目标节点的每个区块对应的所有共识消息接收记录均正确的情况下,确定所述目标节点的共识情况正常。

10.一种区块链监测装置,其特征在于,所述装置包括:节点特征获取模块,用于根据区块链监测的锚点时刻,获取区块链的每个节点在当前周期的第一节点特征,并获取每个节点在所述当前周期的上一周期的第二节点特征;

第一状态结果获取模块,用于将每个节点的第一节点特征输入第一分类模型,获得所述第一分类模型为每个节点预测的第一状态结果,每个节点的第一状态结果用于表征:在所述当前周期内所述区块链中是否存在异常节点,如果存在异常节点,则第一状态结果还用于表征:第一状态结果对应的节点是否为异常节点;

第二状态结果获取模块,用于将每个节点的第二节点特征输入第二分类模型,获得所述第二分类模型为每个节点预测的第二状态结果,每个节点的第二状态结果用于表征:在所述当前周期内所述区块链中是否存在异常节点,如果存在异常节点,则第二状态结果还用于表征:第二状态结果对应的节点是否为异常节点;

节点监测模块,用于根据每个节点的第一状态结果和第二状态结果,从所述区块链的多个节点中确定目标节点,并针对所述目标节点进行监测。

说明书 :

区块链监测方法及装置

技术领域

[0001] 本申请涉及区块链技术领域,具体地,涉及一种区块链监测方法及装置。

背景技术

[0002] 区块链技术作为一种分布式账本技术,其技术优势主要体现于数据信息不可篡改、数据信息可溯源、分布式去中心化、无须信任系统等方面,区块链技术目前已经在金融、
健康医疗、供应链、资产管理、互联网电商等诸多领域得以应用。
[0003] 随着区块链节点的增多以及链上区块的增多,各节点间的一致性校验难度也会随之增大。另外,由于共识算法本身的容错性,在节点过多的情况下,难以及时发现个别节点
的异常问题。例如CN112015705A公开了一种基于深度学习的区块链日志监测方法,可以检
测区块链系统是否异常。
[0004] 现有技术中,CN113194001A公开了一种区块链网络节点监控方法,可以实现对单个节点的异常检查。本提案的目的在于提供一种不同的监测区块链单个节点是否异常的方
案。

发明内容

[0005] 本申请实施例中提供了一种区块链监测方法及装置,可以及时发现区块链个别节点的异常问题。
[0006] 根据本申请实施例的第一个方面,提供了一种区块链监测方法,所述方法包括:
[0007] 根据区块链监测的锚点时刻,获取区块链的每个节点在当前周期的第一节点特征,并获取每个节点在所述当前周期的上一周期的第二节点特征;
[0008] 将每个节点的第一节点特征输入第一分类模型,获得所述第一分类模型为每个节点预测的第一状态结果,每个节点的第一状态结果用于表征:在所述当前周期内所述区块
链中是否存在异常节点,如果存在异常节点,则第一状态结果对应的节点是否为异常节点;
[0009] 将每个节点的第二节点特征输入第二分类模型,获得所述第二分类模型为每个节点预测的第二状态结果,每个节点的第二状态结果用于表征:在所述当前周期内所述区块
链中是否存在异常节点,如果存在异常节点,则第二状态结果对应的节点是否为异常节点;
[0010] 根据每个节点的第一状态结果和第二状态结果,从所述区块链的多个节点中确定目标节点,并针对所述目标节点进行监测。
[0011] 根据本申请实施例的第二个方面,提供了一种区块链监测装置,所述装置包括:
[0012] 节点特征获取模块,用于根据区块链监测的锚点时刻,获取区块链的每个节点在当前周期的第一节点特征,并获取每个节点在所述当前周期的上一周期的第二节点特征;
[0013] 第一状态结果获取模块,用于将每个节点的第一节点特征输入第一分类模型,获得所述第一分类模型为每个节点预测的第一状态结果,每个节点的第一状态结果用于表
征:在所述当前周期内所述区块链中是否存在异常节点,如果存在异常节点,则第一状态结
果对应的节点是否为异常节点;
[0014] 第二状态结果获取模块,用于将每个节点的第二节点特征输入第二分类模型,获得所述第二分类模型为每个节点预测的第二状态结果,每个节点的第二状态结果用于表
征:在所述当前周期内所述区块链中是否存在异常节点,如果存在异常节点,则第二状态结
果对应的节点是否为异常节点;
[0015] 节点监测模块,用于根据每个节点的第一状态结果和第二状态结果,从所述区块链的多个节点中确定目标节点,并针对所述目标节点进行监测。
[0016] 采用本申请实施例中提供的区块链监测方法,通过获取区块链每个节点在当前周期的第一节点特征,并获取每个节点在当前周期的上一周期的第二节点特征。将第一节点
特征输入第一分类模型,以获取第一状态结果。将第二节点特征输入第二分类模型,以获取
第二状态结果。其中,节点的第一状态结果反映了当前周期内区块链中是否存在异常节点,
如果存在异常节点,则第一状态结果还反映了该节点是否为异常节点。同样地,节点的第二
状态结果反映了当前周期内区块链中是否存在异常节点,如果存在异常节点,则第二状态
结果还反映了该节点是否为异常节点。最后,根据每个节点的第一状态结果和第二状态结
果,从区块链的多个节点中确定目标节点,并针对目标节点进行监测。可见,本申请根据节
点特征预测节点状态,并根据节点状态确定出目标节点,最后对目标节点进行监测,从而通
过对目标节点的监测,及时发现区块链个别节点的异常问题。

附图说明

[0017] 此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0018] 图1是本申请一实施例提出的区块链监测方法的流程示意图;
[0019] 图2是本申请一实施例提供的模型训练过程示意图;
[0020] 图3是本申请一实施例提出的目标节点监测流程示意图;
[0021] 图4是本申请另一实施例提出的目标节点监测流程示意图;
[0022] 图5是本申请又一实施例提出的目标节点监测流程示意图;
[0023] 图6是本申请一实施例提出的区块链监测装置的结构示意图。

具体实施方式

[0024] 在实现本申请的过程中,发明人发现,随着区块链节点的增多以及链上区块的增多,各节点间的一致性校验难度也会随之增大。另外,由于共识算法本身的容错性,在节点
过多的情况下,难以及时发现个别节点的异常问题。
[0025] 针对上述问题,本申请实施例中提供了一种区块链监测方法,根据节点特征预测节点状态,并根据节点状态确定出目标节点,最后对目标节点进行监测,从而通过对目标节
点的监测,及时发现区块链个别节点的异常问题。
[0026] 本申请实施例中的方案可以采用各种计算机语言实现,例如,面向对象的程序设计语言Java和直译式脚本语言JavaScript等。
[0027] 为了使本申请实施例中的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施
例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本申请中的实施例及实
施例中的特征可以相互组合。
[0028] 参考图1,图1是本申请一实施例提出的区块链监测方法的流程示意图。如图1所示,区块链监测方法包括以下步骤:
[0029] 步骤S110:根据区块链监测的锚点时刻,获取区块链的每个节点在当前周期的第一节点特征,并获取每个节点在当前周期的上一周期的第二节点特征。
[0030] 本申请中,在一些具体实施方式中,区块链的监测设备可以按照预设时间/周期,自动触发监测过程,区块链的监测设备也可以被用户手动触发监测过程,而每次触发监测
的时间点作为锚点时刻。每当时间到达锚点时刻时,会获取每个节点在当前周期的第一节
点特征,并获取每个节点在当前周期的上一周期的第二节点特征。本申请中,上一周期是在
锚点时刻之前且距离锚点时刻最近的一个周期。本申请中,通过在锚点时刻获取第一节点
特征和第二节点特征,从而可以通过下述步骤S120至S140确定出目标节点,并对目标节点
进行监测。
[0031] 本申请中,可以周期性地获取每个节点的节点特征,例如每1分钟获取一次节点特征。为便于说明,本申请将当前周期的节点特征简称为第一节点特征,将当前周期的上一周
期的节点特征简称为第二节点特征。
[0032] 在一些具体实施方式中,区块链监测方法的执行主体可以是监测设备中的预设脚本。预设脚本调用区块链的每个节点的目标智能合约,使得每个节点通过执行目标智能合
约,从而采集自身的节点特征,并将采集的节点特征返回给监测设备。
[0033] 在一些具体实施方式中,节点特征包括:节点属性特征、节点行为特征以及节点性能特征。其中,节点属性特征包括节点创建时间、节点类型(如是否是共识节点)。节点行为
特征包括在对应周期内的交易频次、平均交易金额、交易金额中位数、历史异常记录等。节
点性能特征包括节点在对应周期内的出块速度。此外,节点特征还包括采集时间,例如可以
将节点特征对应周期的中间时间点,作为节点特征的采集时间。对节点属性特征、节点行为
特征、节点性能特征以及采集时间等四者进行拼接,从而得到节点特征。
[0034] 步骤S120:将每个节点的第一节点特征输入第一分类模型,获得第一分类模型为每个节点预测的第一状态结果,每个节点的第一状态结果用于表征:在当前周期内区块链
中是否存在异常节点,如果存在异常节点,则第一状态结果对应的节点是否为异常节点。
[0035] 在一些具体实施方式中,将一个节点的第一节点特征输入第一分类模型后,第一分类模型输出以下三种结果中的一种:normal、abnormal‑1、abnormal‑2。其中,如果第一分
类模型输出的第一状态结果为normal,则表示第一分类模型根据该节点的第一节点特征预
测出:区块链中不存在异常节点。如果第一分类模型输出的第一状态结果为abnormal‑1,则
表示第一分类模型根据该节点的第一节点特征预测出:区块链中存在异常节点,但是该节
点不是异常节点。如果第一分类模型输出的第一状态结果为abnormal‑2,则表示第一分类
模型根据该节点的第一节点特征预测出:区块链中存在异常节点,且该节点是异常节点。
[0036] 对于当前周期,可以建立第一状态结果集合,第一状态结果集合包括三个子集,分别为第一子集、第二子集以及第三子集。如果一个节点第一状态结果为normal,则将该节点
的节点标识记录至第一子集。如果一个节点第一状态结果为abnormal‑1,则将该节点的节
点标识记录至第二子集。如果一个节点第一状态结果为abnormal‑2,则将该节点的节点标
识记录至第三子集。
[0037] 步骤S130:将每个节点的第二节点特征输入第二分类模型,获得第二分类模型为每个节点预测的第二状态结果,每个节点的第二状态结果用于表征:在当前周期内区块链
中是否存在异常节点,如果存在异常节点,则第二状态结果对应的节点是否为异常节点。
[0038] 在一些具体实施方式中,将一个节点的第二节点特征输入第二分类模型后,第二分类模型输出以下三种结果中的一种:normal、abnormal‑1、abnormal‑2。其中,如果第二分
类模型输出的第二状态结果为normal,则表示第二分类模型根据该节点的第二节点特征预
测出:区块链中不存在异常节点。如果第二分类模型输出的第二状态结果为abnormal‑1,则
表示第二分类模型根据该节点的第二节点特征预测出:区块链中存在异常节点,但是该节
点不是异常节点。如果第二分类模型输出的第二状态结果为abnormal‑2,则表示第二分类
模型根据该节点的第二节点特征预测出:区块链中存在异常节点,且该节点是异常节点。
[0039] 对于当前周期,可以建立第二状态结果集合,第二状态结果集合包括三个子集,分别为第四子集、第五子集以及第六子集。如果一个节点第二状态结果为normal,则将该节点
的节点标识记录至第四子集。如果一个节点第二状态结果为abnormal‑1,则将该节点的节
点标识记录至第五子集。如果一个节点第二状态结果为abnormal‑2,则将该节点的节点标
识记录至第六子集。
[0040] 步骤S140:根据每个节点的第一状态结果和第二状态结果,从区块链的多个节点中确定目标节点,并针对目标节点进行监测。
[0041] 本申请中,根据节点特征预测节点状态,并根据节点状态确定出目标节点,最后对目标节点进行监测,从而通过对目标节点的监测,及时发现区块链个别节点的异常问题。
[0042] 在一些具体实施方式中,可以预先训练第一分类模型和第二分类模型,然后将训练后的第一分类模型应用于步骤S120,将训练后的第二分类模型应用于步骤S130中。
[0043] 参考图2,图2是本申请一实施例提供的模型训练过程示意图。如图2所示,第一分类模型和第二分类模型的训练过程包括以下步骤:
[0044] 步骤S001:周期性地采集区块链的每个节点的节点特征,并根据区块链的监测时间和每个节点特征的采集时间,判断每个节点特征是否属于监测时间内的节点特征,将属
于监测时间内的节点特征作为监测时特征,将属于监测时间之前的节点特征作为监测前特
征。
[0045] 步骤S002:根据监测时间对应的监测结果,为每个节点的监测时特征和监测前特征添加状态标签,状态标签用于表征:在监测时间内区块链是否存在异常节点,如果存在异
常节点,则监测时特征和监测前特征对应的节点是否为异常节点。
[0046] 本申请中,在训练第一分类模型和第二分类模型之前,或者在训练第一分类模型和第二分类模型期间,用户可以手动地触发区块链监测流程。因此,某一周期采集的节点特
征,可能恰好是在监测时间内采集的节点特征。
[0047] 如前实时,节点特征包括节点属性特征、节点行为特征、节点性能特征以及采集时间T1。如果某一节点特征中的T1处于监测时间内,则将该节点特征标记为监测时特征,并根
据该次监测的结果(即区块链系统中是否存在异常节点,异常节点是否为当前节点),为监
测时特征进一步打上标签。其中,如果该次监测过程的结果为区块链系统中没有异常节点,
则为监测时特征打上表示正常的标签,例如normal。如果该次监测过程的结果为区块链系
统中有异常节点,但异常节点不是当前节点,则可以为监测时特征打上表示普通异常的标
签,例如abnormal‑1。如果该次监测过程的结果为区块链系统中有异常节点,并且异常节点
是当前节点,则可以为监测时特征打上表示严重异常的标签,例如abnormal‑2。
[0048] 本申请中,如果某一节点特征中的T1没有处于监测时间之内,但是位于该次监测过程之前,且与该次监测过程的时间间隔小于预设时长,则将该节点特征标记为监测前特
征,并根据该次监测的结果(即区块链系统中是否存在异常节点,异常节点是否为当前节
点),为监测前特征进一步打上标签。
[0049] 步骤S003:针对每个节点的监测时特征和监测前特征,将监测时特征输入第一分类模型,获得第一分类模型预测的第三状态结果,将监测前特征输入第二分类模型,获得第
二分类模型预测的第四状态结果。
[0050] 其中,第一分类模型可以选用随机森林算法模型、神经网络模型等,本申请对于第一分类模型的类型不做限定。
[0051] 步骤S004:根据第三状态结果、第四状态结果、监测时特征的状态标签以及监测前特征的状态标签,对第一分类模型和第二分类模型进行更新。
[0052] 在一些具体实施方式中,为了对模型进行更新,具体可以根据第三状态结果和监测时特征的状态标签,确定第一损失值;根据第四状态结果和监测前特征的状态标签,确定
第二损失值;根据第三状态结果和第四状态结果,确定第三损失值;根据第一损失值、第二
损失值以及第三损失值,确定总损失值,并根据总损失值,对第一分类模型和第二分类模型
进行更新。
[0053] 其中,在确定第一损失值时,可以将第三状态结果和监测时特征的状态标签两者之间的欧式距离,作为第一损失值。在确定第二损失值时,可以将第四状态结果和监测前特
征的状态标签两者之间的欧式距离,作为第二损失值。在确定第三损失值时,可以将第三状
态结果和第四状态结果两者之间的欧式距离,作为第三损失值。最后计算第一损失值、第二
损失值以及第三损失值的加权平均值,将加权平均值作为总损失值。
[0054] 参考图3,在一些具体实施方式中,步骤S140可以包括以下子步骤:
[0055] 子步骤S141:根据每个节点的第一状态结果和第二状态结果,判断区块链的所有节点中是否存在第一目标节点;其中,第一目标节点的第一状态结果和第二状态结果均表
征:当前周期内区块链中存在异常节点,且第一目标节点是异常节点。
[0056] 具体实现时,可以判断前述第一状态结果集合中的第三子集与前述第二状态结果集合中的第六子集之间是否存在相同的节点标识。简言之,判断第三子集和第六子集之间
是否存在相同的节点标识。如果存在,则将该节点标识对应的节点作为第一目标节点。
[0057] 子步骤S142:在区块链的节点中存在第一目标节点的情况下,将区块链的所有节点确定为目标节点,并针对目标节点进行监测。
[0058] 本申请中,如果第三子集和第六子集中记录有同样的节点标识,则说明相应节点同时被第一分类模型和第二分类模型预测为异常节点,从而说明区块链可能发生严重异
常。因此,可以将区块链的所有节点确定为目标节点,并针对目标节点进行监测。
[0059] 在一些可选实施例中,如果存在第一目标节点,且当前没有用户主动触发监测指令,距离下一次自动监测的时间点的时间间隔大于时间阈值T0’,则将区块链的所有节点确
定为目标节点,并针对目标节点进行监测。
[0060] 继续参考图3,步骤S140还可以包括以下子步骤:
[0061] 子步骤S143:在区块链的所有节点中不存在第一目标节点的情况下,根据每个节点的第一状态结果和第二状态结果,判断区块链的所有节点中是否存在第二目标节点。其
中,第二目标节点的第一状态结果和第二状态结果均表征:当前周期内所述区块链中不存
在异常节点。
[0062] 具体实现时,可以判断前述第一状态结果集合中的第一子集与前述第二状态结果集合中的第四子集之间是否存在相同的节点标识。简言之,判断第一子集和第四子集之间
是否存在相同的节点标识。如果存在,则将该节点标识对应的节点作为第二目标节点。
[0063] 子步骤S144:对第二目标节点各自的新增区块数据和共识情况进行监测。
[0064] 具体监测方式,请参见下文,为避免重复,此处暂不详细说明。
[0065] 子步骤S145:根据每个节点的第一状态结果和第二状态结果,判断区块链的所有节点中是否存在第三目标节点;其中,第三目标节点的第一状态结果和第二状态结果两者
中的一者表征:当前周期内区块链中存在异常节点,且第三目标节点是异常节点。
[0066] 具体实现时,可以将前述第一状态结果集合中的第三子集中记录的节点标识对应的节点,作为第三目标节点。同样地,也将前述第二状态结果集合中的第六子集中记录的节
点标识对应的节点,作为第三目标节点。简言之,将第三子集中记录的节点标识对应的节
点,作为第三目标节点。将第六子集中记录的节点标识对应的节点,也作为第三目标节点。
[0067] 子步骤S146:以第二目标节点的新增区块数据为基准,监测第三目标节点的新增区块数据是否异常。
[0068] 本申请中,第二目标节点对应的第一状态结果和第二状态结果均为normal,第二目标节点被第一分类模型和第二分类模型均预测为正常节点。因此本申请中,以第二目标
节点的新增区块数据为基准,对第三目标节点的新增区块数据进行监测,可以预测第三目
标节点的新增区块数据是否出现异常。
[0069] 继续参考图3,步骤S140还可以包括以下子步骤:
[0070] 子步骤S147:根据每个节点的第一状态结果和第二状态结果,判断区块链的所有节点中是否存在第四目标节点;其中,第四目标节点的第一状态结果和第二状态结果两者
中的至少一者表征:当前周期内区块链中存在异常节点,且第四目标节点不是异常节点。
[0071] 子步骤S148:以第二目标节点的新增区块数据为基准,监测第四目标节点的新增区块数据是否异常。
[0072] 具体实现时,可以首先将同时记录在第二子集和第五子集中的节点标识所对应的节点,作为第四目标节点,并第二目标节点的新增区块数据为基准,对第四目标节点的新增
区块数据进行监测。
[0073] 然后将仅记录在第二子集或第五子集中的节点标识所对应的节点,作为第四目标节点,再将第二目标节点的新增区块数据为基准,对第四目标节点的新增区块数据进行监
测。
[0074] 在上述子步骤S141至子步骤S148中,一旦发现异常,则通过可视化监测工具显示异常信息,或将用于显示异常信息的页面文件的url地址推送给预设通讯终端。
[0075] 在上述子步骤S141至子步骤S148中,按照出现异常的可能性从高到低的顺序依次进行测试,这样,每一个小步骤的处理量是比较小的,可以更加及时地发现出现异常可能较
大的节点是否真的存在异常。
[0076] 参考图4,在一些具体实施方式中,对目标节点进行监测的过程具体包括:
[0077] 步骤S410:向每个目标节点发送锚点时刻,使得每个目标节点根据锚点时刻,返回在锚点时刻之后的新增区块数据,并返回新增区块数据对应的第一出块速度。
[0078] 步骤S420:根据区块链网络时延、区块链共识周期以及每个目标节点的第一出块速度,确定偏离阈值。
[0079] 具体地,可以根据每个目标节点的第一出块速度,确定第二出块速度;将第二出块速度和区块链共识周期两者相加的和,除以区块链共识周期,得到比值,并根据该比值确定
偏离阈值。
[0080] 步骤S430:比较每个目标节点的新增区块数据之间是否存在差异,确定存在差异的新增区块数据。
[0081] 步骤S440:根据存在差异的新增区块数据各自对应的区块高度,确定区块高度差值。
[0082] 步骤S450:根据区块高度差值和偏离阈值,确定目标节点之间的数据一致性是否存在异常。
[0083] 具体实现时,监测设备包括显示模块,显示模块实时显示区块链的各项监测数据。监测设备每次执行监测任务之前,可以记录一个锚点时刻(即当前时间),并将待测区块链
在锚点时刻的显示信息记录为第一信息,第一信息例如可以包括当前的区块高度、用户数
量和用户信息、交易总量等,甚至还可以包括每个区块的交易数量等其他信息。
[0084] 针对构建的每个监测场景,获取该监测场景对应的预期变化信息,所述预期变化信息例如可以包括用户数量变化信息、交易变化信息、区块变化信息等。获取所述区块链当
前的显示信息作为第二信息,将第二信息与第一信息进行对比,确定第二信息相对于第一
信息的变化信息,判断所确定的变化信息是否与所述预期变化信息一致,如果是一致的,则
判定区块链系统功能正确,否则,呈现异常部分。
[0085] 然后,通过执行上述步骤S410至步骤S450,对节点之间的一致性进行监测。具体地,监测设备可以将锚点时刻作为参数传递给每个节点的预设接口,并调用该预设接口,获
得该节点的第一出块速度和新增区块数据。
[0086] 为便于理解,下文将以区块链中的节点i的预设接口被调用后的处理流程为例进行介绍。实际上,区块链中的每个区块链节点在预设接口被调用后的处理流程是基本一致
的。
[0087] 区块链节点i将锚点时刻至当前时刻之间的时段确定为目标时段,根据日志文件确定本节点在目标时段内的出块速度,其中,出块速度可以通过以下方式获得:针对本节点
在目标时段内打包的每个区块,获取本节点从开始打包该区块到该区块打包完成的第一时
长,对所获取的第一时长求平均,或者取所获取的各第一时长的最大值,作为第一出块速
度。
[0088] 区块链节点i将本节点的第一出块速度以及基于锚点时间过滤出的新增区块数据返回给监测设备。
[0089] 其中,新增区块数据包括本节点上的区块链副本从锚点时刻开始每个新增区块的区块高度seq、新增区块中的交易数量tx_count以及新增区块对应的交易总量total_
count。前述三者seq、tx_count以及total_count是一一对应的。这里,新增区块数据可以以
数组的形式呈现,即新增区块数据数组。新增区块数据数组中的每个元素为,表示区块链节
点i在目标时段内新增的区块j的区块高度为seq_j,交易数量为tx_count_j,区块链节点i
上的区块链副本从第一个区块到区块j的交易总量为total_count_j。
[0090] 监测设备对多个第一出块速度取平均或者取最大值,将获得的结果确定为第二出块速度。监测设备通过ping命令获取区块链系统的网络时延,然后根据第二出块速度、网络
时延以及共识周期得到偏离阈值。具体地,偏离阈值通过以下计算式获得:[(第二出块速度
+网络时延)/共识周期]+1,其中,[]表示向上取整。
[0091] 监测设备根据偏离阈值以及各区块链节点的新增区块数据数组,判断各区块链节点在目标时段(即监测过程)中新增的区块是否一致、是否完整以及是否连续。具体判断过
程如下:
[0092] 假设区块链中的区块链节点为n个,对于区块链中在目标时段内新增的每个区块j,针对该区块j生成一个cache数组j,对比第1个区块链节点和第2个区块链节点两者的新
增区块数据数组中与区块j对应的数据元素是否相同,若相同,则将已对比的区块j的数据
元素放入cache数组j,此时,cache数组j中存在一个数据元素(即一条区块信息);若不同,
则将第1个区块链节点和第2个区块链节点各自的新增区块数据数组中、与区块j对应的数
据元素均添加到cache数组j中,此时,cache数组j中存在两个数据元素(即两条区块信息)。
[0093] 依次将剩余的每个区块链节点的新增区块数据数组中对应于区块j的数据元素作为目标元素,将目标元素与cache数组j中的数据元素比较,若目标元素已经存在于cache数
组j中,则不对目标元素进行处理;若目标元素没有存在于cache数组j中,则将目标元素添
加到cache数组j中。
[0094] 当完成所有区块链节点的新增区块数据数组中对应于区块j的数据元素的对比之后,如果cache数组j中仅存在一个数据元素,表示各区块链节点在目标时段内新增的区块j
是一致的;如果cache数组j存在的数据元素数量大于1,表示存在至少一个区块链节点在目
标时段内新增的区块j与其他区块链节点不一致。
[0095] 对于cache数组j中不一致的区块信息/数据元素,判断各数据元素中的seq的差值是否小于所述偏离阈值,若小于所述偏离阈值,则确定各数据元素是一致的,否则确定各数
据元素是不一致的。具体地,如果cache数组j中存在两个区块信息,则计算两个区块信息各
自对应的区块高度seq的差值,并判断该差值是否小于所述偏离阈值。如果cache数组j中存
在三个或更多个区块信息,则计算每两个区块信息各自对应的区块高度seq的差值,然后从
所有差值中选择出最大差值,并判断最大差值是否小于所述偏离阈值。
[0096] 值得说明的是,本申请中,理论上seq差值应该是0,因为各区块链节点上在同一时段新增区块应该是相同的。但是由于网络时延,各区块链节点在同一时段内新增区块可以
有一定差异,但这个差异不能过大。因此,本申请根据网络时延预先确定出了偏离阈值,并
根据偏离阈值来判断节点之间的一致性,可以提升判断结果的可靠性,避免误判。
[0097] 参考图5,在一些具体实施方式中,对目标节点进行监测的过程具体包括:
[0098] 步骤S510:向每个目标节点发送携带有锚点时刻的日志解析请求,使得每个目标节点根据所述锚点时刻,返回在所述锚点时刻之后的第一日志记录;其中,第一日志记录包
括:目标节点的共识消息接收记录、共识消息发送记录以及视图切换记录。
[0099] 步骤S520:针对每个目标节点的每个区块,判断该区块对应的共识消息接收记录是否达到预设阈值。
[0100] 步骤S530:在区块对应的共识消息接收记录达到预设阈值的情况下,对于每条共识消息接收记录,确定该条共识消息接收记录的发送节点,并判断所述发送节点的相应区
块是否对应有相关的共识消息发送记录,如果存在,则确定该条共识消息接收记录是正确
的。
[0101] 步骤S540:在每个目标节点的每个区块对应的所有共识消息接收记录均正确的情况下,确定目标节点的共识情况正常。
[0102] 具体实现时,如前实时,监测设备包括显示模块,显示模块实时显示区块链的各项监测数据。监测设备每次执行监测任务之前,可以记录一个锚点时刻(即当前时间)。
[0103] 监测设备通过脚本服务向区块链的每个区块链节点发送日志解析请求,日志解析请求携带有锚点时刻。区块链节点收到日志解析请求,获取其中的锚点时刻,从本节点中筛
选出所述锚点时刻之后的第一日志记录,并按照共识阶段关键字(包括pre‑prepare、
prepare和commit)从第一日志记录中过滤出每个共识阶段的共识消息接收记录、共识消息
发送记录以及视图切换记录。其中,每条共识消息接收记录或共识消息发送记录均包括发
送节点地址和接收节点地址。区块链节点将过滤出的第一日志记录返回给监测设备。
[0104] 监测设备对于每条第一日志记录,从本地文件中查找其所属区块链节点对应的节点文件,进而从该节点文件中查找第一文件。其中,第一文件是以该第一日志记录所属共识
过程的区块高度命名的文件。若查找到,则将该第一日志记录写入该第一文件。
[0105] 监测设备通过脚本服务获得本地文件,遍历本地文件中的每个节点文件。对于每个节点文件,遍历节点文件中的区块文件。针对区块文件下的每个阶段,依次读取该阶段下
的共识消息接收记录,首先判断共识消息接收记录的数量是否大于或等于阈值n‑f,其中,n
≥3f+1,n为共识节点数量,f为恶意节点数量。若共识消息接收记录的数量达到阈值,则对
共识消息接收记录做进一步的验证,具体的验证过程如下:
[0106] 假设当前验证的区块文件的名称为区块ID,其所在的节点文件对应的是第一区块链节点。则对于每条共识消息接收记录,确定其发送节点地址为第二区块链节点的地址。
[0107] 从第二区块链节点的节点文件下、名称为区块ID的区块文件中,查找接收节点地址为第一区块链节点的地址的共识消息发送记录。若查找到,确定当前验证的共识消息接
收记录正确。
[0108] 在所有节点文件下的共识消息接收记录均正确的情况下,确定所有节点下的新增区块共识情况正常。
[0109] 值得说明的是,目前大多数的共识测试验证方法是从代码层的单元测试或者从业务逻辑层的输入输出进行测试分析,相比之下,本申请提供的针对共识过程的监测方法更
全面直观的覆盖了共识的过程,更容易发现共识过程中深层次隐晦的问题,并且能够快速
定位共识异常的具体区块链节点和具体共识阶段。
[0110] 以上,本申请通过实施例提供了一种区块链监测方法,以下,本申请通过实施例提供了一种区块链监测装置。
[0111] 参考图6,图6是本申请一实施例提出的区块链监测装置的结构示意图。如图6所示,该区块链监测装置包括:
[0112] 节点特征获取模块610,用于根据区块链监测的锚点时刻,获取区块链的每个节点在当前周期的第一节点特征,并获取每个节点在所述当前周期的上一周期的第二节点特
征;
[0113] 第一状态结果获取模块620,用于将每个节点的第一节点特征输入第一分类模型,获得所述第一分类模型为每个节点预测的第一状态结果,每个节点的第一状态结果用于表
征:在所述当前周期内所述区块链中是否存在异常节点,如果存在异常节点,则第一状态结
果对应的节点是否为异常节点;
[0114] 第二状态结果获取模块630,用于将每个节点的第二节点特征输入第二分类模型,获得所述第二分类模型为每个节点预测的第二状态结果,每个节点的第二状态结果用于表
征:在所述当前周期内所述区块链中是否存在异常节点,如果存在异常节点,则第二状态结
果对应的节点是否为异常节点;
[0115] 节点监测模块640,用于根据每个节点的第一状态结果和第二状态结果,从所述区块链的多个节点中确定目标节点,并针对所述目标节点进行监测。
[0116] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实
施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机
可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产
品的形式。
[0117] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流
程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序
指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产
生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实
现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0118] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指
令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或
多个方框中指定的功能。
[0119] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或
其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一
个方框或多个方框中指定的功能的步骤。
[0120] 尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优
选实施例以及落入本申请范围的所有变更和修改。
[0121] 显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围
之内,则本申请也意图包含这些改动和变型在内。