一种用于缓解节点存储压力的方法和系统与流程

文档序号:12471856阅读:177来源:国知局
一种用于缓解节点存储压力的方法和系统与流程

本发明涉及数字货币技术领域,尤其涉及一种用于缓解节点存储压力的方法和系统。



背景技术:

区块链由于其去中心化、高度透明、无需信任和数据无法篡改的特性,正在不断被应用到各个领域,但不可避免地产生了节点的存储压力不断增大的技术问题。以第一个区块链应用比特币为例,区块链数据量随时间呈线性增长,并且当前的区块大小已经不能将最近广播到网络中的全部交易包含进去,将来比特币扩容方案实施后,区块链存储的数据量会增长的更快,这会造成比特币完全节点(full node)的存储压力越来越大。

为解决上述问题,现有技术提供一种修简(prune)模式,运行在该模式的节点可以存储完整的未花费交易输出(unspent transaction outputs,缩写为UTXO)、区块索引、部分区块数据及回溯信息,其中,保留的区块数据和回溯信息的大小可以通过参数指定。一个完全节点在初始化时,仍然需要从创世区块开始下载区块数据,但当区块数据和回溯信息大于“-prune=N”参数中指定的大小(N,单位为MB)时,则将最老的区块删除,同时继续同步较新区块,并将区块数据和回溯信息维持在参数指定的大小。

但是,发明人发现,对于以上方式,仍然存在一些不足,例如,开启该模式后,虽然节点存储的数据量大大降低,但是由于历史交易无论其交易输出是否被花费,都已经被删除,则未花费交易输出就无法验证其来源,因此,导入钱包,导入地址,导入私钥等功能不再支持,导致用户使用不便。



技术实现要素:

本发明的目的在于提供一种用于缓解节点存储压力的方法和系统,用于在保证未花费交易输出的来源可验证的前提下,缓解节点存储压力。

为达到上述目的,本发明提供一种用于缓解节点存储压力的方法,采用如下技术方案:

用于缓解节点存储压力的方法包括:

步骤S1、确认高度低于特定区块的所有区块中未花费交易输出的比例;

步骤S2、将未花费交易输出的比例与特定比例进行比较;

步骤S3、在未花费交易输出的比例小于或者等于特定比例时,发起多次自动转入交易,自动转入交易与未花费交易输出一一对应;在自动转入交易中,输入地址和输出地址均为未花费交易输出的地址,输入金额和输出金额均为未花费交易输出的金额,以将该未花费交易输出转移至新的区块中;

步骤S4、删除已将未花费交易输出转移的区块。

具体地,步骤S1包括:通过遍历高度低于特定区块的所有区块的方式,查询包括未花费交易输出的区块,并确认高度低于特定区块的所有区块中未花费交易输出的比例。

具体地,步骤S2中特定比例为0.01%~0.02%。

具体地,步骤S3包括:

在未花费交易输出的比例小于或者等于特定比例时,确定未花费交易输出的确认次数;

将未花费交易输出的确认次数与其对应的必要的确认次数进行比较;

在未花费交易输出的确认次数大于或者等于其对应的必要的确认次数时,发起多次自动转入交易。

可选地,步骤S3还包括:

在未花费交易输出的确认次数小于其对应的必要的确认次数时,不发起多次自动转入交易,直至未花费交易输出的确认次数大于或者等于其对应的必要的确认次数时,发起多次自动转入交易。

可选地,步骤S3还包括:

在未花费交易输出的确认次数小于其对应的必要的确认次数时,不发起多次自动转入交易,记包含未达到确认次数的未花费交易输出的区块高度为H,只转移高度低于H的区块中的未花费交易输出。

可选地,用于缓解节点存储压力的方法还包括:

在未花费交易输出的比例大于特定比例时,设定新的特定区块,新的特定区块高度低于旧的特定区块,重新执行步骤S1、步骤S2、步骤S3和步骤S4。

在本发明提供的用于缓解节点存储压力的方法中,由于先确认高度低于特定区块的所有区块中未花费交易输出的比例,再将未花费交易输出的比例与特定比例进行比较,再在未花费交易输出的比例小于或者等于特定比例时,发起多次自动转入交易,自动转入交易与未花费交易输出一一对应,最后删除已将未花费交易输出转移的区块,从而在保证未花费交易输出的来源可验证的前提下,缓解了节点存储压力。

本发明还提供一种用于缓解节点存储压力的系统,该用于缓解节点存储压力的系统包括比例确认模块、比例比较模块、交易发起模块和删除模块;

其中,比例确认模块用于确认高度低于特定区块的所有区块中未花费交易输出的比例;

比例比较模块用于将未花费交易输出的比例与特定比例进行比较;

