基于区块链的出块方法、装置和可读存储介质
技术领域
本申请涉及区块链技术领域,具体而言,涉及一种基于区块链的出块方法、装置和可读存储介质。
背景技术
随着区块链技术的发展,区块链已经应用到了多个领域中。而“账本”作为区块链的重要组成部分,其核心数据是“区块(block)”,用户想要处理的事务等相关内容都包含于每个“区块”中,这使得如何获取用户当前需求的区块,即出块的过程成为了处理相关事务的关键。而在现有技术中,区块链的出块效率较低,无法满足日益增长的事务量的需求。
有鉴于此,如何提供一种高效的基于区块链的出块方案,是本领域技术人员需要解决的。
发明内容
本申请提供了一种基于区块链的出块方法、装置和可读存储介质。
本申请的实施例可以这样实现:
第一方面,本申请提供一种基于区块链的出块方法,应用于区块链网络中的区块链节点,区块链节点与终端设备通信连接,区块链网络存储有账本,账本包括当前区块,方法包括:
在终端设备发送的待定区块有效的条件下,将待定区块作为当前区块的后代区块写入账本;
判断账本中是否出现分叉区块;
若是,则在账本中生成第一同步区块,并将待定区块和分叉区块指向第一同步区块,并将第一同步区块作为当前区块;
若否,则将待定区块作为当前区块。
在可选的实施方式中,待定区块包括待定用户签名和待定服务器证书,区块链节点存储有用户签名表和服务器证书;
判断待定区块是否有效的步骤,包括:
判断待定用户签名是否存在于用户签名表,以及判断待定服务器证书和服务器证书是否一致;
若待定用户签名存在于用户签名表、以及待定服务器证书和服务器证书一致,则判定待定区块有效;
若待定用户签名不存在于用户签名表、或者待定服务器证书和服务器证书不一致,则判定待定区块无效。
在可选的实施方式中,待定区块为多个,当前区块包括当前哈希值;
将待定区块作为当前区块的后代区块写入账本的步骤,包括:
将当前哈希值写入每个待定区块,以使每个待定区块根据当前哈希值、待定用户签名和待定服务器证书生成对应的待定哈希值;
在生成每个待定区块对应的待定哈希值后下,将每个待定区块作为当前区块的后代区块并发写入账本。
在可选的实施方式中,将待定区块作为当前区块的后代区块写入账本的步骤,包括:
按照有向无环图的形式将待定区块作为当前区块的后代区块写入账本,其中,当前区块为待定区块的父区块。
在可选的实施方式中,账本还包括多个已有区块,已有区块为将待定区块加入之前账本中已有的区块;
方法还包括:
按照预设周期扫描账本;
在账本中存在无后代区块的条件下,生成第二同步区块,其中,无后代区块为多个已有区块中仅与任一个已有区块存在关联的区块;
将第二同步区块作为所有无后代区块的后代区块、以及将第二同步区块作为当前区块。
在可选的实施方式中,按照预设周期扫描账本的步骤,包括:
判断在前次扫描的过程中,是否确定出第二同步区块;
若是,则扫描多个已有区块中第二同步区块的所有父区块;
若否,则扫描前次父区块,其中,前次父区块为前次扫描中当前区块的父区块。
第二方面,本申请提供一种基于区块链的出块装置,应用于区块链网络中的区块链节点,区块链节点与终端设备通信连接,区块链网络存储有账本,账本包括当前区块,装置包括:
区块链账本管理模块,用于在终端设备发送的待定区块有效的条件下,将待定区块作为当前区块的后代区块写入账本;
账本管理模块,用于判断账本中是否出现分叉区块;若是,则在账本中生成第一同步区块,并将待定区块和分叉区块指向第一同步区块,并将第一同步区块作为当前区块;若否,则将待定区块作为当前区块。
在可选的实施方式中,待定区块包括待定用户签名和待定服务器证书,区块链节点存储有用户签名表和服务器证书;
区块链账本管理模块具体用于:
判断待定用户签名是否存在于用户签名表,以及判断待定服务器证书和服务器证书是否一致;若待定用户签名存在于用户签名表、以及待定服务器证书和服务器证书一致,则判定待定区块有效;若待定用户签名不存在于用户签名表、或者待定服务器证书和服务器证书不一致,则判定待定区块无效。
第三方面,本申请提供一种计算机设备,计算机设备包括处理器及存储有计算机指令的非易失性存储器,计算机指令被处理器执行时,计算机设备执行前述实施方式中任意一项的基于区块链的出块方法。
第四方面,本申请提供一种可读存储介质,可读存储介质包括计算机程序,计算机程序运行时控制可读存储介质所在计算机设备执行前述实施方式中任意一项的基于区块链的出块方法。
本申请实施例的有益效果包括,例如:采用本申请实施例提供的一种基于区块链的出块方法、装置和可读存储介质,通过在终端设备发送的待定区块有效的条件下,将待定区块作为当前区块的后代区块写入账本;再判断账本中是否出现分叉区块;若是,则在账本中生成第一同步区块,并将待定区块和分叉区块指向第一同步区块,并将第一同步区块作为当前区块;若否,则将待定区块作为当前区块,通过上述步骤,巧妙地利用第一同步区块实现了区块链的高效率出块。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的基于区块链的出块系统的交互示意图;
图2为本申请实施例提供的基于区块链的出块方法的步骤流程示意图;
图3为本申请实施例提供的账本的局部示意图;
图4为本申请实施例提供的基于区块链的出块装置的结构示意框图;
图5为本申请实施例提供的计算机设备的结构示意框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在不冲突的情况下,本申请的实施例中的特征可以相互结合。
随着区块链技术的发展,各个领域都开始涉及区块链,而作为区块链中的重要组成部分的账本,其核心构成为区块,用户想要处理的事务则存储在不同的区块中,而这些区块以适当的形式组合在一起,便可以构成不可随意篡改、可追溯的账本,而在现有技术中,区块链的出块效率低,普遍在秒级甚至更慢,面对日益增加的数据量已经无法满足用户的需求。
基于此,请参考图1,图1提供了一种基于区块链的出块系统的交互示意图,基于区块链的出块系统可以包括区块链网络10,以及与区块链网络10中包括的区块链节点11通信连接的终端设备12,区块链节点11存储有账本,账本包括当前区块。在本申请实施例的其他实施方式中,基于区块链的出块系统也可以由更多或者更少的部件实现。
为了解决前述提出的问题,请结合参考图2,图2为本申请实施例提供的基于区块链的出块方法的步骤流程示意图,该基于区块链的出块方法由图1中的区块链节点11作为执行主体实施,下面对该基于区块链的出块方法进行详细的描述。
步骤201,在终端设备12发送的待定区块有效的条件下,将待定区块作为当前区块的后代区块写入账本。
步骤202,判断账本中是否出现分叉区块。
若是,则执行步骤203。
若否,则执行步骤204。
步骤203,在账本中生成第一同步区块,并将待定区块和分叉区块指向第一同步区块,并将第一同步区块作为当前区块。
步骤204,将待定区块作为当前区块。
在本申请实施例中,区块链网络10可以是私有化区块链,具备中心化特征的特点,通过上述步骤,巧妙地设置了第一同步区块,以此来将可能出现的分叉区块和待定区块写入在同一第一同步区块中,能够快速地确定用户需求的当前区块,极大的提高了出块速度。
在此基础上,待定区块包括待定用户签名和待定服务器证书,区块链节点11存储有用户签名表和服务器证书。作为一种可替换的实施例,上述步骤201可以由以下的具体实施方式实施。
子步骤201-1,判断待定用户签名是否存在于用户签名表,以及判断待定服务器证书和服务器证书是否一致。
子步骤201-2,若待定用户签名存在于用户签名表、以及待定服务器证书和服务器证书一致,则判定待定区块有效。
子步骤201-3,若待定用户签名不存在于用户签名表、或者待定服务器证书和服务器证书不一致,则判定待定区块无效。
在本申请实施例中,每个待定区块在生成包含于该待定区块的事务时,会记录对应的操作者的信息,即用户的待定用户签名,而在区块链节点11存储的用户签名表,则是记录了许可进行相关操作的用户签名,可以判断来自终端设备12的待定区块携带的待定用户签名是否为合法用户,即该待定用户签名是否存在于区块链节点11存储的用户签名表中,以此来判断该待定区块是否为有效区块。
除此之外,待定区块在发送至该区块链节点11时,应该同步获取该区块链节点11的服务器证书,服务器证书的形式可以是数字证书,因此包含于待定区块中的待定服务器证书应该与区块链节点11的服务器证书一致,若不一致,则说明该待定区块不应该由该区块链节点11处理,基于此,在同时满足上述两个条件,即待定用户签名存在于用户签名表中且待定服务器签名与服务器签名一致时,可以认为待定区块是有效地,反之其他情况均可以认为待定区块无效。通过上述步骤,能够准确地判断出待定区块是否有效。
在前述基础上,待定区块为多个,当前区块包括当前哈希值。为了能够更加清楚的表达本申请的方案,前述步骤201还可以包括以下的具体步骤。
子步骤201-4,将当前哈希值写入每个待定区块,以使每个待定区块根据当前哈希值、待定用户签名和待定服务器证书生成对应的待定哈希值。
子步骤201-5,在生成每个待定区块对应的待定哈希值后下,将每个待定区块作为当前区块的后代区块并发写入账本。
在进行待定区块的写入时,需要知道当前区块的哈希值,以便待定区块在作为后代区块时,可以基于当前哈希值、待定用户签名和待定服务器证书生成对应的待定哈希值作为自己的哈希值。值得说明的是,在本申请实施例中可以存在多个待定区块,而每个待定区块作为当前区块的后代区块采取并发写入的形式写入账本,采用并发写入的方式,能够极大地提高区块链网络10的出块效率。
在此基础上,作为一种可替换的具体实施方式,前述步骤201还可以由以下的步骤实施实现。
子步骤201-6,按照有向无环图的形式将待定区块作为当前区块的后代区块写入账本,其中,当前区块为待定区块的父区块。
在本申请实施例中,在采取并发写入的基础上,可以采取向无环图的形式将待定区块作为当前区块的后代区块写入账本,除此之外,也可以采取其他树状形式对待定区块进行写入。通过这种形式的写入,能够使得待定区块能够更快地实现并发写入。
在此基础上,账本还包括多个已有区块,已有区块为将待定区块加入之前账本中已有的区块。除了前述提出的方案,本申请实施例还提供了如下方案。
步骤301,按照预设周期扫描账本。
步骤302,在账本中存在无后代区块的条件下,生成第二同步区块。
其中,无后代区块为多个已有区块中仅与任一个已有区块存在关联的区块。
步骤303,将第二同步区块作为所有无后代区块的后代区块、以及将第二同步区块作为当前区块。
除了前述提出的方案,为了能够进一步地提高区块链的篡改难度以保障账本的安全性,可以按照预设周期对账本进行扫描,查看是否存在无后代区块,若存在,可以生成第二同步区块,并将所有仅与任一个已有区块存在关联的区块均引向第二同步区块,即将第二同步区块作为所有无后代区块的后代区块,以此对整个账本进行“收束”,以此在提高账本的安全性的基础上为后续待定区块写入账本提供便利,即保证账本只存在一个当前区块,实现了提高出块效率的目的。
在此基础上,作为一种可替换的实施例,前述步骤301可以由以下详细步骤实施实现。
子步骤301-1,判断在前次扫描的过程中,是否确定出第二同步区块。
若是,则执行子步骤301-2。
若否,则执行子步骤301-3。
子步骤301-2,扫描多个已有区块中第二同步区块的所有父区块。
子步骤301-3,扫描前次父区块,其中,前次父区块为前次扫描中当前区块的父区块。
为了能够减少计算量,在对账本进行周期扫描的时候,可以先判断在前次扫描的过程中,是否确定出第二同步区块,即在前次扫描中,是否出现过有多个无后代区块的情况,在有的情况下,仅需扫描多个已有区块中第二同步区块的所有父区块,而没有的情况下,则说明前次扫描没有出现有多个无后代区块的情况,仅需扫描前次父区块,由于预设周期的扫描是随着账本的完善逐步推进的,因此仅需根据前次扫描结果对部分的已有区块进行扫描,便可以实现对账本中分叉区块的筛查,以此来提高扫描的效率。
为了能够更加清楚地描述本申请提供的方案,请结合参考图3,图3为本申请实施例提供的一种账本示意图,其中,“Block6”为待定区块,在加入该账本之后如前所描述的成为当前区块,而“SyncBlk”则是“Block6”的父区块,在“Block6”还未加入账本之前,“SyncBlk”则是当前区块,可以清楚的看出,对于“Block4”和“Block5”来说,它们属于分叉区块,因此会生成同步区块“SyncBlk”,而“Block1与“Block2以及“Block3和“Block5之间则是如前述判定建立的父区块和后代区块的关系,应当理解的是,在本申请实施例中,每个区块“Block”以全局状态存储。通过上述示例,能够清楚地体现出较高的出块效率。
本申请实施例提供一种基于区块链的出块装置110,应用于区块链网络10中的区块链节点11,区块链节点11与终端设备12通信连接,区块链网络10存储有账本,账本包括当前区块,请结合参考图4基于区块链的出块装置110包括:
区块链账本管理模块1101,用于在终端设备12发送的待定区块有效的条件下,将待定区块作为当前区块的后代区块写入账本。
账本管理模块1102,用于判断账本中是否出现分叉区块;若是,则在账本中生成第一同步区块,并将待定区块和分叉区块指向第一同步区块,并将第一同步区块作为当前区块;若否,则将待定区块作为当前区块。
进一步地,待定区块包括待定用户签名和待定服务器证书,区块链节点11存储有用户签名表和服务器证书;
区块链账本管理模块1101具体用于:
判断待定用户签名是否存在于用户签名表,以及判断待定服务器证书和服务器证书是否一致;若待定用户签名存在于用户签名表、以及待定服务器证书和服务器证书一致,则判定待定区块有效;若待定用户签名不存在于用户签名表、或者待定服务器证书和服务器证书不一致,则判定待定区块无效。
进一步地,待定区块为多个,当前区块包括当前哈希值;
区块链账本管理模块1101具体用于:
将当前哈希值写入每个待定区块,以使每个待定区块根据当前哈希值、待定用户签名和待定服务器证书生成对应的待定哈希值;在生成每个待定区块对应的待定哈希值后下,将每个待定区块作为当前区块的后代区块并发写入账本。
进一步地,区块链账本管理模块1101具体用于:
按照有向无环图的形式将待定区块作为当前区块的后代区块写入账本,其中,当前区块为待定区块的父区块。
进一步地,账本还包括多个已有区块,已有区块为将待定区块加入之前账本中已有的区块;
基于区块链的出块装置110还包括周期账本同步模块1103,周期账本同步模块1103用于:
按照预设周期扫描账本;在账本中存在无后代区块的条件下,生成第二同步区块,其中,无后代区块为多个已有区块中仅与任一个已有区块存在关联的区块;将第二同步区块作为所有无后代区块的后代区块、以及将第二同步区块作为当前区块。
进一步地,周期账本同步模块1103具体用于:
判断在前次扫描的过程中,是否确定出第二同步区块;若是,则扫描多个已有区块中第二同步区块的所有父区块;若否,则扫描前次父区块,其中,前次父区块为前次扫描中当前区块的父区块。
本申请实施例提供一种计算机设备100,计算机设备100包括处理器及存储有计算机指令的非易失性存储器,计算机指令被处理器执行时,计算机设备100执行前述的基于区块链的出块方法。如图5所示,图5为本申请实施例提供的计算机设备100的结构框图。计算机设备100包括基于区块链的出块装置110、存储器111、处理器112及通信单元113。
为实现数据的传输或交互,存储器111、处理器112以及通信单元113各元件相互之间直接或间接地电性连接。例如,可通过一条或多条通讯总线或信号线实现这些元件相互之间电性连接。基于区块链的出块装置110包括至少一个可以软件或固件(firmware)的形式存储于存储器111中或固化在计算机设备100的操作系统(operating system,OS)中的软件功能模块。处理器112用于执行存储器111中存储的可执行模块,例如基于区块链的出块装置110所包括的软件功能模块及计算机程序等。
本申请实施例提供一种可读存储介质,可读存储介质包括计算机程序,计算机程序运行时控制可读存储介质所在计算机设备100执行前述的基于区块链的出块方法。
综上,本申请实施例提供了一种基于区块链的出块方法、装置和可读存储介质,通过在终端设备发送的待定区块有效的条件下,将待定区块作为当前区块的后代区块写入账本;再判断账本中是否出现分叉区块;若是,则在账本中生成第一同步区块,并将待定区块和分叉区块指向第一同步区块,并将第一同步区块作为当前区块;若否,则将待定区块作为当前区块,通过上述步骤,巧妙地利用第一同步区块实现了区块链的高效率出块。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。