首页 / 专利库 / 资料储存系统 / 分布式账本 / 区块链的区块分发方法、装置、计算机设备和存储介质

链的区块分发方法、装置、计算机设备和存储介质

阅读:232发布:2020-05-13

专利汇可以提供链的区块分发方法、装置、计算机设备和存储介质专利检索,专利查询,专利分析的服务。并且本 申请 涉及 分布式账本 领域,通过先将目标区 块 缓存到临时缓存区,再将临时缓存区中的缓存区块写入目标磁盘,以将缓存区块的分发到数据 节点 和写入目标磁盘的过程隔离,减少对目标磁盘的读取 频率 ,降低缓存区块分发的延迟时间。尤其涉及一种 区块链 的区块分发方法、装置、计算机设备和存储介质,该方法包括:获取待写入区块链的目标区块;将目标区块写入临时缓存区,得到目标区块对应的缓存区块,并向数据节点发送用于表示目标区块已写入区块链的已写入通知;若接收到数据节点根据已写入通知发送的区块接收 请求 ,将临时缓存区中对应于区块接收请求的缓存区块向数据节点发送;将缓存区块写入目标磁盘,以将缓存区块加入到目标磁盘存储的区块链中。,下面是链的区块分发方法、装置、计算机设备和存储介质专利的具体信息内容。

1.一种链的区块分发方法,其特征在于,包括:
获取待写入区块链的目标区块;
将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,并向数据节点发送用于表示所述目标区块已写入区块链的已写入通知;
若接收到所述数据节点根据所述已写入通知发送的区块接收请求,将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送;
将所述缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链中。
2.如权利要求1所述的区块链的区块分发方法,其特征在于,所述区块分发方法还包括:
若接收到所述数据节点发送的区块读取请求,查询所述临时缓存区中是否存在与所述区块读取请求对应的缓存区块;
若所述临时缓存区中存在与所述区块读取请求对应的缓存区块,则将所述缓存区块向所述数据节点发送;
若所述临时缓存区中不存在与所述区块读取请求对应的缓存区块,则从所述目标磁盘中读取与所述区块读取请求对应的区块,将所述区块向所述数据节点发送。
3.如权利要求1所述的区块链的区块分发方法,其特征在于,所述将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,包括:
若所述临时缓存区未写满,将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块;
若所述临时缓存区已写满,对所述目标区块进行阻塞等待;
若所述临时缓存区中有缓存区块写入所述目标磁盘,停止对所述目标区块进行阻塞等待并将所述目标区块写入所述临时缓存区,得到所述目标区块对应的缓存区块。
4.如权利要求3所述的区块链的区块分发方法,其特征在于,所述将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,还包括:
若所述临时缓存区已写满,且进行阻塞等待的目标区块的数量大于预设阈值,增大所述临时缓存区的容量;
停止对所述目标区块进行阻塞等待并将所述目标区块写入增大容量后的临时缓存区,得到所述目标区块对应的缓存区块。
5.如权利要求1所述的区块链的区块分发方法,其特征在于,所述将所述缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链中,包括:
基于先入先出的规则,根据所述临时缓存区中各所述缓存区块的写入顺序,将各所述缓存区块依次写入目标磁盘,以将各所述缓存区块加入到所述目标磁盘存储的区块链中。
6.如权利要求1所述的区块链的区块分发方法,其特征在于,所述将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送之后,还包括:
获取所述数据节点对接收到的缓存区块进行交易验证的交易验证结果;
若根据所述交易验证结果判定所述缓存区块包括错误的交易,则从所述临时缓存区中将所述缓存区块删除。
7.如权利要求2所述的区块链的区块分发方法,其特征在于,所述将所述缓存区块向所述数据节点发送之后,还包括:
获取所述数据节点对接收到的缓存区块进行验证的验证结果;
若根据所述验证结果判定所述缓存区块错误,则再次将所述临时缓存区中的所述缓存区块向所述数据节点发送;
所述将所述区块向所述数据节点发送之后,还包括:
获取所述数据节点对接收到的区块进行验证的验证结果;
若根据所述验证结果判定所述区块错误,则再次从所述目标磁盘中将所述区块向所述数据节点发送。
8.一种区块链的区块分发装置,其特征在于,包括:
区块获取模块,用于获取待写入区块链的目标区块;
第一区块写入模块,用于将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,并向数据节点发送用于表示所述目标区块已写入区块链的已写入通知;
第一区块发送模块,用于若接收到所述数据节点根据所述已写入通知发送的区块接收请求,将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送;
第二区块写入模块,用于将所述缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链中。
9.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器;
所述存储器,用于存储计算机程序
所述处理器,用于执行所述计算机程序并在执行所述计算机程序时实现如权利要求1至7中任一项所述的区块链的区块分发方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时使所述处理器实现如权利要求1至7中任一项所述的区块链的区块分发方法。

说明书全文

链的区块分发方法、装置、计算机设备和存储介质

技术领域

[0001] 本申请涉及分布式账本领域,尤其涉及一种区块链的区块分发方法、装置、计算机设备和存储介质。

背景技术

