一种基于并行执行的交易费支付方法、设备及储存介质
文献发布时间:2023-06-19 11:22:42
技术领域
本发明涉及信息技术领域,尤其涉及一种基于并行执行的交易费支付方法、设备及储存介质。
背景技术
区块链中的节点通过发送交易而进行转账、存入数据等业务,区块链中的记账节点在交易池中收集区块链中的交易,然后执行交易,并在执行交易之后,将这些交易打包到区块中并扩散到区块链中。目前公链系统中,为了防止恶意用户进行攻击,需要收取一定的交易费,这样就可以有效防止防御巨量交易攻击区块链系统,然而在交易进行并行执行时交易费的支付需要重新设计,防止由于并行执行而造成交易的错误执行,例如账户余额不足以支付交易费时,由于并行执行的缘故而导致原本不能被打包的交易最终被执行。
在chain33区块链账户模型和交易执行模型中,交易费的的支付统一在coins合约进行,当同一发起方发起多笔合约交易时例如代理环境下,存在多笔交易费需要从该发起方的账户中进行扣除,但是当区块链系统采用并行交易机制进行执行时,交易执行不再按照交易顺序进行执行,此时原来的交易费支付机制可能会导致交易无法并行执行。
综上所述,目前亟需一种基于并行执行的交易费支付方法,使得其不影响相同交易发起方的情况下,也能为不同类型的交易进行并行加速执行。
发明内容
一、发明目的
针对上述技术问题,本发明提供一种基于并行执行的交易费支付方法、设备及储存介质,能够为相同的交易发起方进行交易的并行执行加速。
二、技术方案
为解决上述技术问题,本发明所提供的技术方案如下:
第一方面,一种基于并行执行的交易费支付方法,包括:
解析区块中所有待执行交易的发起方,获取发起方列表;依据所述发起方列表为每个发起方构建交易信息表,所述交易信息表包括其对应的发起方发起的所有待执行交易的交易信息;其中,所述交易信息包括Tx-index、type、previous、current和balance;所述待执行交易包括一类交易和二类交易,所述一类交易为coins合约交易,所述二类交易为除coins交易外的其他类型合约交易;
所述二类交易依据其与一类交易的执行顺序关系分为前序交易、居中交易和后序交易,所述前序交易为交易执行顺序在所有一类交易之前的二类交易,所述居中交易为交易执行顺序在两个一类交易之间的二类交易,所述后序交易为交易执行顺序在所有一类交易之后的二类交易;
所述交易费支付方法包括:
前序交易:执行前序交易时,所有一类交易的previous、current和balance的值均需要扣除所述前序交易的交易费作为新的previous、current和balance;
居中交易:执行居中交易时,首先获取排序在待执行居中交易之前的与待执行居中交易相邻的一类交易的balance的值作为所述待执行居中交易的previous,采用上述balance的值减去交易费后的数据作为所述待执行居中交易新的current和balance;然后采用所述待执行居中交易更新后balance的值作为交易顺序在所述待执行居中交易之后的与待执行居中交易相邻的一类交易的previous的值,再将该一类交易的current和balance的值减去所述执行居中交易的交易费作为其新的current和balance;
后序交易:执行后序交易时,获取与待执行后序交易相邻的一类交易的balance的值作为所述待执行后序交易的previous,将所述待执行后序交易的current和balance修改为与待执行后序交易相邻的一类交易的balance减去所述待执行后序交易的交易费后的值。
作为优选,前序交易所有一类交易新的current值均大于0,否则不打包所述前序交易。
作为优选,居中交易所述待执行居中交易新的current和balance均大于0,且交易顺序在所述待执行居中交易之后的与待执行居中交易相邻的一类交易新的current和balance也大于0,否则不打包所述待执行居中交易。
第二方面,一种计算机设备,一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如第一方面及其优选方案任意一项所述的方法。
第三方面,一种存储有计算机程序的存储介质,该程序被处理器执行时实现如第一方面及其优选方案任意一项所述的方法。
三、有益效果
采用本发明提供的技术方案,与现有技术相比,具有使得交易并行加速可以在更宽松的环境中使用,尤其是当使用交易发送代理机制发送交易时,仍然能够为相同的交易发起方进行交易的并行执行加速的有益效果。
附图说明
图1为本发明实施例1的交易发起方列表示意图;
图2为本发明实施例1中from_0的交易信息表示意图;
图3为实施例2提供的一种设备的结构示意图。
具体实施方式
为进一步了解本发明的内容,结合附图及实施例对本发明作详细描述。
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与发明相关的部分。
本发明中所述的第一、第二等词语,是为了描述本发明的技术方案方便而设置,并没有特定的限定作用,均为泛指,对本发明的技术方案不构成限定作用。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
实施例1
一种基于并行执行的交易费支付方法,包括:
解析区块中所有待执行交易的发起方,获取发起方列表;依据所述发起方列表为每个发起方构建交易信息表,所述交易信息表包括其对应的发起方发起的所有待执行交易的交易信息;其中,所述交易信息包括Tx-index、type、previous、current和balance;所述待执行交易包括一类交易和二类交易,所述一类交易为coins合约交易,所述二类交易为除coins交易外的其他类型合约交易;
所述二类交易依据其与一类交易的执行顺序关系分为前序交易、居中交易和后序交易,所述前序交易为交易执行顺序在所有一类交易之前的二类交易,所述居中交易为交易执行顺序在两个一类交易之间的二类交易,所述后序交易为交易执行顺序在所有一类交易之后的二类交易;
所述交易费支付方法包括:
前序交易:执行前序交易时,所有一类交易的previous、current和balance的值均需要扣除所述前序交易的交易费作为新的previous、current和balance,其中,所有一类交易新的current值均大于0,否则不打包所述前序交易;
居中交易:执行居中交易时,首先获取排序在待执行居中交易之前的与待执行居中交易相邻的一类交易的balance的值作为所述待执行居中交易的previous,采用上述balance的值减去交易费后的数据作为所述待执行居中交易新的current和balance;然后采用所述待执行居中交易更新后balance的值作为交易顺序在所述待执行居中交易之后的与待执行居中交易相邻的一类交易的previous的值,再将该一类交易的current和balance的值减去所述执行居中交易的交易费作为其新的current和balance;其中,所述待执行居中交易新的current和balance均大于0,且交易顺序在所述待执行居中交易之后的与待执行居中交易相邻的一类交易新的current和balance也大于0,否则不打包所述待执行居中交易
后序交易:执行后序交易时,获取与待执行后序交易相邻的一类交易的balance的值作为所述待执行后序交易的previous,将所述待执行后序交易的current和balance修改为与待执行后序交易相邻的一类交易的balance减去所述待执行后序交易的交易费后的值。
与现有技术相比,本实施例所提供的方案具有使得交易并行加速可以在更宽松的环境中使用,尤其是当使用交易发送代理机制发送交易时,仍然能够为相同的交易发起方进行交易的并行执行加速的有益效果。
上述技术方案中,由于coins合约交易本身能够修改交易地址的余额故其交易费可按现有技术手段直接在执行coins合约交易时直接扣除,本方案中不做限定,对于非coins合约交易,其交易费需要通过coins合约进行结算,因此,当交易为前序交易时,前序交易之后的所有coins交易的账户现有余额即current均要大于前序交易的交易费,以保证前序交易执行时的交易费不会缺少,若存在coins交易的账户现有余额小于交易费的情况,那么该前序交易将被移除。当在执行居中交易时,居中交易的previous为上一coins交易的账户结余即balance,而居中交易对于账户余额的修改仅为交易费,则居中交易的current和balance均修改为上一coins交易的账户结余减去居中交易的交易费即可,而在居中交易之后的coins交易的previous则要沿用居中交易的账户结余,即采用居中交易的balance,且居中交易之后的coins交易的current和balance同样也需要减去居中交易的交易费,如此才将居中交易的交易费实际结算于地址账户中,居中交易因其交易费的产生实际上修改了账户的余额,但二类交易不直接修改账户余额,故而在其之后的coins中体现,那么居中交易之后的coins交易将交易费体现,而之前的coins交易则不受影响。对于后序交易,同样其为二类交易,二类交易仅有交易费记入coin交易中,也就是说仅有交易费改变账户的余额,故其previous沿用上一coins交易的账户余额,其交易过程仅仅是扣除交易费,则其current和balance采用上一coins交易的账户余额减去交易费即可,如此即将其交易费计入账中。采用此方法后,所有二类交易的交易费均在执行器得到解析,若账户余额不足会将二类交易进行去除,那么当交易需要并行执行时就无需再考虑交易费不足的情况,特别适用于代理场景,存在交易代理时,代理方的账户会多次成为交易发起方,若按现有的交易费支付机制,根本无法实行并行交易,交易费的结算会对交易并行造成影响,而采用本方法进行交易费结算能够为相同的交易发起方进行交易的并行执行加速。
本实施例中,解析区块中的所有交易发起方,获取交易发起方列表,如图1所示,from_0、from_1.......from_n,n<=Tx总数(交易总数),因为有可能同一个发起人发送了多笔交易。
例如交易发起方from_0共发起6笔交易,这6笔交易的index分别为0、1、3、4、5、15,其中,index为0的是token交易,index为1,3,5的交易为coins合约交易,index为4的是privacy交易,index为15的是trade交易,构建from_0的交易信息表,如图2所示,from_0相关的其他合约交易与coins合约交易具有相同的账户修改地址,只有coins的转账交易会改变账户的余额,包括转账发起方和接收方,其他合约交易在区块中的顺序包括在所有coins交易之前,居中和之后3情况,具体的实现机制如下:
1.前序交易
如图2中所示的token交易,其index为0,在区块链中的交易执行顺序在index为1的coins之前,故而,token交易的回执不用修改,而index为1,3,5的三笔coins合约中的previous和current及balance值都需要减掉tx为0的交易费,并同时判断减掉之后的current的值必须大于等于0,否认账户余额不足,该笔交易不能被打包。
2.居中交易
如图2中所示的privacy交易,其index为4,在区块链中的交易执行顺序在index为3的coins之后,在index为5的交易之前,故而,
coins交易1和3的回执不用修改;
index为4的privacy交易的previous由替换index为3的balance替换,且current和balance都修改为balance-txfee;
而index为5的coins交易,其previous由privacy交易的balance代替,而current及balance值都需要减掉交易privacy的交易费;
其中的修改过程中发生balance不足以支付交易费时,则将该笔交易剔除,不将其进行打包。
3.后序交易
如图2中所示的trade交易,其index为15,在区块链中的交易执行顺序在在index为5的coins之后,于是将previous替换为index为5的balance替换,且current和balance都修改为balance-txfee。
此处需要说明的是,本方案中所阐述的前序交易、居中交易和后序交易均为仅实施该交易时的基础交易机制,本方案描述中的前序交易修改并不继承至居中交易,其他情况也同理,仅仅是描述基本的交易机制,而具体实施中各个类型的二类交易的时候会存在部分的重合,且会存在多种形式的组合,这并不影响本方案方法的实现,无论哪种形式的组合情况其各中二类交易的基础交易机制均为本方案所公开的交易机制,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案均为本方案的保护范围内。
实施例2
一种计算机设备,所述设备包括:一个或多个处理器;存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如实施例1所述的方法。
一种存储有计算机程序的存储介质,该程序被处理器执行时实现如以上实施例1所述的方法。
图3为本实施例提供的一种设备的结构示意图。
如图3所示,作为另一方面,本申请还提供了一种设备500,包括一个或多个中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM503中,还存储有设备500操作所需的各种程序和数据。CPU501、ROM502以及RAM503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本申请公开的实施例,上述实施例1所描述的方法可以被实现为计算机软件程序。例如,本申请公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行上述任一实施例描述的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。
作为又一方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例的装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,该程序被一个或者一个以上的处理器用来执行描述于本申请的方法。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这根据所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以通过执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以通过专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,例如,各所述单元可以是设置在计算机或移动智能设备中的软件程序,也可以是单独配置的硬件装置。其中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离本申请构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
- 一种基于并行执行的交易费支付方法、设备及储存介质
- 一种基于并行执行的区块打包方法、设备及储存介质