CN114493602B - 区块链交易的执行方法、装置、电子设备和存储介质 - Google Patents

区块链交易的执行方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN114493602B
CN114493602B CN202210367290.8A CN202210367290A CN114493602B CN 114493602 B CN114493602 B CN 114493602B CN 202210367290 A CN202210367290 A CN 202210367290A CN 114493602 B CN114493602 B CN 114493602B
Authority
CN
China
Prior art keywords
transaction
blockchain
actuator
state data
executor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210367290.8A
Other languages
English (en)
Other versions
CN114493602A (zh
Inventor
柳宇航
朱亮亮
胡慧潘
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hundsun Technologies Inc
Original Assignee
Hundsun Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hundsun Technologies Inc filed Critical Hundsun Technologies Inc
Priority to CN202210367290.8A priority Critical patent/CN114493602B/zh
Publication of CN114493602A publication Critical patent/CN114493602A/zh
Application granted granted Critical
Publication of CN114493602B publication Critical patent/CN114493602B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3829Payment protocols; Details thereof insuring higher security of transaction involving key management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/40Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
    • G06Q20/405Establishing or using transaction specific rules

Abstract

本公开关于一种区块链交易的执行方法、装置、电子设备和存储介质。该方法应用于包含区块链模块和多个执行器的区块链节点,所述多个执行器分别维护有自身地址区间对应的局部状态数据,包括:区块链模块获取待执行的区块链交易;区块链模块根据所述区块链交易的交易账户地址和各个执行器的地址区间确定匹配于区块链交易的目标执行器,并将该交易分发至目标执行器;目标执行器根据自身维护的局部状态数据执行区块链交易。通过该方法,执行器可以利用自身维护的局部状态数据执行区块链交易,而无需从区块链模块处获取状态数据,一定程度上提升了区块链节点对于区块链交易的执行效率。

Description

区块链交易的执行方法、装置、电子设备和存储介质
技术领域
本公开涉及区块链领域,尤其涉及一种区块链交易的执行方法、装置、电子设备和存储介质。
背景技术
区块链网络中的任一区块链节点通常包含区块链模块和执行器,区块链节点执行区块链交易,本质上即为由区块链模块控制执行器执行区块链交易。通常情况下,区块链交易的执行过程需要用到区块链网络在当前时刻的状态数据,如账户余额等。
在相关技术中,同一区块链节点可以横向扩展多个执行器(或称执行器分片),各个执行器分别从区块链模块处获取自身所需的状态数据执行不同的区块链交易。但是,采用该方式,各个执行器需要分别依赖于区块链节点内的数据总线从同一区块链模块处获取相应的状态数据,导致区块链交易的整体执行效率仍然有待提高:一方面,在区块链模块与执行器之间传输状态数据难以避免的存在网络延迟,导致执行器需要耗费较长时间获取所需的状态数据;另一方面,各个执行器本质上仍然是通过串行方式从区块链模块处获取状态数据,所以状态数据的获取效率仍然不高。
发明内容
本公开提供了区块链交易的执行方法、装置、电子设备和存储介质,以至少解决相关技术中的技术问题。本公开的技术方案如下:
根据本公开实施例的第一方面,提出一种区块链交易的执行方法,应用于包含区块链模块和多个执行器的区块链节点,所述多个执行器分别维护有自身地址区间对应的局部状态数据,所述方法包括:
所述区块链模块获取待执行的区块链交易;
所述区块链模块根据所述区块链交易的交易账户地址和各个执行器的所述地址区间确定匹配于所述区块链交易的目标执行器,并将所述区块链交易分发至所述目标执行器;
所述目标执行器根据自身维护的所述局部状态数据执行所述区块链交易。
根据本公开实施例的第二方面,提出一种区块链交易的执行装置,应用于包含区块链模块和多个执行器的区块链节点,所述多个执行器分别维护有自身地址区间对应的局部状态数据,所述装置包括:
交易获取模块,被配置为所述区块链模块获取待执行的区块链交易;
交易分发模块,被配置为所述区块链模块根据所述区块链交易的交易账户地址和各个执行器的所述地址区间确定匹配于所述区块链交易的目标执行器,并将所述区块链交易分发至所述目标执行器;
交易执行模块,被配置为所述目标执行器根据自身维护的所述局部状态数据执行所述区块链交易。
根据本公开实施例的第三方面,提出一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如上述第一方面中任一实施例所述的区块链交易的执行方法。
根据本公开实施例的第四方面,提出一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行上述第一方面中任一实施例所述的区块链交易的执行方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
根据本公开的实施例,对于区块链节点所包含的多个执行器,各个执行器分别维护有自身地址区间对应的局部状态数据,区块链节点所包含的区块链模块在获取到待执行的区块链交易后,根据所述区块链交易的交易账户地址和各个执行器的地址区间确定匹配于该区块链交易的目标执行器,并将该区块链交易分发至确定出的目标执行器,以由目标执行器根据自身维护的上述局部状态数据执行该区块链交易。
在本方案中,由区块链节点中的各个执行器分别维护自身地址区间所对应的局部状态数据,使得各个执行器分别使用自身所维护的局部状态数据即可执行相应的区块链交易,而无需从区块链模块处获取状态数据。该方式不仅避免了区块链模块与执行器之间的网络延迟导致的状态数据获取时间较长的缺陷,而且各个执行器可以分别获取自身维护的局部状态数据以执行区块链交易,实现了真正意义上的并行执行区块链交易,相较于仅由区块链模块维护区块链网络的状态数据的前述相关技术方案,能够显著提升区块链节点对于区块链交易的执行效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是一示例性实施例提供的一种区块链网络及区块链节点的结构示意图;
图2是根据本公开的实施例示出的一种区块链交易的执行方法的流程图;
图3是根据本公开的实施例示出的一种区块链交易的分组效果示意图;
图4是根据本公开的实施例示出的另一种区块链交易的执行方法的流程图;
图5是根据本公开的实施例示出的一种区块链交易的执行装置的示意框图;
图6是根据本公开的实施例示出的一种电子设备的结构图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在相关技术中,同一区块链节点可以横向扩展多个执行器(或称执行器分片),并由区块链模块自身维护区块链网络的全部状态数据,各个执行器在分别执行不同的区块链交易的过程中,需要从分别依赖于区块链节点内的数据总线从同一区块链模块处获取相应的状态数据。例如,在所述区块链交易为转账交易的情况下,区块链节点需要分别根据转出方账户和转入方账户的状态数据确定两账户的当前余额,并根据该区块链交易指定的转账额度对两账户的当前余额进行更新,从而将转出方账户中对应于所述转账额度的资金转移至所述转入方账户。
但是在该方式下,一方面,在区块链模块与执行器之间传输状态数据难以避免的存在网络延迟,导致执行器需要耗费较长时间获取所需的状态数据,特别是在区块链模块与执行器分别处于不同设备的场景下,上述网络延迟更是会对区块链交易的处理总时间产生难以忽略的不利影响;另一方面,各个执行器本质上仍然是通过串行方式从区块链模块处获取状态数据,在区块链节点同一时刻处理较多区块链交易的场景下,甚至会导致数据总线拥堵,因此各个执行器对于自身所需状态数据的获取效率仍然不高。显然,由于相关技术方案中的各个执行器需要从区块链模块处串行获取自身所需的状态数据,所以该方案并未真正实现对区块链交易的并行执行,交易执行效率有待提升。
为解决相关技术中存在的上述问题,本公开提出一种区块链交易的执行方案。在该方案中,区块链节点中的各个执行器分别具有自身的地址区间,并分别维护有自身地址区间对应的局部状态数据,从而在接收到区块链模块分发的区块链交易之后,可以直接使用自身维护的局部状态数据执行该区块链交易,而无需从区块链模块处获取上述局部状态数据,从而通过提升局部状态数据的获取效率的方式提升区块链交易的执行效率。下面结合附图对本说明书的区块链交易的执行方案进行详细说明。
本公开所述实施例中的区块链节点可以包含区块链模块和多个执行器。参见图1所示的区块链网络和区块链节点的结构示意图,区块链节点A包含一个区块链模块和n个执行器,如执行器1、执行器2……执行器n。就本公开实施例而言,区块链模块可以将获取到的区块链交易分发至多个执行器中的目标执行器,以由该目标执行器使用自身维护的局部状态数据执行该区块链交易。当然,一个区块链节点中也可能存在多个区块链模块,而各个区块链模块均可以调用该节点包含的执行器执行区块链交易,在该场景下,本公开实施例仅关注其中任一区块链模块对区块链交易的调度和执行过程,特此说明。
另外,为实现区块链节点在区块链网络中的预设功能,区块链节点还可以包含其他的功能模块,如共识模块、P2P模块、内存池(Mempool)模块、数据存储模块、RPC模块等,区块链节点可以基于上述功能模块实现相应的预设功能,如通过P2P模块与区块链网络中的其他区块链节点实现链上通信、通过共识模块与其他区块链节点共同参与交易共识过程等,不再一一赘述。
虽然图1仅以nodeA为例进行说明,但需要说明的是,区块链网络中的任一区块链模块均可以包含区块链模块和多个执行器,使得任一区块链节点均可以采用本公开实施例所述方案执行区块链交易。
如图2所示为本公开实施例示出的一种区块链交易的执行方法的流程图。该方法应用于包含区块链模块和多个执行器的区块链节点,所述多个执行器分别维护有自身地址区间对应的局部状态数据。所述方法包括:
步骤202,所述区块链模块获取待执行的区块链交易。
首先需要说明的是,对于本公开实施例所述多个执行器中的任一执行器,其所维护的局部状态数据可以保存在该执行器的本地存储空间中,以尽量减少该执行器获取局部状态数据时的网络延迟;当然,在该执行器的本地存储空间有限的情况下,也可以将局部状态数据保存在允许该执行器访问的其他存储设备中,本公开实施例并不对此进行限制。
另外,本公开实施例所述的区块链账户以及交易账户地址所表征的交易账户,可以为区块链技术中的外部账户或者余额账户,本公开实施例对此并不进行限制。如前所述,本公开实施例所述区块链节点中的区块链模块可以将待执行的区块链交易分发至执行器执行,而在分发区块链交易之前,区块链模块需要获知其所在区块链节点中包含哪些执行器,即区块链模块需要感知自身可以调用的执行器,即可以将区块链交易分发至哪些执行器执行。区块链模块可以通过加载过程感知各个执行器,下面结合实施例对区块链模块加载任一执行器的过程进行说明。
在一实施例中,区块链模块可以维护关于执行器的路由表,该路由表用于记录区块链节点中各个执行器的执行器标识和地址区间,如可以用于记录各个执行器的执行器标识与地址区间之间的对应关系。其中,任一执行器的地址区间可以由区块链模块为其分配。例如,在区块链模块正常工作的过程中,任一执行器可以向区块链模块发起包含自身的执行器标识的加载请求,而区块链模块可以响应于该加载请求确定所述路由表中是否记录有该执行器标识。在路由表中未记录所述任一执行器的执行器标识的情况下,表明该执行器尚未被加载至区块链模块,即区块链模块尚未感知到该执行器,因此该执行器是相对于区块链模块的新增执行器。此时区块链模块可以为该执行器分配地址区间,然后根据分配的该地址区间更新所述路由表,并将更新后的路由表下发至包括该新增执行器在内的各个执行器。需要说明的是,上述任一执行器可以预先注册至区块链模块,此时该执行器的执行器标识可以由区块链模块在其注册过程中为其指定;或者,上述任一执行器和该区块链模块也可以预先注册至同一服务中心,而该执行器的执行器标识可以由该服务中心在其注册过程中为其指定。
可以理解的是,上述路由表中还可以记录各个执行器的IP地址、端口号等地址信息,以便区块链模块与执行器之间或者不同执行器之间基于该地址信息实现交互。上述加载请求可以由所述任一执行器在本次启动完成后发起,其中,本次启动可以为正常启动,或者也可以为异常停机后的重启。换言之,任一执行器可以在正常启动完成后或者宕机重启完成后,向区块链模块发起携带自身执行器标识的加载请求,以告知区块链模块该执行器处于正常工作状态,可以接收并执行区块链模块分发的区块链交易。
另外,区块链模块可以通过多种方式为所述任一执行器分配地址区间。以全部地址范围为[0,100]为例,若上述路由表为空(即区块链模块尚未加载任何执行器),则区块链模块可以将全部地址范围均分配给所述任一执行器,即为该执行器分配地址区间为[0,100]。或者,若上述路由表中已经记录有至少一个执行器(即区块链模块已经加载了至少一个执行器)的执行器标识和地址区间,则区块链模块可以从已经记载的执行器的地址区间中抽取部分地址区间分配给所述任一执行器。
如图1所示,若n=3,且区块链模块接收到执行器3发起的加载请求时,路由表中已经记录有执行器1和执行器2的执行器标识和地址区间,不妨假设执行器1和执行器2的地址区间分别为[0,50]和(50,100]。在这种情况下,区块链模块可以从执行器1的地址区间中抽取[30,50]分配给执行器3作为其地址区间,则分配完成后的执行器1、执行器2和执行器3的地址区间分别为[0,30]、(30,50]和(50,100]。或者,区块链模块也可以从执行器1的地址区间中抽取(30,50]并从执行器2的地址区间中抽取(50,75]分配给执行器3作为其地址区间,则分配完成后的执行器1、执行器2和执行器3的地址区间分别为[0,30]、(30,75]和(75,100]。
其中,上述[0,100]只是对全部地址范围的一种示意性举例,考虑到区块链技术中的账户地址通常为三十二位的十六进制字符串,所以在实际应用中,上述全部地址范围可以为[0,16^32]。当然,可以以数字形式或者字符串形式表示上述账户地址,本公开实施例对于上述地址区间的分配规则及具体表示形式并不进行限制。
可见,对于包含n(n≥2)个执行器的区块链节点来说,上述全部地址范围对应的全局状态数据可以被划分为n份,并分别由n个执行器所维护。任一执行器所维护的局部状态数据,即为处于该执行器的地址区间内的各个账户地址所表征的、已经创建完成的区块链账户的状态数据。当然,假如处于该地址区间的某一账户地址尚未被创建区块链账户,即区块链网络中尚不存在该账户地址对应的区块链账户,则该执行器自然不会维护该区块链账户的状态数据。在本公开实施例中,区块链模块和各个执行器可以以区块链账户为单位维护相应的状态数据,如可以按照区块链账户的账户地址为索引在本地保存各个区块链账户的状态数据。
在为任一执行器分配相应的地址区间后,区块链模块可以基于该执行器的执行器标识和为其分配的地址区间更新自身维护的路由表,如在路由表中新增上述任一执行器的执行器标识和地址区间。进而,区块链模块可以将更新后的路由表下发至各个执行器,使得区块链模块和区块链节点中的各个执行器均维护有更新后的路由表。或者,为减少区块链模块与执行器之间传输的数据量,区块链模块也可以向新加载的所述任一执行器下发更新后的完整路由表,而向其他执行器下发关于路由表的变化信息,以由其他各个执行器分别根据该信息自行更新本地维护的路由表,以实现各个执行器分别维护的路由表的统一更新。
另外,在区块链模块维护有所属区块链网络的全局状态数据的情况下,区块链模块还可以向新加载的任一执行器下发其地址区间对应的局部状态数据。如区块链模块可以在自身维护的全局状态数据中解析区块链模块的地址区间对应的部分状态数据,并将这部分状态数据下发至该执行器,从而该执行器可以将这部分状态数据作为自身地址区间对应的局部状态数据进行维护。或者,在任一执行器的地址区间由其他执行器的地址区间中抽取的情况下,上述其他执行器处维护有所述任一执行器的地址区间对应的状态数据,因此可以由区块链模块指示其他执行器根据路由表中记录的地址信息将上述状态数据发送至所述任一执行器,以便执行器将接收到的这部分数据作为自身地址区间对应的局部状态数据进行维护。
例如,承接于前述实施例,在区块链模块从执行器1的地址区间中抽取[30,50]分配给执行器3作为其地址区间的情况下,区块链模块可以从自身维护的全局状态数据(即账户地址处于[0,100]内的各个区块链账户的状态数据)中确定账户地址处于[30,50]内的各个区块链账户的状态数据,并将这部分状态数据发送至执行器3作为其局部状态数据。或者,在上述路由表更新完成后,执行器1可以从自身维护的更新前的局部状态数据(即账户地址处于[0,50]内的各个区块链账户的状态数据)中确定账户地址处于[30,50]内的各个区块链账户的状态数据,并将这部分状态数据发送至执行器3作为其局部状态数据。进而,执行器可以将本地维护的这部分状态数据删除,以回收存储空间。
由上述实施例可见,各个执行器分别维护的局部状态数据之间的交集可以为空集,即各个执行器所维护的局部状态数据互不相同。或者,多个执行器分别维护的局部状态数据之间的交集也可以为非空集,即多个执行器也可能分别维护有同一区块链账户的状态数据。
如前所述,上述区块链模块可以维护有所属区块链网络的全局状态数据,所述全局状态数据可以是各个执行器所维护的局部状态数据的并集。可以理解的是,上述全局状态数据为区块链网络的最新世界状态所对应的全部状态数据,即该全局状态数据为最新状态数据。其中,区块链模块和执行器除了维护各自的状态数据,还可以维护各个状态数据的数据版本,如区块链模块可以维护全局状态数据的全局数据版本、各个执行器可以分别维护各自的局部数据版本。在全局状态数据与各个局部状态数据均对应于同一时刻(如全局状态数据与各个局部状态数据的版本相同)的情况下,基于上述全局状态数据或者基于各个局部状态数据均可以生成区块链网络在该时刻的完整状态树。
其中,所述局部数据版本和全局数据版本可以为相应状态数据所对应区块链交易所处区块的区块高度。例如,在待执行的各个区块链交易属于同一区块的情况下,区块链模块可以在该区块被成功上链后,根据各个区块链交易的执行结果更新本地维护的全局状态数据,并将相应的全局数据版本更新为该区块的区块高度。而任一执行器在执行完毕某一区块中的区块链交易的情况下,若接收到区块链模块发送的用于指示该区块被上链成功的指示消息,则可以根据上述区块链交易更新本地维护的局部状态数据,并相应的局部数据版本更新为该区块的区块高度。通过上述方式,可以实现对全局数据版本和局部数据版本的更新及时,一定程度上避免后续区块链交易执行出错。
可以理解的是,区块链模块维护的全局状态数据的全局数据版本通常为最新版本。基于此,在所述路由表中记录有所述任一执行器的执行器标识的情况下,区块链模块可以获取所述加载请求中携带的所述任一执行器维护局部状态数据的局部数据版本,进而判断该局部数据版本与区块链模块维护的全局状态数据的全局数据版本是否一致。若两版本一致,则表明所述任一执行器维护的局部状态数据与区块链模块维护的全局状态数据均为最新版本的状态数据;反之,若两版本不一致(如局部数据版本低于全局数据版本),则表明所述任一执行器维护的局部状态数据并非最新状态数据,此时区块链模块可以触发更新该局部状态数据,以保证后续执行区块链交易的结果准确性。例如,区块链模块可以响应于所述局部数据版本与所述全局数据版本不一致,将全局状态数据中对应于所述任一执行器的地址区间的最新状态数据发送至所述任一执行器。然后,该执行器可以使用所述最新状态数据更新自身维护的局部状态数据,而更新后的局部状态数据可以被用于执行分发至该执行器的区块链交易。
可以理解的是,本公开实施例所述的区块链节点可以为区块链网络中的任一区块链节点,该区块链节点可以通过多种方式获取区块链交易,本公开实施例对此并不进行限制。例如,该区块链节点可以接收用户通过区块链客户端发起的区块链交易,其中,该用户可以为区块链网络的管理员或者普通用户。再例如,该区块链节点也可以从区块链网络中的其他区块链节点处同步区块链交易。区块链节点可以将通过上述方式获取到的区块链交易置于交易集合中,以便后续执行。
另外,根据区块链网络所采用区块共识规则的不同,区块链节点可以通过不同的方式获取待执行的区块链交易。例如,对于需要在区块共识前执行的区块链交易,区块链模块可以直接从上述交易集合中获取该交易并作为待执行的区块链交易;换言之,区块链节点可以将区块链客户端发起的或者其他从区块链节点处同步的区块链交易作为本方案所述的待执行的区块链交易。再例如,对于需要在区块共识后执行的区块链交易,区块链模块可以从通过共识的区块中解析待执行的区块链交易,换言之,区块链模块可以将通过共识的区块中记录的区块链交易作为本方案所述的待执行的区块链交易。
在区块链技术中,通常以账户地址对区块链账户进行标识。对于待执行的任一区块链交易,其所涉及的交易账户的账户地址通常被记录于该账户的from字段和/或to字段中。因此,区块链模块可以将待执行的区块链交易的from字段和/或to字段中记录的账户地址作为该交易的交易账户地址。例如,在账户account1要向账户account2转账的场景下,account1可以在区块链网络中发起转账交易,该交易的from字段的取值可以为account1(即交易发起方账户)的账户地址,to字段的取值可以为account2的账户地址,而交易的data字段中可以记录转账额度。再例如,在账户account3要在区块链网络中部署智能合约的场景下,account3可以在区块链网络中发起合约生成交易,该交易的from字段的取值可以为account1(即交易发起方账户)的账户地址,to字段的取值可以为空,data字段可以保存待部署的智能合约的字节码,而该交易的数字签名可以用于表征该智能合约的合约地址。
步骤204,所述区块链模块根据所述区块链交易的交易账户地址和各个执行器的所述地址区间确定匹配于所述区块链交易的目标执行器,并将所述区块链交易分发至所述目标执行器。
在获取到待执行的区块链交易的情况下,区块链模块可以确定其对应的目标执行器,并将该区块链交易分发至目标执行器,以由目标执行器执行该交易。例如,区块链模块可以分别确定匹配于各个区块链交易的目标执行器,并将各个区块链交易分别发送至相应的目标执行器处执行。
在一实施例中,为提升区块链交易的分发效率,区块链模块可以对获取到的至少一个区块链交易进行分组处理,以便以交易组为单位进行交易分发,即将处理得到的各个交易组分别发送至相应的目标执行器执行。例如,区块链模块可以根据区块链交易的交易账户地址将上述区块链交易划分为至少一个交易组,然后根据所述至少一个交易组所包含区块链交易的交易账户地址和各个执行器的地址区间,确定分别匹配于各个交易组的目标执行器;其中,匹配于任一交易组的目标执行器即匹配于该交易组中的各个区块链交易。通过该方式,区块链模块可以将获取到的区块链交易划分为交易组,并以交易组为单位进行交易分发,而不必针对各个区块链交易依次进行分发,一定程度上提升了区块链交易的分发效率。特别是在一次性获取多个待执行的区块链交易的场景下,该方式能够显著提升区块链交易的分发效率。
区块链模块可以采用多种方式对区块链交易进行上述分组处理。作为一示例性实施例,区块链模块可以将存在至少一个相同交易账户地址的区块链交易划分至同一交易组。譬如,在多个区块链交易均存在同一交易账户地址的情况下,可以将这些区块链交易划分至同一交易组;或者,在多个区块链交易中的至少两个区块链交易之间存在共同的交易账户地址的情况下,可以将所述多个区块链交易划分至同一交易组。以图3为例,假设待处理的区块中包含交易1~交易4,其中,交易1的交易账户地址为地址A和B、交易2的交易账户地址为地址B和C、交易3的交易账户地址为地址E和F、交易4的交易账户地址为地址G和A。可见,交易1和交易2存在共同的交易账户地址B,交易1和交易4存在共同的交易账户地址A,因此可以将交易1、交易2和交易4划分至同一交易组,即交易组1;而交易3与其他交易不存在共同的交易账户地址,所以可以将交易3单独划分至同一交易组,即交易组2。
可以理解的是,在区块链交易同时存在from地址和to地址的情况下,from地址和to地址均可以作为交易的交易账户地址,而且在交易分组过程中对交易账户地址的具体类型可以并不作区分。当然,考虑到区块链交易的from地址通常并不为空,而to地址则可能为空(如前述用于部署智能合约的交易),所以对于任一区块链交易,也可以仅使用该交易的from地址取值或者to地址取值(二者之一)作为该交易的交易账户地址,以尽可能地简化交易分组规则。例如,可以使用各个区块链交易的from地址取值作为各个区块链交易的交易账户地址。再例如,对于to地址取值不为空的区块链交易,可以使用to地址取值作为该交易的交易账户地址;而对于to地址为空的区块链交易,可以使用其from地址取值作为该交易的交易账户地址。
通过上述方式,可以将区块链模块获取到的各个区块链交易划分至相应的交易组,并保证任一交易组中的各个交易具有相同的交易账户地址,使得目标区块链模块能够尽可能多的使用自身维护的局部状态数据执行该交易组内各个区块链交易,尽量缩短各个执行器执行相应区块链交易过程中获取状态数据的需要消耗的时间,从而进一步提升区块链交易的执行效率。
作为另一示例性实施例,区块链模块也可以将交易账户地址处于同一地址区间的区块链交易划分至同一交易组,该交易组用于分配至该地址区间对应的执行器。可见,对于任一地址区间对应的执行器,交易账户地址处于该地址区间内的区块链交易将被划分至该执行器对应的交易组——在存在n个执行器的情况下,区块链模块获取到的待执行的全部区块链交易,将被划分为n个交易组分别由相应的执行器执行。
当然,上述全部待执行的区块链交易的数量应当不小于n,而在该数量小于n的情况下,则无需将全部区块链交易划分为n个交易组,以避免同一区块链交易被不同的执行器重复执行。例如,在将区块链交易的from地址取值或者to地址取值作为其交易账户地址的情况下,各个区块链交易可以被准确的划分至相应的交易组,而在同时将区块链交易的from地址取值和to地址取值作为其交易账户地址的情况下,任一区块链交易可能同时满足被划分至多个交易组的条件,此时,为了避免多个执行器分别重复执行同一区块链交易,可以仅将该交易择一划分至其中一个交易组,以便仅由一个执行器执行该交易,避免同一交易被重复执行。
以图1所示场景和图3所示的交易1~4为例,不妨假设图1所示n=3,且执行器1,执行器2和执行器3的地址区间分别为[A,C]、[D,F]和[G,…],则在该场景下:交易1和交易2的交易账户地址均处于执行器1的地址区间,故可以将交易1和交易2划分至执行器1对应的交易组。交易3的交易账户地址处于执行器2的地址区间,故可以将交易3划分至执行器2对应的交易组。交易4的交易账户地址分别处于执行器1和执行器3的地址区间,故若仅将from地址取值作为交易4的交易账户地址,则可以将该交易划分至执行器3对应的交易组;若仅将to地址取值作为交易4的交易账户地址,则可以将该交易划分至执行器1对应的交易组;若将from地址取值和to地址取值均作为交易4的交易账户地址,则可以将该交易划分至执行器1或执行器3分别对应的交易组,以由二者之一执行交易4。
显然,该方式的分组规则更简单,不仅有助于提升分组效率,而且因为任一执行器所对应交易组中各个区块链交易均有至少一个交易账户地址的状态数据由该执行器所维护,所以能够进一步减少该执行器需要从其他执行器获取的状态数据。当然,本公开实施例对于交易分组的具体规则并不进行限制,在方案应用过程中可以根据实际情况进行调整。
进一步地,在上述交易组划分完成后,区块链模块可以根据交易组与执行器之间的相关度确定匹配于各个交易组的目标执行器。以任一交易组为例,区块链模块可以根据该交易组所包含区块链交易的交易账户地址和各个执行器的地址区间,分别确定该交易组与各个执行器之间的相关度,进而根据所述相关度确定匹配于该交易组的目标执行器。可以理解的是,匹配于任一交易组的目标执行器,即匹配于该交易组中所包含的各个区块链交易,相应地,区块链模块可以将该交易组发送至该目标执行器,以由该目标执行器执行该交易组中所包含的各个区块链交易。
通过该方式,区块链模块可以以交易组为单位,根据交易组中各个区块链交易的交易账户地址与执行器的地址区间为各个交易组确定相应的目标执行器,考虑到目标执行器维护有自身地址区间的局部状态数据,所以任一交易组的目标执行器在执行该交易组中的各个区块链交易的过程中,可以最大限度地减少跨执行器读取状态数据情况的发生(即尽可能多的使用本地维护的局部状态数据、尽可能少的从其他执行器或者区块链模块处获取所需的状态数据),从而有助于提升各个区块链交易的执行效率。
其中,区块链模块可以根据交易账户地址的地址数量确定任一交易组与任一执行器之间的相关度。例如,区块链模块可以在任一交易组所包含区块链交易的全部交易账户地址中,确定处于任一执行器的地址区间内的交易账户地址的地址数量,并按照与该地址数量呈正相关的规律,确定所述任一交易组与所述任一执行器之间的相关度。
进而,可以将最高相关度对应的执行器确定为该匹配于该交易组的目标执行器。其中,在最高相关度对应于一个执行器的情况下,可以将该执行器确定为所述任一交易组的目标执行器。
仍以图1所示场景和图3所示交易分组结果为例进行说明,将区块链交易的from地址取值和to地址取值作为其交易账户地址,不妨假设图1所示n=2,且执行器1和执行器2的地址区间分别为[A,C]和[D,…],则在该场景下:交易组1中包含的六个交易账户地址(两个A、两个B、一个C和一个G)中,有五个交易账户地址(两个A、两个B和一个C)处于执行器1的地址区间、有一个交易账户地址(即一个G)处于执行器2的地址区间;交易组2中包含的两个交易账户地址(即E和F),均处于执行器2的地址区间。可见,交易组1针对执行器1和执行器2的地址数量分别为五和一,因此交易组1与执行器1的相关度大于交易组1与执行器2的相关度,此时可以将执行器1确定为匹配于交易组1的目标执行器;交易组2针对执行器1和执行器2的地址数量分别为零和二,因此交易组2与执行器1的相关度小于交易组2与执行器2的相关度,此时可以将执行器2确定为匹配于交易组2的目标执行器。
为了对上述相关度进行量化比较,可以将所述任一交易组针对任一执行器的地址数量(即该交易组的各个交易账户地址中处于该执行器的地址区间中的交易账户地址的数量)作为所述任一交易组与所述任一执行器之间的相关度。当然,也可以采用其他计算规则根据所述地址数量计算相关度。本公开实施例对于具体的计算规则并不进行限制,但是应保证该计算规则符合正相关规律,即任一交易组针对任一执行器之间的地址数量越大,计算出的二者之间的相关度也越大,从而使得相关度能够真实反应交易组中各个区块链交易的交易地址与执行器的地址区间之间的匹配程度——处于任一执行器的地址区间中的交易账户地址越多,所述任一交易组与所述任一执行器的匹配程度越高。
特别的,通过上述方式计算出的任一交易组与多个执行器之间的相关度可能相同,甚至该相关度可能为最大值,即最高相关度对应于多个执行器。在这种情况下,区块链模块可以分别确定所述多个执行器中各个执行器的交易执行效率,并将其中交易执行效率最高的执行器确定为匹配于该任一交易组的目标执行器。
区块链模块可以采用多种指标确定任一执行器的交易执行效率。作为一示例性实施例,区块链模块可以根据该执行器的当前可用资源量确定其交易执行效率,其中,任一执行器的交易执行效率可以与该执行器的当前可用资源量呈正相关。其中,任一执行器的可用资源可以包括存储资源、计算资源和/或网络资源等,本公开实施例对此并不进行限制。可以理解的是,任一执行器的可用资源量越大,该执行器执行区块链交易时可以调用的资源就越多,由于可用资源不足而导致交易执行缓慢甚至执行失败的可能性也就越小,从而有助于保证该执行器对区块链交易的顺利执行。
作为另一示例性实施例,区块链模块也可以根据任一执行器执行历史区块链交易的平均时长确定其交易执行效率,任一执行器的交易执行效率可以与该执行器执行历史区块链交易的平均时长呈负相关。其中,所述平均时长可以由区块链模块计算,如区块链模块可以根据将任一历史区块链交易发送至该执行器直至接收到该执行器返回的该交易执行结果的时间间隔作为该历史区块链交易的执行时间,并根据多个历史区块链交易的执行时间计算该执行器执行历史区块链交易的平均时长。或者,所述平均时长也可以由该执行器自行统计,如该执行器可以将接收到历史区块链交易直至将该交易的执行结果成功返回至区块链模块的时间间隔作为该历史区块链交易的执行时间,并根据多个历史区块链交易的执行时间计算该执行器执行历史区块链交易的平均时长,进而,执行器可以将统计出的上述平均时长上传至区块链模块,也可以由区块链模块主动向该执行器请求获取。
为了保证所述平均时长的时效性,使上述平均时长更准确地反映执行器在近期的工作能力,计算上述平均时长的历史区块链交易可以为该执行器最近执行的预设数量(如100个、20个、1000个等)的历史区块链交易,不再赘述。可以理解的是,任一执行器的上述平均时长越短,则表明该执行器执行历史区块链交易的速度越快,因此若将待执行的区块链交易发送至该执行器执行,则越有可能更加快速地执行完毕该交易。所以,通过设置任一执行器的交易执行效率与该执行器执行历史区块链交易的平均时长呈负相关,有助于根据该执行器对历史区块链交易的执行效率预测该执行器对区块链交易的执行效率,从而使用执行效率更高的执行器执行所述任一交易组中的各个区块链交易。
步骤206,所述目标执行器根据自身维护的所述局部状态数据执行所述区块链交易。
由前述实施例可知,任一区块链交易的交易账户地址可能处于该交易的目标执行器的地址区间中,此时,目标执行器维护的局部状态数据中包含该交易账户地址的状态数据,因此目标执行器可以使用自身所维护的上述状态数据执行该区块链交易。
在所述区块链交易的交易账户地址处于所述目标执行器的地址区间的情况下,目标执行器可以从自身维护的局部状态数据中确定该交易账户地址对应的第一状态数据,并根据该第一状态数据执行所述区块链交易。如前所述,本公开所述实施例中的状态数据可以以区块链账户为单位进行维护和保存,目标执行器自身维护的局部状态数据即为处于该执行器的账户区间中的各个区块链账户的状态数据,所以目标执行器可以在本地维护的局部状态数据中查找上述区块链交易的交易账户地址对应的第一状态数据。
例如,在所述区块链交易为转账交易的情况下,该转账交易可以由账户account1发起并用于向账户account2转账。此时目标执行器可以根据该交易的from字段取值和to字段取值确定账户account1和account2的账户地址,然后从本地维护的局部状态数据中确定两账户的当前账户余额。进而,在账户余额满足转账需求(如账户account1的账户余额不小于转账额度和手续费之和)的情况下,目标执行器可以根据该交易指定的转账额度生成account1与account2之间的转账记录。其中,该转账记录可以包含在该区块链交易的收据(Receipt)中。此后,可以根据上述转账记录更新本地维护局部状态数据,即更新账户account1和账户account2的账户余额。可见在该过程中,上述账户account1和account2的当前账户余额即为执行该转账交易所需的第一状态数据。
再例如,在所述区块链交易为合约生成交易的情况下,该交易可以由账户account3发起并用于在区块链网络中部署智能合约。此时目标执行器可以根据该交易的数字签名确定合约地址,并以该合约地址创建智能合约,该智能合约的字节码可以从该交易的data字段中获取。另外,目标执行器还可以根据该交易的from字段取值确定账户account3的账户地址,然后从本地维护的局部状态数据中确定该账户已部署智能合约的次数,并在部署上述智能合约完成的情况下更新该次数;或者还可以将账户account3的账户地址记录在上述智能合约中,不再赘述。可见在该过程中,上述账户account3已部署智能合约的次数和/或该账户的账户地址均可以为作为执行该合约生成交易所需的第一状态数据。
当然,任一区块链交易的交易账户地址也可能并不处于该交易的目标执行器的地址区间中,如在根据区块链交易的from字段取值确定匹配于该交易的目标执行器的情况下,该交易的to字段取值可能并不处于该目标执行器的地址区间中,因此目标执行器可能并未维护to字段取值所表征区块链账户的状态数据,此时目标执行器可以从区块链模块或者其他执行器处获取该状态数据,以保证顺利执行所述区块链交易。
在一实施例中,在任一区块链交易的交易账户地址不处于目标执行器的地址区间的情况下,目标执行器可以向区块链模块请求所述第一状态数据。相应地,区块链模块可以响应于目标执行器针对第一状态数据发起的获取请求,从本地维护的全局状态数据中确定所述第一状态数据并将其返回至目标执行器,从而,执行器可以根据接收到的该第一状态数据执行所述区块链交易。通过该方式,目标执行器在自身并未维护任一区块链交易所需的第一状态数据的情况下,可以从区块链模块处获取第一状态数据,以保证顺利执行该区块链交易。
如前所述,各个执行器分别维护有自身地址区间对应的局部状态数据,并且还可以分别维护所述区块链模块生成的路由表,该路由表用于记录各个执行器的执行器标识和地址区间。在另一实施例中,所述多个执行器中分别维护的局部状态数据的并集可以为区块链模块所维护的全局状态数据。在该场景下,若任一区块链交易的交易账户地址不处于所述目标执行器的地址区间(表明执行该区块链交易所需的第一状态数据并未保存在目标执行器本地),则目标执行器可以根据自身维护的路由表查询该交易账户地址所处地址区间对应的其他执行器(即确定保存有所述第一状态数据的执行器),进而向所述其他执行器请求获取所述第一状态数据。相应地,所述其他执行器可以从自身维护的局部状态数据中确定所述第一状态数据并将其返回至目标执行器,以由目标执行器根据接收到的该第一状态数据执行所述任一区块链交易。
通过该方式,目标执行器在自身并未维护任一区块链交易所需的第一状态数据的情况下,可以从其他执行器处获取其所维护的第一状态数据,以实现对该区块链交易的顺利执行。在该方式下,任一执行器可以在自身并未维护执行区块链交易所需状态数据的情况下,向其他执行器请求获取该状态数据。该方式不仅保证了区块链交易的顺利执行,而且各个执行器之间的数据传输并不需要区块链模块参与,使得区块链模块可以专注于交易分发和执行结果上链,有助于提升区块链节点整体对区块链交易的执行效率。
在执行上述区块链交易完成后,执行结果中可以包含所述交易账户地址对应的第二状态数据,从而区块链模块或者执行器可以根据第二状态数据对本地维护的状态数据进行更新。上述第二状态数据对应的待更新账户地址可能处于目标执行器的地址区间,如上述转账交易所涉及账户account1和account2的账户地址,或者上述合约生成交易所涉及账户account3的账户地。但是,在区块链交易的执行过程较为复杂、涉及相关账户较多的情况下,区块链交易的执行结果往往会导致除了交易账户之外的其他账户的状态发生变化,因此上述第二状态数据对应的待更新账户地址也可能并不处于目标执行器的地址区间,而是处于其他执行器的地址区间。对此,目标执行器可以针对性地实现状态数据更新。
作为一示例性实施例,目标执行器可以先确定所述执行结果中包含的第二状态数据对应的待更新账户地址,然后判断该地址是否处于目标执行器的地址区间:在所述待更新账户地址处于目标执行器的地址区间的情况下,目标执行器可以根据所述第二状态数据更新自身维护的局部状态数据,如目标执行器可以根据转账交易的执行结果更新账户account1和account2的账户余额,或者根据合约生成交易的执行结果更新账户account3已部署智能合约的次数。反之,在所述待更新账户地址处于其他执行器的地址区间的情况下,目标执行器可以将第二状态数据发送至所述其他执行器,以由后者根据接收到的第二状态数据更新本地维护的局部状态数据。其中,上述目标执行器与其他执行器之间可以根据各自维护的路由表实现上述数据交互。通过该方式,目标执行器和其他执行器可以分别更新本地维护的局部状态数据。
作为另一示例性实施例,所述目标执行器还可以将区块链交易的执行结果返回至区块链模块,区块链可以在自身维护有所属区块链网络的全局状态数据的情况下,根据该执行结果中包含的第二状态数据更新所述全局状态数据,具体的,可以先确定第二状态数据对应的待更新账户地址,进而在自身维护的全局状态数据中确定该账户地址对应的状态数据,并使用上述第二状态数据更新该状态数据。和/或,在上述各个区块链交易的被从同一区块中获取的情况下,区块链模块还可以根据所述执行结果处理所述区块,如将该区块上链等。如前所述,区块链模块可以将接收到的各个区块链交易分发至相应的目标执行器执行,如可以分别分发各个区块链交易,或者也可以在对全部区块链交易进行分组后,以交易组为单位进行批量分发,以使各个区块链交易被相应的目标执行器分别执行。基于此,区块链模块可以在接收到各个目标执行器分别发送的各个区块链交易的执行结果的情况下,根据全部区块链交易的执行结果处理所述区块,不再赘述。
根据本公开的实施例,对于区块链节点所包含的多个执行器,各个执行器分别维护有自身地址区间对应的局部状态数据,区块链节点所包含的区块链模块在获取到待执行的区块链交易后,根据所述区块链交易的交易账户地址和各个执行器的地址区间确定匹配于该区块链交易的目标执行器,并将该区块链交易分发至确定出的目标执行器,以由目标执行器根据自身维护的上述局部状态数据执行该区块链交易。
在本方案中,由区块链节点中的各个执行器分别维护自身地址区间所对应的局部状态数据,使得各个执行器分别使用自身所维护的局部状态数据即可执行相应的区块链交易,而无需从区块链模块处获取状态数据。该方式不仅避免了区块链模块与执行器之间的网络延迟导致的状态数据获取时间较长的缺陷,而且各个执行器可以分别获取自身维护的局部状态数据以执行区块链交易,实现了真正意义上的并行执行区块链交易,相较于仅由区块链模块维护区块链网络的状态数据的前述相关技术方案,能够显著提升区块链节点对于区块链交易的执行效率。
图4是本说明书一示例性实施例示出的另一种区块链交易的执行方法的流程图,如图4所示,该方法应用于区块链网络中的任一区块链节点,具体的,图4所示的各个步骤可以由该区块链节点所包含的区块链模块或者多个执行器中的目标执行器所执行,详见下述步骤。下面结合图4,以对区块链交易进行分组为例,对加载执行器、分发及执行区块链交易的过程进行详细说明,该过程可以包括下述步骤S401-S420。
【加载执行器】
以区块链节点中的任一执行器i(所述i≤n,n为该区块链节点中执行器的个数)为例,通过步骤S401~406对该执行器的加载过程进行说明。
步骤S401,区块链模块所连接的执行器i启动。
步骤S402,所述执行器i向区块链模块发送包含自身执行器标识的加载请求。
在同一区块链节点中,各个执行器均与区块链模块所连。在所述执行器i正常启动或者宕机后重启完成的情况下,该执行器可以向区块链模块发送包含自身执行器ID的加载请求。
步骤S403,区块链模块判断所述执行器i是否为新增执行器。
响应于接收到的加载请求,区块链模块可以先判断执行器i是否为新增执行器,即判断自身是否已经加载该执行器。
具体的,区块链模块可以根据自身所维护的路由表中是否记录有所述加载请求中包含的上述执行器ID,判断该加载器是否为新增执行器:若路由表中记录有该执行器ID,则表明执行器i为已经被区块链模块所加载;反之,若路由表中未记录该执行器ID,则表明执行器i为尚未被区块链模块所加载,即该执行器为新增执行器。
或者,区块链模块也可以根据加载请求中携带的信息确定该执行器是否为新增执行器:在自身尚未被任何区块链模块所加载的情况下,执行器i本地通常并未维护任何状态数据,所以上述加载请求中可以不包含状态数据版本。而在自身已经被所述区块链模块加载的情况下,执行器i本地通常会维护有局部状态数据,所以上述加载请求中可以包含自身所维护局部状态数据的局部数据版本。因此,区块链模块可以根据加载请求中是否包含所述状态数据版本确定执行器i是否为新增执行器:若该加载请求中包含所述执行器i所维护局部状态数据的局部数据版本,则表明该执行器并非新增执行器;反之,若该加载请求中并不包含局部数据版本,则表明该执行器为新增执行器。
通过上述方式,在确定执行器i为新增执行器的情况下,区块链模块可以转入步骤S404;否则,在确定执行器i并非新增执行器的情况下,区块链模块可以转入步骤S405。
步骤S404,区块链模块为所述执行器i分配地址区间,更新并向各个执行器下发路由表。
在确定执行器i为新增执行器的情况下,区块链模块可以为该执行器分配相应的地址区间,如在区块链模块尚未加载任何执行器的情况下,区块链模块可以将全部地址范围作为执行器的地址区间;而在区块链模块已经加载有执行器的情况下,区块链模块可以从已加载执行器的地址区间中抽取部分地址区间分配给执行器i,具体抽取方式可以参见前述实施例的记载,此处不再赘述。
进一步的,区块链模块可以根据上述地址区间的分配结果更新本地维护的路由表,并将更新后的路由表下发至包括所述执行器i在内的各个执行器,通过该方式,区块链模块所加载的各个执行器可以分别维护有路由表,使得各个执行器可以基于该路由表实现数据交互。另外,因为执行器i尚未保存自身的地址区间对应的局部状态数据,所以可以转入步骤S406,从区块链模块处同步自身地址区间对应的最新版本数据,以作为自身的局部状态数据。
步骤S405,区块链模块判断所述执行器i的局部数据版本与自身所维护全局状态数据的全局数据版本是否一致。
在所述执行器i并非新增执行器的情况下,区块链模块可以进一步判断执行器i的局部数据版本与自身所维护全局状态数据的全局数据版本是否一致,以确定是否需要对执行器i维护的状态数据进行更新。区块链交易本地维护有所述区块链网络的全局状态数据,该全局状态数据可以对应于所述区块链节点所属区块链网络的世界状态,基于某一时刻的全局状态数据可以生成该区块链网络在该时刻的状态树。另外,该全局状态数据可以为各个执行器分别维护的局部状态数据的交集,基于同一时刻各个执行器分别维护的局部状态数据,也可以生成所述区块链网络在该时刻的状态树。
通常情况下,区块链模块所维护的上述全局状态数据为区块链网络的最新状态数据,即该全局状态数据的状态数据版本为最新版本。基于此,区块链模块可以判断上述执行器i所维护的局部状态数据的局部数据版本与自身所维护全局状态数据的全局数据版本是否一致。在二者一致的情况下,表明执行器i所维护的局部状态数据也为最新版本的状态数据,此时可以直接使用该执行器执行区块链交易,无需更新该局部状态数据;反之,在二者不一致的情况下,表明执行器i所维护的局部状态数据并非最新版本的状态数据,此时为避免区块链交易的执行结果有误,可以转入步骤S406更新执行器i维护的局部状态数据。
步骤S406,区块链模块在全局状态数据中确定最新状态数据并同步至所述执行器i。
区块链模块在本地维护的全局状态数据中确定执行器i的地址区间对应的最新版本数据,并将这部分数据同步至执行器i,以由执行器i根据直接保存该数据或者使用该数据更新本地维护的局部状态数据。
至此,对执行器i的加载过程完成,此时执行器i本地维护的局部状态数据为自身地址区间对应的最新版本的状态数据,因此可以使用这部分数据执行区块链模块下发的区块链交易。可以理解的是,区块链模块所连接的各个执行器均可以通过上述方式完成加载,从而便于区块链模块调用相应的执行器执行区块链交易(即将区块链交易下发至相应的目标执行器执行)。
【分发区块链交易】
步骤S407,区块链模块获取区块并从中解析待执行的区块链交易。
步骤S408,区块链模块对待执行的各个区块链交易进行分组处理。
区块链模块可以从本地获取已经通过共识的区块,并从该区块中解析待执行的区块链交易,然后对上述区块链交易进行分组处理,即将上述区块链交易划分为至少一个交易组。其中,上述交易分组过程可以根据各个区块链交易的交易账户地址实现,具体过程可以参见前述实施例的记载,此处不再赘述。
步骤S409,区块链模块分别计算各个交易组与各个执行器之间的相关度。
进一步的,区块链模块可以根据交易组中所包含各个区块链交易的交易账户地址计算交易组与各个执行器之间的相关度。以任一交易组与任一执行器之间的相关度为例,对于该交易组中包含的各个区块链交易,区块链模块可以分别确定各个区块链交易的交易账户地址,并根据上述交易账户地址是否处于所述任一执行器的地址区间,确定上述任一交易组与所述任一执行器之间的相关度。其中,上述确定过程可以根据处于所述任一执行器的地址区间中的交易账户地址的地址数量实现,具体过程可以参见前述实施例的记载,此处不再赘述。
步骤S410,区块链模块根据相关度分别确定匹配于各个交易组的目标执行器,并将各个交易组分别分发至自身对应的目标执行器。
在确定出任一交易组与各个执行器之间的相关度的情况下,区块链模块可以根据上述相关度确定匹配于该交易组的目标执行器。例如可以将最高相关度对应的执行器作为目标执行器;或者,在最高相关度对应于多个执行器的情况下,可以根据各个执行器中交易执行效率最高的执行器作为目标执行器。其中,任一执行器的交易执行效率可以与该执行器的当前可用资源量呈正相关;和/或,也可以与该执行器执行历史区块链交易的平均时长呈负相关,具体确定过程可以参见前述实施例的记载,此处暂不赘述。通过上述过程确定出的匹配于任一交易组的目标执行器,即匹配于该交易组中的各个区块链交易。
此后,区块链模块可以将各个交易组分别下发至相应的目标执行器处,从而实现对区块链交易的批量下发,以便任一目标执行器执行向其下发的交易组中包含的各个区块链交易。值得说明的是,通过上述过程可以将任一执行器确定为一个或多个交易组对应的目标执行器,当然,某一执行器也可能并不匹配于任何交易组,本公开实施例对此并不进行限制。
【执行交易】
下面以待执行的各个区块链交易中的交易x为例,通过下述步骤S411~S420对匹配于交易x的目标执行器执行该交易的过程进行说明。
步骤S411,目标执行器判断执行交易x所需的第一状态数据是否保存在本地。
步骤S412,目标执行器从本地维护的局部状态数据中获取第一状态数据。
步骤S413,目标执行器根据路由表查询维护第一状态数据的执行器j,并向执行器j请求获取第一状态数据。
如前所述,由于交易x的交易账户地址可能处于目标执行器的地址区间,也可能并不处于目标执行器的地址区间,所以目标执行器可以先根据交易x的交易账户地址确定执行该交易所需的第一状态数据是否保存在本地。
若交易x的交易账户地址处于目标执行器的地址区间,则表明第一局部状态数据被保存在本地,此时可以跳转至步骤S412,即从本地维护的局部状态数据中确定并获取上述第一状态数据。反之,若交易x的交易账户地址并不处于目标执行器的地址区间,则表明第一局部状态数据并未被保存在本地,此时可以跳转至步骤S413,即根据本地维护的路由表确定交易x的交易账户地址所述地址区间对应的执行器j,进而向执行器j请求获取第一状态数据。
步骤S414,目标执行器使用获取到的第一状态数据执行交易x。
在获取到第一状态数据的情况下,区块链模块可以根据该数据执行交易x,具体执行过程可以参见前述实施例的记载,此处不再赘述。
当然,目标执行器在执行交易x的过程中,可能会因为一些意外情况导致执行失败。在这种情况下,为尽量完成该交易的执行过程,目标执行器可以尝试再次(甚至多次)执行交易x,也可以将该交易发送至维护所述第一状态数据的执行器j执行,还可以将交易x发送至区块链模块执行,或者在区块链模块记录有该交易的情况下通知区块链模块执行该交易,以尽量减少区块链模块与执行器之间的数据传输量等,具体过程不再赘述。
步骤S415,目标执行器判断执行结果中的第二状态数据是否需要自身维护。
步骤S416,目标执行器将第二状态数据发送至执行器k保存。
步骤S417,目标执行器在本地保存第二状态数据。
在执行交易x所得的执行结果中,通常会包含待更新的第二状态数据,由于被执行的交易x的具体执行过程以及所涉及的区块链账户可能较为复杂,因此第二状态数据对应的待更新账户地址可能并非属于目标执行器的地址区间。因此目标执行器需要判断该数据是否应当保存在本地。在上述待更新账户属于目标执行器之外的执行器k的情况下,可以确定第二状态数据需要由执行器k保存,此时可以转入步骤S416;反之,在上述待更新账户属于目标执行器的地址区间的情况下,可以确定第二状态数据需要保存在本地,此时可以转入步骤S417。
其中,上述执行器与执行器j并无关联,二者可以为目标执行器之外的同一执行器或者不同执行器。目标执行器或者执行器k保存上述第二状态数据的过程中,可以使用所述第二状态数据更新本地已经保存的对应于所述待更新账户地址的局部状态数据。
步骤S418,目标执行器将交易x的执行结果返回至区块链模块。
步骤S419,区块链模块保存第二状态数据。
步骤S420,区块链模块根据执行结果处理所述区块。
另外,目标执行器还可以将交易x的执行结果返回至区块链模块,以由区块链模块保存该结果,或者区块链模块也可以根据该执行结果处理所述区块,如将所述区块上链等,不再赘述。当然,前述步骤S411仅是以交易x为例进行的说明,实际上,对于获取到的任一区块链,均可以通过上述步骤进行处理已完成相应的执行过程。
另外,在所述区块中的各个待执行的区块链交易均被执行完毕后,区块链模块可以获取下一区块,从中解析新的待执行的区块链交易,并通过前述步骤S407-S420的过程继续执行,不再赘述。
至此,完成对交易x的执行过程的说明,可以理解的是,针对接收到的各个区块链交易,目标执行器都可以通过上述步骤S411~S420所示的过程进行说明。
通过图4所示的流程图及其上述说明可见:本方案由区块链节点中的各个执行器分别维护自身地址区间所对应的局部状态数据,使得各个执行器分别使用自身所维护的局部状态数据即可执行相应的区块链交易,而无需从区块链模块处获取状态数据,所以不仅避免了区块链模块与执行器之间的网络延迟导致的状态数据获取时间较长,而且各个执行器可以分别获取自身维护的局部状态数据以执行区块链交易,从而实现了真正意义上的并行执行区块链交易,相较于仅由区块链模块维护区块链网络的状态数据的前述相关技术方案,能够显著提升区块链节点对于区块链交易的执行效率。
与前述区块链交易的执行方法的实施例相对应地,本公开还提出了区块链交易的执行装置的实施例。
图5是根据本公开的实施例示出的一种区块链交易的执行装置的示意框图。本实施例所示的区块链交易的执行装置可以适用于包含区块链模块和多个执行器的区块链节点,其中,所述多个执行器分别维护有自身地址区间对应的局部状态数据。
如图5所示,所述区块链交易的执行装置,应用于包含区块链模块和多个执行器的区块链节点,所述多个执行器分别维护有自身地址区间对应的局部状态数据,所述装置包括:
交易获取模块501,被配置为所述区块链模块获取待执行的区块链交易;
交易分发模块502,被配置为所述区块链模块根据所述区块链交易的交易账户地址和各个执行器的所述地址区间确定匹配于所述区块链交易的目标执行器,并将所述区块链交易分发至所述目标执行器;
交易执行模块503,被配置为所述目标执行器根据自身维护的所述局部状态数据执行所述区块链交易。
可选的,所述交易分发模块502还被配置为:
根据所述区块链交易的交易账户地址将所述区块链交易划分为至少一个交易组;
根据所述至少一个交易组所包含区块链交易的交易账户地址和各个执行器的所述地址区间,确定分别匹配于各个交易组的目标执行器;其中,匹配于任一交易组的目标执行器即匹配于该交易组中的各个区块链交易。
可选的,所述交易分发模块502还被配置为:
将存在至少一个相同交易账户地址的区块链交易划分至同一交易组;或者,
将交易账户地址处于同一地址区间的区块链交易划分至同一交易组,该交易组用于分配至该地址区间对应的执行器。
可选的,所述交易分发模块502还被配置为:
根据所述任一交易组所包含区块链交易的交易账户地址和各个执行器的所述地址区间,分别确定所述任一交易组与各个执行器之间的相关度;
根据所述相关度确定匹配于所述任一交易组的目标执行器。
可选的,所述交易分发模块502还被配置为:
在所述任一交易组所包含区块链交易的全部交易账户地址中,确定处于所述任一执行器的地址区间内的交易账户地址的地址数量;
按照与所述地址数量呈正相关的规律,确定所述任一交易组与所述任一执行器之间的相关度。
可选的,所述交易分发模块502还被配置为:
在最高相关度对应于一个执行器的情况下,将该执行器确定为所述任一交易组的目标执行器;或者,
在最高相关度对应于多个执行器的情况下,将所述多个执行器中交易执行效率最高的执行器确定为所述任一交易组的目标执行器。
可选的,任一执行器的交易执行效率,
与所述任一执行器的当前可用资源量呈正相关;和/或,
与所述任一执行器执行历史区块链交易的平均时长呈负相关。
可选的,所述区块链模块维护有用于记录各个执行器的执行器标识和地址区间的路由表,所述装置还包括:
加载请求接收模块504,被配置为由所述区块链模块接收任一执行器发起的加载请求,所述加载请求包含该执行器的执行器标识;
地址区间分配模块505,被配置为由所述区块链模块在所述路由表中未记录所述任一执行器的执行器标识的情况下,为所述任一执行器分配相应的地址区间;
路由表更新模块506,被配置为由所述区块链模块根据为所述任一执行器分配的地址区间更新所述路由表,并将更新后的所述路由表下发至各个执行器。
可选的,所述区块链模块还维护有所属区块链网络的全局状态数据,所述装置还包括:
数据版本获取模块507,被配置为由所述区块链模块在所述路由表中记录有所述任一执行器的执行器标识的情况下,获取所述加载请求中携带的所述任一执行器所维护局部状态数据的局部数据版本;
局部数据发送模块508,被配置为由所述区块链模块响应于所述局部数据版本与所述全局状态数据的全局数据版本不一致,将所述全局状态数据中对应于所述任一执行器的地址区间的最新状态数据发送至所述任一执行器;
局部数据更新模块509,被配置为由所述任一执行器使用所述最新状态数据更新自身维护的所述局部状态数据,更新后的所述局部状态数据被用于执行分发至所述任一执行器的所述区块链交易。
可选的,所述多个执行器分别维护的所述局部状态数据的并集为所述全局状态数据,所述装置还包括:
执行器确定模块510,被配置为由所述目标执行器在所述区块链交易的交易账户地址不处于所述目标执行器的地址区间的情况下,根据自身维护的所述路由表查询该交易账户地址所处地址区间对应的其他执行器;
第一请求及执行模块511,被配置为所述目标执行器向所述其他执行器请求获取该交易账户地址对应的第一状态数据,并根据所述其他执行器从自身维护的局部状态数据中确定并返回的所述第一状态数据执行所述区块链交易。
可选的,所述加载请求由所述任一执行器在本次启动完成后发起,所述本次启动为正常启动或者异常停机后的重启。
可选的,所述交易执行模块503还被配置为:
在所述区块链交易的交易账户地址处于所述目标执行器的地址区间的情况下,从自身维护的所述局部状态数据中确定该交易账户地址对应的第一状态数据;
根据所述第一状态数据执行所述区块链交易。
可选的,所述区块链模块维护有所属区块链网络的全局状态数据,所述装置还包括:
第二请求模块512,被配置为由所述目标执行器在所述区块链交易的交易账户地址不处于所述目标执行器的地址区间的情况下,向所述区块链模块请求所述第一状态数据;
第二执行模块513,被配置为由所述目标执行器根据所述区块链模块从所述全局状态数据中确定并返回的所述第一状态数据执行所述区块链交易。
可选的,还包括:
地址确定模块514,被配置为由所述目标执行器确定所述区块链交易的执行结果中包含的第二状态数据对应的待更新账户地址;
第一局部更新模块515,被配置为由所述目标执行器在所述待更新账户地址处于所述目标执行器的地址区间的情况下,根据所述第二状态数据更新自身维护的局部状态数据;或者,
第二局部更新模块516,被配置为由在所述待更新账户地址处于其他执行器的地址区间的情况下,所述目标执行器将所述第二状态数据发送至所述其他执行器,并由所述其他执行器根据所述第二状态数据更新自身维护的局部状态数据。
可选的,还包括:
结果返回模块517,被配置为由所述目标执行器将所述区块链交易的执行结果返回至所述区块链模块;
第三局部更新模块518,被配置为由所述区块链模块在自身维护有所属区块链网络的全局状态数据的情况下,根据所述执行结果中包含的第二状态数据更新所述全局状态数据;和/或,
区块处理模块519,被配置为由所述区块链模块在所述区块链交易从同一区块中获取的情况下,根据所述执行结果处理所述区块。
可选的,任一所述区块链交易的交易账户地址包括:
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开的实施例还提出一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如上述任一实施例所述的区块链交易的执行方法。
本公开的实施例还提出一种计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一实施例所述的区块链交易的执行方法。
在介绍了本公开示例性实施方式的方法、介质和装置之后,接下来,参考图6对本公开示例性实施方式的计算设备进行说明。
图6显示的电子设备60仅仅是一个示例,不应对本公开实施例的功能和适用范围带来任何限制。
如图6所示,电子设备60以通用电子设备的形式表现。电子设备60的组件可以包括但不限于:上述至少一个处理单元601、上述至少一个存储单元602,连接不同系统组件(包括处理单元601和存储单元602)的总线603。
总线603包括数据总线、控制总线和地址总线。
存储单元602可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)6021和/或高速缓存存储器6022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(ROM)6023。
存储单元602还可以包括具有一组(至少一个)程序模块6024的程序/实用工具6025,这样的程序模块6024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
电子设备60也可以与一个或多个外部设备604(例如键盘、指向设备等)通信。
这种通信可以通过输入/输出(I/O)接口605进行。并且,电子设备60还可以通过网络适配器606与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图6所示,网络适配器606通过总线603与电子设备60的其它模块通信。应当理解,尽管图中未示出,可以结合电子设备60使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了区块链交易的执行装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

