CN116662293A - 收据数据的存储方法、节点和区块链系统 - Google Patents

收据数据的存储方法、节点和区块链系统 Download PDF

Info

Publication number
CN116662293A
CN116662293A CN202310642925.5A CN202310642925A CN116662293A CN 116662293 A CN116662293 A CN 116662293A CN 202310642925 A CN202310642925 A CN 202310642925A CN 116662293 A CN116662293 A CN 116662293A
Authority
CN
China
Prior art keywords
transaction
transactions
node
computing
group
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.)
Pending
Application number
CN202310642925.5A
Other languages
English (en)
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.)
Ant Blockchain Technology Shanghai Co Ltd
Original Assignee
Ant Blockchain Technology Shanghai Co Ltd
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 Ant Blockchain Technology Shanghai Co Ltd filed Critical Ant Blockchain Technology Shanghai Co Ltd
Priority to CN202310642925.5A priority Critical patent/CN116662293A/zh
Publication of CN116662293A publication Critical patent/CN116662293A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1834Distributed file systems implemented based on peer-to-peer networks, e.g. gnutella
    • G06F16/1837Management specially adapted to peer-to-peer storage networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种收据数据的存储方法、节点和区块链系统。所述方法应用于区块链系统中的第一节点,第一节点中包含控制进程、存储进程和N个计算进程,包括:所述控制进程将获取到的M个交易组分别发送至所述N个计算进程中相应的计算进程,所述M个交易组基于第一区块中的多笔交易各自的预执行读写集对所述多笔交易进行分组得到,N和M均大于1;任一计算进程在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程;所述存储进程将接收到的所述收据数据存储至第一节点的预设存储空间。

Description

