区块链数据处理方法、装置、计算机设备和存储介质
技术领域
本申请涉及区块链
技术领域
,尤其是涉及一种区块链数据处理方法、装置、计算机设备和存储介质。背景技术
目前,区块链技术通常采用UTXO(Unspent Transaction Output,未花费的交易输出)模型进行数据存储。一笔交易由交易输入和交易输出组成,每一笔交易都要花费一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”,也就是UTXO。每一个UTXO相当于一个面值不可分割的支付额。例如,一个UTXO的面值可以是一个数字货币,也可以是一万个数字货币,也可以是其它数量的数字货币。通过UTXO存储方式可以有效同步数据,防止双花现象。
基于UTXO模型的存储方式,在实际交易中,UTXO金额与实际需要交易的金额不同,需要找零的情况非常常见,一次找零后,一个大数额的UTXO可能被分为多个小数额的UTXO。与此同时,多次找零后可能会聚集起数量众多的小数额UTXO。这些类似现金交易中“零钱”一样的UTXO数据带来了更多的交易数据量,会使UTXO数据集快速胀大,导致区块链系统面临严重的空间扩张问题,影响到整体运行效率。
发明内容
有鉴于此,本申请提供一种区块链数据处理方法、装置、计算机设备和存储介质。
本申请实施例的技术方案是这样实现的:
第一方面,提供了一种区块链数据处理方法,包括:
基于支付请求,从支付账户中选择出数额小于或等于预设阈值的第一未花费交易输出UTXO;
确定各所述第一UTXO的数额之和是否等于或大于所述支付请求涉及的支付额,得到确定结果;
根据所述确定结果,以所述第一UTXO作为至少部分目标UTXO,进行所述支付额的支付。
上述技术方案中,所述预设阈值为:使得将所述支付账户在预设时间内第一类支付次数和第二类支付次数之间的比值属于预设比值范围的支付额,其中,所述第一类支付次数为:支付额大于所述预设阈值的历史支付次数;所述第二类支付次数为:支付额等于或小于所述预设阈值的历史支付次数;
或者,
所述预设阈值为:所述支付账户在预设时间内历史支付额的平均支付额。
上述技术方案中,所述基于支付请求,从支付账户中选择出数额小于或等于预设阈值的第一未花费交易输出UTXO,包括:
在所述支付账户中所有的未花费交易输出UTXO的总数量大于预设数量阈值时,对所述支付账户中所有的未花费交易输出UTXO划分为多个候选集;
通过多线程并发的方式从多个所述候选集中选择出数额小于或等于所述预设阈值的所述第一UTXO。
上述技术方案中,所述根据所述确定结果,以所述第一UTXO作为至少部分目标UTXO,进行所述支付额的支付,包括:
在各所述第一UTXO的数额之和等于或大于所述支付额时,以至少一个所述第一UTXO作为全部所述目标UTXO进行所述支付额的支付;
在各所述第一UTXO的数额之和小于所述支付额时,以所有所述第一UTXO和所述支付账户中的至少一个第二UTXO响应所述支付请求,其中,所述第二UTXO的数额大于所述预设阈值。
上述技术方案中,所述在各所述第一UTXO的数额之和等于或大于所述支付额时,以至少一个所述第一UTXO作为全部所述目标UTXO进行所述支付额的支付,包括:
在各所述第一UTXO的数额之和等于或大于所述支付额时,以最多个数的所述第一UTXO作为全部所述目标UTXO进行所述支付额的支付;
或者,
在确定出多个第一UTXO的一种组合方式涉及的总额大于或等于所述支付额时,将总额大于或等于所述支付额的组合方式涉及的所述第一UTXO作为全部所述目标UTXO进行所述支付额的支付。
上述技术方案中,所述在各所述第一UTXO的数额之和小于所述支付额时,以所有所述第一UTXO和所述支付账户中的至少一个第二UTXO作为全部所述目标UTXO响应所述支付请求,包括:
在所有所述第一UTXO和至少一个所述第二UTXO的数额之和等于或大于所述支付额时,以所有所述第一UTXO和至少一个所述第二UTXO作为全部所述目标UTXO进行所述支付额的支付;
或者,
在确定出所有所述第一UTXO和多个所述第二UTXO的一种组合方式涉及的总额大于或等于所述支付额时,将总额大于或等于所述支付额的组合方式涉及的所述第一UTXO和所述第二UTXO作为全部所述目标UTXO进行所述支付额的支付。
上述技术方案中,所述方法还包括:
确定所述支付账户在当前预设时间内第一类支付次数和第二类支付次数之间的比值;
当确定出的所述比值小于所述预设比值范围的最小值时,调低所述预设阈值;
当确定出的所述比值大于所述预设比值范围的最大值时,调高所述预设阈值。
第二方面,提供了一种区块链数据处理装置,包括:
选择模块,用于基于支付请求,从支付账户中选择出数额小于或等于预设阈值的第一未花费交易输出UTXO;
确定模块,用于确定各所述第一UTXO的数额之和是否等于或大于所述支付请求涉及的支付额,得到确定结果;
支付模块,用于根据所述确定结果,以所述第一UTXO作为至少部分目标UTXO,进行所述支付额的支付。
第三方面,提供了一种计算机设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面任一所述方法。
第四方面,提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现第一方面任一所述方法。
本申请实施例所提供的一种区块链数据处理方法、装置、计算机设备和存储介质,通过基于支付请求,从支付账户中选择出数额小于或等于预设阈值的UTXO,确定各第一UTXO的数额之和是否等于或大于支付请求涉及的支付额,得到确定结果;根据确定结果,以第一UTXO作为至少部分目标UTXO,进行支付额的支付,不同于现有技术选取一个大数额的UTXO进行支付及找零处理的方式,本申请技术方案优先选取数额小于或等于预设阈值的UTXO进行支付,这样可以整合较多数量的小数额的UTXO用于进行支付额的支付,通过减少交易中新增的UTXO的数量而压缩UTXO存储中的数据大小,能够有效减缓UTXO数据集的膨胀速度,有利于提高区块链系统的整体运行效率。另外,本申请技术方案并未直接使用支付账户中所有的UTXO进行支付,一方面在各第一UTXO的数额之和等于或大于支付额时,可以以第一UTXO作为目标UTXO进行支付额的支出,由于第一UTXO的数量少于所有的UTXO的数量,因此在减少交易中新增的UTXO的数量,同时也能够有效降低系统计算负载,提高支付效率,另一方面也可以抑制支付账户中的所有UTXO累加后的数额之和可能会远超过支付额,使得需找零的UTXO的数额会超过收款方账户的余额而导致需要重新遍历支付的情形发生,从而有利于提高支付效率。
附图说明
图1为本申请实施例提供的区块链数据处理方法的一个流程示意图;
图2为本申请实施例提供的区块链数据处理方法的另一个流程示意图;
图3为本申请实施例提供的区块链数据处理方法的又一个流程示意图;
图4为本申请实施例提供的区块链数据处理方法的一个具体流程示意图;
图5为本申请实施例提供的区块链数据处理装置的结构示意图;
图6为本申请实施例提供的计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚明白,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
需要说明的是,除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
此外,在本申请的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在对本申请实施例进行详细描述之前,对区块链的相关信息进行简要说明。
区块链技术中采用的数据存储方式主要分为两种:UTXO模型和Account(账户)模型。在不同的应用场景中,两种模型都具有不同的特性,需要根据业务场景做出选择。目前采用UTXO模型的代表是比特币。在UTXO模型中,区块链并不保存用户的账户和余额等数据,用户所有的资金都通过所属于用户钱包地址的UTXO对象存储在区块链交易记录中,用户余额为该账户拥有的所有UTXO值之和。一笔交易(Transaction)主要由交易输入(TXI)和交易输出(TXO)构成,除了货币发行交易(Coinbase)无交易输入外,所有交易都有至少一个可以被引用的已存在的UTXO对象(由先前的交易产出)作为交易输入,产生的交易输出通过至少一个UTXO对象保存,每个UTXO对象仅能够被支付一次,交易后被TXI标记的TXO被认为“已花费”,新生成的UTXO对象拥有者变更为收款者并写入区块链中。UTXO类似现金,每一笔交易都会记录指向的UTXO,同一笔UTXO在同一交易中只会出现一次,区块链系统中总的UTXO只有在发行货币时才会总量增加对应的值。该方法是为了防止“双花”和方便追溯交易设定,其优点在于系统吞吐量高,方便拓展。
在基于UTXO模型的数据存储方式中,区块链的运行会不断产生UTXO数据,通过UTXO记录的索引信息和对应交易,并且计算每个账户的余额会相应地做出改变。一般进行交易的区块链节点会使用一个独立的本地缓存集将各个UTXO数据根据其创建时间进行存储,以此加速遍历UTXO的速度。在普通的交易发起中,区块链节点仅需要在缓存集中按照各个UTXO的产生时间顺序进行遍历查询,直至查询到足够支付待付金额的UTXO数据即可停止遍历,例如支付数额为4,则遍历找到第一个数额大于4的UTXO,则停止遍历,在该方式下会因为大量的“找零”交易新增UTXO数据,当采取本地缓存UTXO的方式时,可能会造成数据集过大的问题,影响到区块链系统的整体运行效率。
为此,本申请实施例提供一种区块链数据处理方法,通过从支付账户中选择出数额小于或等于预设阈值的第一未花费交易输出UTXO,在支付时优先整合数额小于或等于预设阈值的第一UTXO进行支付,能够通过减少交易中新增的UTXO的数量而压缩UTXO存储中的数据大小,能够有效减缓UTXO数据集的膨胀速度,有利于提高系统的整体效率。其中,该方法可以通过区块链数据处理装置来执行,该装置可以通过软件和/或硬件的方式实现,并具体配置于承载有区块链节点的电子设备中(也可称为:区块链的节点设备),该区块链节点可以为区块链网络中的轻量级节点,也可以是区块链网络中的全节点,能够基于区块链系统的部署程序参与区块链网络运行即可,本实施例中对其不加以限定。
图1为本申请实施例提供的区块链数据处理方法的一个流程示意图,如图1所示,本申请实施例提供的区块链数据处理方法可以包括如下步骤:
步骤S101:基于支付请求,从支付账户中选择出数额小于或等于预设阈值的第一未花费交易输出UTXO。
其中,支付请求可以由交易中支付UTXO的一方或者接收支付的UTXO的一方发起,比如一笔交易发生时,例如A需要使用UTXO向B转账,则可以由A向区块链发起支付请求。该支付请求可包括:携带有交易金额的交易请求等。
区块链上的节点设备基于支付请求涉及的支付额,从支付账户的账户地址获取足额的UTXO向待支付账户的账户地址进行支付。这里,支付账户包括:支付UTXO的付款方账户,相应地,待支付账户包括:接收支付的UTXO的收款方账户,支付额是指需要支付的数额。此处的支付额包括但不限于:数字货币的支付额和/或积分等代金物的支付额。该代金物除了积分,还可以信用分等。账户地址是通过区块链数字钱包创建用户账户时根据随机生成的私钥而计算生成的。
其中,预设阈值为预先设定的用于选取第一UTXO的阈值,不同支付账户对应的预设阈值可以不同,相较于对所有支付账户采用同一个预设阈值进行选取第一UTXO而言,不同支付账户对应的预设阈值不同,这样能够更针对性地从不同支付账户中选取出数额小于或等于预设阈值的UTXO,从而减少相对于不同支付账户采用通用的预设阈值导致的不适用某些支付账户,进而导致的效果不佳的现象。
具体地,区块链的节点设备可以基于支付请求,解析出支付额、支付账户的账户地址以及待支付账户的账户地址,并基于支付账户的账户地址,从支付账户中选择出数额小于或等于预设阈值的第一未花费交易输出UTXO。
在具体实施时,可以针对支付账户的每一个UTXO按照其产生的时间顺序进行遍历,对每遍历到的UTXO的数额与预设阈值进行比较,根据比较结果选择出数额小于或等于预设阈值的UTXO作为第一UTXO,其中,可以对各第一UTXO构成一个支付集,并将支付账户中的数额大于预设阈值的UTXO作为第二UTXO构成一个备选集。
可选地,方法还可以包括:
当支付账户完成一次支付或者一次充值或者转账等账户余额变化操作之后,对上述操作完成之后产生的UTXO,与预设阈值进行比较,若UTXO的数额小于或等于预设阈值,则将该UTXO作为第一UTXO添加到支付集中,否则,将该UTXO作为第二UTXO添加到备选集中。
如此,可以在下一次支付时无需重新构建支付集和备选集,而直接操作支付集和备选集即可,能够提高下一次支付的效率。
可选地,为提高支付请求的处理效率,在步骤S101之前,方法还可以包括:
基于支付请求,检测支付账户中所有的UTXO之和是否大于等于支付请求涉及的支付额,如果大于支付额,则执行步骤S101,如果等于支付额,则从支付账户中获取所有的UTXO以用于进行支付额的支付,如果小于支付额,则生成提示信息,该提示信息用于指示支付账户的余额不足以进行支付额的支付。
步骤S102:确定各第一UTXO的数额之和是否等于或大于支付请求涉及的支付额,得到确定结果。
具体地,对支付集中的各第一UTXO的数额之和与支付请求涉及的支付额进行比较,确定各第一UTXO的数额之和是否等于或大于支付额,得到确定结果,其中,确定结果包括两种:一种是各第一UTXO的数额之和等于或大于支付请求涉及的支付额,另一种是各第一UTXO的数额之和小于支付请求涉及的支付额。
步骤S103:根据确定结果,以第一UTXO作为至少部分目标UTXO,进行支付额的支付。
在本实施例中,在得到各第一UTXO之和是否等于或大于支付额的确定结果之后,会基于确定结果以第一UTXO作为至少部分目标UTXO进行支付。当确定的目标UTXO为一个时,则以这一个UTXO响应支付请求。若确定出的目标UTXO为多个时,则使用这多个目标UTXO一起响应支付请求。
在这种支付方式下,进行支付额的支付,使得无论各第一UTXO之和是否等于或大于支付额的确定结果,都会以数额小于或等于预设阈值的至少一个第一UTXO作为目标UTXO,进行支付额的支付,如此可以整合较多数量的第一UTXO用于进行支付额的支付,避免因找零而产生更多的新UTXO。
本申请实施例所提供的一种区块链数据处理方法,通过基于支付请求,从支付账户中选择出数额小于或等于预设阈值的UTXO,确定各第一UTXO的数额之和是否等于或大于支付请求涉及的支付额,得到确定结果;根据确定结果,以第一UTXO作为至少部分目标UTXO,进行支付额的支付,不同于现有技术选取一个大数额的UTXO进行支付及找零处理的方式,本申请技术方案优先选取数额小于或等于预设阈值的第一UTXO进行支付,这样可以整合较多数量的第一UTXO用于进行支付额的支付,因此能够避免因找零而产生更多的新UTXO,进而通过减少交易中新增的UTXO的数量而压缩UTXO存储中的数据大小,能够有效减缓UTXO数据集的膨胀速度,有利于提高区块链系统的整体效率。另外,本申请技术方案并未直接使用支付账户中所有的UTXO进行支付,一方面在各第一UTXO的数额之和等于或大于支付额时,可以以第一UTXO作为目标UTXO进行支付额的支出,由于第一UTXO的数量少于所有的UTXO的数量,因此在减少交易中新增的UTXO的数量,同时也能够有效降低系统计算负载,提高支付效率,另一方面也可以抑制支付账户中的所有UTXO累加后的数额之和可能会远超过支付额,使得需找零的UTXO的数额会超过收款方账户的余额而导致需要重新遍历支付的情形发生,从而有利于提高支付效率。
在一个实施方式中,上述预设阈值可以设定为:
使得将支付账户在预设时间内第一类支付次数和第二类支付次数之间的比值属于预设比值范围的支付额,其中,第一类支付次数为:支付额大于预设阈值的历史支付次数;第二类支付次数为:支付额等于或小于预设阈值的历史支付次数。
其中,预设阈值范围可以根据实际需要进行设定。示例性地,可以设置预设阈值范围为[a,b],其中,a取值为0.2,b取值为1,例如,假设支付账户在预设时间内有5次历史支付,支付额依次为1、3、2、3、5,那么可以将预设阈值设置为3,支付额大于3的第一类支付次数为1次,支付额等于或小于3的第二类支付次数为4次,此时支付账户在预设时间内第一类支付次数和第二类支付次数之间的比值为0.25,介于0.2至0.1之间。
在一个实施方式中,上述预设阈值可以设定为:支付账户在预设时间内历史支付额的平均支付额。
在具体实施时,可以从支付账户对应的历史交易记录中获取预设时间内的每笔交易分别对应的历史支付额,对获取到的历史支付额进行统计平均支付额。
其中,上述的预设时间可以理解为预设历史时间段,预设历史时间段是指预设阈值的设定时刻之前的某个时间段,对于该时间段的具体时长可以根据实际需要进行设置,本申请实施例对此不作具体限定。
可以理解的是,除了上述方式设定预设阈值之外,还可以根据其他方式进行灵活设定,例如,将从支付账户中的所有UTXO中去除最大值和最小值之后,求平均得到的平均值作为预设阈值,等等,本申请实施例对此不作具体限定。
本申请实施例中,基于上述方式设定的预设阈值从支付账户中选择第一UTXO,一方面能够抑制由于预设阈值取值过小而导致从支付账户中选择出的第一UTXO的数额之和后不足以进行支付额的支付,另一方面也能够避免由于预设阈值取值过大时,从支付账户中选择出数额较大的UTXO而导致小数额的UTXO在后续支付计算时可能不会被优先使用,进而不能有效减少交易过程中产生的UTXO;再一方面,由于预设阈值是通过支付账户的历史交易记录中的历史支付信息确定的,因此能够保证确定出的预设阈值的可靠性。
在一个实施方式中,参见图2,图2是本申请实施例提供的区块链数据处理方法的另一个可选的流程示意图,基于图1,上述步骤S101中基于支付请求,从支付账户中选择出数额小于或等于预设阈值的第一未花费交易输出UTXO,可以包括:
步骤S1011:当支付账户中所有的未花费交易输出UTXO的总数量大于预设数量阈值时,对支付账户中所有的未花费交易输出UTXO划分为多个候选集;
步骤S1012:通过多线程并发的方式从多个候选集中选择出数额小于或等于预设阈值的第一UTXO。
具体地,对支付账户中的UTXO的总数量与预设数量阈值进行比较,若大于预设数量阈值,则根据支付账户中的UTXO的总数量以及预设数量阈值,对支付账户中所有的UTXO划分为多个候选集,使划分出的每一候选集中的UTXO数量不大于预设数量阈值,通过多线程并发的方式同时执行从多个候选集中选择出数额小于或等于预设阈值的第一UTXO。
其中,上述预设数量阈值可以根据实际需要进行设定,此处不作具体限定。
需要说明的是,当判断出支付账户中的UTXO的总数量不大于预设数量阈值时,则无需对支付账户中所有的UTXO划分为多个候选集以及通过多线程并发的方式选取第一UTXO的过程。
本申请实施例中,当支付账户包含较多数量的UTXO时,可以通过对该支付账户所有的UTXO划分为多个候选集,通过采用多线程的方式执行选取第一UTXO的过程,能够快速选取出支付账户中的第一UTXO,有利于减少支付过程中的耗时,提高支付效率。
在一个实施方式中,参见图3,图3是本申请实施例提供的区块链数据处理方法的又一个可选的流程示意图,基于图1,上述步骤S103根据确定结果,以第一UTXO作为至少部分目标UTXO,进行支付额的支付,可以包括:
步骤S1031:在各第一UTXO的数额之和等于或大于支付额时,以至少一个第一UTXO作为全部目标UTXO进行支付额的支付;
步骤S1032:在各第一UTXO的数额之和小于支付额时,以所有第一UTXO和支付账户中的至少一个第二UTXO作为全部目标UTXO响应支付请求,其中,第二UTXO的数额大于预设阈值。
在一个示例中,上述在各第一UTXO的数额之和等于或大于支付额时,以至少一个第一UTXO作为全部目标UTXO进行支付额的支付,该过程可以包括:
在各第一UTXO的数额之和等于或大于支付额时,以最多个数的第一UTXO作为全部目标UTXO进行支付额的支付。
其中,在各第一UTXO的数额之和等于或大于支付额时,最多个数的第一UTXO是指所有的第一UTXO,也就是说,以所有的第一UTXO作为全部目标UTXO进行支付额的支付。在具体实现时,可以基于支付额,将所有的第一UTXO和支付账户的账户地址作为交易输入进行支付处理,得到交易输出,交易输出包含收款方输出和找零输出。
应理解的是,当选取的第一UTXO只有一个时,若该第一UTXO的数额大于等于支付额,则以该第一UTXO作为目标UTXO进行支付额的支付。
在另一个示例中,上述在各第一UTXO的数额之和等于或大于支付额时,以至少一个第一UTXO作为全部目标UTXO进行支付额的支付,该过程可以包括:
在确定出多个第一UTXO的一种组合方式涉及的总额大于或等于支付额时,将总额大于或等于支付额的组合方式涉及的第一UTXO作为全部目标UTXO进行支付额的支付。
本申请实施例中,在各第一UTXO的数额之和等于或大于支付额时,可以基于预设方式对多个第一UTXO进行组合,确定出总额大于或等于支付额的多个第一UTXO的一种组合方式。
具体地,基于预设方式对多个第一UTXO进行组合,确定出总额大于或等于支付额的多个第一UTXO的一种组合方式,可以包括:
按照各第一UTXO的排序顺序,对各第一UTXO进行遍历,其中,排序顺序为UTXO产生的时间顺序或者UTXO的数额由小到大的顺序;
每遍历到一个第一UTXO时,对遍历到的全部第一UTXO的数额进行累加得到累加值,直至累加值大于或等于支付额时,停止遍历,将遍历到的全部第一UTXO对应的组合方式确定为总额大于或等于支付额的组合方式。
采用上述方式确定出总额大于或等于支付额的多个第一UTXO的一种组合方式,进而可以将该组合方式涉及的第一UTXO作为目标UTXO进行支付额的支付,由于不是将所有的第一UTXO作为全部目标UTXO进行支付,这样能够极大地降低因需要找零的UTXO的数额会超过收款方账户的余额而导致需要重新遍历支付的可能性,进一步地提升了支付效率。
举例来说,若支付账户当前持有UTXO的金额如下:UTXO1 1.00、UTXO22.00、UTXO35.00、UTXO4 4.00、UTXO5 50.00,其中该排序顺序是UTXO产生的时间顺序。当需要支付的数额为4时,按照传统方法支付,则会遍历到第一个数额大于4的UTXO3停止,支付UTXO3,并找零新产生一个数额为1的UTXO,这样整体UTXO数量增加了1个UTXO。按照本申请技术方案,从支付账户中选取数额大于或等于预设阈值(假设预设阈值为5)的第一UTXO,则会选取出4个第一UTXO,分别为:UTXO1 1.00、UTXO2 2.00、UTXO3 5.00、UTXO4 4.00,可以采用如下方式的其中一种进行支付:
方式一:将支付账户当前持有的全部UTXO的金额如下:UTXO1 1.00、UTXO2 2.00、UTXO3 5.00、UTXO4 4.00、UTXO5 50.00,经过支付,系统会对上述4个第一UTXO合并为一个数额为12的UTXO存放到待支付账户(即收款方账户),同时产生一个数额为8的UTXO作为找零存放到支付账户(即付款方账户),这样整体UTXO数量减少了2个UTXO。
方式二:若将总额大于或等于支付额的组合方式涉及的第一UTXO作为全部目标UTXO进行支付额的支付时,则可以按照UTXO产生的时间顺序对上述4个第一UTXO进行遍历并累加,由于UTXO1 1.00、UTXO2 2.00、UTXO3 5.00的累加值为8,大于支付额4,那么会将UTXO1、UTXO2、UTXO3用于支付,经过支付,系统会对这三个UTXO合并为一个数额为8的UTXO存放到待支付账户(即收款方账户),同时产生一个数额为4的UTXO作为找零存放到支付账户(即付款方账户),这样整体UTXO数量减少了1个UTXO;此外,也可以按照UTXO的数额由小到大的顺序对上述4个第一UTXO进行排序,得到排序顺序为UTXO1 1.00、UTXO2 2.00、UTXO44.00、UTXO3 5.00,按照排序顺序对这4个UTXO进行遍历并累加,由于UTXO1 1.00、UTXO22.00、UTXO44.00的累加值为7,大于支付额4,那么会将UTXO1、UTXO2、UTXO4用于支付,经过支付,系统会对这三个UTXO合并为一个数额为7的UTXO存放到待支付账户(即收款方账户),同时产生一个数额为3的UTXO作为找零存放到支付账户(即付款方账户),这样整体UTXO数量减少了1个UTXO。
本申请实施例中,若以UTXO产生的时间顺序对各第一UTXO进行遍历累加,直至累加值大于或等于支付额时,停止遍历,并将所遍历到的全部第一UTXO作为目标UTXO进行支付额的支付,由于UTXO产生的时间顺序本身已存在,无需重新生成,这样能够整合较多数量的第一UTXO用于支付的同时,也能够因无需重新排序而提高支付效率;另外,若以UTXO的数额由小到大的顺序对各第一UTXO进行遍历累加,直至累加值大于或等于支付额时,停止遍历,并将所遍历到的全部第一UTXO作为目标UTXO进行支付额的支付,这样能够整合尽可能多的UTXO用于支付。
在一个示例中,上述在各第一UTXO的数额之和小于支付额时,以所有第一UTXO和支付账户中的至少一个第二UTXO作为全部目标UTXO响应支付请求,该过程可以包括:
在所有第一UTXO和至少一个第二UTXO的数额之和等于或大于支付额时,以所有第一UTXO和至少一个第二UTXO作为全部目标UTXO进行支付额的支付。
具体地,确定支付请求涉及的支付额与所有第一UTXO的数额之和之间的差额,判断是否存在数额大于或等于该差额的一个第二UTXO;若存在,则以该第二UTXO与所有第一UTXO作为全部目标UTXO进行支付额的支付;若不存在,则以所有第一UTXO以及所有第二UTXO作为全部目标UTXO进行支付额的支付。
在另一个示例中,上述在各第一UTXO的数额之和小于支付额时,以所有第一UTXO和支付账户中的至少一个第二UTXO作为全部目标UTXO响应支付请求,该过程可以包括:
在确定出所有第一UTXO和多个第二UTXO的一种组合方式涉及的总额大于或等于支付额时,将总额大于或等于支付额的组合方式涉及的第一UTXO和第二UTXO作为全部目标UTXO进行支付额的支付。
本申请实施例中,在各第一UTXO的数额与各第二UTXO之和大于支付额时,可以基于预设方式对多个第二UTXO进行组合,确定出与所有第一UTXO的总额大于或等于支付额的多个第二UTXO的一种组合方式。
其中,基于预设方式对多个第二UTXO进行组合,确定出与所有第一UTXO的总额大于或等于支付额的多个第二UTXO的一种组合方式,可以包括:
按照各第二UTXO的排序顺序,对各第二UTXO进行遍历,其中,排序顺序为UTXO产生的时间顺序或者UTXO的数额由小到大的顺序;
每遍历到一个第一UTXO时,对遍历到的全部第二UTXO的数额与所有第一UTXO的总额进行累加得到累加值,直至累加值大于或等于支付额时,停止遍历,将遍历到的全部第二UTXO对应的组合方式确定为与所有第一UTXO的总额大于或等于支付额的多个第二UTXO的组合方式。
举例来说,若支付账户当前持有UTXO的金额如下:UTXO1 1.00、UTXO2 2.00、UTXO35.00、UTXO4 4.00、UTXO5 50.00、UTXO6 10.00,其中该排序顺序是UTXO产生的时间顺序。当需要支付的数额为20时,按照传统方法支付,则会遍历到第一个数额大于20的UTXO5停止,支付UTXO5,并找零新产生一个数额为30的UTXO,这样整体UTXO数量增加了1个UTXO。按照本申请技术方案,从支付账户中选取数额大于或等于预设阈值(假设预设阈值为5)的第一UTXO,则会选取出4个第一UTXO,分别为:UTXO1 1.00、UTXO2 2.00、UTXO3 5.00、UTXO44.00,当确定出这4个第一UTXO的数额之和小于支付额20时,则会以所有第一UTXO和支付账户中的至少一个第二UTXO响应支付请求,第二UTXO为数额大于预设阈值的UTXO5以及UTXO6,具体可以采用如下方式的其中一种进行支付:
方式一:可以将所有的第一UTXO(包含UTXO1、UTXO2、UTXO3、UTXO4)与数额大于预设阈值的UTXO5、UTXO6作为全部目标UTXO用于支付,经过支付,系统会对上述6个UTXO合并为一个数额为72的UTXO存放到待支付账户(即收款方账户),同时产生一个数额为52的UTXO作为找零存放到支付账户(即付款方账户),这样整体UTXO数量减少了4个UTXO。
方式二:可以将所有的第一UTXO(包含UTXO1、UTXO2、UTXO3、UTXO4)与数额大于预设阈值的UTXO5作为全部目标UTXO用于支付,经过支付,系统会对上述5个UTXO合并为一个数额为62的UTXO存放到待支付账户(即收款方账户),同时产生一个数额为42的UTXO作为找零存放到支付账户(即付款方账户),这样整体UTXO数量减少了3个UTXO;此外,也可以将所有的第一UTXO(包含UTXO1、UTXO2、UTXO3、UTXO4)与数额大于预设阈值的UTXO6作为全部目标UTXO用于支付,经过支付,系统会对上述5个UTXO合并为一个数额为22的UTXO存放到待支付账户(即收款方账户),同时产生一个数额为2的UTXO作为找零存放到支付账户(即付款方账户),这样整体UTXO数量减少了3个UTXO。
在一个实施方式中,方法还可以包括:
确定支付账户在当前预设时间内第一类支付次数和第二类支付次数之间的比值,当确定出的比值小于预设比值范围的最小值时,调低预设阈值,当确定出的比值大于预设比值范围的最大值时,调高预设阈值。
其中,当前预设时间可以理解为当前时刻之前的某个时间段。
具体地,当确定出的比值小于预设比值范围的最小值时,根据预设的第一调整步长调低预设阈值;当确定出的比值大于预设比值范围的最大值时,根据预设的第二调整步长,调高预设阈值。其中,第一调整步长、第二调整步长可以根据实际需要进行设定,本申请实施例对此不作具体限定。
本申请实施例中,当确定出的比值小于预设比值范围的最小值时,表明当前时间段内的支付额等于或小于预设阈值的历史支付次数相对较多,则调低用于选取第一UTXO的预设阈值,当确定出的比值大于预设比值范围的最大值时,表明当前时间段内的支付额等于或小于预设阈值的历史支付次数相对较少,甚至没有,例如当前时间段内的支付额均大于预设阈值,则调高用于选取第一UTXO的预设阈值,如此能够实现对预设阈值进行优化调整的目的。
下面,以一个具体示例对本申请实施例提供的区块链数据处理方法进行说明。
参见图4,图4是本申请实施例提供的区块链数据处理方法的一个具体流程示意图,包括如下步骤:
步骤S1:统计历史交易数据,确定阈值T;
统计区块链系统中各账户基于UTXO的历史交易数据,确定阈值T,其中,某个账户的阈值T可以设定为:使得该账户在预设时间内的至少一半的历史交易数额小于阈值T。该阈值T用于划分待支付集。
步骤S2:进行交易时,基于阈值T遍历数据划分支付集;
交易时,假设此次交易金额为S,循环遍历付款账户地址对应的各个UTXO,当遍历到的UTXO的金额Ui<阈值T时,将该UTXO加入待支付集PS,当遍历到的UTXO的金额Ui>阈值T时,将该UTXO加入备选集BS。
其中,当付款账户中所有的未花费交易输出UTXO的总数量大于预设数量阈值时,可以将付款账户中所有的UTXO划分为若干个小的UTXO集合作为候选集,通过多线程遍历不同的候选集后,将数额小于或等于阈值T的UTXO添加到待支付集,将数额大于阈值T的UTXO添加到备选集。
步骤S3:调整交易输入,满足交易规则;
按照顺序对待支付集的UTXO的金额Ui累计相加,直到累计值V>交易金额S,完成支付,此时取出累计相加的Ui作为支付的最终结果;若累计值V<交易金额S,则从备选集BS中继续按顺序累加UTXO,直到累计值V>=交易金额S,取出待支付集PS中的累计相加的UTXO和备选集BS中的累计相加的UTXO,一同作为最终的支付结果;完成支付。
步骤S4:对阈值T进行调整优化。
一个账户对应的阈值T的大小可以根据该账户在当前预设时间内的交易记录进行调整,例如:若交易金额多为小额交易且小于阈值T,可调小阈值T;若交易金额均大于阈值T,可调大阈值T。
可以理解的是,使用本申请实施例中的区块链数据处理方法进行处理涉及UTXO的交易,可以通过减少交易中新增的UTXO数量从而压缩数据大小,减小区块链系统本地缓存数据的数据量,有利于提高整体效率。
图5为本申请实施例提供的区块链数据处理装置的结构示意图,如图5所示,本申请实施例提供的区块链数据处理装置可以包括:选择模块501、确定模块502和支付模块503,其中:
选择模块501,用于基于支付请求,从支付账户中选择出数额小于或等于预设阈值的第一未花费交易输出UTXO;
确定模块502,用于确定各第一UTXO的数额之和是否等于或大于支付请求涉及的支付额,得到确定结果;
支付模块503,用于根据确定结果,以第一UTXO作为至少部分目标UTXO,进行支付额的支付。
在一个实施方式中,预设阈值为:使得将支付账户在预设时间内第一类支付次数和第二类支付次数之间的比值为预设比值的支付额,其中,第一类支付次数为:支付额大于预设阈值的历史支付次数;第二类支付次数为:支付额等于或小于预设阈值的历史支付次数;
或者,
预设阈值为:支付账户在预设时间内历史支付额的平均支付额。
在一个实施方式中,选择模块501具体用于:
对支付账户中所有的未花费交易输出UTXO划分为多个候选集;
通过多线程并发的方式从多个候选集中选择出数额小于或等于预设阈值的第一UTXO。
在一个实施方式中,支付模块503具体用于:
在各第一UTXO的数额之和等于或大于支付额时,以至少一个第一UTXO作为全部目标UTXO进行支付额的支付;
在各第一UTXO的数额之和小于支付额时,以所有第一UTXO和支付账户中的至少一个第二UTXO作为全部目标UTXO响应支付请求,其中,第二UTXO的数额大于预设阈值。
在一个实施方式中,支付模块503具体用于:
在各第一UTXO的数额之和等于或大于支付额时,以最多个数的第一UTXO作为全部目标UTXO进行支付额的支付。
在一个实施方式中,支付模块503具体用于:
在确定出多个第一UTXO的一种组合方式涉及的总额大于或等于支付额时,将总额大于或等于支付额的组合方式涉及的第一UTXO作为全部目标UTXO进行支付额的支付。
在一个实施方式中,支付模块503具体用于:
在所有第一UTXO和至少一个第二UTXO的数额之和等于或大于支付额时,以所有第一UTXO和至少一个第二UTXO作为全部目标UTXO进行支付额的支付。
在一个实施方式中,支付模块503具体用于:
在确定出所有第一UTXO和多个第二UTXO的一种组合方式涉及的总额大于或等于支付额时,将总额大于或等于支付额的组合方式涉及的第一UTXO和第二UTXO作为全部目标UTXO进行支付额的支付。
在一个实施方式中,装置还可以包括调整模块,调整模块用于:
确定支付账户在当前预设时间内第一类支付次数和第二类支付次数之间的比值;
当确定出的比值小于预设比值范围的最小值时,调低预设阈值;
当确定出的比值大于预设比值范围的最大值时,调高预设阈值。
需要说明的是:上述实施例提供的区块链数据处理装置在进行区块链数据处理时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的区块链数据处理装置与区块链数据处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本申请实施例还提供一种计算机设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现本申请实施例任一所述的区块链数据处理方法的步骤。
图6给出了本申请实施例的计算机设备的硬件结构示意图,图6所示的计算机设备600包括:至少一个处理器601、存储器602、至少一个网络接口603。所述食材调整装置600中的各个组件通过总线系统604耦合在一起。可理解,总线系统604用于实现这些组件之间的连接通信。总线系统604除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图6中将各种总线都标为总线系统604。
可以理解,存储器602可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。
本申请实施例中的存储器602用于存储各种类型的数据以支持计算机设备600的操作。这些数据的示例包括:用于在计算机设备600上操作的任何计算机程序,如可执行程序6021,实现本申请实施例方法的程序可以包含在可执行程序6021中。
本申请实施例还提供一种计算机可读存储介质,存储介质上存储有计算机程序,计算机程序被处理器执行时,实现本申请实施例任一所述区块链数据处理方法中的步骤。
需要说明的是,本申请实施例的存储介质可以由任何类型的易失性或非易失性存储设备、或者它们的组合来实现。其中,非易失性存储器可以是只读存储器(ROM,Read OnlyMemory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,Ferromagnetic Random Access Memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,Random AccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random Access Memory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本申请实施例描述的存储介质旨在包括但不限于这些和任意其它适合类型的存储器。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。