Claims (17)

1.一种区块链交易的执行方法,应用于包含区块链模块和多个执行器的区块链节点,所述区块链模块维护有用于记录各个执行器的执行器标识和地址区间的路由表以及所属区块链网络的全局状态数据,所述多个执行器分别维护有自身地址区间对应的局部状态数据,所述方法包括:
所述区块链模块获取待执行的区块链交易;
所述区块链模块根据所述区块链交易的交易账户地址和各个执行器的所述地址区间确定匹配于所述区块链交易的目标执行器,并将所述区块链交易分发至所述目标执行器;
所述目标执行器根据自身维护的所述局部状态数据执行所述区块链交易;
所述方法还包括:
所述区块链模块接收任一执行器发起的加载请求,所述加载请求包含该执行器的执行器标识;
所述区块链模块在所述路由表中未记录所述任一执行器的执行器标识的情况下,为所述任一执行器分配相应的地址区间;
所述区块链模块根据为所述任一执行器分配的地址区间更新所述路由表,并将更新后的所述路由表下发至各个执行器;
所述区块链模块在所述路由表中记录有所述任一执行器的执行器标识的情况下,获取所述加载请求中携带的所述任一执行器所维护局部状态数据的局部数据版本;
所述区块链模块响应于所述局部数据版本与所述全局状态数据的全局数据版本不一致,将所述全局状态数据中对应于所述任一执行器的地址区间的最新状态数据发送至所述任一执行器;
所述任一执行器使用所述最新状态数据更新自身维护的所述局部状态数据,更新后的所述局部状态数据被用于执行分发至所述任一执行器的所述区块链交易。
2.根据权利要求1所述的方法,所述区块链模块根据所述区块链交易的交易账户地址和各个执行器的所述地址区间确定匹配于所述区块链交易的目标执行器,包括:
根据所述区块链交易的交易账户地址将所述区块链交易划分为至少一个交易组;
根据所述至少一个交易组所包含区块链交易的交易账户地址和各个执行器的所述地址区间,确定分别匹配于各个交易组的目标执行器;其中,匹配于任一交易组的目标执行器即匹配于该交易组中的各个区块链交易。
3.根据权利要求2所述的方法,所述区块链模块根据所述区块链交易的交易账户地址将所述区块链交易划分为至少一个交易组,包括:
将存在至少一个相同交易账户地址的区块链交易划分至同一交易组;或者,
将交易账户地址处于同一地址区间的区块链交易划分至同一交易组,该交易组用于分配至该地址区间对应的执行器。
4.根据权利要求2所述的方法,根据任一交易组所包含区块链交易的交易账户地址和各个执行器的所述地址区间,确定匹配于任一交易组的目标执行器,包括:
根据所述任一交易组所包含区块链交易的交易账户地址和各个执行器的所述地址区间,分别确定所述任一交易组与各个执行器之间的相关度;
根据所述相关度确定匹配于所述任一交易组的目标执行器。
5.根据权利要求4所述的方法,根据所述任一交易组所包含区块链交易的交易账户地址和任一执行器的所述地址区间,确定所述任一交易组与所述任一执行器之间的相关度,包括:
在所述任一交易组所包含区块链交易的全部交易账户地址中,确定处于所述任一执行器的地址区间内的交易账户地址的地址数量;
按照与所述地址数量呈正相关的规律,确定所述任一交易组与所述任一执行器之间的相关度。
6.根据权利要求4所述的方法,所述根据所述相关度确定匹配于所述任一交易组的目标执行器,包括:
在最高相关度对应于一个执行器的情况下,将该执行器确定为所述任一交易组的目标执行器;或者,
在最高相关度对应于多个执行器的情况下,将所述多个执行器中交易执行效率最高的执行器确定为所述任一交易组的目标执行器。
7.根据权利要求6所述的方法,任一执行器的交易执行效率,
与所述任一执行器的当前可用资源量呈正相关;和/或,
与所述任一执行器执行历史区块链交易的平均时长呈负相关。
8.根据权利要求1所述的方法,所述多个执行器分别维护的所述局部状态数据的并集为所述全局状态数据,所述方法还包括:
所述目标执行器在所述区块链交易的交易账户地址不处于所述目标执行器的地址区间的情况下,根据自身维护的所述路由表查询该交易账户地址所处地址区间对应的其他执行器;
所述目标执行器向所述其他执行器请求获取该交易账户地址对应的第一状态数据,并根据所述其他执行器从自身维护的局部状态数据中确定并返回的所述第一状态数据执行所述区块链交易。
9.根据权利要求1所述的方法,所述加载请求由所述任一执行器在本次启动完成后发起,所述本次启动为正常启动或者异常停机后的重启。
10.根据权利要求1所述的方法,所述目标执行器根据自身维护的所述局部状态数据执行所述区块链交易,包括:
在所述区块链交易的交易账户地址处于所述目标执行器的地址区间的情况下,从自身维护的所述局部状态数据中确定该交易账户地址对应的第一状态数据;
根据所述第一状态数据执行所述区块链交易。
11.根据权利要求10所述的方法,所述区块链模块维护有所属区块链网络的全局状态数据,所述方法还包括:
所述目标执行器在所述区块链交易的交易账户地址不处于所述目标执行器的地址区间的情况下,向所述区块链模块请求所述第一状态数据;
所述目标执行器根据所述区块链模块从所述全局状态数据中确定并返回的所述第一状态数据执行所述区块链交易。
12.根据权利要求1所述的方法,还包括:
所述目标执行器确定所述区块链交易的执行结果中包含的第二状态数据对应的待更新账户地址;
在所述待更新账户地址处于所述目标执行器的地址区间的情况下,所述目标执行器根据所述第二状态数据更新自身维护的局部状态数据;或者,
在所述待更新账户地址处于其他执行器的地址区间的情况下,所述目标执行器将所述第二状态数据发送至所述其他执行器,并由所述其他执行器根据所述第二状态数据更新自身维护的局部状态数据。
13.根据权利要求1所述的方法,还包括:
所述目标执行器将所述区块链交易的执行结果返回至所述区块链模块;
所述区块链模块在自身维护有所属区块链网络的全局状态数据的情况下,根据所述执行结果中包含的第二状态数据更新所述全局状态数据;和/或,
所述区块链模块在所述区块链交易从同一区块中获取的情况下,根据所述执行结果处理所述区块。
14.根据权利要求1所述的方法,任一所述区块链交易的交易账户地址包括:
所述任一区块链交易的from字段和/或to字段中记录的账户地址。
15.一种区块链交易的执行装置,应用于包含区块链模块和多个执行器的区块链节点,所述区块链模块维护有用于记录各个执行器的执行器标识和地址区间的路由表以及所属区块链网络的全局状态数据,所述多个执行器分别维护有自身地址区间对应的局部状态数据,所述装置包括:
交易获取模块,被配置为所述区块链模块获取待执行的区块链交易;
交易分发模块,被配置为所述区块链模块根据所述区块链交易的交易账户地址和各个执行器的所述地址区间确定匹配于所述区块链交易的目标执行器,并将所述区块链交易分发至所述目标执行器;
交易执行模块,被配置为所述目标执行器根据自身维护的所述局部状态数据执行所述区块链交易;
所述装置还包括:
加载请求接收模块,被配置为由所述区块链模块接收任一执行器发起的加载请求,所述加载请求包含该执行器的执行器标识;
地址区间分配模块,被配置为由所述区块链模块在所述路由表中未记录所述任一执行器的执行器标识的情况下,为所述任一执行器分配相应的地址区间;
路由表更新模块,被配置为由所述区块链模块根据为所述任一执行器分配的地址区间更新所述路由表,并将更新后的所述路由表下发至各个执行器;
数据版本获取模块,被配置为由所述区块链模块在所述路由表中记录有所述任一执行器的执行器标识的情况下,获取所述加载请求中携带的所述任一执行器所维护局部状态数据的局部数据版本;
局部数据发送模块,被配置为由所述区块链模块响应于所述局部数据版本与所述全局状态数据的全局数据版本不一致,将所述全局状态数据中对应于所述任一执行器的地址区间的最新状态数据发送至所述任一执行器;
局部数据更新模块,被配置为由所述任一执行器使用所述最新状态数据更新自身维护的所述局部状态数据,更新后的所述局部状态数据被用于执行分发至所述任一执行器的所述区块链交易。
16.一种区块链交易的执行电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至14中任一项所述的区块链交易的执行方法。
17.一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如权利要求1至14中任一项所述的区块链交易的执行方法。
CN202210367290.8A 2022-04-08 2022-04-08 区块链交易的执行方法、装置、电子设备和存储介质 Active CN114493602B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210367290.8A CN114493602B (zh) 2022-04-08 2022-04-08 区块链交易的执行方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210367290.8A CN114493602B (zh) 2022-04-08 2022-04-08 区块链交易的执行方法、装置、电子设备和存储介质