[0002] 在现有的区块链系统中,共识节点将区块保存到本地文件账本即写入磁盘后,如果此时共识节点发现有监听的数据节点在等待新的区块产生,共识节点会从磁盘读取对应的区块发送给数据节点。在这个过程中,如果多个数据节点监听该共识节点,该共识节点需要多次从磁盘读取区块返回给数据节点;一方面,共识节点存在频繁的读取磁盘的可能,频繁读取磁盘会降低磁盘寿命;另一方面,共识节点不能及时地将区块分发给监听的数据节点,直接延长了交易的确认时间,交易处理效率低,导致整个交易流程的耗时长。发明内容
[0003] 本申请提供了一种区块链的区块分发方法、装置、计算机设备和存储介质,通过先将目标区块缓存到临时缓存区并分发给数据节点,再将临时缓存区中的缓存区块写入目标磁盘,以将缓存区块的分发到数据节点和写入目标磁盘的过程隔离,可以实现减少对目标磁盘的读取频率的效果和降低缓存区块分发的延迟时间。
[0004] 第一方面,本申请提供了一种区块链的区块分发方法,所述方法包括:
[0005] 获取待写入区块链的目标区块;
[0006] 将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,并向数据节点发送用于表示所述目标区块已写入区块链的已写入通知;
[0007] 若接收到所述数据节点根据所述已写入通知发送的区块接收请求,将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送;
[0008] 将所述缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链中。
[0009] 第二方面,本申请还提供了一种区块链的区块分发装置,所述装置包括:
[0010] 区块获取模块,用于获取待写入区块链的目标区块;
[0011] 第一区块写入模块,用于将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,并向数据节点发送用于表示所述目标区块已写入区块链的已写入通知;
[0012] 第一区块发送模块,用于若接收到所述数据节点根据所述已写入通知发送的区块接收请求,将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送;
[0013] 第二区块写入模块,用于将所述缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链中。
[0014] 第三方面,本申请还提供了一种计算机设备,所述计算机设备包括存储器和处理器;
[0015] 所述存储器,用于存储计算机程序
[0016] 所述处理器,用于执行所述计算机程序并在执行所述计算机程序时实现如上述的区块链的区块分发方法。
[0017] 第四方面,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时使所述处理器实现如上述的区块链的区块分发方法。
[0018] 本申请公开了一种区块链的区块分发方法、装置、计算机设备和存储介质,通过将获取的目标区块写入临时缓存区,得到目标区块对应的缓存区块,并向数据节点发送已写入通知,避免直接将目标区块写入目标磁盘后再从目标磁盘进行分发,实现减少对目标磁盘的读取频率的效果;若接收到数据节点根据已写入通知发送的区块接收请求,将临时缓存区中对应的缓存区块向数据节点发送,可以优先从临时缓存区中将缓存区块分发给数据节点,实现快速地分发区块给数据节点,降低缓存区块分发的延迟时间;然后将临时缓存区中的缓存区块写入目标磁盘,通过将缓存区块的分发到数据节点和写入目标磁盘的过程隔离,可以有效提升整个区块链系统的稳定性附图说明
[0019] 为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0020] 图1是本申请的实施例提供的一种区块链的区块分发方法的示意流程图
[0021] 图2是图1中区块写入临时缓存区的子步骤示意流程图;
[0022] 图3是图1中区块发送之后的步骤示意流程图;
[0023] 图4是图1中区块写入目标磁盘之后的步骤示意流程图;
[0024] 图5是图4中缓存区块发送之后的步骤示意流程图;
[0025] 图6为图4中区块发送之后的步骤示意流程图;
[0026] 图7为本申请实施例提供的一种区块链的区块分发装置的示意性框图
[0027] 图8为图7中区块链的区块分发装置的子模块的示意性框图;
[0028] 图9为本申请实施例提供的一种计算机设备的结构示意性框图。

具体实施方式