交易发起模块用于在未花费交易输出的比例小于或者等于特定比例时,发起多次自动转入交易,在自动转入交易中,输入地址和输出地址均为未花费交易输出的地址,输入金额和输出金额均为未花费交易输出的金额,以将该未花费交易输出转移至新的区块中;

删除模块用于删除已将未花费交易输出转移的区块。

可选地,用于缓解节点存储压力的系统还包括次数确认模块和次数比较模块;其中,

次数确认模块用于在未花费交易输出的比例小于或者等于特定比例时,确定未花费交易输出的确认次数;

次数比较模块用于将未花费交易输出的确认次数与其对应的必要的确认次数进行比较;

交易发起模块用于在未花费交易输出的确认次数大于或者等于其对应的必要的确认次数时,发起多次自动转入交易。

可选地,用于缓解节点存储压力的系统还包括特定区块设定模块,其中,特定区块设定模块用于对特定区块进行设定。

用于缓解节点存储压力的系统的有益效果和上述用于缓解节点存储压力的方法的有益效果相同,此处不再进行赘述。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中的用于缓解节点存储压力的方法的流程图一;

图2为本发明实施例中的用于缓解节点存储压力的方法的流程图二;

图3为本发明实施例中的用于缓解节点存储压力的系统的示意图。

附图标记说明:

1—比例确认模块; 2—比例比较模块; 3—交易发起模块;

4—删除模块; 5—次数确认模块; 6—次数比较模块;

7—特定区块设定模块。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

本发明实施例提供一种用于缓解节点存储压力的方法(以下简称为方法),如图1所示,该方法包括:

步骤S1、确认高度低于特定区块的所有区块中未花费交易输出的比例。

其中,特定区块可以为现有的最新的一个区块,也可以为现有的区块中的一个,本领域技术人员可以综合考虑当时的节点的存储压力、方法执行的难易以及效果进行合理选择,例如,当区块链中的区块数量达到3000个时,可以将第1000个区块设定为特定区块,也可以将第2000个区块设定为特定区块。当然,设定的特定区块越新,如果其满足后续各步骤的执行条件,则经过后续各步骤后,能够越好地缓解节点存储压力。

可选地,步骤S1具体为,通过遍历高度低于特定区块的所有区块的方式,查询包括未花费交易输出的区块,并确认高度低于特定区块的所有区块中未花费交易输出的比例。

步骤S2、将未花费交易输出的比例与特定比例进行比较。

对于以上特定比例,本领域技术人员可以根据实际需要进行选择,本发明实施例对此不进行限定。示例性地,本发明实施例中上述特定比例的取值范围为0.01%~0.02%。

步骤S3、在未花费交易输出的比例小于或者等于特定比例时,发起多次自动转入交易,自动转入交易与未花费交易输出一一对应。

其中,在自动转入交易中,输入地址和输出地址均为未花费交易输出的地址,输入金额和输出金额均为未花费交易输出的金额,以将该未花费交易输出转移至新的区块中。由于这些自动转入交易的输入地址和输出地址为同一地址,并且金额完全相同,因此,输入脚本中无需附带私钥签名,输出脚本与创建该未花费交易输出的输出脚本相同即可,处理方式简单。自动转入交易可由具备“记账”功能的节点发起。

示例性地,上述特定比例为0.01%,特定区块为第1000个区块,前1000个区块中的每个区块均包括1000笔交易,则当前1000个区块中共有的未花费交易输出小于或者等于100个时,发起多次自动转入交易,自动转入交易与未花费交易输出一一对应。

步骤S4、删除已将未花费交易输出转移的区块。

需要说明的是,步骤S4中删除已将未花费交易输出转移的区块包括多种情况,例如,删除所有已将未花费交易输出转移的区块,或者,删除部分已将未花费交易输出转移的区块。本领域技术人员可以根据节点的存储能力酌情删除已将未花费交易输出转移的区块。

另外,本发明中的用于缓解节点存储压力的方法不一定适用于所有节点,例如,在实际过程中,对于需要维护完整的区块链数据的部分节点,如区块链数据查询提供商,本发明中的用于缓解节点存储压力的方法就不适用。

在本发明提供的用于缓解节点存储压力的方法中,由于先确认高度低于特定区块的所有区块中未花费交易输出的比例,再将未花费交易输出的比例与特定比例进行比较,再在未花费交易输出的比例小于或者等于特定比例时,发起多次自动转入交易,自动转入交易与未花费交易输出一一对应,最后删除已将未花费交易输出转移的区块,从而在保证未花费交易输出的来源可验证的前提下,缓解了节点存储压力。