Publications (2)

Publication Number Publication Date
CN114493602A CN114493602A (zh) 2022-05-13
CN114493602B true CN114493602B (zh) 2022-07-22

Family

ID=81487812

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210367290.8A Active CN114493602B (zh) 2022-04-08 2022-04-08 区块链交易的执行方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN114493602B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115099817B (zh) * 2022-06-17 2023-03-24 北京中科深智科技有限公司 一种高效的区块链交易验证与查询方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112232817A (zh) * 2018-10-25 2021-01-15 创新先进技术有限公司 基于区块链的交易处理方法及装置、电子设备

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108846749B (zh) * 2018-05-31 2021-09-07 杭州溪塔科技有限公司 一种基于区块链技术的分片化的交易执行系统及方法
CN108765159B (zh) * 2018-06-04 2022-07-15 杭州溪塔科技有限公司 一种基于区块链的上链与状态处理方法、装置及互联系统
CN109544129B (zh) * 2018-10-26 2021-04-27 创新先进技术有限公司 区块链交易方法及装置、电子设备
CN109508337A (zh) * 2018-11-12 2019-03-22 杭州秘猿科技有限公司 一种交易并行执行方法、装置、电子设备及系统
CN110362272A (zh) * 2019-06-03 2019-10-22 阿里巴巴集团控股有限公司 一种区块链数据存储方法及装置
CN110442579B (zh) * 2019-08-02 2022-06-28 杭州复杂美科技有限公司 一种状态树数据存储方法、同步方法及设备和存储介质
CN111352705B (zh) * 2020-02-25 2023-10-31 百度在线网络技术(北京)有限公司 一种区块链的事务处理方法、装置、设备和介质
CN113259119B (zh) * 2021-06-02 2021-10-29 支付宝(杭州)信息技术有限公司 区块链消息的分发方法及装置
CN113656508A (zh) * 2021-08-26 2021-11-16 支付宝(杭州)信息技术有限公司 区块链系统中执行交易的方法及装置
CN113744064B (zh) * 2021-11-04 2022-02-22 支付宝(杭州)信息技术有限公司 在区块链节点中执行交易的方法及装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112232817A (zh) * 2018-10-25 2021-01-15 创新先进技术有限公司 基于区块链的交易处理方法及装置、电子设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
区块链与金融信息安全;彭枫;《中国信息安全》;20181115(第11期);1-17 *