[0029] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0030] 附图中所示的流程图仅是示例说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解、组合或部分合并,因此实际执行的顺序有可能根据实际情况改变。
[0031] 应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
[0032] 还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
[0033] 本申请的实施例提供了一种区块链的区块分发方法、装置、计算机设备和存储介质。其中,该区块链的区块分发方法可以应用于作为区块链节点的终端或服务器中,通过将缓存区块的分发到数据节点和写入目标磁盘的过程隔离,实现减少读取目标磁盘的频率的效果。
[0034] 其中,终端可以是智能手机、平板电脑笔记本电脑、台式电脑、个人数字助理和穿戴式设备等电子设备。服务器可以为独立的服务器,也可以为服务器集群。
[0035] 下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
[0036] 如图1所示,区块链的区块分发方法包括步骤S10至步骤S40。
[0037] 步骤S10、获取待写入区块链的目标区块。
[0038] 示例性的,区块链系统中存在多种节点,例如,背书节点、共识节点和数据节点等。所述节点可以是任意的计算机设备,比如PC电脑,笔记本,手机,路由器等。
[0039] 所述节点用于对区块链系统中的区块进行操作,例如读取区块,写入区块、删除区块、发送区块、查询区块等。
[0040] 所述共识节点是指对分布式账本中的区块链进行操作的节点,例如,将区块写入区块链、读取区块链中的区块。示例性的,所述共识节点可以对交易进行排序、打包生成区块,并将新生成的区块保存到所述共识节点维护的区块链中。
[0041] 具体地,所述目标区块是所述共识节点根据客户端的交易请求,对交易提案进行排列和打包得到的区块。所述交易请求为客户端在数据节点将交易数据打包成为交易提案后发出的请求。
[0042] 在一些实施例中,客户端对应的数据节点将交易数据打包成为交易提案后,根据背书策略将所述交易提案发送给指定的背书节点。所述背书节点对所述交易提案进行验证并签名确认,得到已签名的交易提案;所述背书节点将所述已签名的交易提案提交到共识节点。
[0043] 需要说明的是,所述背书策略根据预设条件来决定是否放行或拒绝所述交易提案。所述预设条件可以是一个节点认可、多数节点认可或者全部节点认可的。
[0044] 所述背书节点在接收到所述交易提案后调用链码(Chaincode)进行验证,例如所述背书节点验证所述交易提案是否合法和是否可以正常提交。若所述交易提案通过验证,所述背书节点调用背书管理系统链码(Endorsement System Chaincode,ESCC)对所述交易提案进行背书签名,得到已签名的交易提案。需要说明的是,所述背书系统链码用于对交易提案进行背书签名。
[0045] 具体地,所述共识节点根据客户端的交易请求对所述已签名的交易提案进行排序,得到一系列的排序数据。所述共识节点根据共识算法将所述一系列的排序数据按照将一定数量进行打包,以生成待写入区块链的目标区块,所述目标区块包括至少一个排序数据。
[0046] 所述共识算法是指共识节点针对交易提案达成一致意见的过程,包括同意提案或者否定提案,并得到顺序一致性的排序数据。示例性的,所述共识算法可以包括PoW(Proof of Word)算法、PBFT(Practical Byzantine Fault Tolerance)算法或PoS(Proof of Stake)算法。
[0047] 具体地,所述一定数量是指所述一系列的排序数据中连续的至少一个。
[0048] 具体地,所述目标区块可以包括区块头和区块数据,其中所述区块头包含元数据。所述共识节点在将所述一系列的排序数据打包生成目标区块时,将区块头和区块数据写入所述目标区块中。
[0049] 示例性的,在将所述一系列的排序数据打包生成目标区块时,所述共识节点根据SHA(Secure Hash Algorithm)-256摘要算法对所述目标区块中的区块数据进行哈希加密,生成一个哈希值。所述共识节点将所述哈希值作为当前区块的哈希值存放在所述目标区块的区块头中,并且每个区块头都包含它的上一区块的哈希值。通过所述当前区块的哈希值,所述共识节点可以在区块链中识别出所述当前区块。
[0050] 具体地,所述共识节点在将获取到的所述待写入区块链的目标区块写入区块链之前,先将所述待写入区块链的目标区块缓存到一个临时缓存区中,以表示所述目标区块成功写入区块链。这样可以提前从所述临时缓存区中将所述目标区块分发给监听的数据节点。
[0051] 步骤S20、将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,并向数据节点发送用于表示所述目标区块已写入区块链的已写入通知。
[0052] 具体地,所述共识节点在将所述目标区块写入临时缓存区之前,在随机存取存储器(Random Access Memory,RAM)中创建一个预设容量的临时缓存区,所述临时缓存区用于缓存所述目标区块。
[0053] 示例性的,所述共识节点创建一个容量为L的临时缓存区,所述临时缓存区将所述目标区块作为临时数据保存,所述临时缓存区能存储L个缓存区块。
[0054] 具体地,所述共识节点将所述待写入区块链的目标区块先写入所述临时缓存区,得到所述目标区块对应的缓存区块;然后所述共识节点再将所述临时缓存区中的缓存区块依次写入目标磁盘中的区块链上。
[0055] 在一些实施例中,将目标区块先写入所述临时缓存区中,若所述目标区块有四个,将所述目标区块依次缓存到所述临时缓存区中,得到A、B、C、D四个缓存区块,其中缓存区块A是最早缓存的,缓存区块D是最后缓存的。
[0056] 所述共识节点先将所述目标区块缓存到所述临时缓存区,可以将所述目标区块作为临时数据保存到所述临时缓存区;所述临时缓存区中的缓存区块可以分发给对应的数据节点,而不必等到将所述目标区块保存到所述目标磁盘中的区块链上后再从所述区块链上读取并分发给对应的数据节点。
[0057] 由于所述随机存取存储器的写入速度比所述目标磁盘的写入速度快很多,因此所述共识节点将所述目标区块写入所述临时缓存区比写入所述目标磁盘的速度快很多。通过将目标区块写入到临时缓存区中,可以实现将所述目标区块快速地分发给监听的数据节点,降低目标区块分发的延迟。
[0058] 具体地,所述共识节点在将所述目标区块写入临时缓存区之后,向正在监听的数据节点发送用于表示所述目标区块已写入区块链的已写入通知。
[0059] 具体地,所述数据节点用于监听是否有已写入通知生成或者主动发起区块读取请求。
[0060] 示例性的,所述共识节点将获取的目标区块写入所述临时缓存区后,所述临时缓存区中得到一个与所述目标区块对应的缓存区块,可以表示所述目标区块写入区块链成功。因此所述共识节点产生一个与所述缓存区块对应的已写入通知。所述共识节点将所述已写入通知广播到区块链网络,以将所述已写入通知发送给正在监听的数据节点。
[0061] 具体地,所述已写入通知用于表示所述临时缓存区中有缓存区块生成。
[0062] 具体地,所述已写入通知与所述临时缓存区中缓存区块对应,并包含所述缓存区块的描述信息,例如所述描述信息可以包括所述缓存区块对应的哈希值。
[0063] 通过发送所述缓存区块对应的已写入通知,可以实现快速将所述临时缓存区中的缓存区块分发给监听的数据节点,降低缓存区块分发的延迟,提高交易的处理效率。
[0064] 步骤S30、若接收到所述数据节点根据所述已写入通知发送的区块接收请求,将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送。
[0065] 具体地,区块链网络中的数据节点用于实时监听区块链网络中是否有目标区块对应的已写入通知。若监听到区块链网络中有已写入通知生成,所述数据节点则响应所述已写入通知并发送一个与所述已写入通知对应的区块接收请求。
[0066] 示例性的,所述响应可以包括根据所述已写入通知携带的描述信息,生成一个与所述已写入通知对应的区块接收请求。所述区块接收请求包括所述已写入通知包含的缓存区块的描述信息。所述描述信息可以包括缓存区块的哈希值。
[0067] 具体地,所述共识节点若接收到所述数据节点根据所述已写入通知发送的区块接收请求,将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送。
[0068] 具体地,所述共识节点在所述临时缓存区中查询与所述区块接收请求中的描述信息一致的缓存区块,将所述缓存区块发送到所述区块接收请求对应的数据节点。
[0069] 在一些实施例中,所述共识节点根据所述区块接收请求的描述信息,从所述临时缓存区中查询哈希值与所述描述信息中的哈希值一致的缓存区块。例如,所述共识节点在所述临时缓存区中查询到缓存区块A的哈希值与所述描述信息中的哈希值保持一致,则将所述缓存区块A返回给所述区块接收请求对应的数据节点。
[0070] 具体地,若有多个监听的数据节点响应于所述已写入通知的区块接收请求,则所述共识节点多次从所述临时缓存区中查询与所述已写入通知对应的缓存区块,并将哈希值一致的缓存区块后分别返回给所述区块接收请求对应的数据节点。
[0071] 通过根据监听的数据节点的区块接收请求,由所述共识节点将所述临时缓存区中的缓存区块读取并发送给监听的数据节点,可以实现快速分发区块,还可以有效减少读取磁盘的频率,从而延长磁盘的使用寿命。
[0072] 步骤S40、将所述缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链中。
[0073] 示例性的,所述目标磁盘中存储有区块链。例如,所述目标磁盘中存储有全量数据的区块链,或者存储包括部分区块的部分区块链。
[0074] 所述共识节点可以读取所述目标磁盘中的区块链;或者将缓存区块写入所述目标磁盘,以将所述缓存区块加入区块链中。
[0075] 示例性的,所述目标磁盘为非易失性存储器,例如机械硬盘、固态硬盘、智能存储卡、安全数字卡或闪存卡。
[0076] 具体地,所述共识节点将所述目标区块作为临时数据保存到所述临时缓存区后,还需要将所述临时缓存区中的缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链中。所述共识节点通过将所述缓存区块加入区块链中存储,可以实现对所述目标区块进行持久化。
[0077] 需要说明的是,所述持久化是一种将程序或数据在瞬时状态转换成持久状态的机制,例如将所述临时缓存区中临时保存的缓存区块写入所述目标磁盘中的区块链进行持久化保存。
[0078] 具体地,所述共识节点基于先入先出的规则,根据所述临时缓存区中各所述缓存区块的写入顺序,将各所述缓存区块依次写入所述目标磁盘,以将各所述缓存区块加入到所述目标磁盘存储的区块链中。
[0079] 所述先入先出是指按顺序将先缓存在所述临时缓存区中的缓存区块先写入目标磁盘,后缓存在所述临时缓存区中的缓存区块后写入目标磁盘。
[0080] 示例性的,所述共识节点将步骤S20中得到的缓存区块按照先入先出的规则放入待写入磁盘队列中,以将所述缓存区块写入所述目标磁盘并更新磁盘文件中的区块链。
[0081] 在一些实施例中,所述临时缓存区中依次缓存有A、B、C、D四个缓存区块,其中缓存区块A是最早缓存的,缓存区块D是最后缓存的;所述共识节点在将A、B、C、D四个缓存区块写入所述目标磁盘时,先将缓存区块A放入待写入磁盘队列中,然后依次将缓存区块B、C、D放入待写入磁盘队列中,以将所述缓存区块写入所述目标磁盘并更新磁盘文件中的区块链。
[0082] 具体地,所述共识节点在将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块时,若所述临时缓存区已写满,且进行阻塞等待的目标区块的数量大于预设阈值,增大所述临时缓存区的容量。
[0083] 具体地,在增大所述临时缓存区的容量后,所述共识节点可以根据所述临时缓存区的容量增大幅度调节所述待写入磁盘队列的大小,以将更多的缓存区块加入所述待写入磁盘队列中,保证将处于阻塞等待状态的目标区块尽量缓存到所述临时缓存区中。
[0084] 在一些实施例中,若所述临时缓存区的容量L增大,增大幅度为2,则所述共识节点需要将所述待写入磁盘队列的大小增大2个缓存区块长度。所述待写入磁盘队列的大小增加2个缓存区块长度后,可以多放入2个缓存区块。
[0085] 所述共识节点根据所述临时缓存区的容量调节所述待写入磁盘队列的大小,以满足在不同交易量的场景下,区块链系统均可以高效运行。
[0086] 所述共识节点先将目标区块缓存到所述临时缓存区中,再将所述临时缓存区中的缓存区块写入到所述目标磁盘中的区块链进行持久化;在接收到数据节点的区块接收请求时,所述共识节点优先从所述临时缓存区中获取缓存区块并分发给对应的数据节点,通过将缓存区块的分发过程与持久化过程隔离,可以有效提升整个区块链系统的稳定性,同时减少读取目标磁盘的频率。
[0087] 请参阅图2,图2是步骤S20中将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,并向数据节点发送用于表示所述目标区块已写入区块链的已写入通知的示意图,具体包括以下步骤S201至步骤S204。
[0088] 步骤S201、根据所述临时缓存区中已存储缓存区块的个数判断所述临时缓存区是否已写满。
[0089] 由于所述临时缓存区的容量是有限的,最多可以缓存L个缓存区块,因此所述共识节点在将所述目标区块写入所述临时缓存区时,需要判断所述临时缓存区是否已写满。
[0090] 具体地,所述共识节点根据所述临时缓存区中已存储的缓存区块的个数判断所述临时缓存区是否已写满。
[0091] 示例性的,若所述临时缓存区中已存储的缓存区块个数小于L,则所述共识节点判定所述临时缓存区未写满;若所述临时缓存区中已存储的缓存区块个数恰好是L个,则所述共识节点判定所述临时缓存区是已写满的。
[0092] 步骤S202、若所述临时缓存区未写满,将所述目标区块写入所述临时缓存区,得到所述目标区块对应的缓存区块。
[0093] 示例性的,若所述临时缓存区中已存储的缓存区块个数小于L,则所述共识节点判定所述临时缓存区未写满。
[0094] 具体地,所述共识节点在判定所述临时缓存区未写满之后,将所述目标区块依次写入所述临时缓存区,得到所述目标区块对应的缓存区块。
[0095] 步骤S203、若所述临时缓存区已写满,对所述目标区块进行阻塞等待。
[0096] 示例性的,若所述临时缓存区中已存储的缓存区块个数等于L,则所述共识节点判定所述临时缓存区是已写满的。
[0097] 具体地,所述共识节点在判定所述临时缓存区已写满之后,对所述目标区块进行阻塞等待。
[0098] 需要说明的是,所述临时缓存区中的缓存区块被放入待写入磁盘队列之前,所述缓存区块不允许从所述临时缓存区中剔除。例如,当有目标区块需要写入所述临时缓存区时,若所述临时缓存区已写满且最早写入所述临时缓存区的缓存区块还没放入到待写入磁盘队列中,则所述目标区块需要阻塞等待,直到最早写入所述临时缓存区的缓存区块在写入目标磁盘之后被剔除而在所述临时缓存区中产生空位。
[0099] 具体地,所述剔除是指将写入所述目标磁盘后的缓存区块从所述临时缓存区中删除。
[0100] 在一些实施例中,所述共识节点将所述目标区块写入所述临时缓存区时,若所述临时缓存区已写满,则将所述目标区块进行阻塞等待;直到所述临时缓存区中的第一个缓存区块在写入所述目标磁盘后从所述临时缓存区中删除后,所述共识节点将所述阻塞等待的目标区块继续写入所述临时缓存区。
[0101] 示例性的,所述第一个缓存区块是指所述临时缓存区中缓存时间最早的缓存区块;所述第一个缓存区块相对于所述临时缓存区中的其它缓存区块,可以先写入所述目标磁盘中。
[0102] 具体地,所述目标区块在阻塞等待时不消耗所述临时缓存区的内存空间。
[0103] 在所述临时缓存区已写满时,通过对所述目标区块进行阻塞等待,可以防止所述临时缓存区导致内存溢出,避免所述临时缓存区出现异常错误。
[0104] 步骤S204、若所述临时缓存区中有缓存区块写入所述目标磁盘,停止对所述目标区块进行阻塞等待并将所述目标区块写入所述临时缓存区,得到所述目标区块对应的缓存区块。
[0105] 具体地,所述共识节点在将所述目标区块缓存到所述临时缓存区后,还可以将所述临时缓存区中的缓存区块依次加入待写入磁盘队列中,以将所述临时缓存区中的缓存区块写入所述目标磁盘的区块链中。在所述缓存区块写入所述目标磁盘后,所述共识节点将所述缓存区块删除,则所述临时缓存区中产生空位。
[0106] 示例性的,所述共识节点在对所述目标区块进行阻塞等待之后,若所述临时缓存区中有缓存区块写入所述目标磁盘而在所述临时缓存区中产生空位,则所述共识节点停止对所述目标区块进行阻塞等待。
[0107] 具体地,所述共识节点将处于阻塞等待状态的所述目标区块重新写入临时缓存区,可以得到所述目标区块对应的缓存区块。
[0108] 请参阅图2,图2是步骤S20将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,并向数据节点发送用于表示所述目标区块已写入区块链的已写入通知的示意图,还包括以下步骤S205和步骤S206。
[0109] 步骤S205、若所述临时缓存区已写满,且进行阻塞等待的目标区块的数量大于预设阈值,增大所述临时缓存区的容量。
[0110] 示例性的,如果所述共识节点获取的目标区块的过多,则阻塞等待的目标区块也增多。为了快速将所述阻塞等待的目标区块缓存到临时缓存区中,所述共识节点需要根据所述阻塞等待的区块对所述临时缓存区的容量进行调节。
[0111] 具体地,若处于阻塞等待状态的目标区块的数量达到预设值,所述共识节点增大所述临时缓存区的容量,以将所述阻塞等待的目标区块缓存到临时缓存区中。
[0112] 示例性的,所述预设值可以取3。
[0113] 在一些实施例中,若处于阻塞等待状态的目标区块的个数达到3时,所述共识节点则增大所述临时缓存区的容量,例如所述共识节点将所述临时缓存区的容量增大2个区块长度。此时所述临时缓存区的容量为L+2,可以存储L+2个缓存区块。
[0114] 通过根据处于阻塞等待状态的目标区块的数量调节所述临时缓存区的容量,可以防止所述临时缓存区导致内存溢出;同时可以满足在不同交易量的场景下,区块链系统均可以高效运行。
[0115] 步骤S206、停止对所述目标区块进行阻塞等待并将所述目标区块写入增大容量后的临时缓存区,得到所述目标区块对应的缓存区块。
[0116] 具体地,所述共识节点在增大所述临时缓存区的容量后,所述临时缓存区可以存储更多的缓存区块。
[0117] 具体地,在增大所述临时缓存区的容量后,所述临时缓存区中产生空位;因此所述共识节点可以停止对所述目标区块进行阻塞等待,将所述目标区块依次写入增大容量后的临时缓存区,得到所述目标区块对应的缓存区块。
[0118] 请参阅图3,图3是步骤S30中若接收到所述数据节点根据所述已写入通知发送的区块接收请求,将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送之后执行步骤的示意图,具体包括以下步骤S31至步骤S32。
[0119] 步骤S31、获取所述数据节点对接收到的缓存区块进行交易验证的交易验证结果。
[0120] 具体地,所述共识节点将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送之后,所述数据节点对所述共识节点发送的缓存区块进行交易验证。
[0121] 示例性的,所述数据节点根据验证系统链码(Endorsement System Chaincode,VSCC)对返回的缓存区块进行交易验证。需要说明的是,所述VSCC主要用于验证所述返回的缓存区块的背书签名是否有效、背书签名是否来自有效的背书节点以及是否满足背书策略。
[0122] 具体地,所述数据节点对所述共识节点发送的缓存区块进行交易验证,若交易验证不通过,将交易验证结果的值置1;若交易验证通过,将交易验证结果的值置0。
[0123] 在一些实施例中,若交易验证通过,所述数据节点根据所述接收的缓存区块更新本地的区块链账本数据,并将所述缓存区块以及所述缓存区块对应的交易验证结果发送给所述数据节点对应的客户端,整个交易流程结束;若交易验证结果不通过,所述数据节点将所述缓存区块删除。
[0124] 通过对接收的缓存区块进行交易验证,可以避免将存在错误的缓存区块更新到本地的区块链账本数据。
[0125] 具体地,所述数据节点对接收到的缓存区块进行交易验证之后,所述共识节点获取所述数据节点对所述缓存区块进行交易验证的交易验证结果。例如,所述共识节点获取的交易验证结果为0或1。
[0126] 步骤S32、若根据所述交易验证结果判定所述缓存区块包括错误的交易,则从所述临时缓存区中将所述缓存区块删除。
[0127] 示例性的,所述共识节点获取所述数据节点对所述接收到的缓存区块进行交易验证的交易验证结果后,根据交易验证结果判断所述缓存区块是否正确。若所述交易验证结果为0,说明所述缓存区块通过所述数据节点的交易验证,则判定所述缓存区块是正确的;若所述交易验证结果为1,说明所述缓存区块没有通过所述数据节点的交易验证,则判定所述缓存区块包括错误的交易。
[0128] 具体地,在判定所述缓存区块包括错误的交易之后,将所述缓存区块从所述临时缓存区中删除,可以避免将包括错误的交易的缓存区块写入所述目标磁盘中的区块链上。
[0129] 具体地,所述数据节点将所述缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链中之后,还可以接收区块读取请求,如图4所示,具体包括以下步骤S50至步骤S70。
[0130] 步骤S50、若接收到所述数据节点发送的区块读取请求,查询所述临时缓存区中是否存在与所述区块读取请求对应的缓存区块。
[0131] 在区块链系统中,一些数据节点可以主动向所述共识节点发送区块读取请求,以从所述共识节点读取与所述区块读取请求对应的区块。
[0132] 示例性的,所述数据节点可以根据对应客户端的交易请求主动发起区块读取请求,以获取区块链中的区块。
[0133] 具体地,所述区块读取请求中包含待读取区块的信息,例如包含待读取区块的哈希值。
[0134] 具体地,当有数据节点主动发起区块读取请求时,所述共识节点获取所述区块读取请求,得到所述区块读取请求中包含待读取区块的哈希值。根据所述待读取区块的哈希值,所述共识节点优先在所述临时缓存区中查找哈希值与所述待读取区块的哈希值一致的缓存区块。
[0135] 示例性的,所述共识节点从所述临时缓存区中查找哈希值与所述待读取区块的哈希值一致的缓存区块,若存在哈希值与所述待读取区块的哈希值一致的缓存区块,所述共识节点将所述缓存区块返回给所述区块读取请求对应的数据节点。若所述临时缓存区中不存在任一哈希值与所述待读取区块的哈希值一致的缓存区块,则所述共识节点从所述目标磁盘上的区块链中查询哈希值与所述待读取区块的哈希值一致的区块,并将查询到符合条件的区块返回给所述区块读取请求对应的数据节点。
[0136] 通过优先在所述临时缓存区中查询符合条件的缓存区块,其次才在所述目标磁盘中查询,可以减少对所述目标磁盘的读取频率,从而延长所述目标磁盘的寿命。
[0137] 步骤S60、若所述临时缓存区中存在与所述区块读取请求对应的缓存区块,则将所述缓存区块向所述数据节点发送。
[0138] 具体地,在接收所述数据节点的区块读取请求后,所述共识节点优先在所述临时缓存区中查找哈希值与所述区块读取请求中待读取区块的哈希值一致的缓存区块。
[0139] 示例性的,若所述临时缓存区中存在哈希值与所述待读取区块的哈希值一致的缓存区块,所述共识节点从所述临时缓存区中将对应的所述缓存区块返回到所述区块读取请求对应的数据节点。
[0140] 由于随机存取存储器相对于磁盘的读取速度快很多,因此在所述临时缓存区中读取区块的速度比所述目标磁盘中读取区块的速度快很多。所述共识节点优先从所述临时缓存区读取缓存区块,可以实现快速地读取缓存区块并分发给数据节点,降低缓存区块分发的延迟。
[0141] 所述共识节点将读取的缓存区块快速返回给对应的数据节点,所述数据节点根据返回的缓存区块进行验证,提升交易的处理效率,缩短交易的整个流程的时间,从而有效提升整个区块链系统的吞吐量。
[0142] 请参阅图5,图5是步骤S60中将所述缓存区块向所述数据节点发送之后执行步骤的示意图,具体还包括以下步骤S61至步骤S62。
[0143] 步骤S61、获取所述数据节点对接收到的缓存区块进行验证的验证结果。
[0144] 具体地,所述共识节点将所述临时缓存区中对应于所述区块读取请求的缓存区块向所述数据节点发送之后,所述数据节点对所述共识节点发送的缓存区块进行验证。
[0145] 具体地,所述数据节点对所述接收到的缓存区块的哈希值进行验证。若所述缓存区块的哈希值与所述区块读取请求中包含的待读取区块的哈希值不一致,则判定所述缓存区块出现错误。所述缓存区块出现错误的原因可能是所述共识节点在发送所述缓存区块的过程中,所述缓存区块出现字节丢失或被篡改。
[0146] 示例性的,若所述缓存区块是错误的,所述数据节点将所述缓存区块对应的验证结果置1;若所述缓存区块是正确的,所述数据节点将所述缓存区块对应的验证结果置0。
[0147] 在一些实施例中,若所述缓存区块经过验证,判定是错误的区块,则所述数据节点将所述缓存区块对应的验证结果置1,以表示所述缓存区块是错误的;所述数据节点将所述错误的缓存区块删除。
[0148] 在另一些实施例中,若所述缓存区块经过验证,判定是正确的区块,则所述数据节点将所述缓存区块对应的验证结果置0,以表示所述缓存区块是正确的。所述数据节点将所述接收到的缓存区块更新到本地的区块链账本数据,并将所述缓存区块以及所述缓存区块对应的验证结果发送给所述数据节点对应的客户端。
[0149] 具体地,所述数据节点对所述缓存区块进行验证之后,所述共识节点获取所述数据节点对所述缓存区块进行验证的验证结果。
[0150] 通过对接收到的缓存区块进行验证,数据节点将出现错误的缓存区块删除,可以避免将存在错误的缓存区块更新到本地的区块链账本数据。
[0151] 步骤S62、若根据所述验证结果判定所述缓存区块错误,则再次将所述临时缓存区中的所述缓存区块向所述数据节点发送。
[0152] 示例性的,所述共识节点在获取所述缓存区块对应的验证结果后,根据所述验证结果判断所述临时缓存区中对应于所述区块读取请求的缓存区块在发送过程中是否出现错误。若所述验证结果为0,则判定所述缓存区块在发送过程中没有出现错误;若所述验证结果为1,则判定所述缓存区块在发送过程中出现错误。
[0153] 具体地,在判定所述缓存区块在发送过程中出现错误之后,所述共识节点再次从所述临时缓存区中将所述缓存区块发送到所述区块读取请求对应的数据节点。
[0154] 通过对接收到的缓存区块进行验证,可以及时发现出现错误的缓存区块,避免将错误的缓存区块更新到本地的区块链账本数据;通过获取验证结果,可以实现再次从临时缓存区中读取对应的缓存区块和分发给数据节点,有利于提升交易的处理效率,缩短交易的整个流程的时间。
[0155] 步骤S70、若所述临时缓存区中不存在与所述区块读取请求对应的缓存区块,则从所述目标磁盘中读取与所述区块读取请求对应的区块,将所述区块向所述数据节点发送。
[0156] 具体地,在接收所述数据节点的区块读取请求后,所述共识节点优先在所述临时缓存区中查询是否存在与所述区块读取请求对应的缓存区块。
[0157] 示例性的,若所述临时缓存区中不存在与所述区块读取请求对应的缓存区块,例如所述临时缓存区中不存在任一哈希值与所述待读取区块的哈希值一致的缓存区块,可能原因是哈希值与所述待读取区块的哈希值一致的缓存区块在写入所述目标磁盘后,所述缓存区块从所述临时缓存区中被剔除。因此所述共识节点需要从所述目标磁盘中读取与所述区块读取请求对应的区块。
[0158] 具体地,所述共识节点在所述目标磁盘的区块链中查询哈希值与所述待读取区块的哈希值一致的区块,将所述区块链中哈希值与所述待读取区块的哈希值一致的区块向所述数据节点发送。
[0159] 只有当所述临时缓存区不存在哈希值与所述待读取区块的哈希值一致的缓存区块时,所述共识节点才从所述目标磁盘中读取区块链中与所述待读取区块的哈希值对应的区块,可以有效减少读取所述目标磁盘的频率,从而延长所述目标磁盘的使用寿命。
[0160] 请参阅图6,图6是步骤S70中将所述区块向所述数据节点发送之后执行步骤的示意图,具体还包括以下步骤S71至步骤S72。
[0161] 步骤S71、获取所述数据节点对接收到的区块进行验证的验证结果。
[0162] 具体地,所述共识节点将所述目标磁盘中对应于所述区块读取请求对应的区块向所述数据节点发送之后,所述数据节点对所述区块的哈希值进行验证。
[0163] 具体地,若所述区块的哈希值与所述区块读取请求中包含的待读取区块的哈希值不一致,则说明所述区块出现错误。所述区块出现错误的原因可能是所述共识节点在发送所述区块的过程中,所述区块出现字节丢失或被篡改。
[0164] 示例性的,若所述区块是错误的,将所述区块对应的验证结果置1;若所述区块是正确的,将所述区块对应的验证结果置0。
[0165] 在一些实施例中,若所述缓存区块经过验证,判定是错误的区块,则所述数据节点将所述区块对应的验证结果置1,以表示所述区块是错误的。所述数据节点将所述错误的区块删除。
[0166] 在另一些实施例中,若所述区块经过验证,判定是正确的区块,则所述数据节点将所述区块对应的验证结果置0,以表示所述区块是正确的。所述数据节点将所述接收到的区块更新到本地的区块链账本数据,并所述区块以及所述区块对应的验证结果发送给所述数据节点对应的客户端。
[0167] 具体地,所述数据节点对所述区块进行验证之后,所述共识节点获取所述数据节点对所述区块进行验证的验证结果。
[0168] 通过对接收到的区块进行验证,数据节点将出现错误的区块删除,可以避免将存在错误的区块更新到本地的区块链账本数据。
[0169] 步骤S72、若根据所述验证结果判定所述区块错误,则再次从所述目标磁盘中将所述区块向所述数据节点发送。
[0170] 示例性的,所述共识节点在获取所述区块对应的验证结果后,根据所述验证结果判断所述目标磁盘的区块链中对应于所述区块读取请求的区块在发送过程中是否出现错误。
[0171] 示例性的,若所述验证结果为0,则判定所述区块在发送过程中没有出现错误;若所述验证结果为1,则判定所述区块在发送过程中出现错误。
[0172] 具体地,在判定所述区块在发送过程中出现错误之后,所述共识节点再次将所述区块从所述目标磁盘的区块链中读取并发送到所述区块读取请求对应的数据节点。
[0173] 通过对接收到的区块进行验证,可以及时发现出现错误的区块,避免将错误的区块更新到本地的区块链账本数据;通过获取验证结果,可以实现再次从目标磁盘中的区块链读取对应的区块和返回给数据节点,有利于提升交易的处理效率,缩短交易的整个流程的时间。
[0174] 上述实施例提供的区块链的区块分发方法,通过先将目标区块写入临时缓存区和分发给数据节点,然后再将临时缓存区中的缓存区块写入目标磁盘,可以将缓存区块的分发到数据节点和写入目标磁盘的过程隔离,降低区块分发的延迟,实现减少对目标磁盘的读取频率的效果。通过对写入临时缓存区的目标区块进行阻塞等待和增大临时缓存区的容量,可以防止内存溢出,满足在在不同交易量的场景下,区块链系统均可以高效运行。通过获取数据节点上的交易验证结果,可以避免将错误的缓存区块写入目标磁盘中的区块链上。在接收到数据节点的区块读取请求时,优先从临时缓存区中查询是否有符合条件的缓存区块,其次才在目标磁盘中查询,可以减少对目标磁盘的读取频率,从而延长目标磁盘的寿命。
[0175] 请参阅图7,图7是本申请的实施例还提供一种区块链的区块分发装置的示意性框图,该区块链的区块分发装置用于执行前述的区块链的区块分发方法。其中,该区块链的区块分发装置可以配置于服务器或终端中。
[0176] 如图7所示,该区块链的区块分发装置100,包括:区块获取模块101、第一区块写入模块102、第一区块发送模块103和第二区块写入模块104。
[0177] 区块获取模块101,用于获取待写入区块链的目标区块。
[0178] 第一区块写入模块102,用于将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,并向数据节点发送用于表示所述目标区块已写入区块链的已写入通知。
[0179] 第一区块发送模块103,用于若接收到所述数据节点根据所述已写入通知发送的区块接收请求,将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送。
[0180] 第二区块写入模块104,用于将所述缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链中。
[0181] 在一些实施例中,如图7所示,该区块链的区块分发装置100,还包括:查询模块105、第二区块发送模块106和第三区块发送模块107。
[0182] 查询模块105,用于若接收到所述数据节点发送的区块读取请求,查询所述临时缓存区中是否存在与所述区块读取请求对应的缓存区块。
[0183] 第二区块发送模块106,用于若所述临时缓存区中存在与所述区块读取请求对应的缓存区块,则将所述缓存区块向所述数据节点发送。
[0184] 第三区块发送模块107,用于若所述临时缓存区中不存在与所述区块读取请求对应的缓存区块,则从所述目标磁盘中读取与所述区块读取请求对应的区块,将所述区块向所述数据节点发送。
[0185] 在一些实施例中,如图8所示,该第一区块写入模块102,包括:判断子模块1021、第一写入子模块1022、阻塞等待子模块1023、第二写入子模块1024、容量增大子模块1025和第三写入子模块1026。
[0186] 判断子模块1021,用于根据所述临时缓存区中已存储缓存区块的个数判断所述临时缓存区是否已写满。
[0187] 第一写入子模块1022,用于若所述临时缓存区未写满,将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块。
[0188] 阻塞等待子模块1023,用于若所述临时缓存区已写满,对所述目标区块进行阻塞等待。
[0189] 第二写入子模块1024,用于若所述临时缓存区中有缓存区块写入所述目标磁盘,停止对所述目标区块进行阻塞等待并将所述目标区块写入所述临时缓存区,得到所述目标区块对应的缓存区块。
[0190] 容量增大子模块1025,用于若所述临时缓存区已写满,且进行阻塞等待的目标区块的数量大于预设阈值,增大所述临时缓存区的容量。
[0191] 第三写入子模块1026,用于停止对所述目标区块进行阻塞等待并将所述目标区块写入增大容量后的临时缓存区,得到所述目标区块对应的缓存区块。
[0192] 在一些实施例中,如图8所示,该区块链的区块分发装置100还包括:第一验证模块108和区块删除模块109。
[0193] 第一验证模块108,用于获取所述数据节点对接收到的缓存区块进行交易验证的交易验证结果。
[0194] 区块删除模块109,用于若根据所述交易验证结果判定所述缓存区块包括错误的交易,则从所述临时缓存区中将所述缓存区块删除。
[0195] 在一些实施例中,如图8所示,该区块链的区块分发装置100,还包括:第二验证模块110和第二区块发送子模块111。
[0196] 第二验证模块110,用于获取所述数据节点对接收到的缓存区块进行验证的验证结果。
[0197] 第二区块发送子模块111,用于若根据所述验证结果判定所述缓存区块错误,则再次将所述临时缓存区中的所述缓存区块向所述数据节点发送。
[0198] 在一些实施例中,如图8所示,该区块链的区块分发装置100,还包括:第三验证模块112和第三区块发送子模块113。
[0199] 第三验证模块112,用于获取所述数据节点对接收到的区块进行验证的验证结果。
[0200] 第三区块发送子模块113,用于若根据所述验证结果判定所述区块错误,则再次从所述目标磁盘中将所述区块向所述数据节点发送。
[0201] 需要说明的是,所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和各模块、单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0202] 本申请的方法、装置可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
[0203] 上述的方法、装置可以实现为一种计算机程序的形式,该计算机程序可以在如图9所示的计算机设备上运行。
[0204] 请参阅图9,图9是本申请实施例提供的一种计算机设备的结构示意性框图。该计算机设备可以是终端或服务器。其中,终端可以是智能手机、平板电脑、笔记本电脑、台式电脑、个人数字助理和穿戴式设备等电子设备。服务器可以为独立的服务器,也可以为服务器集群。
[0205] 请参阅图9,该计算机设备包括通过系统总线连接的处理器和存储器,其中,存储器可以包括非易失性存储介质和内存储器。
[0206] 处理器用于提供计算和控制能支撑整个计算机设备的运行。
[0207] 内存储器为非易失性存储介质中的计算机程序的运行提供环境,该计算机程序被处理器执行时,可使得处理器执行任意一种区块链的区块分发方法。
[0208] 应当理解的是,处理器可以是中央处理单元(Central Processing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0209] 其中,在一个实施例中,所述处理器用于运行存储在存储器中的计算机程序,以实现如下步骤:
[0210] 获取待写入区块链的目标区块;将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块,并向数据节点发送用于表示所述目标区块已写入区块链的已写入通知;若接收到所述数据节点根据所述已写入通知发送的区块接收请求,将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送;将所述缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链中。
[0211] 在一个实施例中,所述处理器还用于实现如下步骤:
[0212] 若接收到所述数据节点发送的区块读取请求,查询所述临时缓存区中是否存在与所述区块读取请求对应的缓存区块;若所述临时缓存区中存在与所述区块读取请求对应的缓存区块,则将所述缓存区块向所述数据节点发送;若所述临时缓存区中不存在与所述区块读取请求对应的缓存区块,则从所述目标磁盘中读取与所述区块读取请求对应的区块,将所述区块向所述数据节点发送。
[0213] 在一个实施例中,所述处理器在实现将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块时,用于实现:
[0214] 若所述临时缓存区未写满,将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块;若所述临时缓存区已写满,对所述目标区块进行阻塞等待;若所述临时缓存区中有缓存区块写入所述目标磁盘,停止对所述目标区块进行阻塞等待并将所述目标区块写入所述临时缓存区,得到所述目标区块对应的缓存区块。
[0215] 在一个实施例中,所述处理器在实现将所述目标区块写入临时缓存区,得到所述目标区块对应的缓存区块时,还用于实现:
[0216] 根据所述临时缓存区中已存储缓存区块的个数判断所述临时缓存区是否已写满;若所述临时缓存区已写满,且进行阻塞等待的目标区块的数量大于预设阈值,增大所述临时缓存区的容量;停止对所述目标区块进行阻塞等待并将所述目标区块写入增大容量后的临时缓存区,得到所述目标区块对应的缓存区块。
[0217] 在一个实施例中,所述处理器在实现将所述缓存区块写入目标磁盘,以将所述缓存区块加入到所述目标磁盘存储的区块链时,用于实现:
[0218] 基于先入先出的规则,根据所述临时缓存区中各所述缓存区块的写入顺序,将各所述缓存区块依次写入目标磁盘,以将各所述缓存区块加入到所述目标磁盘存储的区块链中。
[0219] 在一个实施例中,所述处理器在实现将所述临时缓存区中对应于所述区块接收请求的缓存区块向所述数据节点发送之后,还用于实现:
[0220] 获取所述数据节点对接收到的缓存区块进行交易验证的交易验证结果;若根据所述交易验证结果判定所述缓存区块包括错误的交易,则从所述临时缓存区中将所述缓存区块删除。
[0221] 在一个实施例中,所述处理器在实现将所述缓存区块向所述数据节点发送之后,还用于实现:
[0222] 获取所述数据节点对接收到的缓存区块进行验证的验证结果;若根据所述验证结果判定所述缓存区块错误,则再次将所述临时缓存区中的所述缓存区块向所述数据节点发送。
[0223] 在一个实施例中,所述处理器在实现将所述区块向所述数据节点发送之后,还用于实现:
[0224] 获取所述数据节点对接收到的区块进行验证的验证结果;若根据所述验证结果判定所述区块错误,则再次从所述目标磁盘中将所述区块向所述数据节点发送。
[0225] 本申请的实施例中还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序中包括程序指令,所述处理器执行所述程序指令,实现本申请实施例提供的任一项区块链的区块分发方法。
[0226] 其中,所述计算机可读存储介质可以是前述实施例所述的计算机设备的内部存储单元,例如所述计算机设备的硬盘或内存。所述计算机可读存储介质也可以是所述计算机设备的外部存储设备,例如所述计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字卡(Secure Digital Card,SD Card),闪存卡(Flash Card)等。
[0227] 以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