具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的快照处理设备结构示意图。
如图1所示,该快照处理设备可以包括:处理器1001,例如CPU,通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏、输入单元比如键盘,可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器,例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对快照处理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作***、网络通信模块、用户接口模块以及快照处理程序。
在图1所示的快照处理设备中,网络接口1004主要用于与外部网络进行数据通信;用户接口1003主要用于接收用户的输入指令;快照处理设备通过处理器1001调用存储器1005中存储的快照处理程序,并执行以下操作:
获取预设快照高度;
根据预设快照高度确定当前快照的终止区块;
根据DAG区块链的共识结果确定从初始区块到终止区块的共识顺序;
根据共识顺序将所有区块的区块号记录至链表中;
从链表读取当前区块号,并获取当前区块号的交易信息;
根据交易信息构建当前结点,以及当前结点与前一结点的指向关系,以得到当前区块号的快照;
返回从链表读取当前区块号的步骤,以得到当前快照。
进一步地,处理器1001可以调用存储器1005中存储的快照处理程序,还执行以下操作:
基于预设列表将交易信息与当前结点对应存储;其中,预设列表中的参数包括交易、发送者、接收者、时间和金额。
进一步地,处理器1001可以调用存储器1005中存储的快照处理程序,还执行以下操作:
在得到当前快照之后,计算当前快照的哈希值;
从当前快照中读取开始区块号及结束区块号;
根据当前快照的哈希值、开始区块号及结束区块号构建待共识数据;
将待共识数据发送至DAG区块链,以对待共识数据进行共识处理。
进一步地,处理器1001可以调用存储器1005中存储的快照处理程序,还执行以下操作:
从所述当前快照中读取开始区块号及结束区块号之后,根据开始区块号和结束区块号查找DAG区块链中类型为快照的共识数据,以得到与开始区块号和结束区块号匹配的已共识数据;
获取已共识数据的哈希值,并根据当前快照的哈希值和已共识数据的哈希值对当前快照进行验证。
进一步地,处理器1001可以调用存储器1005中存储的快照处理程序,还执行以下操作:
在当前快照验证通过时,检测开始区块号是否是创世区块的块号,以得到检测结果;
根据检测结果删除当前快照对应的节点的区块数据;
根据当前快照对区块数据进行恢复。
进一步地,处理器1001可以调用存储器1005中存储的快照处理程序,还执行以下操作:
在开始区块号是创世区块的块号时,删除当前快照对应的节点的所有的区块数据;
在开始区块号不是创世区块的块号时,删除当前快照对应的节点中开始区块号的区块之后的区块数据。
进一步地,处理器1001可以调用存储器1005中存储的快照处理程序,还执行以下操作:
从当前快照获取开始区块号的结点的后一结点;
将后一结点的交易信息及指向关系写入节点。
本实施例通过上述方案,通过获取预设快照高度,根据预设快照高度确定当前快照的终止区块,根据DAG区块链的共识结果确定从初始区块到终止区块的共识顺序,根据共识顺序将所有区块的区块号记录至链表中,从链表读取当前区块号,并获取当前区块号的交易信息,根据交易信息构建当前结点,以及当前结点与前一结点的指向关系,以得到当前区块号的快照,返回从链表读取当前区块号的步骤,以得到当前快照。其中,根据DAG区块链的特点设计快照存储结构,使该结构与DAG区块链图的结构保持一致,基于该快照存储结构存储DAG区块链上的交易信息,有效提高了归档存储效率。
基于上述硬件结构,提出本发明快照处理方法实施例。
参照图2,图2为本发明快照处理方法第一实施例的流程示意图。
在第一实施例中,快照处理方法包括以下步骤:
S10:获取预设快照高度;
应当理解的是,预设快照高度,指用户声明或***设定的快照高度,根据快照的模式不同,该预设快照高度的值也不同。
快照的模式通常可以分为全快照和增量快照,全快照指从创世区块到某个区块按照交易顺序将其中的全部交易生成快照。增量快照指从某个非创世区块到另一个区块按照交易顺序将其中的全部交易生成快照。
S20:根据预设快照高度确定当前快照的终止区块;
在具体实现中,当DAG区块链的当前区块高度达到预设快照高度时,启动快照生成机制,并根据预设快照高度定位当前快照的终止区块。
S30:根据DAG区块链的共识结果确定从初始区块到终止区块的共识顺序;
其中,初始区块为创世区块或前一快照的终止区块。
在一实施例中,当初始区块为创世区块时,启动全快照生成机制,根据共识结果确定从创世区块到终止区块的共识顺序。
在另一实施例中,当初始区块为前一快照的终止区块时,启动增量快照生成机制,根据共识结果确定从上一次快照的终止区块到当前快照的终止区块的共识顺序。
S40:根据共识顺序将所有区块的区块号记录至链表中;
应当理解的是,所有区块,指从初始区块到终止区块的全部区块,为了方便从DAG区块链中依次获取交易信息,本实施例将所有区块的区块号记录至链表中。
S50:从链表读取当前区块号,并获取当前区块号的交易信息;
需要说明的是,由于从链表读取区块号是一个持续的过程,也就是说,为了获得所有区块号的交易信息,会在一段时间内持续性地读取区块号,因此,当前区块号即可理解为正在读取的区块号。
在取出当前区块号后,到DAG区块链中当前区块号对应的区块上读取该区块号的全部交易信息,并将交易信息按照预设的快照存储结构进行存储。
S60:根据交易信息构建当前结点,以及当前结点与前一结点的指向关系,以得到当前区块号的快照;
现有技术中的区块链快照都是基于传统的链式结构的区块链生成的,然而DAG区块链是以有向无环图结构为主,若使用现有技术中的区块链快照机制,将具有以下局限性:
(1)快照存储结构不适合DAG区块链的图结构,不能较高效的归档存储;
(2)DAG区块链一般采用异步共识机制,在某一时刻,各个记账节点的账本数据可能是不同的,因此,如何在做快照时能够兼顾不同的账本,这也是当前快照机制没有考虑过的问题。
本实施例中,针对DAG区块链结构为有向无环图、账本不相同的问题,设计了一种图结构的快照存储结构。设DAG区块链的快照为DAGSS=(V,E),其中V代表图的结点,E代表图的边,V对应于DAG区块链的区块,E对应于DAG区块链区块之间的关系,E为有向边。V中具体结构为(type,sender,receiver,timestamp,cont),其中type表示类型、sender表示发送者、receiver表示接收者、timestamp表示时间、cont表示内容。
在具体实现中,在获得交易信息后,可以基于预设列表将交易信息与当前结点对应存储,即将当前区块号的交易信息以(trans,sender,receiver,timestamp,amount)列表的形式存入当前结点V1;其中,trans表示类型为交易、sender表示发送者、receiver表示接收者、timestamp表示时间、amount表示金额。当交易信息存入当前结点V1后,需要将前一结点V0与当前结点V1相连,并将前一结点V0指向当前结点V1,以生成当前区块号的快照的边E1,由此,当前区块号的快照的两个元素:当前结点V1和快照的边E1都已确定,即得到了当前区块号的快照。
S70:返回从链表读取当前区块号的步骤,以得到当前快照。
在当前区块号的快照生成后,继续从链表中读取下一个区块号,直至链表中的区块号全部读取完毕时,根据链表中所有区块号的快照生成当前快照。
需要说明的是,上述当前快照的生成方式可用于全快照生成和增量快照生成两种模式,充分满足了实际情况,全快照生成时间相对较慢,但数据全,在无数据时可以利用全快照进行整体恢复;而增量快照相对小,生成和恢复速度快,但必须建立在已有区块链基础上。在实际应用中可以将二者配合使用,即每隔小段间隔实行增量式快照生成,这样可以快速保存快照不占用***时间;在***空闲时可以采用全快照生成模式。这种灵活的生成模式可以让***得到较好的性能。
本实施例通过上述方案,根据DAG区块链的特点设计快照存储结构,使该结构与DAG区块链图的结构保持一致,基于该快照存储结构存储DAG区块链上的交易信息,有效提高了归档存储效率。
进一步地,如图3所示,基于第一实施例提出本发明快照处理方法第二实施例,在本实施例中,在得到当前快照之后,还可以对当前快照进行共识处理,其具体步骤包括:
S80:计算当前快照的哈希值;
应当理解的是,由于DAG区块链存在异步共识的情况,导致在同一时刻每个记账节点的账本共识状态是不一样的,因此本实施例设计了将快照信息也作为共识内容的一部分,将每个记账节点的快照点都做共识记录。
在DAG区块链中某记账节点A生成快照后,对节点A的当前快照取哈希值,其中,哈希值的计算方式本实施例不加以限制。
S90:从当前快照中读取开始区块号及结束区块号;
S100:根据当前快照的哈希值、开始区块号及结束区块号构建待共识数据;
在具体实现中,可以根据(Snapshot,节点A的当前快照的开始区块号,节点A的当前快照的结束区块号,timestamp,HDS)的格式构建待共识数据;其中,Snapshot表示类型为快照,timestamp表示时间,HDS表示当前快照的哈希值。
S110:将待共识数据发送至DAG区块链,以对待共识数据进行共识处理。
应当理解的是,将某个节点的当前快照进行处理后作为待共识数据发送至DAG区块链后,DAG区块链中的其他节点会对该待共识数据进行共识,保障了该快照的可信性。
本实施例针对DAG区块链在同一时间账本共识状态不统一的特点,设计了快照点共识的方案,将记账节点的当前快照取哈希值后进行共识,以将节点的快照状态上链进行存储,方便后期针对某个节点的特定恢复。
进一步地,如图4所示,基于第二实施例提出本发明快照处理方法第三实施例,在本实施例中,在步骤S90之后,以及基于快照恢复区块数据之前,要验证所获取的快照是否正确,对当前快照进行验证的步骤如下:
S120:根据开始区块号和结束区块号查找DAG区块链中类型为快照的共识数据,以得到与开始区块号和结束区块号匹配的已共识数据;
以节点A需要从当前快照进行恢复为例,节点A对当前快照取哈希值,得到当前快照的哈希值HDS1,节点A到DAG区块链中遍历类型为Snapshot的共识数据,并根据当前快照的开始区块号和结束区块号查找是否存在匹配的已共识数据,根据匹配结果确定验证是否通过。
S130:获取已共识数据的哈希值,并根据当前快照的哈希值和已共识数据的哈希值对当前快照进行验证。
在一实施例中,当查找到匹配的已共识数据即匹配成功时,将当前快照的哈希值HDS1和已共识数据的哈希值HDS2进行比较,当HDS1和HDS2相等时,则判定验证通过,当HDS1和HDS2不相等时,则判定验证不通过。
在另一实施例中,当未查找到匹配的已共识数据即匹配失败时,则判定验证不通过。
本实施例通过节点在基于当前快照恢复前,对获取的当前快照进行验证,采用验证通过的快照进行恢复,可以有效防止快照篡改,避免利用快照进行攻击,提高了快照恢复的安全性。
进一步地,如图5所示,基于第三实施例提出本发明快照处理方法第四实施例,在本实施例为基于验证通过的当前快照对区块数据进行恢复的步骤,具体包括:
S140:在当前快照验证通过时,检测开始区块号是否是创世区块的块号,以得到检测结果;
以节点A要对其区块数据进行恢复为例,设节点A的当前快照验证通过,节点A读取当前快照中的开始区块号和结束区块号,并对开始区块号进行判定。
S150:根据检测结果删除当前快照对应的节点的区块数据;
进一步地,在开始区块号是创世区块的块号时,删除当前快照对应的节点的所有的区块数据;在开始区块号不是创世区块的块号时,删除当前快照对应的节点中开始区块号的区块之后的区块数据。
S160:根据当前快照对区块数据进行恢复。
具体地,从当前快照获取开始区块号的结点的后一结点;将后一结点的交易信息及指向关系写入节点。
当开始区块号是创世区块的块号时,当前快照为全快照,此时节点A抛弃当前所有的区块数据,之后读取当前快照中开始区块号的图结点的后一结点V2。若该结点V2不为空,从该结点V2中获取交易信息,并按照DAG区块链的内部结构写入交易信息,如果DAG区块链存在链指向,则指向该结点V2,节点A沿着结点V2获取边信息E,若E不为空,在DAG区块链中构建链指向后,继续读取下一个结点,直至读取完毕时,区块数据恢复完毕。
当开始区块号不是创世区块的块号时,当前快照为增量快照,此时节点A抛弃自开始区块号的区块起的全部区块数据,之后读取当前快照中开始区块号的图结点的后一结点V2。若该结点V2不为空,从该结点V2中获取交易信息,并按照DAG区块链的内部结构写入交易信息,如果DAG区块链存在链指向,则指向该结点V2,节点A沿着结点V2获取边信息E,若E不为空,在DAG区块链中构建链指向后,继续读取下一个结点,直至读取完毕时,区块数据恢复完毕。
本实施例中由于DAG区块链的快照存储结构与DAG区块链图的结构保持一致,在根据当前快照进行区块数据恢复时,可以与DAG图结构无缝对接,有效提升了恢复速度及恢复效率,克服了现有技术中链式快照用于恢复DAG区块链时效率低的问题。
此外,本发明实施例还提出一种计算机可读存储介质,计算机可读存储介质上存储有快照处理程序,控制程序被处理器执行时使得处理器能够执行上述的快照处理方法。
本发明计算机可读存储介质的具体实施例与上述控制方法各实施例基本相同,在此不作赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者***不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者***所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者***中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。