CN116881361A - 交易的执行方法、节点和区块链系统 - Google Patents
交易的执行方法、节点和区块链系统 Download PDFInfo
- Publication number
- CN116881361A CN116881361A CN202310805096.8A CN202310805096A CN116881361A CN 116881361 A CN116881361 A CN 116881361A CN 202310805096 A CN202310805096 A CN 202310805096A CN 116881361 A CN116881361 A CN 116881361A
- Authority
- CN
- China
- Prior art keywords
- transaction
- contract
- transactions
- node
- execution
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 362
- 230000008569 process Effects 0.000 claims abstract description 297
- 238000003860 storage Methods 0.000 claims description 41
- 108091035707 Consensus sequence Proteins 0.000 claims description 4
- 238000012545 processing Methods 0.000 description 21
- 238000004422 calculation algorithm Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 16
- 238000004590 computer program Methods 0.000 description 9
- 230000006872 improvement Effects 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 7
- 238000012546 transfer Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 238000009826 distribution Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 241000282345 Meles Species 0.000 description 1
- 241000282344 Mellivora capensis Species 0.000 description 1
- 108010001267 Protein Subunits Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000007795 chemical reaction product Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000008014 freezing Effects 0.000 description 1
- 238000007710 freezing Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 229920001296 polysiloxane Polymers 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000010257 thawing Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书提供一种交易的执行方法、节点和区块链系统,应用于区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,所述方法包括:所述控制进程获取M个交易分组,所述M个交易分组基于目标区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N为正整数;所述控制进程在确定存在处于执行阶段的其他区块的情况下,获取所述其他区块中的交易的预执行读写集,并将所述M个交易分组中与获取的预执行读写集无关的交易分组分别发送至所述N个进程中的不同计算进程;第一计算进程在接收到所述M个交易分组中的任一交易分组的情况下,执行接收到的交易分组中的各个交易。
Description
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种交易的执行方法、节点和区块链系统。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。用户可以通过区块链节点参与实现区块链的相关事务,例如,区块链系统中分别对应不同用户的多个区块链节点,可以基于同态加密、零知识证明等隐私技术针对某一节点的私有数据进行安全多方计算(Secure Multi-Party Computation,SMPC)。再例如,基于区块链网络可以在不同用户账户之间实现转账;再例如,还可以基于区块链网络发行数字画作、数字头像、GIF等数字藏品对应的NFT(Non-Fungible Token,非同质化代币),以便NFT所承载的数字藏品的所有权能够在区块链网络的用户之间流通,从而产生对应于数字藏品的价值。
发明内容
本说明书提供一种交易的执行方法、节点和区块链系统。
具体地,本说明书是通过如下技术方案实现的:
根据本说明书实施例的第一方面,提供了一种交易的执行方法,应用于区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,所述方法包括:
所述控制进程获取M个交易分组,所述M个交易分组基于目标区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N为正整数;
所述控制进程在确定存在处于执行阶段的其他区块的情况下,获取所述其他区块中的交易的预执行读写集,并将所述M个交易分组中与获取的预执行读写集无关的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程在接收到所述M个交易分组中的任一交易分组的情况下,执行接收到的交易分组中的各个交易。
根据本说明书实施例的第二方面,提供了一种交易的执行方法,应用于区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,所述方法包括:
所述控制进程确定多个区块,并获取每一区块分别对应的交易分组,所述交易分组基于对应区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到;
所述控制进程生成交易分组集合,所述交易分组集合中包含的交易分组来自所述多个区块中的至少两个区块,且每一交易分组与所述交易分组集合中的其他交易分组对应的预执行读写集均无关;以及,将所述交易分组集合中的交易分组分别发送至所述N个进程中的不同计算进程;N为正整数;
第一计算进程在接收到任一交易分组的情况下,执行接收到的交易分组中的各个交易。
根据本说明书实施例的第三方面,提供了一种区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,所述方法包括:
所述控制进程用于获取M个交易分组,所述M个交易分组基于目标区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N为正整数;
所述控制进程用于在确定存在处于执行阶段的其他区块的情况下,获取所述其他区块中的交易的预执行读写集,并将所述M个交易分组中与获取的预执行读写集无关的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程用于在接收到所述M个交易分组中的任一交易分组的情况下,执行接收到的交易分组中的各个交易。
根据本说明书实施例的第四方面,提供了一种区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,其中:
所述控制进程确定多个区块,并获取每一区块分别对应的交易分组,所述交易分组基于对应区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到;
所述控制进程生成交易分组集合,所述交易分组集合中包含的交易分组来自所述多个区块中的至少两个区块,且每一交易分组与所述交易分组集合中的其他交易分组对应的预执行读写集均无关;以及,将所述交易分组集合中的交易分组分别发送至所述N个进程中的不同计算进程;N为正整数;
第一计算进程在接收到任一交易分组的情况下,执行接收到的交易分组中的各个交易。
根据本说明书实施例的第五方面,提供了一种区块链系统,包括第一节点,所述第一节点中包含控制进程和N个计算进程,其中:
所述控制进程用于获取M个交易分组,所述M个交易分组基于目标区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N为正整数;
所述控制进程用于在确定存在处于执行阶段的其他区块的情况下,获取所述其他区块中的交易的预执行读写集,并将所述M个交易分组中与获取的预执行读写集无关的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程用于在接收到所述M个交易分组中的任一交易分组的情况下,执行接收到的交易分组中的各个交易。
根据本说明书实施例的第六方面,提供了一种区块链系统,包括第一节点,所述第一节点中包含控制进程和N个计算进程,其中:
所述控制进程确定多个区块,并获取每一区块分别对应的交易分组,所述交易分组基于对应区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到;
所述控制进程生成交易分组集合,所述交易分组集合中包含的交易分组来自所述多个区块中的至少两个区块,且每一交易分组与所述交易分组集合中的其他交易分组对应的预执行读写集均无关;以及,将所述交易分组集合中的交易分组分别发送至所述N个进程中的不同计算进程;N为正整数;
第一计算进程在接收到任一交易分组的情况下,执行接收到的交易分组中的各个交易。
根据本说明书实施例的第七方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第一方面或第二方面中任一项所述的方法的步骤。
根据本说明书实施例的第八方面,提供了根据本说明书一个或多个实施例的第五方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面或第二方面中任一项所述方法的步骤。
在本说明书所提供的技术方案中,通过获取目标区块的交易分组,并比较该交易分组与其他区块之间的交易的预执行读写集的关系的方式来确定发送至计算进程的交易分组,使得跨多个区块间的交易分组可以各自独立执行,进而提升了针对多区块的执行流水线的处理效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是一示例性实施例提供的一种区块链系统的示意图;
图2a~2b是一示例性实施例提供的一种区块链节点中的交易执行流程示意图;
图3是一示例性实施例提供的一种交易的执行方法的流程图;
图4为一实施例中多个交易的DAG图的示意图;
图5是一示例性实施例提供的一种区块链系统中任意两个节点的结构示意图;
图6是一示例性实施例提供的一种跨块间分组的并行执行交易的示意图;
图7是一示例性实施例提供的另一种交易的执行方法的流程图;
图8是一示例性实施例提供的一种区块链系统中的第一节点的结构示意图;
图9是一示例性实施例提供的一种设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与本说明书的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
图1是一示例性实施例提供的一种区块链系统的示意图。如图1所示,区块链系统是通过多个节点(Node)来建立的分布式网络,其包含任意两个节点间通过点对点(Peer-to-Peer,P2P)网络实现在应用层的通信连接,例如其包含的节点n1~节点n5中的任意两个节点间均可通过P2P网络实现在应用层的通信连接。区块链系统利用链式区块结构构造的去中心化(或称为多中心化)的分布式账本,保存于分布式的区块链系统中的每个节点(或大多节点上,如共识节点)上,因此区块链系统需要解决去中心化(或多中心化)的多个节点上各自的账本数据的一致性和正确性的问题。鉴于此,区块链系统的每个节点上都运行着区块链程序,在一定容错需求的设计下,通过共识(consensus)机制保证所有忠诚节点具有相同的交易,从而保证所有忠诚节点对相同交易的执行结果一致,将交易打包成区块并基于相同交易的执行结果更新世界状态。其中当前主流的共识机制包括但不限于:工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、实用拜占庭容错(PracticalByzantine Fault Tolerance,PBFT)算法,蜜獾拜占庭容错(HoneyBadgerBFT)算法等等。
区块链领域中的交易可以指在区块链中执行并记录在区块链中的任务单元。交易中通常包括发送字段(From)、接收字段(To)和数据字段(Data)。区块链中的交易可包括平台交易和合约交易。平台交易主要围绕着平台账号操作,包括创建账号、转账、冻结账号、解冻账号、发行资产、存证等。合约交易主要围绕着合约执行操作,包括部署合约、调用合约、升级合约等。
例如,在交易为转账交易的情况中,From字段表示发起该交易(即发起对另一个账户的转账任务)的账户地址,To字段表示接收该交易(即接收转账)的账户地址,Data字段中包括转账金额。在交易为调用合约的交易的情况中,From字段表示发起该交易的账户地址,To字段表示交易所调用的合约的账户地址,Data字段中包括调用合约中的函数名、及对该函数的传入参数等数据,以用于在交易执行时从区块链中获取该函数的代码并执行该函数的代码
其中,区块链中的账户通常可以分为两种类型:
合约账户(contract account):存储执行的智能合约代码以及智能合约代码中状态的值,通常只能通过外部账户调用激活;
外部账户(Externally owned account):区块链用户的账户。
区块链中的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。在区块链中调用智能合约,是发起一笔指向智能合约地址的交易,使得区块链中每个节点分布式地运行智能合约代码。需要说明的是,除了可以由用户创建智能合约,也可以在创世块中由系统设置智能合约。这类合约一般称为创世合约。一般的,创世合约中可以设置一些区块链的数据结构、参数、属性和方法。此外,具有系统管理员权限的账户可以创建系统级的合约,或者修改系统级的合约(简称为系统合约)。其中,所述系统合约可用于在区块链中增加不同业务的数据的数据结构。
在部署合约的场景中,例如,Bob将一个包含创建智能合约信息(即部署合约)的交易发送到如图1所示的区块链中,该交易的data字段包括待创建的合约的代码(如字节码或者机器码),交易的to字段为空,以表示该交易用于部署合约。节点间通过共识机制达成一致后,确定合约的合约地址“0x6f8ae93…”,各个节点在状态数据库中添加与该智能合约的合约地址对应的合约账户,分配与该合约账户对应的状态存储,并将合约代码保存在该合约的状态存储中,从而合约创建成功。
在调用合约的场景中,例如,Bob将一个用于调用智能合约的交易发送到如图1所示的区块链中,该交易的from字段是交易发起方(即Bob)的账户的地址,to字段中的“0x6f8ae93…”代表了被调用的智能合约的地址,交易的data字段包括调用智能合约的方法和参数。在区块链中对该交易进行共识之后,区块链中的各个节点可分别执行该交易,从而分别执行该合约,基于该合约的执行更新状态数据库。
所述区块链系统中的区块链节点可以执行区块链交易。区块链节点可以包括多个线程,从而节点可以通过这些线程并发执行交易。例如,在待执行的交易有多个的情况下,区块链节点可以将多个交易分发至多个线程,以由各个线程分别执行(即并发执行)自身接收到的交易,从而提升区块链交易的整体执行效率。
在相关技术中,区块链节点通常按照负载均衡的原则为各个进程分发相同数量的交易,但由于执行不同区块链交易所需要的时长可能并不相同,所以上述分发方式容易限制交易执行效率和资源利用率。例如,在线程A将自身接收到的交易执行完毕后,若线程B尚未执行完毕,则区块链节点需要等待线程B执行完毕后才能够将线程A和B的执行结果统一提交。在上述等待过程中,线程A无法执行其他交易或事务。可见,上述交易分发方式使得各个线程完成交易的时刻差异较大,不仅导致区块链交易的整体执行效率较低,影响了执行结果的上链效率,而且一定程度上浪费了先执行完毕的线程的计算资源。
为解决相关技术中存在的上述问题,并提高区块链中的每秒执行交易(TPS)指标,可以加快交易的执行速度。具体的,区块链节点中可通过并行执行交易来加快交易的执行速度。通常,对于转账交易,区块链节点首先根据交易访问的账户将多个交易划分为多个交易组,各个交易组之间不访问相同的账户,从而可并行执行各个交易组。然而,当交易中调用智能合约时,在执行该交易之前不能预知该交易中访问的变量,从而无法对多个交易进行有效的分组,也就无法并行执行交易。在一种实施例中,可由区块链中的第一节点(例如图1中的节点n1)对多个交易进行预执行,得到各个交易的预执行读写集,并通过与其他节点之间的共识过程将该预执行读写集发送给区块链中的其他节点(例如图1中的节点n2~n5)。交易的预执行读写集中例如包括预执行读集和预执行写集,所述预执行读集包括该交易在预执行中读取的变量的键值对,所述预执行写集包括该交易在预执行中写入的变量的键值对。所述变量例如包括区块链中的外部账户、或者为合约账户中定义的变量。区块链中的其他节点可根据多个交易的预执行读写集对多个交易进行分组,从而可根据分组结果并行执行该多个交易。
可通过不同的算法对多个交易进行分组,具体的分组方式将在下文展开介绍,故本说明书在此不再进行详述。当然,本领域技术人员可以确定的是,以上解决方案仅能够在“区块链节点中每一区块”这一范围内的交易执行方式进行优化,从而缩短上述每一区块自身的交易执行效率,例如由图2a所示的交易执行流程,其中,区块链节点正在以流水线的方式依次处理区块N、区块N+1与区块N+2中的交易,针对每一交易的并行执行操作均只限制于区块N、区块N+1或区块N+2的内部。可见,相关技术中的区块链节点无法在区块以上的维度对不同区块之中的交易的执行效率进行优化(即实现类似图2b所示的交易执行流程中,区块链节点并行执行区块N与区块N+1,或区块N+1与区块N+2之间的交易,从而提升上述流水线的整体处理效率的技术效果)。因此,本申请提供了一种新的交易的执行方法,下面结合图3对一种交易的执行方法进行详细说明。
图3是一示例性实施例提供的一种交易的执行方法的流程图。如图3所示,该方法应用于区块链系统中的第一节点,第一节点可以为发起共识提议的节点(如主节点),或者也可以为该节点之外的其他区块链节点(如从节点)。无论所述区块链系统中的主节点还是从节点,各个节点均可实现为任何具有计算/处理能力的装置、平台、设备或设备集群。上述第一节点中可以包含控制进程和N个计算进程,所述方法包括下述步骤:
步骤302,所述控制进程获取M个交易分组,所述M个交易分组基于目标区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N为正整数。
如前所述,上述交易分组可以通过不同的算法对多个交易进行分组得到。
在一实施例中,可通过有向无环图(Directed Acyclic Graph,DAG)算法对多个交易进行分组。具体是,首先根据交易之间的依赖关系绘制多个交易之间的DAG图。例如,假设从节点根据主节点预执行多个交易的顺序来执行该多个交易,因此,可根据多个交易的预执行读写集和预执行顺序来确定交易之间的依赖关系。其中,如果一个交易的预执行读集与另一个交易的预执行写集中包括相同的Key,或者一个交易的写集和另一个交易的写集中包括相同的Key,那么该两个交易中的在后预执行的交易(例如交易Tx2)需要依赖在前预执行的交易(例如交易Tx1),因此,在DAG图中可绘制交易Tx1指向交易Tx2,在交易Tx2依赖交易Tx1的执行的情况中,可认为交易Tx1和交易Tx2为冲突交易,需要串行执行,即在执行交易Tx1之后执行交易Tx2。
图4为一实施例中多个交易的DAG图的示意图,图中圆圈表示DAG图中的节点,圆圈中的数字表示交易编号,节点之间的箭头表示节点之间的有向连接边。在得到多个交易的DAG图之后,可根据DAG图对多个交易进行分组,使得每两个交易组中的交易在DAG图中为分离的节点,即一个交易组中的任一交易与另一个交易组中的每个交易之间没有连接边。
如图6中所示,通过箭头连接的多个交易(即交易Tx1~Tx8)为冲突交易,需要分到一个交易组中。在执行交易Tx1~Tx8时,可首先并行执行交易(Tx3、Tx5)和(Tx1、Tx2、Tx4),其中,交易Tx3、Tx5串行执行,交易Tx1、Tx2、Tx4需要串行执行。交易Tx6需要等待交易Tx4和交易Tx5都执行完成之后再执行,交易Tx7和交易Tx8需要等待交易Tx5和交易Tx6都执行完成之后才能并行执行。其中,交易Tx5和交易Tx6连接三个以上节点,又可以称为分叉点,当DAG图中的分叉点较多的情况中,造成后续交易对该分叉点的等待时间较长。同时,DAG算法需要的状态空间较多。因此,多个交易之间的冲突交易较多的情况中,使用DAG分组算法的效率降低。
在另一实施例中,可通过并查集算法对多个交易进行分组。并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。并查集通常包含两种操作:查找(Find),用于查询两个元素是否在同一个集合中;合并(Union),用于把两个不相交的集合合并为一个集合。通过该算法,当两个交易的预执行读写集中包括相同的Key时,就可以将该两个交易合并到同一个集合中,从而获得多个集合,每两个集合中的交易不会访问相同的Key,从而可以并行处理多个集合。然而,由于并查集算法不考虑交易对Key的访问是读还是写,只要两个交易访问了相同的Key,就将该两个交易分到一个组中,因此有可能将读取相同key的两个交易分到同一个组中。因此,相比于DAG算法得到的分组结果,通过并查集算法进行分组得到的多个交易组的并行度较低。
由于实际业务场景中多个交易中的冲突交易的数目是不确定的,单独使用DAG算法或者并查集算法进行交易分组的效果可能不是最优的,为此,可以根据多个交易的关联程度适应性地确定分组算法来对交易进行分组,从而提高了交易并行执行时的效率。具体地,上述交易的预执行读写集可以涉及合约参数,其中,在第一节点的M个交易分组中,涉及不同合约的合约参数的交易可以被划分至不同的交易分组;在获取的预执行读写集涉及第一合约的合约参数的情况下,上述M个交易分组中与获取的预执行读写集无关的交易分组可以包括:所含交易不涉及第一合约的合约参数的交易分组。
所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;交易的预执行读写集涉及合约参数;其中:
在所述M个交易分组中,涉及不同合约或涉及同一合约的不同合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的任一合约参数的情况下,所述M个交易分组中与获取的预执行读写集无关的交易分组包括:所含交易不涉及第一合约或涉及第一合约但不涉及所述任一合约参数的交易分组。
如前所述,上述区块链系统中的账户通常被划分为用户账户/外部账户(Externally owned account)和合约账户(contract account)两种类型;其中合约账户用于存储智能合约的合约代码以及相关状态的值,其通常只能通过外部账户进行激活和调用。外部账户和合约账户的设计实际上是账户地址到账户状态的映射。账户状态通常可以包括但不限于Nonce、Balance、Storage_Root、CodeHash等字段,其中Nonce、Balance在外部账户和合约账户中都存在,而CodeHash和Storage_Root属性通常仅在合约账户上有效。前述各个字段中,Nonce表征计数器,对于外部账户而言其取值代表从账户地址发送的交易的数量;对于合约账户而言其取值代表账户创建的智能合约的数量。Balance的取值表征对应的外部账户拥有的数字资源的数量。Storage_Root表征一个MPT(Merkle Patricia Tree)树根节点的哈希,该MPT用于对合约账户的状态变量的存储进行组织。CodeHash表征合约代码的哈希值,对于合约账户而言其是智能合约被哈希计算并存储的代码,对于外部账户而言由于不包括智能合约,因此其可以是空字符串或全0字符串。
MPT是结合了Merkle Tree(默克尔树)和Patricia Tree(压缩前缀树,一种更节省空间的Trie树,字典树)的一种树形结构。Merkle Tree,默克尔树算法对每个交易都计算一个Hash值,然后两两连接再次计算Hash,一直到最顶层的Merkle根。以太坊中采用改进的MPT树,例如是16叉树的结构,通常也简称为MPT树。其中以太坊MPT树的数据结构包括状态树(state trie)。状态树中包含以太坊中每个账户所对应的存储内容的键值对(Key andValue pair)。状态树中的“键(Key)”可以是一个长度为160bit的标识符(如以太坊账户的地址),这个账户地址分布于从状态树的根节点开始到叶子节点的存储中。状态树中的“值(Value)”是通过对以太坊账户的信息进行编码(使用递归长度字典编码(Recursive-Length Prefix encoding,RLP)方法)生成的。如前所述,对于外部账户而言,值可以包括Nonce和Balance;对于合约账户而言,值可以包括Nonce、Balance、CodeHash和Storage_Root等。
在一实施例中,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;交易的预执行读写集涉及合约参数;其中:
在所述M个交易分组中,涉及不同合约或涉及同一合约的不同合约参数的交易可以被划分至不同的交易分组,且在获取的预执行读写集涉及第一合约的任一合约参数的情况下,所述M个交易分组中与获取的预执行读写集无关的交易分组包括:所含交易不涉及第一合约或涉及第一合约但不涉及所述任一合约参数的交易分组。当然,上述第一节点还包含存储进程,以使得所述第一计算进程可以将所述任一合约参数的状态值发送至所述存储进程,并将所述存储进程基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
本方案所述的区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值。另外如前所述,对于本方案所述状态树中的合约账户节点和合约参数节点,其中任意两个节点的更新都互不影响;因此,第一节点对应的所述合约账户节点与所述多个合约参数节点的更新同样互不影响。
在一实施例中,所述任一合约参数的状态值可以被按照Key-Value键值对记录在相应的合约参数节点中,其中,所述任一合约参数的key可以通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。示例性的,所述第一合约的合约信息可以包括合约地址或者合约地址的hash等。所述任一合约参数的参数信息可以包括参数名称、参数编号或其hash等。如图2所示,以合约信息为合约地址、参数信息为参数名称为例,对于参数A,可以将账户2的账户地址(如“0x00001234…123”)和参数A的参数名称(如“平均订单数量”等)按照预设规则拼接为参数标识(如“0x00001234…123_平均订单数量”),然后计算该参数标识的hash值作为参数A的Key值,当然,也可以采用其他方式确定所述Key,本说明书实施例并不对此进行限制。通过该方式,可以使同一智能合约中各个合约参数对应的合约参数节点在状态树中分布得较为集中,便于后续参数查找和状态值更新。
本领域的技术人员可以理解的是,相关技术中,对于状态树中的单个合约账户来说,其Storage_Root指向另一棵同为MPT形式的存储树,所述存储树用于存储合约执行涉及的状态变量(state variable)的数据,所述Storage_Root的取值通常为存储树的根节点的hash值。但是,由于同一智能合约的各个合约参数都被记录在该合约对应的存储树中,所以在执行区块链交易产生针对不同合约参数的状态数据(包括合约状态数据和世界状态数据)后,需要先提交合约状态数据以获得合约账户的Storage_Root,再更新状态树中相关合约账号的Storage_Root,然后提交世界状态数据以获得状态树的State_Root。显然,在该方式下,同一智能合约中的不同合约参数的状态值需要顺序更新,而无法并行更新,限制了状态树的更新效率和出块速度。因此所述合约账户节点可以不记录Storage_Root字段的取值以在一定程度上解除上述限制,并提升状态树的更新效率和出块速度。
上述交易分组除了可以由控制进程根据第一节点的分组信息获取,还可以由控制进程基于来自所述区块链系统中的第二节点的分组信息获取。本说明书中并不对此进行限制。
在一实施例中,所述控制进程对所述多个交易进行预执行,并根据得到的预执行读写集将所述多个交易划分为所述M个交易分组。在另一实施例中,所述第一节点还包含第一共识进程;所述控制进程可以根据第一共识进程从所述区块链系统中的第二节点处接收到的所述多个交易各自的预执行读写集,将所述多个交易划分为所述M个交易分组。基于此,所述控制进程可以从第一共识进程处获取其分组得到的所述M个交易分组。上述获取的具体实现方式可以参见前述实施例的记载,此处不再赘述。
在上一实施例中,所述控制进程可以基于所述多个交易各自的预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定所述多个交易中至少部分交易的前后依赖关系,以及根据所述前后依赖关系对所述多个交易进行分组以得到所述M个交易分组。
步骤304,所述控制进程在确定存在处于执行阶段的其他区块的情况下,获取所述其他区块中的交易的预执行读写集,并将所述M个交易分组中与获取的预执行读写集无关的交易分组分别发送至所述N个进程中的不同计算进程。
在控制进程判断并确定存在处于执行阶段的其他区块时,可以获取所述其他区块中的交易的预执行读写集,并通过比较获取的预执行读写集与目标区块的预执行读写集之间的差异,确定出目标区块与其他区块中的相互无关的交易分组,进而将无关的交易分组一同发送至计算进程,以实现目标区块与其他区块中一部分交易分组的并行处理,进而提高针对目标区块与其他区块这两个区块中交易分组的整体处理效率。下面结合图6对这一情况进行说明,如图6所示,假设第一节点中包含合约a{k1,k2,k3,k4,k5,k6}、合约b{k1,k2,k4,k5}、合约c{k4,k5}(括号内包含各合约对应的合约参数),以区块(Block)i中的交易分组(group)0、1和2与区块j的交易分组0、1、2为例,由于区块j的交易分组0、1内的交易的预执行读集未涉及区块i中任一交易分组内的交易的预执行写集,但区块j的交易分组2的交易的预执行读集为a.k1(即合约a的合约参数k1),那么可视为区块j的2个交易分组(即交易分组0、1)与区块i的预执行读写集无关,此时,可以将区块i的交易分组0、1、2以及区块j的交易分组0、1分别发送至所述N个进程中的不同计算进程,已实现两区块中各自交易分组的并行处理。
当然,发送上述交易分组的过程中可以使用类似图5的缓存机制的缓存进程的处理方式,即预设一并行处理阈值或者并行处理周期,使得在确定可并行处理的交易分组数量大于上述并行处理阈值,或者距离最早确定的可并行处理的交易分组超过上述并行处理周期的情况下再执行发送上述无关的交易分组,以避免频繁发送交易分组所造成的资源浪费;或者,可以早在交易分组的共识阶段对每次共识的交易数量进行设置,以提高每一交易分组中的交易数量,进而起到类似上述并行处理阈值或并行处理周期的技术效果。
示例性的,在所述M≤N的情况下,控制进程可以将所述M个交易分组发送至M个计算进程,其中任一计算进程接收到一个交易分组;而在所述M>N的情况下,控制进程可以将所述M个交易分组平均发送至N个计算进程,其中任意两个计算进程接收到的交易分组的数量差值不大于1。通过上述方式,能够使接收到交易分组的计算进程接收到的交易分组数量尽量接近,从而提升M个交易分组的整体执行效率。或者,也可以由N个控制进程相互竞争以获取M个交易分组,任一计算进程可以在执行任一交易分组中的各个交易完成后,继续竞争获取下一交易分组,直至M个交易分组被分发完毕。通过该方式,各个控制进程所获取交易分组的数量与自身的交易执行能力相关,从而一定程度上实现了多个计算进程的负载均衡。
步骤306,第一计算进程在接收到所述M个交易分组中的任一交易分组的情况下,执行接收到的交易分组中的各个交易。
当上述第一计算进程接收到上述控制进程发送的交易分组时,可以对该交易分组中的交易进行相应的执行操作,其中,上述第一计算进程可以通过多个线程并发执行接收到的多个交易分组中的交易,进而进一步地提高交易的执行效率。
在一实施例中,区块链系统还包含第二节点,所述第二节点包括预执行进程和缓存进程,所述缓存进程的内存中存储有状态数据;其中,所述缓存进程用于将所述多个交易发送至所述预执行进程,所述多个交易由第一节点接收并存储在所述缓存进程的内存中;所述预执行进程用于预执行所述多个交易,生成所述多个交易的预执行读写集,具体用于在预执行所述多个交易中的任一交易的过程中将要读取第一合约参数的状态值时,在所述缓存进程的内存存储有第一合约参数的状态值的情况下,从所述缓存进程接收该状态值,并基于该状态值生成所述任一交易的预执行读写集;
在一实施例中,缓存进程还用于在所述缓存进程的内存中存储所述多个交易的预执行读写集和所述多个交易的预执行顺序,并基于所述多个交易的预执行读写集更新所述内存中存储的状态数据。
22.根据权利要求21所述的区块链系统,所述第二节点还包含第二共识进程,
所述缓存进程还用于将所述多个交易的预执行读写集和预执行顺序发送至第二共识进程;
第二共识进程用于生成共识提议,并将所述共识提议发送至第一节点中的第一共识进程,所述共识提议包括所述多个交易的预执行读写集及其共识顺序,所述共识顺序为所述预执行顺序。
图7是一示例性实施例提供的一种交易的执行方法的流程图。如图7所示,该方法应用于区块链系统中的第一节点,第一节点可以为发起共识提议的节点(如主节点),或者也可以为该节点之外的其他区块链节点(如从节点)。上述第一节点中可以包含控制进程和N个计算进程,所述方法包括下述步骤。
S702,所述控制进程确定多个区块,并获取每一区块分别对应的交易分组,所述交易分组基于对应区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到。
如前所述,交易的预执行读写集涉及合约参数;其中:
在每一区块的交易分组中,涉及不同合约的合约参数的交易被划分至不同的交易分组;
在任一区块获取的预执行读写集涉及第一合约的合约参数的情况下,下文的交易分组集合中的交易分组包括:对应于除所述任一区块之外的其他区块,且所含交易不涉及第一合约的合约参数的交易分组。
如前所述,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;交易的预执行读写集涉及合约参数;其中:
在所述任一区块的交易分组中,涉及不同合约或涉及同一合约的不同合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的任一合约参数的情况下,所述交易分组集合中的交易分组包括:对应于除所述任一区块之外的其他区块,且所含交易不涉及第一合约或涉及第一合约但不涉及所述任一合约参数的交易分组。
如前所述,所述第一计算进程将所述任一合约参数的状态值发送至所述存储进程;
所述存储进程基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
如前所述,所述任一合约参数的状态值被按照Key-Value键值对记录在相应的合约参数节点中,其中,所述任一合约参数的Key通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。
如前所述,所述合约账户节点不记录Storage_Root字段的取值。
S704,所述控制进程生成交易分组集合,所述交易分组集合中包含的交易分组来自所述多个区块中的至少两个区块,且每一交易分组与所述交易分组集合中的其他交易分组对应的预执行读写集均无关;以及,将所述交易分组集合中的交易分组分别发送至所述N个进程中的不同计算进程;N为正整数。
如前所述,所述控制进程基于来自所述区块链系统中的第二节点的分组信息获取上述交易分组集合。
如前所述,所述控制进程获取交易分组集合,包括:所述控制进程对所述多个交易进行预执行,并根据得到的预执行读写集将所述多个交易划分至上述交易分组集合;或者,
所述第一节点还包含第一共识进程;所述控制进程生成交易分组集合,包括:所述控制进程根据第一共识进程从所述区块链系统中的第二节点处接收到的所述多个交易各自的预执行读写集,将所述多个交易划分至上述交易分组集合。
如前所述,所述将所述多个交易划分为上述交易分组集合,包括:
所述控制进程基于所述多个交易各自的预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定所述多个交易中至少部分交易的前后依赖关系,以及根据所述前后依赖关系对所述多个交易进行分组以得到上述交易分组集合。
S706,第一计算进程在接收到任一交易分组的情况下,执行接收到的交易分组中的各个交易。
如前所述,所述第一计算进程通过多个线程并发执行接收到的多个交易分组中的交易。
图8是一示例性实施例提供的一种区块链系统中的第一节点的结构示意图。如图8所示,所述第一节点中包含控制进程82和N个计算进程84,所述控制进程82用于获取M个交易分组,所述M个交易分组基于目标区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N为正整数;所述控制进程82还用于在确定存在处于执行阶段的其他区块的情况下,获取所述其他区块中的交易的预执行读写集,并将所述M个交易分组中与获取的预执行读写集无关的交易分组分别发送至所述N个进程中的不同计算进程;所述计算进程84中的第一计算进程用于在接收到所述M个交易分组中的任一交易分组的情况下,执行接收到的交易分组中的各个交易。
可选的,所述交易的预执行读写集涉及合约参数;其中:
在所述M个交易分组中,涉及不同合约的合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的合约参数的情况下,所述M个交易分组中与获取的预执行读写集无关的交易分组包括:所含交易不涉及第一合约的合约参数的交易分组。
可选的,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;交易的预执行读写集涉及合约参数;其中:
在所述M个交易分组中,涉及不同合约或涉及同一合约的不同合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的任一合约参数的情况下,所述M个交易分组中与获取的预执行读写集无关的交易分组包括:所含交易不涉及第一合约或涉及第一合约但不涉及所述任一合约参数的交易分组。
可选的,所述第一节点还包含存储进程88;
所述第一计算进程还用于将所述任一合约参数的状态值发送至所述存储进程88;
所述存储进程88用于基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
可选的,所述任一合约参数的状态值被按照Key-Value键值对记录在相应的合约参数节点中,其中,所述任一合约参数的Key通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。
可选的,所述合约账户节点不记录Storage_Root字段的取值。
可选的,所述控制进程82还用于基于来自所述区块链系统中的第二节点的分组信息获取M个交易分组。
可选的,所述控制进程82还用于对所述多个交易进行预执行,并根据得到的预执行读写集将所述多个交易划分为所述M个交易分组;或者,
所述第一节点还包含第一共识进程86;所述控制进程82还用于根据第一共识进程86从所述区块链系统中的第二节点处接收到的所述多个交易各自的预执行读写集,将所述多个交易划分为所述M个交易分组。
可选的,所述控制进程82还用于基于所述多个交易各自的预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定所述多个交易中至少部分交易的前后依赖关系,以及根据所述前后依赖关系对所述多个交易进行分组以得到所述M个交易分组。
可选的,所述第一计算进程还用于通过多个线程并发执行接收到的多个交易分组中的交易。
所述第一节点的交易分发过程的具体实现可以参见前述实施例的记载,此处不再赘述。
基于与前述方法实施例相同的构思,本说明书实施例中还提供了一种区块链系统,所述区块链系统包括第一节点,所述第一节点中包含控制进程和N个计算进程,其中:
所述控制进程用于获取M个交易分组,所述M个交易分组基于目标区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N为正整数;
所述控制进程用于在确定存在处于执行阶段的其他区块的情况下,获取所述其他区块中的交易的预执行读写集,并将所述M个交易分组中与获取的预执行读写集无关的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程用于在接收到所述M个交易分组中的任一交易分组的情况下,执行接收到的交易分组中的各个交易。
可选的,交易的预执行读写集涉及合约参数;其中:
在所述M个交易分组中,涉及不同合约的合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的合约参数的情况下,所述M个交易分组中与获取的预执行读写集无关的交易分组包括:所含交易不涉及第一合约的合约参数的交易分组。
可选的,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;交易的预执行读写集涉及合约参数;其中:
在所述M个交易分组中,涉及不同合约或涉及同一合约的不同合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的任一合约参数的情况下,所述M个交易分组中与获取的预执行读写集无关的交易分组包括:所含交易不涉及第一合约或涉及第一合约但不涉及所述任一合约参数的交易分组。
可选的,所述第一计算进程将所述任一合约参数的状态值发送至所述存储进程;
所述存储进程用于基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
可选的,所述任一合约参数的状态值被按照Key-Value键值对记录在相应的合约参数节点中,其中,所述任一合约参数的Key通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。
可选的,所述合约账户节点不记录Storage_Root字段的取值
可选的,所述控制进程用于基于来自所述区块链系统中的第二节点的分组信息获取M个交易分组。
可选的,所述控制进程还用于对所述多个交易进行预执行,并根据得到的预执行读写集将所述多个交易划分为所述M个交易分组;或者,
所述第一节点还包含第一共识进程;所述控制进程还用于根据第一共识进程从所述区块链系统中的第二节点处接收到的所述多个交易各自的预执行读写集,将所述多个交易划分为所述M个交易分组。
可选的,所述控制进程还用于基于所述多个交易各自的预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定所述多个交易中至少部分交易的前后依赖关系,以及根据所述前后依赖关系对所述多个交易进行分组以得到所述M个交易分组。
可选的,所述第一计算进程还用于通过多个线程并发执行接收到的多个交易分组中的交易。
仍然以图8为例,所述第一节点中包含控制进程82和N个计算进程84,所述控制进程82用于确定多个区块,并获取每一区块分别对应的交易分组,所述交易分组基于对应区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到;所述控制进程82还用于生成交易分组集合,所述交易分组集合中包含的交易分组来自所述多个区块中的至少两个区块,且每一交易分组与所述交易分组集合中的其他交易分组对应的预执行读写集均无关;以及,将所述交易分组集合中的交易分组分别发送至所述N个进程中的不同计算进程;N为正整数;所述计算进程84中的第一计算进程用于在接收到任一交易分组的情况下,执行接收到的交易分组中的各个交易。
可选的,交易的预执行读写集涉及合约参数;其中:
在每一区块的交易分组中,涉及不同合约的合约参数的交易被划分至不同的交易分组;
在任一区块获取的预执行读写集涉及第一合约的合约参数的情况下,下文的交易分组集合中的交易分组包括:对应于除所述任一区块之外的其他区块,且所含交易不涉及第一合约的合约参数的交易分组。
可选的,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;交易的预执行读写集涉及合约参数;其中:
在所述任一区块的交易分组中,涉及不同合约或涉及同一合约的不同合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的任一合约参数的情况下,所述交易分组集合中的交易分组包括:对应于除所述任一区块之外的其他区块,且所含交易不涉及第一合约或涉及第一合约但不涉及所述任一合约参数的交易分组。
可选的,所述第一计算进程将所述任一合约参数的状态值发送至所述存储进程;
所述存储进程基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
可选的,所述任一合约参数的状态值被按照Key-Value键值对记录在相应的合约参数节点中,其中,所述任一合约参数的Key通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。
可选的,所述合约账户节点不记录Storage_Root字段的取值。
可选的,所述控制进程基于来自所述区块链系统中的第二节点的分组信息获取上述交易分组集合。
可选的,所述控制进程获取交易分组集合,包括:所述控制进程对所述多个交易进行预执行,并根据得到的预执行读写集将所述多个交易划分至上述交易分组集合;或者,
所述第一节点还包含第一共识进程;所述控制进程生成交易分组集合,包括:所述控制进程根据第一共识进程从所述区块链系统中的第二节点处接收到的所述多个交易各自的预执行读写集,将所述多个交易划分至上述交易分组集合。
可选的,所述将所述多个交易划分为上述交易分组集合,包括:
所述控制进程基于所述多个交易各自的预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定所述多个交易中至少部分交易的前后依赖关系,以及根据所述前后依赖关系对所述多个交易进行分组以得到上述交易分组集合。
可选的,所述第一计算进程通过多个线程并发执行接收到的多个交易分组中的交易。
所述第一节点的交易分发过程的具体实现可以参见前述实施例的记载,此处不再赘述。
基于与前述方法实施例相同的构思,本说明书实施例中还提供了另一种区块链系统,所述区块链系统包括第一节点,所述第一节点中包含控制进程和N个计算进程,其中:
所述控制进程确定多个区块,并获取每一区块分别对应的交易分组,所述交易分组基于对应区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到;
所述控制进程生成交易分组集合,所述交易分组集合中包含的交易分组来自所述多个区块中的至少两个区块,且每一交易分组与所述交易分组集合中的其他交易分组对应的预执行读写集均无关;以及,将所述交易分组集合中的交易分组分别发送至所述N个进程中的不同计算进程;N为正整数;
第一计算进程在接收到任一交易分组的情况下,执行接收到的交易分组中的各个交易。
可选的,交易的预执行读写集涉及合约参数;其中:
在每一区块的交易分组中,涉及不同合约的合约参数的交易被划分至不同的交易分组;
在任一区块获取的预执行读写集涉及第一合约的合约参数的情况下,下文的交易分组集合中的交易分组包括:对应于除所述任一区块之外的其他区块,且所含交易不涉及第一合约的合约参数的交易分组。
可选的,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;交易的预执行读写集涉及合约参数;其中:
在所述任一区块的交易分组中,涉及不同合约或涉及同一合约的不同合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的任一合约参数的情况下,所述交易分组集合中的交易分组包括:对应于除所述任一区块之外的其他区块,且所含交易不涉及第一合约或涉及第一合约但不涉及所述任一合约参数的交易分组。
可选的,所述第一计算进程将所述任一合约参数的状态值发送至所述存储进程;
所述存储进程基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
可选的,所述任一合约参数的状态值被按照Key-Value键值对记录在相应的合约参数节点中,其中,所述任一合约参数的Key通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。
可选的,所述合约账户节点不记录Storage_Root字段的取值。
可选的,所述控制进程基于来自所述区块链系统中的第二节点的分组信息获取上述交易分组集合。
可选的,所述控制进程获取交易分组集合,包括:所述控制进程对所述多个交易进行预执行,并根据得到的预执行读写集将所述多个交易划分至上述交易分组集合;或者,
所述第一节点还包含第一共识进程;所述控制进程生成交易分组集合,包括:所述控制进程根据第一共识进程从所述区块链系统中的第二节点处接收到的所述多个交易各自的预执行读写集,将所述多个交易划分至上述交易分组集合。
可选的,所述将所述多个交易划分为上述交易分组集合,包括:
所述控制进程基于所述多个交易各自的预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定所述多个交易中至少部分交易的前后依赖关系,以及根据所述前后依赖关系对所述多个交易进行分组以得到上述交易分组集合。
可选的,所述第一计算进程通过多个线程并发执行接收到的多个交易分组中的交易。
图9是一示例性实施例提供的一种设备的结构示意图。请参考图9,在硬件层面,该设备包括处理器902、内部总线904、网络接口906、内存908以及非易失性存储器910,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器902从非易失性存储器910中读取对应的计算机程序到内存908中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本发明不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
Claims (25)
1.一种交易的执行方法,应用于区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,所述方法包括:
所述控制进程获取M个交易分组,所述M个交易分组基于目标区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N为正整数;
所述控制进程在确定存在处于执行阶段的其他区块的情况下,获取所述其他区块中的交易的预执行读写集,并将所述M个交易分组中与获取的预执行读写集无关的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程在接收到所述M个交易分组中的任一交易分组的情况下,执行接收到的交易分组中的各个交易。
2.根据权利要求1所述的方法,交易的预执行读写集涉及合约参数;其中:
在所述M个交易分组中,涉及不同合约的合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的合约参数的情况下,所述M个交易分组中与获取的预执行读写集无关的交易分组包括:所含交易不涉及第一合约的合约参数的交易分组。
3.根据权利要求1所述的方法,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;交易的预执行读写集涉及合约参数;其中:
在所述M个交易分组中,涉及不同合约或涉及同一合约的不同合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的任一合约参数的情况下,所述M个交易分组中与获取的预执行读写集无关的交易分组包括:所含交易不涉及第一合约或涉及第一合约但不涉及所述任一合约参数的交易分组。
4.根据权利要求3所述的方法,所述第一节点还包含存储进程;所述方法还包括
所述第一计算进程将所述任一合约参数的状态值发送至所述存储进程;
所述存储进程基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
5.根据权利要求3所述的方法,所述任一合约参数的状态值被按照Key-Value键值对记录在相应的合约参数节点中,其中,所述任一合约参数的Key通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。
6.根据权利要求3所述的方法,所述合约账户节点不记录Storage_Root字段的取值。
7.根据权利要求1所述的方法,所述控制进程获取M个交易分组,包括:
所述控制进程基于来自所述区块链系统中的第二节点的分组信息获取M个交易分组。
8.根据权利要求1所述的方法,
所述控制进程获取M个交易分组,包括:所述控制进程对所述多个交易进行预执行,并根据得到的预执行读写集将所述多个交易划分为所述M个交易分组;或者,
所述第一节点还包含第一共识进程;所述控制进程获取M个交易分组,包括:所述控制进程根据第一共识进程从所述区块链系统中的第二节点处接收到的所述多个交易各自的预执行读写集,将所述多个交易划分为所述M个交易分组。
9.根据权利要求8所述的方法,所述将所述多个交易划分为所述M个交易分组,包括:
所述控制进程基于所述多个交易各自的预执行读写集确定所述多个交易之间的读写集冲突关系,并基于所述读写集冲突关系确定所述多个交易中至少部分交易的前后依赖关系,以及根据所述前后依赖关系对所述多个交易进行分组以得到所述M个交易分组。
10.根据权利要求1所述的方法,还包括:
所述第一计算进程通过多个线程并发执行接收到的多个交易分组中的交易。
11.一种交易的执行方法,应用于区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,所述方法包括:
所述控制进程确定多个区块,并获取每一区块分别对应的交易分组,所述交易分组基于对应区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到;
所述控制进程生成交易分组集合,所述交易分组集合中包含的交易分组来自所述多个区块中的至少两个区块,且每一交易分组与所述交易分组集合中的其他交易分组对应的预执行读写集均无关;以及,将所述交易分组集合中的交易分组分别发送至所述N个进程中的不同计算进程;N为正整数;
第一计算进程在接收到任一交易分组的情况下,执行接收到的交易分组中的各个交易。
12.一种区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,其中:
所述控制进程用于获取M个交易分组,所述M个交易分组基于目标区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N为正整数;
所述控制进程用于在确定存在处于执行阶段的其他区块的情况下,获取所述其他区块中的交易的预执行读写集,并将所述M个交易分组中与获取的预执行读写集无关的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程用于在接收到所述M个交易分组中的任一交易分组的情况下,执行接收到的交易分组中的各个交易。
13.根据权利要求12所述的第一节点,第一计算进程还用于:
通过多个线程并发执行接收到的多个交易分组中的交易。
14.根据权利要求12所述的第一节点,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;交易的预执行读写集涉及合约参数;其中:
在所述M个交易分组中,涉及不同合约或涉及同一合约的不同合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的任一合约参数的情况下,所述M个交易分组中与获取的预执行读写集无关的交易分组包括:所含交易不涉及第一合约或涉及第一合约但不涉及所述任一合约参数的交易分组。
15.根据权利要求14所述的第一节点,第一节点还包含存储进程,
第一计算进程还用于将所述任一合约参数的状态值发送至所述存储进程;
所述存储进程用于基于所述任一合约参数的状态值更新所述任一合约参数在所述状态树中对应的合约参数节点记录的状态值。
16.一种区块链系统中的第一节点,第一节点中包含控制进程和N个计算进程,其中:
所述控制进程确定多个区块,并获取每一区块分别对应的交易分组,所述交易分组基于对应区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到;
所述控制进程生成交易分组集合,所述交易分组集合中包含的交易分组来自所述多个区块中的至少两个区块,且每一交易分组与所述交易分组集合中的其他交易分组对应的预执行读写集均无关;以及,将所述交易分组集合中的交易分组分别发送至所述N个进程中的不同计算进程;N为正整数;
第一计算进程在接收到任一交易分组的情况下,执行接收到的交易分组中的各个交易。
17.一种区块链系统,包括第一节点,所述第一节点中包含控制进程和N个计算进程,其中:
所述控制进程用于获取M个交易分组,所述M个交易分组基于目标区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到,M和N为正整数;
所述控制进程用于在确定存在处于执行阶段的其他区块的情况下,获取所述其他区块中的交易的预执行读写集,并将所述M个交易分组中与获取的预执行读写集无关的交易分组分别发送至所述N个进程中的不同计算进程;
第一计算进程用于在接收到所述M个交易分组中的任一交易分组的情况下,执行接收到的交易分组中的各个交易。
18.根据权利要求17所述的区块链系统,所述区块链系统维护的世界状态对应于状态树,所述状态树的叶子节点包括合约账户节点和多个合约参数节点,所述合约账户节点用于记录所述区块链系统中部署的第一合约的合约账户、所述多个合约参数节点分别用于记录第一合约中的不同合约参数的状态值,且所述合约账户节点与所述多个合约参数节点的更新互不影响;交易的预执行读写集涉及合约参数;其中:
在所述M个交易分组中,涉及不同合约或涉及同一合约的不同合约参数的交易被划分至不同的交易分组;
在获取的预执行读写集涉及第一合约的任一合约参数的情况下,所述M个交易分组中与获取的预执行读写集无关的交易分组包括:所含交易不涉及第一合约或涉及第一合约但不涉及所述任一合约参数的交易分组。
19.根据权利要求18所述的区块链系统,所述任一合约参数的状态值被按照Key-Value键值对记录在相应的合约参数节点中,其中,所述任一合约参数的Key通过第一合约的合约信息和所述任一合约参数的参数信息计算得到。
20.根据权利要求18所述的区块链系统,
所述控制进程获取M个交易分组,包括:所述控制进程对所述多个交易进行预执行,并根据得到的预执行读写集将所述多个交易划分为所述M个交易分组;或者,
所述第一节点还包含第一共识进程;所述控制进程获取M个交易分组,包括:所述控制进程根据第一共识进程从所述区块链系统中的第二节点处接收到的所述多个交易各自的预执行读写集,将所述多个交易划分为所述M个交易分组。
21.根据权利要求18所述的区块链系统,所述区块链系统还包含第二节点,所述第二节点包括预执行进程和缓存进程,所述缓存进程的内存中存储有状态数据;其中,
所述缓存进程用于将所述多个交易发送至所述预执行进程,所述多个交易由第一节点接收并存储在所述缓存进程的内存中;
所述预执行进程用于预执行所述多个交易,生成所述多个交易的预执行读写集,具体用于在预执行所述多个交易中的任一交易的过程中将要读取第一合约参数的状态值时,在所述缓存进程的内存存储有第一合约参数的状态值的情况下,从所述缓存进程接收该状态值,并基于该状态值生成所述任一交易的预执行读写集;
所述缓存进程还用于在所述缓存进程的内存中存储所述多个交易的预执行读写集和所述多个交易的预执行顺序,并基于所述多个交易的预执行读写集更新所述内存中存储的状态数据。
22.根据权利要求21所述的区块链系统,所述第二节点还包含第二共识进程,
所述缓存进程还用于将所述多个交易的预执行读写集和预执行顺序发送至第二共识进程;
第二共识进程用于生成共识提议,并将所述共识提议发送至第一节点中的第一共识进程,所述共识提议包括所述多个交易的预执行读写集及其共识顺序,所述共识顺序为所述预执行顺序。
23.一种区块链系统,包括第一节点,所述第一节点中包含控制进程和N个计算进程,其中:
所述控制进程确定多个区块,并获取每一区块分别对应的交易分组,所述交易分组基于对应区块中的多个交易各自的预执行读写集对所述多个交易进行分组得到;
所述控制进程生成交易分组集合,所述交易分组集合中包含的交易分组来自所述多个区块中的至少两个区块,且每一交易分组与所述交易分组集合中的其他交易分组对应的预执行读写集均无关;以及,将所述交易分组集合中的交易分组分别发送至所述N个进程中的不同计算进程;N为正整数;
第一计算进程在接收到任一交易分组的情况下,执行接收到的交易分组中的各个交易。
24.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-11中任一项所述的方法。
25.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-11中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310805096.8A CN116881361A (zh) | 2023-06-30 | 2023-06-30 | 交易的执行方法、节点和区块链系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310805096.8A CN116881361A (zh) | 2023-06-30 | 2023-06-30 | 交易的执行方法、节点和区块链系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116881361A true CN116881361A (zh) | 2023-10-13 |
Family
ID=88254063
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310805096.8A Pending CN116881361A (zh) | 2023-06-30 | 2023-06-30 | 交易的执行方法、节点和区块链系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116881361A (zh) |
-
2023
- 2023-06-30 CN CN202310805096.8A patent/CN116881361A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6928104B2 (ja) | ブロック・チェーンにサービス・データを書き込むための方法および装置、ならびにサービス・サブセットを判定するための方法 | |
CN114827165B (zh) | 对多个交易进行分组的方法和区块链节点 | |
US8606791B2 (en) | Concurrently accessed hash table | |
WO2023231336A1 (zh) | 执行交易的方法和区块链节点 | |
CN109032803B (zh) | 数据处理方法和装置、客户端 | |
WO2023160085A1 (zh) | 执行交易的方法、区块链、主节点和从节点 | |
WO2023160083A1 (zh) | 执行交易的方法、区块链、主节点和从节点 | |
CN110704438B (zh) | 一种区块链中布隆过滤器的生成方法及装置 | |
WO2024001024A1 (zh) | 在区块链系统中执行交易的方法、区块链系统和节点 | |
CN109145053B (zh) | 数据处理方法和装置、客户端、服务器 | |
CN114936256A (zh) | 在区块链中执行交易的方法和区块链节点 | |
WO2023231339A1 (zh) | 区块链系统中的交易执行方法、节点和区块链系统 | |
CN115129727A (zh) | 状态数据的提交方法、节点和区块链系统 | |
WO2024001025A1 (zh) | 一种预执行缓存数据清理方法和区块链节点 | |
WO2024066007A1 (zh) | 区块链系统中的交易执行方法、共识节点和区块链系统 | |
WO2024001032A1 (zh) | 在区块链系统中执行交易的方法、区块链系统和节点 | |
CN116303425A (zh) | 一种在区块链中创建账户的方法和区块链节点 | |
CN116881361A (zh) | 交易的执行方法、节点和区块链系统 | |
CN114968422A (zh) | 基于变量状态自动执行合约的方法和装置 | |
CN109032804B (zh) | 数据处理方法和装置、服务器 | |
CN116821242A (zh) | 区块同步方法、装置及区块链系统 | |
WO2024066014A1 (zh) | 区块链系统中的交易执行方法和节点 | |
WO2024066009A1 (zh) | 区块链系统中的状态验证方法、装置、节点和区块链 | |
CN116248287A (zh) | 状态数据的提交方法、节点和区块链系统 | |
CN116662292A (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 |