需要注意的是,在数字货币的交易过程中,例如在比特币的交易过程中,各交易均有其对应的必要的确认次数,尤其是铸币交易(generation transaction)输出,当该交易对应的确认次数小于必要的确认次数时,该交易仍存在被撤销的可能性,不应该将其进行转移。

在考虑到上述因素后,本发明实施例中,上述步骤S3具体包括:在未花费交易输出的比例小于或者等于特定比例时,确定未花费交易输出的确认次数;将未花费交易输出的确认次数与其对应的必要的确认次数进行比较;在未花费交易输出的确认次数大于或者等于其对应的必要的确认次数时,发起多次自动转入交易。

进一步地,步骤S3还包括:在未花费交易输出的确认次数小于其对应的必要的确认次数时,不发起多次自动转入交易,直至未花费交易输出的确认次数大于或者等于其对应的必要的确认次数时,发起多次自动转入交易。

或者,步骤S3还包括:在未花费交易输出的确认次数小于其对应的必要的确认次数时,不发起多次自动转入交易,记包含未达到确认次数的未花费交易输出的区块高度为H,只转移高度低于H的区块中的未花费交易输出。

此外,可选地,当高度低于特定区块的所有区块中的未花费交易输出的比例大于特定比例时,本发明实施例中的用于缓解节点存储压力的方法还包括:在未花费交易输出的比例大于特定比例时,设定新的特定区块,新的特定区块高度低于旧的特定区块,重新执行步骤S1、步骤S2、步骤S3和步骤S4。

实施例二

为了便于本领域技术人员理解和实施,下面本发明实施例提供一种最为具体的用于缓解节点存储压力的方法。

具体地,如图2所示,该用于缓解节点存储压力的方法包括:确认高度低于特定区块的所有区块中未花费交易输出的比例;将未花费交易输出的比例与特定比例进行比较,判断未花费交易输出的比例与特定比例的大小关系;若未花费交易输出的比例大于特定比例,则设定新的特定区块,从头开始;若未花费交易输出的比例小于或者等于特定比例,则确定未花费交易输出的确认次数,判断未花费交易输出的确认次数与其对应的必要的确认次数的大小关系;若未花费交易输出的确认次数大于或者等于其对应的必要的确认次数,发起多次自动转入交易,删除已将未花费交易输出转移的区块;若未花费交易输出的确认次数小于其对应的必要的确认次数,不发起多次自动转入交易,直至未花费交易输出的确认次数大于或者等于其对应的必要的确认次数时,发起多次自动转入交易,删除已将未花费交易输出转移的区块,或者,记包含未达到确认次数的未花费交易输出的区块高度为H,只转移高度低于H的区块中的未花费交易输出。

实施例三

本发明实施例提供一种用于缓解节点存储压力的系统,具体地,如图3所示,该用于缓解节点存储压力的系统包括比例确认模块1、比例比较模块2、交易发起模块3和删除模块4。

其中,比例确认模块1用于确认高度低于特定区块的所有区块中未花费交易输出的比例;比例比较模块2用于将未花费交易输出的比例与特定比例进行比较;交易发起模块3用于在未花费交易输出的比例小于或者等于特定比例时,发起多次自动转入交易;删除模块4用于删除已将未花费交易输出转移的区块。

在上述自动转入交易中,输入地址和输出地址均为未花费交易输出的地址,输入金额和输出金额均为未花费交易输出的金额,以将该未花费交易输出转移至新的区块中。

在本发明提供的用于缓解节点存储压力的系统的使用过程中,由于先通过比例确认模块1确认高度低于特定区块的所有区块中未花费交易输出的比例,再通过比例比较模块2将未花费交易输出的比例与特定比例进行比较,再通过交易发起模块3在未花费交易输出的比例小于或者等于特定比例时,发起多次自动转入交易,自动转入交易与未花费交易输出一一对应,最后通过删除模块4删除已将未花费交易输出转移的区块,从而在保证未花费交易输出的来源可验证的前提下,缓解了节点存储压力。

可选地,用于缓解节点存储压力的系统还包括次数确认模块5和次数比较模块6;其中,次数确认模块5用于在未花费交易输出的比例小于或者等于特定比例时,确定未花费交易输出的确认次数;次数比较模块6用于将未花费交易输出的确认次数与其对应的必要的确认次数进行比较。与之对应地,交易发起模块3用于在未花费交易输出的确认次数大于或者等于其对应的必要的确认次数时,发起多次自动转入交易。

可选地,用于缓解节点存储压力的系统还包括特定区块设定模块7,其中,特定区块设定模块7用于对特定区块进行设定。

需要说明的是,用于缓解节点存储压力的系统的使用过程的相关细节,本领域技术人员结合实施例一和实施例二中描述内容即可得知,此处不再进行赘述。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

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