收据数据的存储方法、节点和区块链系统
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种收据数据的存储方法、节点和区块链系统。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。用户可以通过区块链节点参与实现区块链的相关事务,例如,区块链系统中分别对应不同用户的多个区块链节点,可以基于同态加密、零知识证明等隐私技术针对某一节点的私有数据进行安全多方计算(Secure Multi-Party Computation,SMPC)。再例如,基于区块链网络可以在不同用户账户之间实现转账;再例如,还可以基于区块链网络发行数字画作、数字头像、GIF等数字藏品对应的NFT(Non-Fungible Token,非同质化代币),以便NFT所承载的数字藏品的所有权能够在区块链网络的用户之间流通,从而产生对应于数字藏品的价值。
在相关技术中,区块链系统中的节点在执行任一区块中的各笔交易时,为加快该区块的整体执行速度(即减少该区块中全部交易的整体执行耗时),会对所述各笔交易进行分组以得到多个交易组,并由控制进程将各个交易组调度至相应的计算进程并行执行。执行各笔交易得到的收据(Receipt,或称回执)数据需要提交至存储进程进行存储。具体而言,各个计算进程会分别将自身执行交易得到的收据数据发送至存储进程,并由后者将收集到的该区块对应的全部收据数据集中提交,以完成存储。
在上述存储方案中,同一区块中各笔交易的收据数据需要集中至控制进程,并由该进程在收集到全部交易的收据数据之后再提交存储。可以理解的是,不同计算进程接收到的交易互不相同,而不同交易执行过程的耗时也可能不同,再考虑到不同计算进程的可用资源也可能存在差异,上述原因可能导致多个计算进程无法在同一时刻执行完成自身接收到的交易,从而控制进程需要等待各个计算进程分别执行完毕后才能够采集到全部收据数据,影响了收据数据存储过程的整体效率。另外,由于待存储的所有收据数据都需要集中至控制进程,所以在收据数据的数据量较多的情况下,会导致控制进程的数据处理负担较重,不利于收据数据的高效存储。
发明内容
本发明的目的在于提供一种收据数据的存储方法、节点和区块链系统。
第一方面,提供了一种收据数据的存储,应用于区块链系统中的第一节点,第一节点中包含控制进程、存储进程和N个计算进程,所述方法包括:
所述控制进程将获取到的M个交易组分别发送至所述N个计算进程中相应的计算进程,所述M个交易组基于第一区块中的多笔交易各自的预执行读写集对所述多笔交易进行分组得到,N和M均大于1;
任一计算进程在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程;
所述存储进程将接收到的所述收据数据存储至第一节点的预设存储空间。
第二方面,提供了一种区块链系统中的第一节点,第一节点中包含控制进程、存储进程和N个计算进程,其中:
所述控制进程用于将获取到的M个交易组分别发送至所述N个计算进程中相应的计算进程,所述M个交易组基于第一区块中的多笔交易各自的预执行读写集对所述多笔交易进行分组得到,N和M均大于1;
任一计算进程用于在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程;
所述存储进程用于将接收到的所述收据数据存储至第一节点的预设存储空间。
第三方面,提供了一种区块链系统,所述区块链系统包括第一节点和第二节点,第一节点中包含控制进程、存储进程和N个计算进程,其中:
第二节点用于预执行第一区块中的多笔交易得到所述多笔交易各自的预执行读写集;以及,根据所述预执行读写集对所述多笔交易进行分组得到M个交易组,并将所述M个交易组发送至第一节点,或者将所述多笔交易和所述预执行读写集发送至第一节点,以由第一节点根据所述预执行读写集对所述多笔交易进行分组得到M个交易组,N和M均大于1;
第一节点中的控制进程用于将所述M个交易组分别发送至所述N个计算进程中相应的计算进程;任一计算进程用于在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程;所述存储进程用于将接收到的所述收据数据存储至第一节点的预设存储空间。
根据本说明书一个或多个实施例的第四方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面中任一项所述的方法。
根据本说明书一个或多个实施例的第五方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面中任一项所述方法的步骤。
在上述实施例中,对于基于第一区块中的多笔交易各自的预执行读写集对所述多笔交易进行分组得到的M个交易组,第一节点中的控制进程将其分别发送至所述N个计算进程中相应的计算进程;其中任一计算进程在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程,以由后者将其存储至第一节点的预设存储空间。
可见,本方案在将各个交易组分别调度至相应的计算进程执行,而各个计算进程在执行交易组中的交易完成后,分别独立提交自身执行得到的收据数据。显然,相对于相关技术中由控制进程集中提交的存储方案,本方案实现了同一区块中不同交易组所对应收据数据的多方并行提交,既无需控制进程等待计算进程返回收据数据,不仅节省了提交时间而且减轻了控制进程的数据处理负担,从而有效提升了区块所对应收据数据的提交和存储效率。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是一示例性实施例提供的一种区块链系统的示意图。
图2是一示例性实施例提供的一种收据数据的存储方法的流程图。
图3是一示例性实施例提供的一种区块链系统中任意两个节点的结构示意图。
图4是一示例性实施例提供的一种交易之间依赖关系的示意图。
图5是一示例性实施例提供的一种区块链系统中的第一节点的结构示意图。
图6是一示例性实施例提供的一种设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
图1是一示例性实施例提供的一种区块链系统的示意图。如图1所示,区块链系统是通过多个节点(Node)来建立的分布式网络,其包含任意两个节点间通过点对点(Peer-to-Peer,P2P)网络实现在应用层的通信连接,例如其包含的节点n1~节点n5中的任意两个节点间均可通过P2P网络实现在应用层的通信连接。区块链系统利用链式区块结构构造的去中心化(或称为多中心化)的分布式账本,保存于分布式的区块链系统中的每个节点(或大多节点上,如共识节点)上,因此区块链系统需要解决去中心化(或多中心化)的多个节点上各自的账本数据的一致性和正确性的问题。鉴于此,区块链系统的每个节点上都运行着区块链程序,在一定容错需求的设计下,通过共识(consensus)机制保证所有忠诚节点具有相同的交易,从而保证所有忠诚节点对相同交易的执行结果一致,将交易打包成区块并基于相同交易的执行结果更新世界状态。其中当前主流的共识机制包括但不限于:工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、实用拜占庭容错(PracticalByzantine Fault Tolerance,PBFT)算法,蜜獾拜占庭容错(Honey Badger BFT)算法等等。
在相关技术中,区块链系统中的节点在执行任一区块中的各笔交易时,为加快该区块的整体执行速度(即减少该区块中全部交易的整体执行耗时),会对所述各笔交易进行分组以得到多个交易组,并由控制进程将各个交易组调度至相应的计算进程并行执行。执行各笔交易得到的收据(Receipt,或称回执)数据需要提交至存储进程进行存储。具体而言,各个计算进程会分别将自身执行交易得到的收据数据发送至存储进程,并由后者将收集到的该区块对应的全部收据数据集中提交,以完成存储。
在上述存储方案中,同一区块中各笔交易的收据数据需要集中至控制进程,并由该进程在收集到全部交易的收据数据之后再提交存储。可以理解的是,不同计算进程接收到的交易互不相同,而不同交易执行过程的耗时也可能不同,再考虑到不同计算进程的可用资源也可能存在差异,上述原因可能导致多个计算进程无法在同一时刻执行完成自身接收到的交易,从而控制进程需要等待各个计算进程分别执行完毕后才能够采集到全部收据数据,影响了收据数据存储过程的整体效率。另外,由于待存储的所有收据数据都需要集中至控制进程,所以在收据数据的数据量较多的情况下,会导致控制进程的数据处理负担较重,不利于收据数据的高效存储。
为解决相关技术中存在的上述问题,本说明书提出一种收据数据的存储方法,摒弃由控制进程收集各个计算进程分别返回的收据数据并集中提交的存储逻辑,由各个计算进程在并行执行交易组中的交易完成后,分别、独立提交相应的收据数据至存储进程,以由存储进程将接收到的各个存储数据分别存储在第一节点的预设存储空间中,从而节省提交时间并减轻控制进程的数据处理负担,以提升区块所对应收据数据的提交和存储效率。下面结合附图对本说明书的收据数据的存储方案进行详细说明。
图2是一示例性实施例提供的一种收据数据的存储方法的流程图。所述方法应用于区块链系统中的第一节点。所述第一节点可以为区块链系统中的任一区块链节点,示例性的,第一节点可以为发起共识提议的节点(如主节点),或者也可以为该节点之外的其他区块链节点(如从节点)。无论所述区块链系统中的主节点还是从节点,各个节点均可实现为任何具有计算/处理能力的装置、平台、设备或设备集群。其中,第一节点中可以包含多个进程,如包含控制进程、存储进程和N(N为大于1的正整数)个计算进程。如图2所示,所述方法可以包括下述步骤202-206。
步骤202,所述控制进程将获取到的M个交易组分别发送至所述N个计算进程中相应的计算进程,所述M个交易组基于第一区块中的多笔交易各自的预执行读写集对所述多笔交易进行分组得到,N和M均大于1。
如前所述,第一节点可以为所述区块链系统中的主节点或者从节点。第一节点在所述区块链系统中扮演的角色不同,该节点获取待执行的多笔交易以及各笔交易的预执行信息的方式也有所不同。
以图1所示区块链系统中的任意两个节点:节点n1和节点n2为例,两节点中可以分别运行多个进程以提供多种服务。两节点的结构示意图可参见图3,节点n1和节点n2各自运行用于提供接入服务的接入进程(如节点n1中运行的接入进程1和节点n2中运行的接入进程2,下述进程编号与此类似,不再赘述)、用于提供缓存服务的缓存进程、用于提供预执行服务的预执行进程、用于提供网络服务的网络进程、用于提供共识服务的共识进程、用于提供区块管理服务的控制进程和用于提供存储服务的存储进程。此外,作为从节点的节点n1还可以运行用于提供计算服务的多个计算进程,如计算进程11、计算进程12和计算进程13。
其中,本说明书所述进程是指应用中具有一定独立功能的程序关于一个数据集合的一次运行活动,即进程是计算机中通过由CPU顺序执行应用程序中的指令而进行的一个过程,而每个进程在创建时被分配自己的内存地址空间。任一节点中的多个进程可以为多个计算设备或虚拟计算节点中的多个进程。此外需要说明的是,本说明书实施例提供的方案并不局限于主从架构的区块链系统;换言之,本方案所述的节点n1和节点n2可以为所述区块链系统中的任意两个区块链节点。
不妨假设所述节点n2和节点n1分别为所述区块链系统中的主节点和从节点。任一节点中的接入进程可以用于接收来自用户设备的交易,并调用缓存进程将其接收的交易加入待处理的交易队列中进行缓存。
节点n2的预执行进程2可以调用缓存进程2来实现从待处理的交易队列中按顺序读取其缓存的交易并对该交易进行验证,例如验证用户设备对该交易的签名,并将经验证的交易返回给缓存进程2。此外,节点n2还可以通过其网络进程2向其余节点的网络进程广播其缓存进程2中存储的经验证的交易;从而,节点n1通过其网络进程1接收的来自节点n2的交易,可以由其缓存进程1缓存加入到待处理的交易队列中。由此节点n1的缓存进程1通过其内存缓存的待处理的交易队列,不仅包括通过其接入进程1接收的交易,还包括通过其网络进程1接收的来自其他节点(如节点n2)的交易。
节点n2的预执行进程2也可以调用缓存进程2从待处理的交易队列中按顺序读取其缓存的交易,并至少对来自与节点n2连接的用户设备的交易进行验证。此外节点n2的预执行进程2还可以对其从缓存进程2按顺序接收的交易进行预执行以得到该交易的预执行信息,其中任一交易的预执行信息可以包括预执行读集(对应于交易执行过程中涉及的数据读取操作)、预执行写集(对应于交易执行过程中涉及的数据写入操作)、交易耗时(用于表征预执行该交易消耗的时长,该时长可视为实际执行该交易需要的时长)、资源消费信息(用于表征执行该交易所需消耗的数字资源/计算资源的数量)等。其中,本说明书所述的预执行读写集可以包括所述预执行读集和/或所述预执行写集。进而节点n2的预执行进程2还可以在其每完成对一批交易的预执行后,将该批交易的预执行信息返回给缓存进程2以缓存到待共识的交易队列中进行缓存。
如图3所示,节点n1中的控制进程1和存储进程1分别连接N个计算进程(即计算进程11、计算进程12和计算进程13)。其中,控制进程1可以将M个交易组分别发送(即调度、分发)至所述N个计算进程中相应的计算进程以便后者执行,如将全部交易组发送至计算进程1,或者将部分交易组发送至计算进程11同时将其与交易组发送至计算进程12,再或者将全部交易组平均分发至这三个计算进程等。其中任一计算进程在执行任一交易组完成后,可以将相应的收据数据提交至存储进程1进行存储。
需要说明的是,所述控制进程和N个计算进程可以为分立的概念,这些进程在逻辑上归属于第一节点。其中,第一节点的节点程序(用于实现节点的控制逻辑)可以部署在任一物理设备中,而所述控制进程和N个计算进程中的任一进程既可以部署于该物理设备中,也可以部署于区别于该物理设备的其他物理设备中(如各个进程可以通过集群形式部署在不同的云服务器中)。无论何种部署方式,上述不同进程之间均可以视为“远程”,不同进程之间可以通过相应的进程间通信技术实现信息和数据交互,如RPC(Remote ProcedureCall,远程过程调用)技术、PIPE(管道)技术、消息队列(Message Queue)技术等,本说明书并不对此进行限制。
在本说明书实施例中,第一区块可以是共识完成但尚未执行的任一区块,该区块中包含多笔待执行的交易。另外,N和M均为大于1的整数,换言之,第一节点中包含多个计算进程,而第一区块中待执行的多笔交易则被划分至多个交易组。其中,所述M个交易组分别包含互不相同的交易,即第一区块中的任一交易被属于且仅属于一个交易组,以避免同一交易被重复执行。
在一实施例中,可以由第二节点预执行第一区块中的多笔交易,以得到所述多笔交易各自的预执行读写集。任一交易的预执行读写集可以包括预执行读集和预执行写集,其中,预执行读集包括该交易在预执行中读取的变量的键值对,预执行写集包括该交易在预执行中写入的变量的键值对。所述变量例如包括区块链中的外部账户,或者为合约账户中定义的变量等。可以理解的是,若某一交易Tx1的预执行写集与另一交易Tx2的预执行写集和预执行读集均不存在交集,即表明执行Tx2的过程中写入的变量在执行Tx1的过程中既不会被读取也不会被写入,此时可以认为Tx1不依赖于Tx2;类似的,若Tx2的预执行写集与Tx1的预执行写集和预执行读集均不存在交集,则可以认为Tx2不依赖于Tx1;而在Tx1不依赖于Tx2且Tx2不依赖于Tx1的情况下,即可认为Tx1与Tx2互不依赖。
可见,基于上述预执行读写集可以确定第一区块中多笔交易之间的依赖关系。基于此,所述控制进程可以通过多种方式获取所述M个交易组。例如,第二节点在预执行所述多笔交易得到相应的预执行读写集后,可以根据所述多笔交易(即第一区块中的全部交易)各自的预执行读写集对所述多笔交易进行分组得到M个交易组,并将这些交易组发送至第一节点。可以理解的是,此时作为主节点的第二节点可以将自身分组得到的M个交易组分别发送至区块链网络中(包括第一节点在内)的各个从节点,从而简化区块链网络整体(特别是各个从节点)的交易分组负担。再例如,第二节点在预执行所述多笔交易得到相应的预执行读写集后,也可以将所述多笔交易及其各自的预执行读写集发送至第一节点(实际可以分别发送至各个从节点,不再赘述),以由第一节点根据接收到的所述预执行读写集对所述多笔交易进行分组得到所述M个交易组。
其中,无论所述M个交易组是由第一节点还是第二节点分组得到,该节点均可以基于所述多笔交易各自的预执行读写集确定所述多笔交易之间的依赖关系,并按照该依赖关系对所述多笔交易进行分组。另外,通过上述分组过程得到的M个交易组中,任一交易组包含的各笔交易之间存在连续的依赖关系,且该交易组中各笔交易与所述M个交易组中其他任意交易组包含的交易之间均不存在依赖关系。换言之,在第一区块包含的多笔交易中,相互之间存在连续的依赖关系的交易被划分至同一交易组,而不存在连续的依赖关系的交易被划分至不同交易组。可见,任意交易组中可能包含一笔或多笔交易。其中,若Tx1依赖于Tx2且Tx2不依赖于Tx1,或者Tx2依赖于Tx2且Tx1不依赖于Tx2,则Tx1和Tx2将被划分至同一交易组;而在Tx1和Tx2互不依赖的情况下,二者将会被划分至不同交易组。另外需要说明的是,所述“连续的依赖关系”,可以理解为多笔交易之间的依赖关系是连续传递的,如图4所示,交易B依赖于交易A,同时交易C依赖于交易B,此时可以视为C间接依赖于A,即交易C与交易A之间存在连续的依赖关系。
在获取到的所述M个交易组后,根据交易组的数量(即M)与第一节点内(可用的)计算进程的数量(即N)之间的相对大小情况,控制进程可以采用相应的调度方法将所述M个交易组分别发送至所述N个计算进程中相应的计算进程。例如,在M不大于N(即M<N或M=N)的情况下,控制进程可以将所述M个交易组分别发送至不同的计算进程,以由各个不同的计算进程分别执行一个交易组(中的交易),从而最大程度的加快全部交易组的执行速度,以提升第一区块的整体执行效率。
而在M大于N(即M>N)的情况下,控制进程可以根据所述M个交易组的分组预期耗时指标将所述M个交易组分别发送至所述N个计算进程中相应的计算进程,以使所述N个计算进程的任务预期耗时指标趋于一致,其中,各个计算进程接收到的交易分组互不相同,任一交易组的分组预期耗时指标用于表征执行该交易组中的全部交易需要的总时长,任一计算进程的任务预期耗时指标用于表征该计算进程执行自身所接收交易组中的全部交易需要的总时长。其中,对于接收到交易组的任一计算进程而言,其可以接收至少一个交易组,而该计算进程接收到的全部交易组即构成该计算进程需要执行的一笔交易任务。该计算进程将所述至少一个交易组全部执行完毕,即可视为其接收到的交易任务被执行完毕——相应的执行总时长即对应于所述任务预期耗时指标。通过该方式,可以在M大于N的场景下,尽量确保接收到交易组的计算进程尽量在同一时刻执行完成各自接收到的交易组,或者完成各自接收到的交易组的时刻尽量接近。可见,该方式同样有助于加快第一区块的整体执行速度。
具体而言,控制进程可以根据第一区块中各笔交易的交易耗时指标(预执行过程统计得到)以及各笔交易之间的依赖关系确定各交易组的分组预期耗时指标。其中,对于其中任一交易组,根据该交易组所包含交易数量的不同,控制进程可以采用不同方式确定该交易组的分组预期耗时指标。例如,在任一交易组仅包含一笔交易的情况下,可以被将该笔交易的交易耗时或交易费用作为该交易组的分组预期耗时指标。再例如,在任一交易组包含多笔交易的情况下,可以根据该交易组中多笔交易的依赖关系以及各笔交易的交易耗时确定该交易组的分组预期耗时指标。又例如,在任一交易组包含多笔交易的情况下,可以根据该交易组中多笔交易的依赖关系以及各笔交易的交易费用确定该交易组的分组预期耗时指标。
可见,在计算任一交易组的分组预期耗时指标过程中,可以将该交易组所包含各笔交易在预执行阶段的交易耗时或者其交易费用作为相应的交易预期耗时指标。可以理解的是,鉴于任一交易的预执行阶段和执行阶段的具体操作通常相同,因此耗时通常相同或接近,所以可以将该交易在预执行阶段的交易耗时作为其交易预期耗时指标。而鉴于无论是预执行阶段的交易耗时还是实际执行阶段的交易耗时,通常都与该交易执行阶段的执行的指令有关,且指令的执行总时间通常与交易费用(即gas)呈正相关,所以任一交易的交易预期耗时指标也可以为该交易的交易费用(该费用可以在预执行过程中统计得到)。
以交易耗时为例,在任一交易分组中包含多笔交易的情况下,可以根据所述多笔交易之间的依赖关系确定所述多笔交易构成的至少一个单向执行链路,以及,确定各个单向执行链路的单链路预期耗时,并将其中最大的单链路预期耗时确定为所述任一交易分组的分组预期耗时;其中,任一单向执行链路中的各笔交易之间串行执行,任一单向执行链路的单链路预期耗时为该单向执行链路中各笔交易的交易耗时之和。在该方式中,可以通过比较各个单向执行链路的单链路预期耗时准确确定出分组预期耗时。
如图4所示,交易组Tx_group i中包含7个存在依赖关系的交易(即交易A~交易G)。各笔交易可以构成两条单向执行链路:L1{A→B→C→F→G}和L2{A→B→D→E→F→G},由于单向执行链路中的各笔交易之间串行执行,所以单向执行链路L1的单链路预期耗时T1为L1中各笔交易的交易耗时之和,即T1=20us+30us+80us+10us+60us=200us,单向执行链路L2的单链路预期耗时T2为L2中各笔交易的交易耗时之和,即T2=20us+30us+50us+15us+10us+60us=185us。显然,T1>T2,所以此时可以将T1作为Tx_group i的分组预期耗时。
或者,在所述任一交易分组中包含多笔交易的情况下,也可以根据所述多笔交易之间的依赖关系确定所述多笔交易构成的串行交易段和/或并行交易段,并根据确定出的各笔交易段所包含交易的交易耗时确定所述任一交易分组的分组预期耗时;其中,任一交易段包含至少一笔交易,包含多笔交易的任一交易段中的各笔交易被串行执行,所述串行交易段和并行交易段分别包含的交易被串行执行,以具有相同起点和/或相同终点的多个并行交易段分别包含的交易被并行执行,且所述多个并行交易段中的最长并行交易段所包含全部交易的交易耗时之和最大,所述任一交易分组的分组预期耗时为下述之和:各个串行交易段分别包含的全部交易的交易耗时,所述并行交易段中各个最长并行交易段分别包含的全部交易的交易耗时。
如图4所示,各笔交易可以构成两个串行交易段LS1{A→B}和LS2{F→G},以及两个并行交易段LP1{C}和LP2{D→E}。可以理解的是,任一交易段中的各笔交易之间串行执行,LS1、LS2之间串行执行,LS1和LS2二者与LP1和LP2中任一交易段之间串行执行。对于并行交易段LP1和LP2,其中LP1中全部交易(即交易B)的交易耗时之和为80us、LP1中全部交易(即交易D和E)的交易耗时之和为65us,所以LP1为Tx_group i中的最长并行交易段。基于此,Tx_group i的分组预期耗时可以为:LS1和LS2中全部交易的交易耗时与LP1包含的全部交易的交易耗时,即Tx_group i的分组预期耗时为(20us+30us)+(10us+60us)+(80us)=200us。
需要说明的是,图4所示实施例仅是示例性的,本说明书实施例对于任一交易分组中各笔交易构成的单向执行链路的数量、串行交易段和并行交易段的数量以及各个链路和交易段中交易的数量及其具体依赖关系并不进行限制。
另外,前述实施例均以同一交易组中的多笔交易存在依赖关系(下称这类交易为有依赖交易)为例进行说明,实际上,同一交易组中的多笔交易也可以不存在依赖关系。例如,第一区块包含的多笔交易中,可能存在某些交易与其他任何交易都不存在依赖关系(下称这类交易为无依赖交易),此时可以将这些无依赖交易中的部分(至少两个)或全部划分至同一交易组。通过该方式,可以将多个无依赖交易作为一个交易组进行调度(即分发)和执行,从而有效减少控制进程的调度次数(以交易组为单位进行调度时,交易组的数量即为调度次数),加快第一区块中全部交易的整体调度速度。当然,还可以将至少一个无依赖交易与(存在依赖关系的)多个有依赖交易划分至同一交易组,以进一步减少调度次数。
对于接收到包含至少一个无依赖交易的交易组的任一计算进程而言,其可以将所述至少一个无依赖交易对应的收据数据单独提交至存储进程;或者,若该交易组存在多个无依赖交易,则可以将这些无依赖交易的收据数据一并提交至存储进程;再或者,若该交易组中还包含多个有依赖交易,则可以将所述至少一个无依赖交易的收据数据与所述多个无依赖交易的收据数据分别提交或者一并提交。上述交易组的多种划分方式、交易执行方式和收据数据提交方式,可以按需适用于相应的应用场景,不再赘述。
在一实施例中,控制进程可以将所述N个交易组分别发送至所述N个计算进程中的至少两个计算进程,以由接收到相应交易组的至少两个计算进程并行执行各自接收到的交易组(中的交易),从而加快第一区块的整体执行速度,提升整体执行效率。当然,控制进程也可以将所述N个交易组发送至所述N个计算进程中的某一计算进程执行,此时,虽然该计算进程的交易执行负担较重(即接收到的交易总量较多),但由于前述交易组的存在,其仍然可以以交易组为单位进行交易执行和提交(即执行完成一个交易组中的各笔交易,即提交相应的收据数据,而不必等待全部交易组均执行完毕),从而实现交易组级别的收据数据并行提交和存储,同样能够在一定程度上提升第一区块所对应全部收据数据(即第一区块所包含全部交易分别对应的收据数据)的整体存储效率。
步骤204,任一计算进程在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程。
如前所述,可能存在一个或多个计算进程接收到交易组。对于其中任一计算进程,在接收到至少一个交易组(即一笔交易任务)的情况下,任一计算进程可以开始执行各个交易组。
在一实施例中,任一计算进程接收到的任一交易组可能包含一笔或多笔交易,而该计算进程内部可能创建有多个线程。其中,在任一交易组中仅包含一笔交易的情况下,可以由任一线程执行该交易。例如,考虑到该计算进程当前时刻可能还在执行第一区块中其他交易组包含的交易,或者在执行其他区块的交易组包含的交易,该计算进程可以使用当前时刻处于空闲状态的线程执行该交易。而在任一交易组中包含多笔交易的情况下,可以由任一线程(如当前空闲的线程)执行这些交易;或者,也可以由所述多个线程并行执行该交易组中的各笔交易,以尽量加快这些交易的整体执行速度。
如前所述,任一计算进程接收到的任一交易组包含的多笔交易之间可以存在连续的依赖关系。基于此,所述任一计算进程可以按照所述多笔交易之间的依赖关系执行这些交易。例如,对于第一交易及其所依赖的第二交易,可以在执行第二交易完成后再执行第一交易;对于依赖于同一交易或被同一交易所依赖的第三交易和第四交易,若第三交易和第四交易互相不依赖,则可以通过不同的线程并发执行第三交易和第四交易。通过该方式,不仅能够确保存在依赖关系的各笔交易被按序执行,从而保证各笔交易的执行结果的准确性,也能够通过并发执行第三交易和第四交易的方式提升不存在依赖关系的各笔交易的整体执行效率。
如图4所示,第一交易和第二交易可以分别为交易B和交易A,此时,接收到Tx_group i的计算进程可以先执行交易A再执行交易B;类似的第一交易和第二交易也可以分别为交易G和交易F,此时,接收到Tx_group i的计算进程可以先执行交易F再执行交易G。第三交易可以为交易C、第四交易可以为交易D和E,对此,接收到Tx_group i的计算进程可以通过线程thread1执行交易C、并通过thread2依次执行交易D和E等。
另外需要说明的是,对于存在依赖关系的第一交易和第二交易,二者也可以分别为交易B和交易C,此时,应当先执行交易B再执行交易C。而且,由于交易F依赖交易C和交易E,所以在执行交易D和E完成后,还需要等待交易C执行完成(当然,也可能是在执行交易C完成后等待交易D和E执行完成),再基于交易C和交易E的执行结果(如两交易的执行过程对某些变量进行了更新)执行交易F,特此说明。
在一实施例中,对于接收到任一交易组的任一计算进程而言,其可以通过多种方式将这些收据数据提交至存储进程。例如,可以响应于所述任一交易组中的各笔交易执行完成,将该交易组中的各笔交易的收据数据提交至所述存储进程。通过该方式,该计算进程可以在任一交易组执行完毕后立即提交其收据数据,而无需等待其他交易组中的交易执行完成,从而进一步加快收据数据的提交效率。再例如,也可以响应于自身接收到的全部交易组中的各笔交易均执行完成(即前述交易任务执行完毕),将所述全部交易组中的各笔交易的收据数据一并提交至所述存储进程。
另外,所述任一计算进程在执行任一交易组中各笔交易完成后,还可以根据自身执行得到的执行结果与其他从节点执行所述任一交易组得到的执行结果进行比较以确定前述分组是否正常,从而确定主节点是否作恶。具体的,可以收集各个从节点分别生成的针对所述任一交易组的证明信息,并在合法的证明信息的数量满足数量阈值(如在采用PBFT算法时,合法证明数量不小于(f-1)/3)的情况下,将所述任一交易组中各笔交易的收据数据提交至存储进程。
步骤206,所述存储进程将接收到的所述收据数据存储至第一节点的预设存储空间。
如前所述,所述M个交易组可能会被发送至一个至多个计算进程,任一计算进程可以在执行完成一个交易组的情况下立即提交收据数据,也可以在自身接收到的全部交易组均执行完成的情况下再一并提交全部收据数据,因此,所述存储进程可能一次性接收到任一计算进程提交的一个或多个交易组对应的收据数据(其中,任一交易组对应的收据数据,即为该交易组中各笔交易分别对应的全部收据数据)。对此,存储进程可以响应于接收到任一交易组对应的收据数据,将该组收据数据存储至第一节点的预设存储空间。
其中,所述第一节点的预设存储空间可以为第一节点所处节点设备的本地存储空间,如可以为节点设备的本地磁盘,所述本地磁盘是指安装于该节点设备(物理机)主板上,不可随意插拔或移动的、用于存储数据的磁盘。可以理解的是,本地磁盘能够为第一节点提供本地存储访问能力,并具有低时延、高随机IOPS(Input/Output Per Second,每秒输入输出量或每秒读写次数)、高吞吐量和高性价比等优势。或者,所述预设存储空间也可以为第一节点可访问的远程存储空间,如部署在云端的数据库等。该方式可以按需增加或减少第一节点可用的预设存储空间,而不受限于节点设备本地磁盘存储空间的大小限制,数据存储方式更加灵活,可以适用于更广泛的应用场景。
当然,鉴于有限的本地存储空间相对于可扩展的远程存储空间通常具有更好的访问性能,而新执行的区块所对应的收据数据相对于历史区块对应的收据数据往往会被更频繁地访问,所以可以将第一区块的前述收据数据均存储在前述本地存储空间,并在时长之后,按照超时规则或访问热度将较少被访问的第一区块对应的收据数据迁移至远程存储空间,从而尽量在存储空间的大小与性能之间取得平衡,以同时提升收据数据的存储效率和访问性能。
在上述实施例中,对于基于第一区块中的多笔交易各自的预执行读写集对所述多笔交易进行分组得到的M个交易组,第一节点中的控制进程将其分别发送至所述N个计算进程中相应的计算进程;其中任一计算进程在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程,以由后者将其存储至第一节点的预设存储空间。
可见,本方案在将各个交易组分别调度至相应的计算进程执行,而各个计算进程在执行交易组中的交易完成后,分别独立提交自身执行得到的收据数据。显然,相对于相关技术中由控制进程集中提交的存储方案,本方案实现了同一区块中不同交易组所对应收据数据的多方并行提交,既无需控制进程等待计算进程返回收据数据,不仅节省了提交时间而且减轻了控制进程的数据处理负担,从而有效提升了区块所对应收据数据的提交和存储效率。
对于采用账户模型的区块链中被执行的交易,除了存储前述收据数据(即交易的交易收据)之外,通常还需要存储交易内容、交易所涉及区块链账户对应的状态数据等——第一区块包含的多笔交易、各笔交易的交易内容和收据数据,即属于该区块的区块数据。在存储以上示出的各种区块链数据时,通常可以将上述各种区块链数据以key-value键值对的形式,组织成Merkle Tree(默克尔树)在数据库中存储。
基于此,在一实施例中,所述任一计算进程还可以将所述任一交易组中各笔交易的交易内容和执行所述各笔交易得到的状态数据提交至所述存储进程进行存储。实际上,可以将所述任一交易组中各笔交易的交易内容、状态数据和收据数据一并提交至所述存储进程进行存储。另外,还可以同时提交所述各笔交易的交易哈希或者其在第一区块中的交易标识(编号等)。另外,所述任一计算进程还可以将所述任一交易组的分组信息提交至所述存储进程进行存储,以便后续进行数据查询。
可以理解的是,所述任一计算进程提交并存储的上述数据和信息,均属于第一区块的区块体。可见,由接收到交易组的各个计算进程分别提交上述数据和信息,使得第一区块的区块体被存储进程存储为互不相同的多份——每一份对应于一个交易组或多个交易组;换言之,本方案所述第一区块的区块体被分为多份,且各份分别独立存储。
在一实施例中,与前述区块提相对应的,可以由控制进程存储相应的区块头部。例如,接收到相应交易组的各个计算进程均可以分别将自身执行相应交易(即自身接收到的各个交易组中的全部交易)得到的执行相关数据发送至所述控制进程。其中,任一计算进程发送的执行相关数据由自身执行接收到的各个交易组所包含的全部交易得到,如可以包括这些交易的收据数据、状态数据和交易费用等。相应的,所述控制进程在接收到第一区块中全部交易的执行相关数据(是接收到交易组的各个计算进程分别发送的执行相关数据的全集)的情况下,可以根据这些执行相关数据确定第一区块的区块头部,并将该区块头部提交至所述存储进程进行存储。可见,本方案由接收到交易组的各个计算进程分别提交区块体的相应部分(各个计算进程提交的部分构成第一区块的完整区块体),并由控制进程采集第一区块中各笔交易的执行相关数据确定并提交第一区块的区块头部,最终实现第一区块所对应区块数据(包括区块体和区块头部)的全部提交和存储。
其中,所述控制进程在根据所述执行相关数据包括的收据数据、状态数据和交易费用确定第一区块的区块头部时,可以包括:根据所述全部交易的收据数据计算收据根哈希Receipt_Root,并将Receipt_Root记录在所述区块头部;根据所述全部交易的状态数据计算状态根哈希State_Root,并将State_Root记录在所述区块头部;根据所述全部交易的交易费用gas计算区块总费用Sum_gas,并将Sum_gas记录在所述区块头部。另外,所述控制进程还可以根据第一区块中的各笔交易计算交易根哈希Transaction_Root,并将Transaction_Root记录在所述区块头部。其中,上述各个根哈希的计算过程可以采用前述Merkle Tree对应的算法实现,不再赘述。
示例性的,所述区块头部记录的信息可以参见下述头部代码:
{
h256 hash_;//Hash of block header include all of other fields
uint64_t version_=kDefaultBlockVersion;//Proctol version,for forwardcompatibility
uint64_t number_=0;//Block number
h256 parent_hash_;//Hash of parent block
h256 transaction_root_;//Merkle root hash of transaction list whichwere included in current block
h256 receipt_root_;//Merkle root hash of transaction receipts
h256 state_root_; //MPT root hash of world state
uint64_t gas_used_=0; //Total gas used on transaction execution
uint64_t timestamp_=0;//In mili-second:consensus-ed timestamp ofblock,strictly increasing along blocks.
LogBloom log_bloom_; //The log bloom of transaction receipt.h2048 is used for eth.
h256 random_seed_; //random seed generated by consensus.
}
对应于前述实施例,本说明书实施例还提出一种区块链系统中的第一节点,第一节点中包含控制进程、存储进程和N个计算进程,其中:
所述控制进程用于将获取到的M个交易组分别发送至所述N个计算进程中相应的计算进程,所述M个交易组基于第一区块中的多笔交易各自的预执行读写集对所述多笔交易进行分组得到,N和M均大于1;
任一计算进程用于在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程;
所述存储进程用于将接收到的所述收据数据存储至第一节点的预设存储空间。
图5是一示例性实施例提供的一种区块链系统中的第一节点的结构示意图。如图5所示,所述第一节点中包含控制进程52、存储进程54和N个计算进程56,其中:
所述控制进程52用于将获取到的M个交易组分别发送至所述N个计算进程56中相应的计算进程56,所述M个交易组基于第一区块中的多笔交易各自的预执行读写集对所述多笔交易进行分组得到,N和M均大于1;
任一计算进程56用于在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程54;
所述存储进程54用于将接收到的所述收据数据存储至第一节点的预设存储空间。
可选的,所述控制进程52将获取到的M个交易组分别发送至所述N个计算进程56中相应的计算进程56,包括:
在M不大于N的情况下,将所述M个交易组分别发送至不同的计算进程56;
在M大于N的情况下,根据所述M个交易组的分组预期耗时指标将所述M个交易组分别发送至所述N个计算进程56中相应的计算进程56,以使所述N个计算进程56的任务预期耗时指标趋于一致,其中,各个计算进程56接收到的交易分组互不相同,任一交易组的分组预期耗时指标用于表征执行该交易组中的全部交易需要的总时长,任一计算进程56的任务预期耗时指标用于表征该计算进程56执行自身所接收交易组中的全部交易需要的总时长。
可选的,所述控制进程52确定任一交易组的分组预期耗时指标,包括下述之一:
在任一交易组仅包含一笔交易的情况下,将该笔交易的交易耗时或交易费用作为该交易组的分组预期耗时指标;
在任一交易组包含多笔交易的情况下,根据该交易组中多笔交易的依赖关系以及各笔交易的交易耗时确定该交易组的分组预期耗时指标;
在任一交易组包含多笔交易的情况下,根据该交易组中多笔交易的依赖关系以及各笔交易的交易费用确定该交易组的分组预期耗时指标。
可选的,所述控制进程52获取所述M个交易组,包括:
获取第二节点发送的所述M个交易组,所述M个交易组由第二节点根据所述多笔交易各自的预执行读写集对所述多笔交易进行分组得到;或者,
获取第一区块中的多笔交易以及所述多笔交易各自的预执行读写集,并根据所述预执行读写集对所述多笔交易进行分组得到所述M个交易组;
其中,所述多笔交易各自的预执行读写集由第二节点预执行所述多笔交易得到。
可选的,在接收到的任一交易组包含多笔交易的情况下,所述任一计算进程56执行该交易组中的各笔交易,包括:
若所述任一计算进程56包含多个线程,则由所述多个线程并行执行该交易组中的各笔交易。
可选的,所述任一计算进程56执行所述任一交易组中的各笔交易,包括:
所述任一计算进程56按照所述各笔交易之间的依赖关系执行所述各笔交易;
其中,对于第一交易及其所依赖的第二交易,在执行第二交易完成后再执行第一交易;对于依赖于同一交易或被同一交易所依赖的第三交易和第四交易,若第三交易和第四交易互相不依赖,则通过不同的线程并发执行第三交易和第四交易。
可选的,所述任一计算进程56将所述各笔交易的收据数据提交至所述存储进程54,包括:
响应于所述任一交易组中的各笔交易执行完成,将该交易组中的各笔交易的收据数据提交至所述存储进程54;或者,
响应于自身接收到的全部交易组中的各笔交易均执行完成,将所述全部交易组中的各笔交易的收据数据一并提交至所述存储进程54。
可选的,还包括:
所述任一计算进程56将所述各笔交易的交易内容和执行所述各笔交易得到的状态数据提交至所述存储进程54进行存储。
可选的,还包括:
所述任一计算进程56将所述任一交易组的分组信息提交至所述存储进程54进行存储。
可选的,还包括:
接收到相应交易组的各个计算进程56分别将自身执行相应交易得到的执行相关数据发送至所述控制进程52;
所述控制进程52在接收到第一区块中全部交易的执行相关数据的情况下,根据所述执行相关数据确定第一区块的区块头部,并将该区块头部提交至所述存储进程54进行存储。
可选的,所述执行相关数据包括收据数据、状态数据和交易费用,所述存储进程54根据所述执行相关数据确定第一区块的区块头部,包括:
根据所述全部交易的收据数据计算收据根哈希,并将所述收据根哈希记录在所述区块头部;根据所述全部交易的状态数据计算状态根哈希,并将所述状态根哈希记录在所述区块头部;根据所述全部交易的交易费用计算区块总费用,并将所述区块总费用记录在所述区块头部。
对应于前述实施例,本说明书实施例还提出一种区块链系统,包括第一节点和第二节点,第一节点中包含控制进程、存储进程和N个计算进程,其中:
第二节点用于预执行第一区块中的多笔交易得到所述多笔交易各自的预执行读写集;以及,根据所述预执行读写集对所述多笔交易进行分组得到M个交易组,并将所述M个交易组发送至第一节点,或者将所述多笔交易和所述预执行读写集发送至第一节点,以由第一节点根据所述预执行读写集对所述多笔交易进行分组得到M个交易组,N和M均大于1;
第一节点中的控制进程用于将所述M个交易组分别发送至所述N个计算进程中相应的计算进程;任一计算进程用于在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程;所述存储进程用于将接收到的所述收据数据存储至第一节点的预设存储空间。
所述第一节点和第二节点可以分别为所述区块链系统中的从节点和主节点,相应收据数据的存储过程的具体实现可以参见前述实施例的记载,此处不再赘述。
图6是一示例性实施例提供的一种设备的结构示意图。请参考图6,在硬件层面,该设备包括处理器602、内部总线604、网络接口606、内存608以及非易失性存储器610,当然还可能包括其他服务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器602从非易失性存储器610中读取对应的计算机程序到内存608中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。

Claims (15)

1.一种收据数据的存储方法,应用于区块链系统中的第一节点,第一节点中包含控制进程、存储进程和N个计算进程,所述方法包括:
所述控制进程将获取到的M个交易组分别发送至所述N个计算进程中相应的计算进程,所述M个交易组基于第一区块中的多笔交易各自的预执行读写集对所述多笔交易进行分组得到,N和M均大于1;
任一计算进程在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程;
所述存储进程将接收到的所述收据数据存储至第一节点的预设存储空间。
2.根据权利要求1所述的方法,所述控制进程将获取到的M个交易组分别发送至所述N个计算进程中相应的计算进程,包括:
在M不大于N的情况下,将所述M个交易组分别发送至不同的计算进程;
在M大于N的情况下,根据所述M个交易组的分组预期耗时指标将所述M个交易组分别发送至所述N个计算进程中相应的计算进程,以使所述N个计算进程的任务预期耗时指标趋于一致,其中,各个计算进程接收到的交易分组互不相同,任一交易组的分组预期耗时指标用于表征执行该交易组中的全部交易需要的总时长,任一计算进程的任务预期耗时指标用于表征该计算进程执行自身所接收交易组中的全部交易需要的总时长。
3.根据权利要求2所述的方法,所述控制进程确定任一交易组的分组预期耗时指标,包括下述之一:
在任一交易组仅包含一笔交易的情况下,将该笔交易的交易耗时或交易费用作为该交易组的分组预期耗时指标;
在任一交易组包含多笔交易的情况下,根据该交易组中多笔交易的依赖关系以及各笔交易的交易耗时确定该交易组的分组预期耗时指标;
在任一交易组包含多笔交易的情况下,根据该交易组中多笔交易的依赖关系以及各笔交易的交易费用确定该交易组的分组预期耗时指标。
4.根据权利要求1所述的方法,所述控制进程获取所述M个交易组,包括:
获取第二节点发送的所述M个交易组,所述M个交易组由第二节点根据所述多笔交易各自的预执行读写集对所述多笔交易进行分组得到;或者,
获取第一区块中的多笔交易以及所述多笔交易各自的预执行读写集,并根据所述预执行读写集对所述多笔交易进行分组得到所述M个交易组;
其中,所述多笔交易各自的预执行读写集由第二节点预执行所述多笔交易得到。
5.根据权利要求1所述的方法,在接收到的任一交易组包含多笔交易的情况下,所述任一计算进程执行该交易组中的各笔交易,包括:
若所述任一计算进程包含多个线程,则由所述多个线程并行执行该交易组中的各笔交易。
6.根据权利要求1所述的方法,所述任一计算进程执行所述任一交易组中的各笔交易,包括:
所述任一计算进程按照所述各笔交易之间的依赖关系执行所述各笔交易;
其中,对于第一交易及其所依赖的第二交易,在执行第二交易完成后再执行第一交易;对于依赖于同一交易或被同一交易所依赖的第三交易和第四交易,若第三交易和第四交易互相不依赖,则通过不同的线程并发执行第三交易和第四交易。
7.根据权利要求1所述的方法,所述任一计算进程将所述各笔交易的收据数据提交至所述存储进程,包括:
响应于所述任一交易组中的各笔交易执行完成,将该交易组中的各笔交易的收据数据提交至所述存储进程;或者,
响应于自身接收到的全部交易组中的各笔交易均执行完成,将所述全部交易组中的各笔交易的收据数据一并提交至所述存储进程。
8.根据权利要求1所述的方法,还包括:
所述任一计算进程将所述各笔交易的交易内容和执行所述各笔交易得到的状态数据提交至所述存储进程进行存储。
9.根据权利要求1所述的方法,还包括:
所述任一计算进程将所述任一交易组的分组信息提交至所述存储进程进行存储。
10.根据权利要求1所述的方法,还包括:
接收到相应交易组的各个计算进程分别将自身执行相应交易得到的执行相关数据发送至所述控制进程;
所述控制进程在接收到第一区块中全部交易的执行相关数据的情况下,根据所述执行相关数据确定第一区块的区块头部,并将该区块头部提交至所述存储进程进行存储。
11.根据权利要求10所述的方法,所述执行相关数据包括收据数据、状态数据和交易费用,所述存储进程根据所述执行相关数据确定第一区块的区块头部,包括:
根据所述全部交易的收据数据计算收据根哈希,并将所述收据根哈希记录在所述区块头部;根据所述全部交易的状态数据计算状态根哈希,并将所述状态根哈希记录在所述区块头部;根据所述全部交易的交易费用计算区块总费用,并将所述区块总费用记录在所述区块头部。
12.一种区块链系统中的第一节点,第一节点中包含控制进程、存储进程和N个计算进程,其中:
所述控制进程用于将获取到的M个交易组分别发送至所述N个计算进程中相应的计算进程,所述M个交易组基于第一区块中的多笔交易各自的预执行读写集对所述多笔交易进行分组得到,N和M均大于1;
任一计算进程用于在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程;
所述存储进程用于将接收到的所述收据数据存储至第一节点的预设存储空间。
13.一种区块链系统,所述区块链系统包括第一节点和第二节点,第一节点中包含控制进程、存储进程和N个计算进程,其中:
第二节点用于预执行第一区块中的多笔交易得到所述多笔交易各自的预执行读写集;以及,根据所述预执行读写集对所述多笔交易进行分组得到M个交易组,并将所述M个交易组发送至第一节点,或者将所述多笔交易和所述预执行读写集发送至第一节点,以由第一节点根据所述预执行读写集对所述多笔交易进行分组得到M个交易组,N和M均大于1;
第一节点中的控制进程用于将所述M个交易组分别发送至所述N个计算进程中相应的计算进程;任一计算进程用于在接收到任一交易组的情况下,执行所述任一交易组中的各笔交易,并将所述各笔交易的收据数据提交至所述存储进程;所述存储进程用于将接收到的所述收据数据存储至第一节点的预设存储空间。
14.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-11中任一项所述的方法。
15.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-11中任一项所述方法的步骤。
CN202310642925.5A 2023-05-31 2023-05-31 收据数据的存储方法、节点和区块链系统 Pending CN116662293A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310642925.5A CN116662293A (zh) 2023-05-31 2023-05-31 收据数据的存储方法、节点和区块链系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310642925.5A CN116662293A (zh) 2023-05-31 2023-05-31 收据数据的存储方法、节点和区块链系统

Publications (1)

Publication Number Publication Date
CN116662293A true CN116662293A (zh) 2023-08-29

Family

ID=87721952

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310642925.5A Pending CN116662293A (zh) 2023-05-31 2023-05-31 收据数据的存储方法、节点和区块链系统

Country Status (1)

Country Link
CN (1) CN116662293A (zh)

Similar Documents

Publication Publication Date Title
Warneke et al. Nephele: efficient parallel data processing in the cloud
Warneke et al. Exploiting dynamic resource allocation for efficient parallel data processing in the cloud
CN108667867B (zh) 数据存储方法及装置
KR102107115B1 (ko) 스마트 계약을 지원하는 블록체인에 기반한, 분산형 컴퓨팅 자원 공유 시스템 및 컴퓨팅 장치
CN109493223B (zh) 一种记账方法及装置
EP3014804B1 (en) Burst mode control
US9218221B2 (en) Token sharing mechanisms for burst-mode operations
JP7038204B2 (ja) 永続性レベル表示器を使用してコンピュータクラスタを管理すること
US20140379922A1 (en) Equitable distribution of excess shared-resource throughput capacity
US20140380324A1 (en) Burst-mode admission control using token buckets
US20140376368A1 (en) Compound token buckets for burst-mode admission control
CN111932257B (zh) 一种区块链并行化处理方法及装置
US20140379506A1 (en) Token-based pricing policies for burst-mode operations
Kang et al. Dynamic scheduling strategy with efficient node availability prediction for handling divisible loads in multi-cloud systems
CN110704438B (zh) 一种区块链中布隆过滤器的生成方法及装置
US20200052885A1 (en) File storage method and apparatus for blockchain network
US20150033226A1 (en) Host system and method for managing data consumption rate in a virtual data processing environment
Liu et al. Optimizing shuffle in wide-area data analytics
CN114936093A (zh) 区块链系统中的交易执行方法、节点和区块链系统
CN112805683A (zh) 使用流借用的流分配
CN105740249B (zh) 一种大数据作业并行调度过程中的处理方法及其系统
CN112805684A (zh) 使用恢复借用的资源分配
CN116308772B (zh) 交易分发方法、节点和区块链系统
Shrivastava et al. Supporting transaction predictability in replicated DRTDBS
KR102221925B1 (ko) 블록체인에 기반한 분산형 컴퓨팅 자원 공유 시스템 상에서, 머신러닝과 병행하여 채굴을 수행하는 방법 및 그러한 채굴을 지원하는 방법

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