CN114936092A - 在区块链中执行交易的方法及区块链的主节点 - Google Patents
在区块链中执行交易的方法及区块链的主节点 Download PDFInfo
- Publication number
- CN114936092A CN114936092A CN202210600442.4A CN202210600442A CN114936092A CN 114936092 A CN114936092 A CN 114936092A CN 202210600442 A CN202210600442 A CN 202210600442A CN 114936092 A CN114936092 A CN 114936092A
- Authority
- CN
- China
- Prior art keywords
- transaction
- execution
- transactions
- consensus
- block
- 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
Images
Classifications
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- 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/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- 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
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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/00—Payment architectures, schemes or protocols
- G06Q20/08—Payment architectures
- G06Q20/10—Payment architectures specially adapted for electronic funds transfer [EFT] systems; specially adapted for home banking systems
- G06Q20/102—Bill distribution or payments
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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/00—Payment architectures, schemes or protocols
- G06Q20/22—Payment schemes or models
- G06Q20/223—Payment schemes or models based on the use of peer-to-peer networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/382—Payment protocols; Details thereof insuring higher security of transaction
- G06Q20/3825—Use of electronic signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/40—Authorisation, 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/401—Transaction verification
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Accounting & Taxation (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Finance (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Strategic Management (AREA)
- Software Systems (AREA)
- General Business, Economics & Management (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Computing Systems (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本说明书提供一种在区块链中执行交易的方法及区块链的主节点,所述区块链包括主节点和从节点,其中,在区块链中执行交易的方法由所述主节点执行,所述方法包括:预执行属于第一区块的多个交易;确定所述多个交易中的第一交易为预设类型的交易;在预执行所述多个交易之后,与所述从节点对所述第一区块进行共识;在完成对所述第一区块的共识之后,重新执行所述第一交易。
Description
技术领域
本说明书一个或多个实施例涉及区块链技术领域,特别涉及一种在区块链中执行交易的方法及区块链的主节点。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。在区块链中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证数据区块不可篡改和不可伪造。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。
目前来说,交易的执行效率难以提升,需要一种高效执行交易的方案。
发明内容
本说明书一个或多个实施例提供一种在区块链中执行交易的方法及区块链的主节点。
根据第一方面,提供一种在区块链中执行交易的方法,所述区块链包括主节点和从节点,所述方法由所述主节点执行,所述方法包括:
预执行属于第一区块的多个交易;
确定所述多个交易中的第一交易为预设类型的交易;
在预执行所述多个交易之后,与所述从节点对所述第一区块进行共识;
在完成对所述第一区块的共识之后,重新执行所述第一交易。
根据第二方面,提供一种区块链中的主节点,所述区块链还包括从节点,主节点包括:
预执行进程,用于预执行属于第一区块的多个交易,并确定所述多个交易中的第一交易为预设类型的交易;
共识进程,用于在预执行所述多个交易之后,与所述从节点对所述第一区块进行共识;
计算进程,用于在完成对所述第一区块的共识之后,重新执行所述第一交易。
根据第三方面,提供一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面中任一项所述的方法。
根据第四方面,提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述第一方面中任一项所述的方法。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本说明书的实施例提供的在区块链中执行交易的方法及区块链的主节点,在主节点对当前区块进行预执行完成之后,如果确定当前区块的多个交易中存在预设类型的交易,则在完成对当前区块的共识之后,重新执行预设类型的交易。从而有效提高了区块链中区块的执行速度,以及提高了区块链***的性能。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本说明书实施例所应用的区块链架构图;
图2是本说明书根据一示例性实施例示出的PBFT共识算法中的共识过程示意图;
图3是本说明书根据一示例性实施例示出的一种区块链中执行交易的过程示意图;
图4是本说明书根据一示例性实施例示出的一种区块链的主节点和从节点的结构图;
图5是本说明书根据一示例性实施例示出的一种在区块链中执行交易的方法流程图;
图6是本说明书根据一示例性实施例示出的一种区块链中的主节点的框图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及通过共识竞争新区块的记账权等。在私有链中,网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。联盟链是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
如图1所示,是本说明书实施例所应用的区块链架构图。
在图1所示的区块链架构图中,区块链中例如包含主节点1、从节点2~从节点6共6个节点。节点之间的连线示意性的表示P2P(Peer to Peer,点对点)连接。这些节点上可存储全量的账本,即存储全部区块和全部账户的状态。其中,区块链中的每个节点可通过执行相同的交易而产生区块链中的相同的状态,区块链中的每个节点可存储相同的状态数据库。所不同的是,主节点1可负责对接收的交易进行预执行,并向各个从节点发起共识提议,该共识提议中例如包括将要成块的区块(例如区块B1)中的多个交易及各个交易的预执行读写集和预执行顺序等信息。在区块链中的各个节点对共识提议共识成功之后,各个从节点可根据共识提议中的预执行顺序执行该多个交易,从而生成区块B1。
可以理解,图1中虽然示出了区块链中包括6个节点,本说明书实施例不限于此,而是可以包括其他数目的节点。具体是,区块链中包含的节点可以满足拜占庭容错(Byzantine Fault Tolerance,BFT)要求。所述的拜占庭容错要求可以理解为在区块链内部可以存在拜占庭节点,而区块链对外不体现拜占庭行为。一般的,一些拜占庭容错算法中要求节点个数大于3f+1,f为拜占庭节点(即恶意节点)个数,例如实用拜占庭容错算法PBFT(Practical Byzantine Fault Tolerance)。
区块链领域中的交易可以指在区块链中执行并记录在区块链中的任务单元。交易中通常包括发送字段(From)、接收字段(To)和数据字段(Data)。其中,在交易为转账交易的情况中,From字段表示发起该交易(即发起对另一个账户的转账任务)的账户地址,To字段表示接收该交易(即接收转账)的账户地址,Data字段中包括转账金额。在交易调用区块链中的智能合约的情况中,From字段表示发起该交易的账户地址,To字段表示交易所调用的合约的账户地址,Data字段中包括调用合约中的函数名、及对该函数的传入参数等数据,以用于在交易执行时从区块链中获取该函数的代码并执行该函数的代码。
区块链中可提供智能合约的功能。区块链上的智能合约是在区块链***上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。在区块链中调用智能合约,是发起一笔指向智能合约地址的交易,使得区块链中每个节点分布式地运行智能合约代码。需要说明的是,除了可以由用户创建智能合约,也可以在创世块中由***设置智能合约。这类合约一般称为创世合约。一般的,创世合约中可以设置一些区块链的数据结构、参数、属性和方法。此外,具有***管理员权限的账户可以创建***级的合约,或者修改***级的合约(简称为***合约)。其中,所述***合约可用于在区块链中增加不同业务的数据的数据结构。
在部署合约的场景中,例如,Bob将一个包含创建智能合约信息(即部署合约)的交易发送到如图1所示的区块链中,该交易的data字段包括待创建的合约的代码(如字节码或者机器码),交易的to字段为空,以表示该交易用于部署合约。节点间通过共识机制达成一致后,确定合约的合约地址“0x6f8ae93…”,各个节点在状态数据库中添加与该智能合约的合约地址对应的合约账户,分配与该合约账户对应的状态存储,并将合约代码保存在该合约的状态存储中,从而合约创建成功。
在调用合约的场景中,例如,Bob将一个用于调用智能合约的交易发送到如图1所示的区块链中,该交易的from字段是交易发起方(即Bob)的账户的地址,to字段中的“0x6f8ae93…”代表了被调用的智能合约的地址,交易的data字段包括调用智能合约的方法和参数。在区块链中对该交易进行共识之后,区块链中的各个节点可分别执行该交易,从而分别执行该合约,基于该合约的执行更新状态数据库。
区块链技术区别于传统技术的去中心化特点之一,就是在各个节点上进行记账,或者称为分布式记账,而不是传统的集中式记账。区块链***要成为一个难以攻破的、公开的、不可篡改数据记录的去中心化诚实可信***,需要在尽可能短的时间内做到分布式数据记录的安全、明确及不可逆。不同类型的区块链网络中,为了在各个记录账本的节点中保持账本的一致,通常采用共识算法来保证,即前述提到的共识机制。
例如,区块链节点之间可以实现区块粒度的共识机制,比如在节点(例如某个独特的节点)产生一个区块后,如果产生的这个区块得到其它节点的认可,其它节点记录相同的区块。再例如,区块链节点之间可以实现交易粒度的共识机制,比如在节点(例如某个独特的节点)获取一笔区块链交易后,如果这笔区块链交易得到其他节点的认可,认可该区块链交易的各个节点可以分别将该区块链交易添加至自身维护的最新区块中,并且最终能够确保各个节点产生相同的最新区块。共识机制是区块链节点就区块信息(或称区块数据)达成全网一致共识的机制,可以保证最新区块被准确添加至区块链。
当前主流的共识机制包括:工作量证明(Proof of Work,POW)、股权证明(Proofof Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法等。其中,在各种共识算法中,通常在预设数目的节点对待共识的数据(即共识提议)达成一致之后,从而确定对该共识提议的共识成功。具体是,在PBFT算法中,对于N≥3f+1个共识节点,可容忍f个恶意节点,也就是说,当N个共识节点中2f+1个节点达成一致时,可确定共识成功。
图2为PBFT共识算法中的共识过程示意图。
如图2所示,根据PBFT共识算法,可将完整的共识过程划分为请求(Request)、预备(Pre-Prepare)、准备(Prepare)和提交(Commit)四个阶段。假设一区块链中包括节点n1-节点n4四个共识节点,其中,节点n1例如为主节点,节点n2-节点n4例如为从节点,根据PBFT算法,在节点n1-节点n4中可容忍f=1个恶意节点。
具体是,在请求阶段,区块链的用户可通过其用户设备向节点n1发送请求,该请求例如为区块链交易的形式。节点n1可以从一个或多个用户设备接收到多个交易,并将接收到的交易存储在交易队列中。在预备阶段,节点n1可以从交易队列中取出属于一个区块的多个交易,并针对该多个交易生成共识提议,将该共识提议及节点n1对该共识提议的签名广播给其他共识节点(即节点n2-节点n4),以使共识节点继续对该区块进行共识,该共识提议中例如可包括该多个交易的交易体和该多个交易的执行顺序等信息。
在准备阶段,各个从节点可对共识提议进行签名并发送给其他各个节点。假设节点n4为恶意节点,节点n1、节点n2和节点n3在分别接收到2f=2个其他共识节点的对共识提议的签名之后,可确定准备阶段完成,可进入提交阶段。例如,如图2中所示,节点n1在接收到节点n2和节点n3的签名之后,验证节点n2和节点n3的签名都是正确的对共识提议的签名,则确定准备阶段完成,节点n2在接收到节点n3的签名和预备阶段节点n1的签名并验证通过之后,确定准备阶段完成。
在提交阶段,各个共识节点对共识提议进行提交阶段的签名并发送给其他各个共识节点,各个共识节点在接收到2f=2个其他共识节点的提交阶段的签名之后,可确定提交阶段完成,共识成功。例如,节点n1在接收到节点n2和节点n3的提交阶段的签名并验证之后,确定提交阶段完成,从而,节点n1可根据执行该多个交易得到的执行结果更新世界状态,生成并存储包括该多个交易的区块(例如区块B1),并将多个交易的执行结果返回给用户设备。类似地,节点n2和节点n3在确定提交阶段完成之后,执行该多个交易,生成并存储区块B1,并根据多个交易的执行结果更新世界状态。
通过上述过程,实现了节点n1、节点n2和节点n3的存储一致性。也就是说,节点n1-节点n4在存在一个恶意节点的情况下仍可以实现对共识提议的共识成功,完成对区块的执行。
目前来说,存在一种依赖不确定性数据执行的不确定***易,该不确定性数据例如可以是分布式随机数。因此,在共识之前预执行不确定***易得到的预执行写集不能用于更新状态数据库。在相关技术中,需要对不确定性数据进行共识,得到各个节点一致的数据。并在共识之后由区块链的每个节点利用一致的数据对不确定***易正式执行,得到用于更新状态数据库的写集。但是,由于不确定***易所占数量较少,为了不确定***易而将所有交易重新执行的方式,使得区块的执行效率难以提升,也影响了区块链***的性能。本说明书实施例提供了一种在图1所示区块链中执行交易的方案,可有效提高区块链中区块的执行速度,从而提高区块链***的性能。
图3是根据一示例性实施例示出的一种区块链中执行交易的过程示意图。
如图3所示,可以将区块的执行流程分成预执行,共识,交易执行,状态更新及写块5个过程。针对每个过程,可以按照区块的顺序依次对各个区块各自的交易进行处理。可选地,可以通过不同进程完成对不同过程的流程。
具体来说,区块链的主节点获取区块N的多个交易之后,首先对区块N的各个交易进行预执行,从而得到各个交易各自对应的预执行读写集,该预执行读写集可以用于对区块N的多个交易进行分组。在预执行任一交易的过程中,可以判断该交易是否是预设类型的交易(即上述不确定***易),如果该交易是预设类型的交易,则可以对该交易进行标记,或者将该交易的标识记录下来。
在完成对区块N的各个交易进行的预执行之后,一方面,主节点可以对区块N进行共识的预备阶段(以下简称PP阶段),即生成针对区块N的共识提议,并向各个从节点广播该共识提议,该共识提议例如可以包括区块N的各个交易的哈希值,各个交易的预执行读写集以及区块N的各个交易的预执行顺序。另一方面,主节点还可以并行地继续获取区块N+1的多个交易,预执行区块N+1的多个交易,并对区块N+1进行共识的PP阶段。
各个从节点接收到该共识提议之后,和主节点对区块N进行共识的准备阶段(以下简称P阶段)和提交阶段(以下简称C阶段)(具体可参考图2的过程)。其间,如果区块N的多个交易中包括预设类型的交易,可以共识得到执行预设类型的交易所依赖的统一数据。在共识完成之后,主节点获取共识结果,并至少重新执行预设类型的交易。可以理解,如果区块N的多个交易中未包括预设类型的交易,则无需重新执行区块N中的交易。
在对区块N进行共识的过程中,主节点还可以并行地基于区块N的各个交易的预执行写集,更新状态数据库中的世界状态,并并行地对区块N进行写块。其中,如果区块N的多个交易中包括预设类型的交易,则可以先利用预设类型的交易之前的交易的预执行写集,更新状态数据库中的世界状态。等共识完成之后,并重新执行完成预设类型的交易之后,再利用重新执行预设类型的交易得到的执行写集,继续更新状态数据库中的世界状态。
需要说明的是,主节点完成对区块N+1的预执行之后,需要等待主节点完成对区块N的写块之后,才可以继续基于区块N+1的各个交易的预执行写集,更新状态数据库中的世界状态。
各个从节点在接收到主节点发送的共识提议之后,在对区块N共识的过程中,可以并行地基于主节点发送的预执行读写集以及预执行顺序对区块N的交易进行分组,并按照分组并行地执行区块N的各个交易。可选地,各个从节点还可以在执行交易的过程中,同时并行地基于执行写集更新状态数据库。例如,从节点每执行完区块N的一组交易,可以在执行下一组交易的过程中,并行地基于执行完的该组交易的执行写集更新状态数据库。各个从节点在基于区块N的各个交易的执行写集更新状态数据库的过程中,可以并行地对区块N进行写块。
需要说明的是,如果区块N的多个交易中包括预设类型的交易,可以共识得到执行预设类型的交易所依赖的统一数据。在完成对区块N的共识之后,各个从节点可以获取共识结果,并基于共识结果并行执行预设类型的交易。另外,从节点需要等待完成对区块N的写块之后,才可以继续根据区块N+1的各个交易的执行写集更新状态数据库。
本实施例中,在主节点对当前区块进行预执行完成之后,如果确定当前区块的多个交易中存在预设类型的交易,则在完成对当前区块的共识之后,重新执行预设类型的交易。从而有效提高了区块链中区块的执行速度,以及提高了区块链***的性能。
图4示出了本说明书实施例提供的区块链的主节点和从节点的结构图。
如图4所示,主节点中可以包括接入进程11、预执行进程12、缓存进程13、共识进程14、存储进程15、管理进程16、通信进程17和计算进程18,从节点中可以包括接入进程21、预执行进程22、缓存进程23、共识进程24、存储进程25、管理进程26、通信进程27和计算进程28。
其中,主节点例如可以通过接入进程11与客户端交互,接入进程11可以从客户端接收多个交易,并将多个交易传输给缓存进程13,由缓存进程13将接收到的交易放入交易队列中。另外,缓存进程13中还存储有区块链当前最新的世界状态的状态数据。预执行进程12每隔预设时段从缓存进程13的交易队列中获取一批交易,并对获取的交易进行预执行,得到各个交易的预执行读写集。任一交易的预执行读写集可以包括预执行读集和预执行写集,预执行读集具体可以为在预执行交易的过程中生成的读取的变量的键值对,预执行写集具体可以为在预执行交易的过程中生成的写入的变量的键值对。在预执行交易的过程中,可以从缓存进程13存储的最新状态数据中获取交易的读集中各个变量的状态值。每预执行完一个交易,可以将该交易的预执行读写集提交给缓存进程13进行存储,并利用预执行该交易得到的写集中各个变量的状态值更新缓存进程13中存储的状态数据。
需要说明的是,主节点可以设置多个预执行进程,多个预执行进程可以并行地预执行交易。如果由多个预执行进程并行地预执行交易,则每执行完一个交易,在更新缓存进程13中存储的状态数据之前,需要对预执行的交易的读集进行验证。例如,在预执行完成交易Tx1之后,可以验证交易Tx1的读集中各个变量在缓存进程13中存储的状态值与预执行之前的状态值相比,是否发生变化。如果未发生变化,可以直接利用预执行该交易得到的写集中各个变量的状态值更新缓存进程13中存储的状态数据。如果发生了变化,则需要利用交易Tx1的读集中各个变量在缓存进程13中新的状态值重新预执行交易Tx1。
另外,预执行进程12在预执行任一交易的过程中,如果确定该交易为预设类型的交易,则可以在将该交易的预执行读写集提交给对缓存进程13时,通知缓存进程13该交易为预设类型的交易,缓存进程13可以对该交易进行标记。
缓存进程13中不仅存储有各个交易,还存储有预执行各个交易得到的预执行读写集以及各个交易的预执行顺序。每隔一段时间,共识进程14可以从缓存进程13中获取一个区块对应的待共识数据,该待共识数据可以包括该区块的各个交易各自的哈希值/交易标识/交易体、各个交易各自的预执行读写集以及各个交易的预执行顺序。如果该区块中包括预设类型的交易,该待共识数据还可以包括预设类型的交易中涉及的不确定变量的信息。
共识进程14可以生成携带待共识数据的共识提议,并通过通信进程17将该共识提议广播给区块链中的其它从节点,其它从节点对该区块进行共识的过程中,可以通过通信进程17向共识进程14返回共识产生的信息。此外,共识进程14还可以将该区块的多个交易的交易体,预执行读写集以及预执行顺序发送给管理进程16。如果区块中包括预设类型的交易,共识进程14还可以将预设类型的交易的信息发送给管理进程16。在完成共识之后,共识进程14可以将共识结果也发送给管理进程16。
在一种实现方式中,管理进程16可以基于该区块的多个交易的预执行读写集对交易进行分组,得到分组信息。在另一种实现方式中,管理进程16还可以从其他从节点获取对交易的分组信息。可以理解,本实施例对管理进程获取分组信息的具体方式方面不限定。接着,管理进程16可以利用预执行该区块得到的写集中各个变量的状态值更新存储进程15中的状态数据库。并基于该区块的多个交易的交易体,预执行读写集以及分组信息等信息,生成该区块的区块数据,并将该区块数据存入存储进程15中的区块数据库。
其中,如果区块中包括预设类型的交易,在完成共识之后,管理进程16可以将预设类型的交易发送给计算进程18,并基于共识结果将预设类型的交易中涉及的不确定变量的统一取值发送给计算进程18。由计算进程18基于预设类型的交易中涉及的不确定变量的统一取值重新执行该预设类型的交易,可选地,计算进程18还可以重新执行该区块中该预设类型的交易之后的各个交易。一方面,计算进程18可以利用重新执行交易得到的写集更新存储进程15中的状态数据库。另一方面,计算进程18还可以向缓存进程13发送重新执行事件通知,该重新执行事件通知包括重新执行各个交易得到的执行写集。缓存进程13可以利用该执行写集重新更新存储的世界状态的状态数据。
其中,从节点例如可以通过接入进程21与客户端交互,接入进程21可以从客户端接收多个交易,并将多个交易传输给缓存进程23,由缓存进程23将接收到的交易放入交易队列中。预执行进程22每隔预设时段从缓存进程23的交易队列中获取一批交易,并对获取的交易进行验证,将验证通过的交易返回给缓存进程23。缓存进程23可以通过通信进程27将验证通过的交易广播给主节点和其它从节点,同时,缓存进程23也可以通过通信进程27接收来自其它节点的交易。
一方面,共识进程24可以通过通信进程27接收主节点发起的共识提议,并基于共识提议对区块进行共识。同时,共识进程24可以将共识提议包括的区块的多个交易各自的预执行读写集以及预执行顺序等信息发送给管理进程26。在共识的过程中,共识进程24可以通过通信进程27向主节点返回共识消息,以及通过通信进程27接收主节点发送的共识结果。共识成功之后,共识进程24可以将共识结果发送给管理进程26。
另一方面,管理进程26可以并行地基于区块的多个交易各自的预执行读写集以及预执行顺序,对区块的多个交易进行分组,得到多个交易组。然后,将多个交易组分配给计算进程28,计算进程28可以有多个,多个计算进程28可以在共识完成后并行地执行交易组。计算进程28在执行交易时,可以从存储进程25中获取交易的读集中各个变量的状态值。每执行完成一个交易组之后,计算进程28可以基于该交易组的执行结果对预执行的写集进行验证,如果验证通过,就基于该交易组的执行结果更新存储进程25中区块链的状态数据库。如果验证未通过,说明主节点作恶,计算进程28可以通知管理进程26,由管理进程26通过共识进程24向其他从节点发起换主请求,以更换主节点。
最后,管理进程26基于该区块的多个交易的交易体,预执行读写集,执行读写集以及分组信息等信息,生成该区块的区块数据,并将该区块数据存入存储进程25中的区块数据库中。
下文将参考图5所示的执行交易的方法流程图详细描述上述流程。在图5中示出的是主节点和任一从节点在对一个区块进行执行的过程。其中,主节点至少包括预执行进程e11,缓存进程e12,共识进程e13,管理进程e14,存储进程e15以及计算进程e16。从节点至少包括共识进程e21,管理进程e22,计算进程e23以及存储进程e24。
如图5所示,首先,在步骤501中,预执行进程e11预执行属于区块N的多个交易,该多个交易例如包括交易Tx1-交易Tx6,得到交易Tx1-交易Tx6各自对应的预执行读写集。在一种实施方式中,一个交易的预执行读写集中包括读集和写集,其中,读集包括预执行该交易时读取的变量的键值对(key-value),写集包括预执行该交易时写入的变量的键值对。在另一种实施方式中,该预执行读写集的读集中可包括预执行该交易时读取的变量的版本号,写集中可包括写入的变量的版本号,其中,在区块链的世界状态的状态数据中例如存储了变量的各个写入值及各个写入值对应的版本号,从而通过在读写集中包括变量的版本号即可以确定交易读取和写入的值。
在预执行进程e11预执行各个交易的过程中,可以判断预执行的该交易是否是预设类型的交易,该预设类型的交易例如是读集中包括预设变量的交易,该预设变量为采用随机数作为状态值的不确定变量。具体来说,可以通过如下方式确定预执行的交易是否是预设类型的交易:在预执行该交易的过程中,确定该交易调用智能合约,在调用该智能合约时,判断该智能合约是否调用预设接口。若调用预设接口,则确定该交易为预设类型的交易。其中,该预设接口例如可以是用于获取随机数的接口。如果区块N包括预设类型的交易,预执行进程e11可以随机获取一个随机数作为该预设类型的交易所涉及的预设变量的状态值,并预执行该预设类型的交易,得到该预设类型的交易的预执行读写集。
如果由一个预执行进程e11串行地预执行交易Tx1-交易Tx6,则每预执行完一个交易,若该交易不是预设类型的交易,预执行进程e11可以直接将该交易的预执行读写集传输给缓存进程e12,缓存进程e12利用该交易的预执行写集更新其存储的世界状态。若该交易是预设类型的交易,预执行进程e11可以将该交易的预执行读写集传输给缓存进程e12,并指示缓存进程e12对该交易进行标记。
如果由多个预执行进程e11并行地预执行交易Tx1-交易Tx6,则每预执行完一个交易,需要验证该交易的读集是否和其它并行预执行的交易存在读写冲突。例如,交易Tx2的预执行读集中包括变量A,预执行写集中包括变量B。预执行交易Tx2时,读取的变量A的值为Va,并基于Va预执行交易Tx2。完成对交易Tx2的预执行之后,检验缓存进程e12中变量A的值,如果变量A的值还是Va,则确定不存在读写冲突。如果变量A的值不再是Va,而变成了Vb,则可以基于Vb重新预执行交易Tx2。需要说明的是,除了可以通过变量的值验证读写冲突,也可以通过变量的版本号验证读写冲突。在不存在读写冲突的情况下,若该交易不是预设类型的交易,预执行进程e11可以直接将该交易的预执行读写集传输给缓存进程e12,缓存进程e12利用该交易的预执行写集更新其存储的世界状态。若该交易是预设类型的交易,预执行进程e11可以将该交易的预执行读写集传输给缓存进程e12,并指示缓存进程e12对该交易进行标记。
接着,在步骤503中,共识进程e13从缓存进程e12获取交易Tx1-交易Tx6各自对应的预执行读写集,生成针对区块N的共识提议,并向从节点广播该共识提议。该共识提议包括交易Tx1-交易Tx6各自对应的预执行读写集。可选地,该共识提议还可以包括预执行进程e11预执行交易Tx1-交易Tx6的顺序以及交易Tx1-交易Tx6的哈希值等信息。如果交易Tx1-交易Tx6中有预设类型的交易,该共识提议还可以包括预设类型的交易中所涉及的预设变量的信息。从节点接收到该共识提议之后,和主节点一起完成对区块N的共识。主节点的共识进程e13和从节点的共识进程e21获取共识结果。具体是,从节点可以向主节点返回共识消息,以及接收主节点发送的共识结果(在共识成功之后,从节点的共识进程e21可以将共识结果发送给管理进程e22)。其中,如果交易Tx1-交易Tx6中有预设类型的交易,则共识结果中可以包括预设类型的交易中所涉及的预设变量的统一取值。
例如,交易Tx3为预设类型的交易,交易Tx3包括变量C,变量C的取值为一个随机数,经过共识后,确定变量C的统一取值为k,则共识结果中可以包括变量C的统一取值k。后面从节点在执行交易Tx3时,统一采用k作为变量C的状态值。
然后,在步骤505中,管理进程e14从共识进程e13获取预执行交易Tx1-交易Tx6得到的预执行读写集中的预执行写集,在对区块N进行共识的过程中,管理进程e14可以并行地基于非预设类型的交易的预执行写集,对存储于存储进程e15中的状态数据库进行更新。具体是,管理进程e14利用交易Tx1-交易Tx2的预执行写集中变量的最新状态值更新状态数据库。例如,交易Tx1的预执行写集包括变量C,而交易Tx2-交易Tx6的预执行写集中均不涉及变量C,因此,可以直接利用交易Tx1的预执行写集中变量C的状态值更新状态数据库。又例如,交易Tx1和交易Tx2的预执行写集均包括变量D,而交易Tx2的预执行顺序在交易Tx1之后,因此,交易Tx2的预执行写集中变量D的状态值为变量D的最新状态值,可以利用交易Tx2的预执行写集中变量D的状态值更新状态数据库。由于交易Tx3为预设类型的交易,因此,不用交易Tx3-交易Tx6的预执行写集更新状态数据库。
在步骤507中,在完成对区块N的共识之后,管理进程e14将交易Tx3-交易Tx6发送给计算进程e16,并将交易Tx3包括的变量C的统一取值k发送给计算进程e16。计算进程e16基于变量C的取值k重新执行交易Tx3-交易Tx6,并基于重新执行的结果更新存储进程e15中的状态数据库。另外,计算进程e16还可以向缓存进程e12发送重新执行事件通知,该重新执行事件通知可以包括重新执行交易Tx3-交易Tx6得到的执行写集。缓存进程e12可以利用交易Tx3-交易Tx6的执行写集更新其存储的状态数据。
在步骤509中,在完成对存储进程e15中的状态数据库的更新之后,管理进程e14进行对区块N的写块操作。具体是,管理进程e14生成区块N的区块头和区块体,并将区块N的区块头和区块体存入存储进程e15中的区块数据库中。其中,区块体例如包括交易Tx1-交易Tx6各自的交易体、收据等数据。区块头可以包括状态根、收据根、交易根等数据。
在步骤511中,从节点的共识进程e21可以将接收到的共识提议包括的交易Tx1-交易Tx6的预执行读写集、预执行顺序及交易Tx3包括的变量C的统一取值k等信息发送给管理进程e22。在共识的过程中,管理进程e22并行地基于上述预执行读写集以及预执行顺序,对区块的交易Tx1-交易Tx6进行分组,得到多个交易组。使得不同交易组的交易不存在冲突的变量,同一交易组的交易顺序与预执行的顺序一致。然后,并行地执行各个交易组。例如,交易Tx1、交易Tx2、交易Tx4为交易组a,交易Tx3、交易Tx5、交易Tx6为交易组b。
然后,管理进程e22可以将多个交易组例如交易组a和交易组b分配给多个计算进程e23,由多个计算进程e23并行地同时执行交易组a和交易组b,按预执行的顺序串行地执行交易组a中的交易,以及按预执行的顺序串行地执行交易组b中的交易。
在步骤513中,计算进程e23每执行完成一个交易组,利用该交易组的写集更新存储于存储进程e24中的状态数据库,并将该交易组的执行结果发送给管理进程e22。例如,当交易组a执行完成之后,计算进程e23可以获取交易Tx1、交易Tx2、交易Tx4的执行写集中涉及的所有变量的最新状态值,并利用获取的这些变量的最新状态值更新状态数据库。最后,在步骤513中,从节点的计算进程e23完成对存储进程e24中的状态数据库的更新之后,管理进程e22进行对区块N的写块操作。写块操作的具体过程与主节点类似,在此不再赘述。
本说明书的上述实施例提供的在区块链中执行交易的方法,在主节点对当前区块进行预执行完成之后,如果确定当前区块的多个交易中存在预设类型的交易,则在完成对当前区块的共识之后,重新执行预设类型的交易。从而有效提高了区块链中区块的执行速度,以及提高了区块链***的性能。
应当注意,尽管在上述实施例中,以特定顺序描述了本说明书实施例的方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
与前述在区块链中执行交易的方法实施例相对应,本说明书还提供了在区块链中执行交易的装置的实施例。
如图6所示,图6是本说明书根据一示例性实施例示出的一种区块链中的主节点的框图,该区块链还包括从节点,该主节点可以包括:预执行进程601,共识进程602和计算进程603。
其中,预执行进程601,用于预执行属于第一区块的多个交易,并确定该多个交易中的第一交易为预设类型的交易。
共识进程602,用于在预执行多个交易之后,与从节点对第一区块进行共识。
计算进程603,用于在完成对第一区块的共识之后,重新执行第一交易。
在一些实施方式中,上述预设类型的交易为读集中包括预设变量的交易,该预设变量采用随机数作为状态值。
在另一些实施方式中,预执行进程601可以通过如下方式确定上述多个交易中的第一交易为预设类型的交易:在预执行第一交易的过程中,确定第一交易调用智能合约,在调用该智能合约时,判断是否调用预设接口,若调用预设接口,则确定第一交易为预设类型的交易。
在另一些实施方式中,共识进程602可以通过如下方式重新执行第一交易:获取共识结果,该共识结果中包括经过共识后的目标状态值,该目标状态值为第一交易的读集中上述预设变量的状态值,并基于目标状态值重新执行第一交易。
在另一些实施方式中,上述第一交易为第一区块的多个交易中首个被预执行的预设类型的交易。其中,在重新执行第一交易之后,计算进程602还重新执行多个交易中在第一交易之后被预执行的交易。
在另一些实施方式中,主节点还包括缓存进程(图中未示出),缓存进程存储有区块链的最新世界状态的状态数据。其中,在预执行进程601预执行多个交易之后,预执行进程601将预执行多个交易得到的各个交易的预执行读写集提交给缓存进程,缓存进程根据各个交易的预执行读写集中的预执行写集更新存储的世界状态的状态数据。
在另一些实施方式中,在计算进程603重新执行第一交易之后,计算进程603向缓存进程发送重新执行事件通知,该重新执行事件通知包括重新执行第一交易得到的执行写集,缓存进程利用执行写集重新更新存储的世界状态的状态数据。
在另一些实施方式中,预执行进程601被配置用于:从缓存进程读取多个交易的预执行读集,并利用读取的预执行读集预执行多个交易。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书一个或多个实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本说明书一个或多个实施例还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图2至图5任一实施例提供的在区块链中执行交易的方法。
本说明书一个或多个实施例还提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述图2至图5任一实施例提供的在区块链中执行交易的方法。
在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 (22)
1.一种在区块链中执行交易的方法,所述区块链包括主节点和从节点,所述方法由所述主节点执行,所述方法包括:
预执行属于第一区块的多个交易;
确定所述多个交易中的第一交易为预设类型的交易;
在预执行所述多个交易之后,与所述从节点对所述第一区块进行共识;
在完成对所述第一区块的共识之后,重新执行所述第一交易。
2.根据权利要求1所述的方法,其中,所述预设类型的交易为读集中包括预设变量的交易,所述预设变量采用随机数作为状态值。
3.根据权利要求2所述的方法,其中,所述确定所述多个交易中的第一交易为预设类型的交易,包括:
在预执行所述第一交易的过程中,确定所述第一交易调用智能合约;
在调用所述智能合约时,判断是否调用预设接口;
若调用所述预设接口,则确定所述第一交易为预设类型的交易。
4.根据权利要求2所述的方法,其中,所述重新执行所述第一交易,包括:
获取共识结果;所述共识结果中包括经过共识后的目标状态值;所述目标状态值为所述第一交易的读集中所述预设变量的状态值;
基于所述目标状态值重新执行所述第一交易。
5.根据权利要求1所述的方法,其中,在确定所述多个交易中的第一交易为预设类型的交易之后,所述方法还包括:对所述第一交易进行标记。
6.根据权利要求1所述的方法,其中,所述第一交易为所述第一区块的多个交易中首个被预执行的预设类型的交易;其中,在重新执行所述第一交易之后,所述方法还包括:
重新执行所述多个交易中在所述第一交易之后被预执行的交易。
7.根据权利要求1所述的方法,其中,所述主节点包括预执行进程,共识进程和计算进程;所述主节点通过所述预执行进程预执行所述多个交易,并确定所述多个交易中的第一交易为预设类型的交易;所述主节点通过所述共识进程对所述第一区块进行共识;所述主节点通过所述计算进程重新执行所述第一交易。
8.根据权利要求7所述的方法,其中,所述主节点还包括缓存进程,所述缓存进程存储有所述区块链的最新世界状态的状态数据;
其中,在所述预执行进程预执行所述多个交易之后,还包括:
所述预执行进程将预执行所述多个交易得到的各个交易的预执行读写集提交给所述缓存进程,所述缓存进程根据所述各个交易的预执行读写集中的预执行写集更新存储的世界状态的状态数据。
9.根据权利要求8所述的方法,在所述计算进程重新执行所述第一交易之后,还包括:
所述计算进程向所述缓存进程发送重新执行事件通知,所述重新执行事件通知包括重新执行所述第一交易得到的执行写集;
所述缓存进程利用所述执行写集重新更新存储的世界状态的状态数据。
10.根据权利要求8所述的方法,其中,所述预执行进程预执行所述多个交易,包括:
所述预执行进程从所述缓存进程读取所述多个交易的预执行读集,并利用读取的所述预执行读集预执行所述多个交易。
11.根据权利要求10所述的方法,其中,所述主节点还包括管理进程和存储进程;所述存储进程存储有所述区块链的状态数据库;所述方法还包括:
所述共识进程从所述缓存进程获取所述各个交易的预执行读写集;
所述管理进程从所述共识进程获取所述各个交易的预执行读写集中的预执行写集;
在对所述第一区块进行共识的过程中,所述管理进程并行地基于所述预执行写集,更新所述存储进程存储的所述区块链的状态数据库。
12.一种区块链中的主节点,所述区块链还包括从节点,所述主节点包括:
预执行进程,用于预执行属于第一区块的多个交易,并确定所述多个交易中的第一交易为预设类型的交易;
共识进程,用于在预执行所述多个交易之后,与所述从节点对所述第一区块进行共识;
计算进程,用于在完成对所述第一区块的共识之后,重新执行所述第一交易。
13.根据权利要求12所述的主节点,其中,所述预设类型的交易为读集中包括预设变量的交易,所述预设变量采用随机数作为状态值。
14.根据权利要求13所述的主节点,其中,所述预执行进程通过如下方式确定所述多个交易中的第一交易为预设类型的交易:
在预执行所述第一交易的过程中,确定所述第一交易调用智能合约;
在调用所述智能合约时,判断是否调用预设接口;
若调用所述预设接口,则确定所述第一交易为预设类型的交易。
15.根据权利要求13所述的主节点,所述计算进程通过如下方式重新执行所述第一交易:
获取共识结果;所述共识结果中包括经过共识后的目标状态值;所述目标状态值为所述第一交易的读集中所述预设变量的状态值;
基于所述目标状态值重新执行所述第一交易。
16.根据权利要求12所述的主节点,其中,所述第一交易为所述第一区块的多个交易中首个被预执行的预设类型的交易;其中,在重新执行所述第一交易之后,所述计算进程还重新执行所述多个交易中在所述第一交易之后被预执行的交易。
17.根据权利要求12所述的主节点,其中,所述主节点还包括缓存进程,所述缓存进程存储有所述区块链的最新世界状态的状态数据;
其中,在所述预执行进程预执行所述多个交易之后,所述预执行进程将预执行所述多个交易得到的各个交易的预执行读写集提交给所述缓存进程,所述缓存进程根据所述各个交易的预执行读写集中的预执行写集更新存储的世界状态的状态数据。
18.根据权利要求17所述的主节点,其中,在所述计算进程重新执行所述第一交易之后,所述计算进程向所述缓存进程发送重新执行事件通知,所述重新执行事件通知包括重新执行所述第一交易得到的执行写集;所述缓存进程利用所述执行写集重新更新存储的世界状态的状态数据。
19.根据权利要求17所述的主节点,其中,所述预执行进程被配置用于:从所述缓存进程读取所述多个交易的预执行读集,并利用读取的所述预执行读集预执行所述多个交易。
20.根据权利要求10所述的主节点,其中,所述主节点还包括管理进程和存储进程;所述存储进程存储有所述区块链的状态数据库;
所述共识进程,还用于从所述缓存进程获取所述各个交易的预执行读写集;
所述管理进程,用于从所述共识进程获取所述各个交易的预执行读写集中的预执行写集;并在对所述第一区块进行共识的过程中,并行地基于所述预执行写集,更新所述存储进程存储的所述区块链的状态数据库。
21.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令所述计算机执行权利要求1-11中任一项所述的方法。
22.一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-11中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210600442.4A CN114936092A (zh) | 2022-05-30 | 2022-05-30 | 在区块链中执行交易的方法及区块链的主节点 |
PCT/CN2022/135259 WO2023231335A1 (zh) | 2022-05-30 | 2022-11-30 | 在区块链中执行交易的方法及区块链的主节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210600442.4A CN114936092A (zh) | 2022-05-30 | 2022-05-30 | 在区块链中执行交易的方法及区块链的主节点 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114936092A true CN114936092A (zh) | 2022-08-23 |
Family
ID=82866867
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210600442.4A Pending CN114936092A (zh) | 2022-05-30 | 2022-05-30 | 在区块链中执行交易的方法及区块链的主节点 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114936092A (zh) |
WO (1) | WO2023231335A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023231335A1 (zh) * | 2022-05-30 | 2023-12-07 | 蚂蚁区块链科技(上海)有限公司 | 在区块链中执行交易的方法及区块链的主节点 |
WO2023231337A1 (zh) * | 2022-05-30 | 2023-12-07 | 蚂蚁区块链科技(上海)有限公司 | 在区块链中执行交易的方法、区块链的主节点和从节点 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102250810B1 (ko) * | 2018-03-23 | 2021-05-11 | 블록체인랩스 주식회사 | 트랜잭션 증명 방식의 합의 알고리즘이 적용된 블록체인 시스템 및 그 방법 |
CN113743942B (zh) * | 2021-11-04 | 2023-06-02 | 支付宝(杭州)信息技术有限公司 | 交易执行方法、区块链、主节点和主存储设备 |
CN113743940B (zh) * | 2021-11-04 | 2022-08-12 | 支付宝(杭州)信息技术有限公司 | 在区块链中执行交易的方法、区块链、主节点和从节点 |
CN113743941B (zh) * | 2021-11-04 | 2022-08-26 | 支付宝(杭州)信息技术有限公司 | 一种在区块链中执行交易的方法、区块链和主节点 |
CN114529417A (zh) * | 2022-02-25 | 2022-05-24 | 蚂蚁区块链科技(上海)有限公司 | 执行交易的方法、区块链、主节点和从节点 |
CN114936092A (zh) * | 2022-05-30 | 2022-08-23 | 蚂蚁区块链科技(上海)有限公司 | 在区块链中执行交易的方法及区块链的主节点 |
-
2022
- 2022-05-30 CN CN202210600442.4A patent/CN114936092A/zh active Pending
- 2022-11-30 WO PCT/CN2022/135259 patent/WO2023231335A1/zh unknown
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023231335A1 (zh) * | 2022-05-30 | 2023-12-07 | 蚂蚁区块链科技(上海)有限公司 | 在区块链中执行交易的方法及区块链的主节点 |
WO2023231337A1 (zh) * | 2022-05-30 | 2023-12-07 | 蚂蚁区块链科技(上海)有限公司 | 在区块链中执行交易的方法、区块链的主节点和从节点 |
Also Published As
Publication number | Publication date |
---|---|
WO2023231335A1 (zh) | 2023-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI719797B (zh) | 區塊鏈中智能合約的儲存、執行方法及裝置和電子設備 | |
CN114936092A (zh) | 在区块链中执行交易的方法及区块链的主节点 | |
CN113743950B (zh) | 在区块链***中执行交易的方法、节点和区块链*** | |
WO2023231337A1 (zh) | 在区块链中执行交易的方法、区块链的主节点和从节点 | |
CN114827165A (zh) | 对多个交易进行分组的方法和区块链节点 | |
CN114710507A (zh) | 一种共识方法和区块链节点 | |
CN114942847A (zh) | 执行交易的方法和区块链节点 | |
CN110992040A (zh) | 交易处理方法、装置及设备 | |
CN114936256A (zh) | 在区块链中执行交易的方法和区块链节点 | |
CN114547203A (zh) | 执行交易的方法、区块链、主节点和从节点 | |
CN114529417A (zh) | 执行交易的方法、区块链、主节点和从节点 | |
CN113744063B (zh) | 区块链中执行交易的方法及装置 | |
WO2021045829A1 (en) | Byzantine consensus without centralized ordering | |
CN113744062B (zh) | 在区块链中执行交易的方法、区块链节点和区块链 | |
WO2024001032A1 (zh) | 在区块链***中执行交易的方法、区块链***和节点 | |
CN114785800B (zh) | 跨链通信方法、装置、存储介质及计算设备 | |
CN113744061B (zh) | 在区块链***中执行交易的方法、区块链***、和从节点 | |
CN116366666A (zh) | 区块链***中的链状态更新方法和区块链节点 | |
CN115098483A (zh) | 一种预执行缓存数据清理方法和区块链节点 | |
CN115941262A (zh) | 区块链***中的交易执行方法和节点 | |
CN115086325A (zh) | 区块链节点分组方法和区块链节点 | |
CN114697344B (zh) | 区块链***中共识节点的确定方法、区块链***、节点、存储介质及计算设备 | |
CN115098595A (zh) | 区块链***中的节点分组方法和区块链节点 | |
CN115880071A (zh) | 处理数字资源的方法和区块链的节点 | |
CN116305311A (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 |