Also Published As

Publication number Publication date
CN114493602A (zh) 2022-05-13

Similar Documents

Publication Publication Date Title
US10846137B2 (en) Dynamic adjustment of application resources in a distributed computing system
US8417991B2 (en) Mitigating reduction in availability level during maintenance of nodes in a cluster
EP3410288B1 (en) Online upgrade method, device and system
US9170892B2 (en) Server failure recovery
CN111091429A (zh) 电子票据标识分配方法及装置、电子票据生成系统
CN109886693B (zh) 区块链系统的共识实现方法、装置、设备和介质
CN113220795B (zh) 基于分布式存储的数据处理方法、装置、设备以及介质
CN109561151B (zh) 数据存储方法、装置、服务器和存储介质
US20030187627A1 (en) I/O velocity projection for bridge attached channel
US20230367749A1 (en) Data migration method and apparatus, device, medium, and computer product
CN101751415A (zh) 元数据服务系统、元数据同步方法与写服务器更新方法
CN112162846B (zh) 事务处理方法、设备及计算机可读存储介质
CN114493602B (zh) 区块链交易的执行方法、装置、电子设备和存储介质
CN110377664B (zh) 数据同步方法、装置、服务器及存储介质
CN107025257B (zh) 一种事务处理方法及装置
CN111291062A (zh) 数据同步写入方法、装置、计算机设备及存储介质
CN105162869A (zh) 一种用于数据备份管理的方法与设备
US7752225B2 (en) Replication and mapping mechanism for recreating memory durations
CN112631994A (zh) 数据迁移方法及系统
CN110113217B (zh) 微服务管理方法、装置、管理平台及存储介质
CN109005071B (zh) 一种决策部署方法和调度设备
CN115438021A (zh) 一种数据库服务器的资源配置方法及装置
WO2018188958A1 (en) A method and a host for managing events in a network that adopts event-driven programming framework
CN113094431A (zh) 读写分离方法、装置及服务器
CN109376001A (zh) 一种资源分配的方法及设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant