具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明提供一种区块链交易并发处理方法。
请参考图1,图1为本发明实施例提供的一种区块链交易并发处理方法流程示意图。该方法包括:
S101:按照预设顺序对区块中的至少一个交易进行解析,得到交易的发起方地址和接收方地址。
区块中包含多个区块链节点,本发明实施例提供的区块链交易并发处理方法可以由任意一个区块链节点执行。整个区块中的交易数量可以为1个或多个。需要说明的是,预设顺序用于在区块中有多个交易时对交易的处理顺序进行设定,其具体内容本实施例不做限定,例如可以按照交易的发起时间顺序对交易进行解析;或者可以对区块中的节点进行排序,按照节点的顺序对节点发起的交易进行处理,当某个节点发起多个交易时,再按照节点的发起顺序对交易进行排序。本发明实施例优选的,按照交易的发起时间顺序对多个交易进行处理,以便尽快处理先发起的交易。
在本发明实施例中,可以实时对交易进行处理,即当检测到有交易被发起时,立即对该交易进行解析以及后续处理,在处理该交易的过程中,可能会有其他交易被发起,因此在处理完第一个交易后可以立即处理新发起的其他交易,直至所有交易均被处理完;或者可以按照预设周期处理交易,预设周期可以为预设时间周期,即可以在处理完区块中所有的交易后停止处理新发起的交易并开启计时器,当计时器达到预设时间周期时再次处理区块中的交易。预设周期还可以为预设数量周期,即统计区块中已经被发起的交易数量,当交易数量达到预设数量时开始对区块中的交易进行处理。
对交易进行处理的第一步,即为按照预设顺序对区块中的至少一个交易进行解析,得到交易的发起方地址和接收方地址。发起方地址也可以称为from地址,为对应交易的提出方,接收方地址也可以称为to地址,为交易的另外一方。在对交易进行解析时可以得到发起方地址和接收方地址,具体的解析方法本实施例不做限定,可以参考相关技术。
S102:判断接收方地址是否为普通账户地址。
具体的,接收方地址包括普通账户地址和智能合约地址,普通账户地址为参与普通交易的节点地址,普通交易即为普通的转账交易,在普通交易的执行过程中只会操作基础的账户模型数据,即修改账户余额等数据。根据加法交换律可知,交换普通交易的执行顺序,其结果不会改变,因此部分普通交易能够并发执行。智能合约地址为参与智能合约交易的节点地址,智能合约交易的执行过程中依赖和操作智能合约数据,合约的业务逻辑会受到合约数据的影响,如果交换交易顺序则会导致分布式节点的不一致问题,因此智能合约交易无法参与并发执行。
判断接收方地址是否为普通账户地址,可以对交易是否能够并发执行进行第一次判断。具体的,当接收方地址为普通账户地址时,说明该交易为普通交易,因此该交易可能可以并发执行。而当接收方地址不为普通账户地址时,说明该接收方地址为智能合约地址,该交易为智能合约交易,因此不能被并发执行。具体的,在判断接收方地址是否为普通账户地址时,可以从数据库中获取合约代码信息,合约代码信息中包括智能合约节点的地址,还可以包括智能合约节点对应的合约代码或合约编号等信息。遍历合约代码信息,判断是否存在接收方地址对应的目标合约代码信息。若存在,则说明接收方地址不为普通账户地址,若不存在,则说明接收方地址为普通账户地址。当该接收方地址为普通账户地址时,可以进入步骤S104;当该接收方地址不为普通账户地址时,可以进入步骤S103。
S103:对发起方地址进行标记。
需要说明的是,参与智能合约交易的双方均无法改变后续提出的交易的顺序,例如,节点A向节点B发起了智能合约交易1,在该交易被发起后,节点A又向节点C发起了普通交易2。由于节点A和节点B均参与了智能合约交易1,因此节点A发起的普通交易2的执行顺序必须位于智能合约交易1之后,为了保证普通交易2的执行顺序位于智能合约交易1之后,使得普通交易2同样无法参与并发操作。因此可以对发起方地址进行标记,具体可以将其标记为不可并发地址,例如为该发起方地址添加不可并发标记,或者在本地建立不可并发地址列表,在标记时将发起方地址填入该列表。在将发起方地址标记为不可并发地址之后还可以执行其他操作,其他操作的具体内容本实施例不做限定。
S104:判断发起方地址是否被标记。
在确定交易的接收方地址为普通账户地址时,说明该交易为普通交易,因此判断该交易的发起方地址是否被标记。具体的判断方法与S103步骤中的标记方法相对应,例如标记方法为对发起方地址添加不可并发标记,则在检测时判断该发起方地址是否携带有不可并发标记;或者当标记方法为建立不可并发地址列表,则遍历整个不可并发地址列表,判断发起方地址是否被存放在不可并发地址列表中。当确定发起方地址被标记时,说明该发起方地址参与了某个智能合约交易,因此该任务无法并发。本实施例并不限定发起方地址被标记时执行的操作,例如可以进入S107步骤,既不执行任何操作。当发起方地址未被标记时,可以进入步骤S105。
S105:将交易确定为并发交易并放入并发队列。
当发起方地址未被标记时,说明该交易的发起方地址没有参与智能合约交易,因此该交易为可并发执行的普通交易。因此将该交易确定为并发交易,并将其放入并发队列。并发队列用于存放并发交易,其具体长度本实施例不做限定。
S106:并发执行并发队列中的所有并发交易。
并发执行并发队列中的所有交易,即同时执行并发队列中的所有交易。在本发明实施例中,由于不同交易的执行所需时间可能不同,因此同时执行所有交易可以为同时开始执行所有交易,具体的交易执行过程跟交易种类和具体内容有关,可以参考相关技术,在此不再赘述。在并发执行并发队列中的并发交易后,还可以执行其他操作,其他操作的具体类型和数量本实施例不做限定。
应用本发明实施例提供的区块链交易并发处理方法,判断接收方地址是否为普通账户地址,当接收方地址不为普通账户地址时,说明该交易为智能合约交易,智能合约交易的执行过程依赖智能合约数据,因此无法并行执行,且智能合约交易的发起方由于执行智能合约交易导致该发起方的其他交易也无法被并行执行,因此对发起方地址进行标记。当接收方地址为普通账户地址时,说明该交易为普通交易,普通交易的执行只需基础的账户模型数据,且发起方地址未被标记时,说明该交易的发起方并未发起某个智能合约交易,因此该普通交易可以并发执行,将该交易确定为并发交易并放入并发队列。并发执行并发队列中的所有并发交易,可以减少区块中交易执行所需的时间,提高区块链交易处理性能,解决了现有区块链交易执行方法的交易处理性能较差的问题。
基于上述发明实施例,在实际应用中,存在一些无法并发处理的交易,本发明实施例将说明如何处理无法并发处理的交易。请参考图2,图2为本发明实施例提供的另一种区块链交易并发处理方法流程示意图,包括:
S101:按照预设顺序对区块中的至少一个交易进行解析,得到交易的发起方地址和接收方地址。
该步骤具体说明请见上述实施例,本实施例在此不再赘述。需要说明的是,在本发明实施例中,预设顺序为交易被发起的时间先后顺序,即先对发起时间早的交易进行解析。
S102:判断接收方地址是否为普通账户地址。
该步骤具体说明请见上述实施例,本实施例在此不再赘述。
S103:对发起方地址进行标记。
该步骤具体说明请见上述实施例,本实施例在此不再赘述。
S201:将交易确定为串行交易并放入串行队列的队尾。
在确定发起方地址不为普通账户地址,且对发起方地址进行标记后,由于该交易为智能合约交易,无法被并行执行,因此将该交易确定为串行交易,并将其放入串行队列的队尾。串行队列用于放置串行交易,需要说明的是,串行队列中的串行交易按照放入串行队列的时间先后顺序排序。
S104:判断发起方地址是否被标记。
该步骤具体说明请见上述实施例,本实施例在此不再赘述。
S202:将交易确定为串行交易并放入串行队列的队尾。
在确定发起方地址被标记时,说明该交易的发起方地址参与了智能合约地址,该交易为无法被并行执行的普通交易,因此将其确定为串行交易,并将其放入串行队列的队尾。
S105:将交易确定为并发交易并放入并发队列。
该步骤具体说明请见上述实施例,本实施例在此不再赘述。
S106:并发执行并发队列中的所有并发交易。
该步骤具体说明请见上述实施例,本实施例在此不再赘述。
S203:当目标并发交易执行完毕后,修改目标并发交易对应的目标发起方地址的交易序号。
目标并发交易为并发队列中任意一个并发交易,当目标并发交易执行完毕后,修改目标并发交易对应的发起方地址的交易序号,具体的修改方法可以根据实际情况进行设定,例如可以对发起方地址的交易序号加一。交易序号可以用于检测交易的合法性,避免双花交易等带来的风险。
S204:从串行队列的首部开始依次执行串行交易。
在所有并发队列中的并发交易均执行完毕后,从串行队列的首部开始依次执行串行交易。由于串行队列中存在智能合约交易,无法更改交易的先后顺序,因此从串行队列的首部开始,依次获取串行交易并执行。由于预设顺序为交易被发起的时间先后顺序,串行队列中的串行交易也按照放入串行队列的时间先后顺序排序,因此可以确定在串行队列前方的串行任务的发起时间早于在串行队列后方的串行任务的发起时间。
应用本发明实施例提供的区块链交易并发处理方法,可以在构建并发队列的同时构建串行队列,在并行执行完所有并行交易后,从串行队列的首部开始依次执行串行交易。减少了可并发执行的交易的等待执行时间。并发执行并发队列中的所有并发交易,可以减少区块中交易执行所需的时间,提高区块链交易处理性能,解决了现有区块链交易执行方法的交易处理性能较差的问题。
基于上述发明实施例,本发明实施例将说明如何检测交易的合法性,避免双花交易,请参考图3,图3为本发明实施例提供的一种交易合法性检测流程示意图,包括:
S301:从串行队列的首部获取第一串行交易,利用第一串行交易的交易序号判断第一串行交易是否为双花交易。
交易序号可以利用nonce表示,其用于判断交易的合法性。具体的,以串行交易为例,从串行队列的首部获取第一串行交易后,对该第一串行交易进行解析,得到该交易的交易序号,利用该交易序号判断第一串行交易是否为双花交易。具体的,可以利用该交易序号与第一串行交易的发起方地址的交易序号进行比对,判断第一串行交易的交易序号与发起方地址的交易序号是否相同。若相同,则说明该交易合法,不是双花交易;若不相同,则说明该交易为双花交易。本实施例并不限定在确定该交易为双花交易后执行的操作,例如可以生成告警信息,停止交易执行等。
S302:若否,则执行第一串行交易。
若确定第一串行交易不是双花交易,则执行第一串行交易,具体的执行步骤可以参考相关技术。需要说明的是,本实施例提供的区块链交易并发处理方法也适用于并发任务的执行。
应用本发明实施例提供的区块链交易并发处理方法,可以检测任务的合法性,在检测到双花交易时不执行,提高交易和区块链的安全性。
基于上述发明实施例,本发明实施例将说明一种区块链交易并发处理方法的具体实施方式。
假设在某个区块中存在五个未被执行的交易,按照被发起的时间先后顺序分别为Tx1、Tx2、Tx3、Tx4、Tx5。五个交易被放置在总队列Txs中:
Txs[
Tx1{from:A7,nonce:0,to:C4},
Tx2{from:A8,nonce:0,to:A7},
Tx3{from:A5,nonce:0,to:A3},
Tx4{from:A7,nonce:1,to:A9},
Tx5{from:A1,nonce:0,to:A1},
]
其中,以A开头的地址为普通账户地址,以C开头的地址为智能合约地址,即非普通账户地址。则对各个交易分类的过程为:
由于Tx1对应的接收方地址为智能合约地址,因此Tx1是智能合约交易,将A7标记为不可并发,将Tx1放入串行队列;
由于Tx2对应的接收方地址为普通账户地址,因此Tx2是普通转账交易,由于A8未被标记为不可并发,因此将Tx2放入并发队列;
由于Tx3对应的接收方地址为普通账户地址,因此Tx3是普通转账交易,由于A5未被标记为不可并发,因此将Tx3放入并发队列;
由于Tx4对应的接收方地址为普通账户地址,因此Tx4是普通转账交易,由于A7被标记为不可并发,因此将Tx4放入串行队列;
由于Tx5对应的接收方地址为普通账户地址,因此Tx5是普通转账交易,由于A1未被标记不可并发,因此将Tx5放入并发队列。
利用Txs1表示并发队列,利用Txs2表示串行队列,则并发队列和串行队列为:
Txs1[
Tx2{from:A8,nonce:0,to:A7},
Tx3{from:A5,nonce:0,to:A3},
Tx5{from:A1,nonce:0,to:A1},
]
Txs2[
Tx1{from:A7,nonce:0,to:C4},
Tx4{from:A7,nonce:1,to:A9},
]
并行执行Txs1中的各个任务,在全部完成后,顺序执行Txs2中的交易。
下面对本发明实施例提供的区块链交易并发处理装置进行介绍,下文描述的区块链交易并发处理装置与上文描述的区块链交易并发处理方法可相互对应参照。
请参考图4,图4为本发明实施例提供的一种区块链交易并发处理装置的结构示意图,包括:
第一判断模块410,用于按照预设顺序对区块中的至少一个交易进行解析,得到所述交易的发起方地址和接收方地址,判断所述接收方地址是否为普通账户地址;
标记模块420,用于若所述接收方地址不为所述普通账户地址,则对所述发起方地址进行标记;
第二判断模块430,用于若所述接收方地址为所述普通账户地址,则判断所述发起方地址是否被标记;
并发交易确定模块440,用于若所述发起方地址未被标记,则将所述交易确定为并发交易并放入并发队列;
并发执行模块450,用于并发执行所述并发队列中的所有所述并发交易。
可选地,还包括:
第一更新模块,用于将所述交易确定为串行交易并放入串行队列的队尾。
可选地,包括:
第二更新模块,用于将所述交易确定为所述串行交易并放入所述串行队列的队尾。
可选地,还包括:
串行执行模块,用于从所述串行队列的首部开始依次执行所述串行交易。
可选地,所述串行执行模块,包括:
双花判断单元,用于从所述串行队列的首部获取第一串行交易,利用所述第一串行交易的交易序号判断所述第一串行交易是否为双花交易;
执行单元,用于若所述第一串行交易不为双花交易,则执行所述第一串行交易。
可选地,还包括:
交易序号修改模块,用于当目标并发交易执行完毕后,修改所述目标并发交易对应的目标发起方地址的所述交易序号。
可选的,第一判断模块410,包括:
合约代码信息获取单元,用于从本地数据库中获取合约代码信息;
判断单元,用于遍历所述合约代码信息,判断是否存在所述接收方地址对应的目标合约代码信息。
下面对本发明实施例提供的区块链交易并发处理设备进行介绍,下文描述的区块链交易并发处理设备与上文描述的区块链交易并发处理方法可相互对应参照。
请参考图5,图5为本发明实施例提供的一种区块链交易并发处理设备的结构示意图。在本实施例中,区块链交易并发处理设备500可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机等终端设备。
该区块链交易并发处理设备500可以是组成CDN网络或者区块链网络的节点。
该区块链交易并发处理设备500可以包括存储器501、处理器502和总线503。
其中,存储器501至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器501在一些实施例中可以是区块链交易并发处理设备500的内部存储单元,例如该区块链交易并发处理设备500的硬盘。存储器501在另一些实施例中也可以是区块链交易并发处理设备500的外部存储设备,例如区块链交易并发处理设备500上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器501还可以既包括区块链交易并发处理设备500的内部存储单元也包括外部存储设备。存储器501不仅可以用于存储安装于区块链交易并发处理设备500的应用软件及各类数据,例如区块链交易并发处理程序01的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器502在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器501中存储的程序代码或处理数据,例如执行区块链交易并发处理程序01等。
该总线503可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,区块链交易并发处理设备500还可以包括网络接口504,网络接口504可选的可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该区块链交易并发处理设备500与其他电子设备之间建立通信连接。
可选地,该区块链交易并发处理设备500还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED
(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在区块链交易并发处理设备500中处理的信息以及用于显示可视化的用户界面。
图5仅示出了具有组件501-503以及区块链交易并发处理程序01的区块链交易并发处理设备500,本领域技术人员可以理解的是,图5示出的结构并不构成对区块链交易并发处理设备500的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
下面对本发明实施例提供的计算机可读存储介质进行介绍,下文描述的计算机可读存储介质与上文描述的区块链交易并发处理方法可相互对应参照。
本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述的区块链交易并发处理方法的步骤。
该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。