CN111882435A - 在区块链中执行交易的方法及装置 - Google Patents
在区块链中执行交易的方法及装置 Download PDFInfo
- Publication number
- CN111882435A CN111882435A CN202010754103.2A CN202010754103A CN111882435A CN 111882435 A CN111882435 A CN 111882435A CN 202010754103 A CN202010754103 A CN 202010754103A CN 111882435 A CN111882435 A CN 111882435A
- Authority
- CN
- China
- Prior art keywords
- transaction
- local
- hash
- variable
- 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.)
- Granted
Links
Images
Classifications
-
- 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
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or 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/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/382—Payment protocols; Details thereof insuring higher security of transaction
- G06Q20/3827—Use of message hashing
Abstract
本说明书实施例提供一种在区块链中执行交易的方法和装置。该方法包括在交易被共识之前的投机执行,和基于共识的正式执行。投机执行的过程包括,首先读取本地记录的第一交易;接着执行第一交易中的交易逻辑,在内存中记录执行结果所对应的变量操作请求;然后将该交易标记为已投机执行的交易。正式执行的过程包括,获取已共识且有待执行的第二交易;判断第二交易是否为已投机执行的交易,如果是,则获取对应的尚未提交的变量操作请求;然后根据变量操作请求,判断该第二交易的投机执行与基于共识的交易执行是否存在冲突;如果不存在冲突,直接提交变量操作请求所对应的变量操作。如此,提高交易的执行效率。
Description
本申请为2020年3月12日提交的申请号为202010170493.9,名为“在区块链中执行交易的方法及装置”的发明专利申请的分案申请。
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及在区块链中执行交易的方法及装置。
背景技术
区块链技术是利用点对点传输、共识机制、加密算法等计算机技术实现数据分布式存储的一种应用模式。在区块链网络中,数据的存储和记录通过交易的方式实现。早期的区块链网络中,仅支持转账形式的交易。而目前,越来越多的区块链平台支持智能合约,来执行更为丰富的交易。智能合约是一种可以自动执行的交易合约,它以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可篡改。同时,由区块链自带的共识算法构建出一套状态机系统,使得智能合约能够高效地运行。例如,以太坊提供了一种开源的区块链底层系统,通过提供诸多接口,允许开发人员在此基础上开发各种区块链应用,编写智能合约。
如此,区块链平台允许用户进行内容更加丰富的交易,从而提供更加丰富的功能。相应的,越来越多的数据存储、程序应用(例如分布式应用Dapp),通过区块链实现。相应地,在区块链的各个节点中提供有虚拟机,用于执行区块链中的智能合约,并通过共识机制,保证各个节点中的虚拟机具有相同的执行状态和执行结果。
由于包含了智能合约,而智能合约中可能涉及复杂的运算逻辑,这使得交易的执行变得更加复杂。交易的执行效率,成为区块链平台的主要性能指标。
因此,希望提供有效的方案,提高区块链中交易的执行效率,改进区块链平台的性能。
发明内容
本说明书一个或多个实施例描述了一种交易投机执行的机制,可以在正式执行已共识交易时,加快交易的执行速度,提升平台性能。
根据第一方面,提供了一种在区块链节点中投机执行交易的方法,所述方法包括:
读取本地记录的第一交易;
执行所述第一交易中的交易逻辑,在内存中记录执行结果所对应的变量操作请求;
将所述第一交易标记为已投机执行的交易。
在一个实施例中,读取本地记录的第一交易可以包括:从本地交易列表的第一位置读取所述第一交易,所述本地交易列表中记录有各个本地交易的内存地址;根据所述第一交易的交易哈希,确定所述第一交易在本地交易散列列表中的第一索引,在该第一索引对应的表项中,添加指向所述第一位置的指针。
进一步的,在一个例子中,所述本地交易列表为已校验交易列表,其中记录有各个已校验的本地交易的内存地址;所述本地交易散列列表为已校验交易散列列表。
更进一步的,上述方法可以通过第一线程执行,所述已校验交易列表由第二线程生成,所述第二线程用于对本地交易进行校验。
更具体的,对本地交易进行校验可以包括,校验本地交易的以下至少一项:交易签名,交易账号是否合法。
在一个实施例中,前述确定第一交易在本地交易散列列表中的第一索引,可以包括:通过对所述第一交易的交易内容进行哈希运算,得到所述第一交易的交易哈希;通过对所述交易哈希进行哈希运算,得到第一哈希值,作为所述第一索引的索引值。
根据一种实施方式,在内存中记录执行结果所对应的变量操作请求可以包括:在内存中创建第一交易操作记录,其中
包括读操作集合和写操作集合;在所述第一交易操作记录中记录所述变量操作请求,具体包括,将所述变量操作请求中包括的变量读操作请求,记录在所述读操作集合中,将所述变量操作请求中包括的变量写操作请求,记录在所述写操作集合中。
根据一个实施例,所述第一交易操作记录还包括投机执行状态;将所述第一交易标记为已投机执行的交易,包括:在所述第一交易操作记录中将所述投机执行状态标记为完成投机执行。
根据一种实施方式,还可以将所述变量操作请求所基于的区块编号,也记录在所述第一交易操作记录中。
根据第二方面,提高了一种在区块链中执行交易的方法,该方法通过区块链网络中任意节点执行,包括:
从已共识交易列表中获取当前有待执行的第二交易;
判断所述第二交易是否为已投机执行的交易,其中,已投机执行的交易在内存中记录有对应于执行结果的尚未提交的变量操作请求;
如果所述第二交易为已投机执行的交易,获取该第二交易对应的尚未提交的变量操作请求;
根据所述变量操作请求,判断该第二交易的投机执行与基于共识的交易执行是否存在冲突;
在不存在冲突的情况下,提交所述变量操作请求所对应的变量操作。
在一个实施例中,判断所述第二交易是否为已投机执行的交易可以包括:基于所述第二交易的交易内容对应的第二交易哈希,判断所述第二交易是否为本地交易;如果第二交易是本地交易,判断第二交易的状态是否为完成投机执行;如果第二交易的状态为完成投机执行,则确定所述第二交易为已投机执行的交易;如果第二交易的状态不是完成投机执行,则确定所述第二交易不是已投机执行的交易,并将第二交易标注为执行中。
更具体的,在一个实施例中,判断所述第二交易是否为本地交易可以包括:对所述第二交易的交易内容进行哈希运算,得到所述第二交易哈希;对所述第二交易哈希进行哈希运算得到第二哈希值,以所述第二哈希值为第二索引,检索本地交易散列列表;如果所述本地交易散列列表中所述第二索引对应的表项中不存在有效指针,则确定所述第二交易不是本地交易,进而确定所述第二交易不是已投机执行的交易。
进一步的,在一个实施例中,判断所述第二交易是否为本地交易还包括:如果所述本地交易散列列表中所述第二索引对应的表项中存在第二指针,该第二指针指向本地交易列表中的第二位置,则从所述本地交易列表的所述第二位置读取第二内存地址;根据所述第二内存地址,获取其中存储的交易内容,并计算该交易内容对应的第三交易哈希;如果所述第二交易哈希不等于所述第三交易哈希,则确定所述第二交易不是本地交易,进而不是已投机执行的交易;如果所述第二交易哈希等于所述第三交易哈希,则确定所述第二交易是本地交易。
在一个实施例中,所述本地交易列表为已校验交易列表,其中记录有各个已校验的本地交易的内存地址;所述本地交易散列列表为已校验交易散列列表。
根据一种实施方式,判断第二交易的状态是否为完成投机执行可以包括:在第二交易对应的第二交易操作记录查询所述第二交易是否被标记为完成投机执行。
在一个实施例中,获取该第二交易对应的尚未提交的变量操作请求可以包括:从所述第二交易操作记录中获取该第二交易对应的变量操作请求。
根据一种实施方式,变量操作请求包括,针对第一变量的第一读操作请求;判断该第二交易的投机执行与基于共识的交易执行是否存在冲突可以包括:基于所述第一读操作请求,判断该第二交易的投机执行是否与已提交的交易存在第一冲突;如果不存在所述第一冲突,则判断该第二交易的投机执行是否与正在执行中的其他交易存在第二冲突。
进一步的,在一个实施例中,第一冲突的判断可以包括:查询已修改变量表,所述已修改变量表中记录有已提交交易针对各个变量的修改记录;如果所述已修改变量表中包含对所述第一变量的修改记录,则确定存在所述第一冲突。
或者,在另一实施例中,所述第一读操作请求基于第一编号的区块而发出;第一冲突的判断可以包括:查询已修改变量表,所述已修改变量表中记录有已提交交易针对各个变量的修改记录,以及修改记录对应的区块编号;如果从所述已修改变量表中查询到针对所述第一变量的第一修改记录,且该第一修改记录所对应的第二编号大于所述第一编号,该确定存在所述第一冲突。
在一个实施例中,第二冲突的判断可以包括:获取执行环境记录表中的写操作集合,并遍历所述写操作集合中的各个写操作请求;如果所述第一读操作请求与所述写操作集合中第一写操作请求冲突,并且该第一写操作请求对应的交易在所述已共识交易列表中排在所述第二交易之前,则确定存在所述第二冲突。
在一种实施方式中,所述方法还包括:如果第二交易不是已投机执行的交易,则执行所述第二交易,并提交执行结果。
根据一种实施方式,所述方法还包括:如果第二交易的投机执行与基于共识的交易执行存在冲突,则丢弃所述变量操作请求,重新执行所述第二交易,并提交重新执行的结果。
根据第三方面,提供了一种在区块链节点中投机执行交易的装置,所述装置法包括:
读取单元,配置为读取本地记录的第一交易;
记录单元,配置为执行所述第一交易中的交易逻辑,在内存中记录执行结果所对应的变量操作请求;
标记单元,配置为将所述第一交易标记为已投机执行的交易。
根据第四方面,提供了一种在区块链中执行交易的装置,该装置部署在区块链网络中任意节点中,该装置包括:
交易获取单元,配置为从已共识交易列表中获取当前有待执行的第二交易;
投机判断单元,配置为判断所述第二交易是否为已投机执行的交易,其中,已投机执行的交易在内存中记录有对应于执行结果的尚未提交的变量操作请求;
变量操作获取单元,配置为,如果所述第二交易为已投机执行的交易,获取该第二交易对应的尚未提交的变量操作请求;
冲突判断单元,配置为根据所述变量操作请求,判断该第二交易的投机执行与基于共识的交易执行是否存在冲突;
变量操作提交单元,配置为,在不存在冲突的情况下,提交所述变量操作请求所对应的变量操作。
根据第五方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面和第二方面的方法。
根据第六方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面和第二方面的方法。
根据本说明书一个实施例提供的方法和装置,提出对交易进行“投机”执行的概念。投机执行可以理解为,对尚未达成共识的交易进行预执行或前瞻执行,产生执行结果,但是并不真正提交这些执行结果。投机执行的过程与共识的过程可以并行进行。在获取到共识结果从而对交易进行正式执行时,判断投机执行的执行结果是否有效可用,如果可用,则直接提交这样的执行结果即可,而不必重新执行交易。如此,可以很好地利用等待共识的时间进行交易的投机执行;在交易之间冲突较少,投机执行结果大多可用的情况下,这样的方式可以极大地提升交易的执行效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出根据一个实施例的交易传播、入块和执行的示意图;
图2示出记账节点对交易进行处理的过程;
图3示出根据一个实施例的包含投机执行的交易执行框架的示意图;
图4示出根据一个实施例的对交易进行投机执行的方法流程图;
图5示出根据一个实施例的本地交易列表和本地交易散列列表的示意图;
图6示出根据一个实施例的对已共识交易进行正式执行的方法流程图;
图7示出在一个实施例中判断第二交易是否为本地交易的流程;
图8示出根据一个实施例的在节点中投机执行交易的装置的示意性框图;
图9示出根据一个实施例的交易执行装置的示意性框图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
图1示出根据一个实施例的交易传播、入块和执行的示意图。首先,区块链网络中包含若干节点,各个节点之间可以进行通信。某些节点可以作为平台,与若干用户终端连接,用户终端于是可以通过平台节点接入到区块链网络中。区块链网络的节点中,至少部分节点是有记账能力的节点。记账节点可以将收集到的交易打包成预定的区块形式,形成新的区块,并通过共识机制将新形成的区块链接到已有区块上,形成区块链。
假定网络中某个记账节点Bob获取到一笔交易Tx。如果该节点Bob是平台节点,该交易Tx可以是连接到该平台的用户终端发出的交易。或者,该笔交易Tx也可以是另一节点Alice转发过来的交易。并且,该交易Tx可以是普通转账交易,创建智能合约的交易,调用智能合约的交易。
记账节点Bob会在本地维护一个交易池,将接收到的交易Tx放入交易池中。当交易池中的交易足够多时,节点Bob就从交易池中提取一部分交易,将其打包成块。一般地,在将交易放入交易池时,或者从交易池中提取交易进行打包时,节点会对交易进行校验,以验证其合法性。在Bob打包一部分交易后,它会在区块链网络中广播自己打包的交易,以期达成共识。同时,区块链网络中的其他记账节点也会广播自己打包的交易,发起共识。尽管理论上来说,通过区块链网络的P2P传播机制,每个交易都会传播给每个节点,但是由于网络的实际传输延迟等原因,每个记账节点处交易池中的交易是不同的,因此其各自打包的区块一般来说也是不同的。最终,通过区块链网络中设置的共识机制,各个记账节点就新产生的区块达成共识。于是,每个记账节点都会执行达成共识的区块中的交易,以保持整个网络中各个节点处记录的数据内容的一致性。
图2示出记账节点对交易进行处理的过程。如图2所示,简单来说,记账节点首先对本地交易池中的交易进行校验,打包成块,然后发起共识,等待共识结果,在获取到共识结果后,执行共识区块中的交易。可以看到,这个过程中,各个步骤是依次串行执行的。
为了进一步提高交易的执行效率,根据本说明书中的至少一个实施例,提出对交易进行“投机”执行的概念。投机执行可以理解为,对尚未达成共识的交易进行预执行或前瞻执行,产生执行结果,但是并不真正提交这些执行结果。投机执行的过程与共识的过程可以并行进行。在获取到共识结果从而对交易进行正式执行时,判断投机执行的执行结果是否有效可用,如果可用,则直接提交这样的执行结果即可,而不必重新执行交易。如此,可以很好地利用等待共识的时间进行交易的投机执行;在交易之间冲突较少,投机执行结果大多可用的情况下,这样的方式可以极大地提升交易的执行效率。
图3示出根据一个实施例的包含投机执行的交易执行框架的示意图。如图所示,在一个实施例中,该执行框架包含前置校验线程,投机执行线程和正式执行线程。前置校验线程用于对交易进行初步校验,过滤掉一些不合法的交易。经过校验的交易可以写入已校验交易列表中。投机执行线程用于对经过前置校验的交易进行投机执行。投机执行线程与前置校验线程通过上述已校验交易列表通信。具体地,投机执行线程从该已校验交易列表中读取交易,进行投机执行,并将投机执行结果记录在交易操作记录中。
正式执行线程用于对已共识的交易进行正式执行。该正式执行线程与前置校验线程通过已校验交易散列列表进行通信,与投机执行线程通过所述交易操作记录进行通信。具体地,正式执行线程通过上述已校验交易散列列表和交易操作记录,来判定有待正式执行的交易是否已投机执行过,以及其执行状态和执行结果。
以上的已校验交易列表,已校验交易散列列表和交易上下文的具体结构,在后续结合交易执行的步骤流程进行详细描述。
需要理解,尽管在图3中,前置校验线程、投机执行线程和正式执行线程均示意性示出为一条线程,然而实际上,其中的每一个都可以通过若干CPU线程来实现。并且,这些线程之间具有优先级的差异。投机执行线程具有最低优先级,正式执行线程具有相对较高优先级。在节点的CPU硬件资源有限的情况下,在正式执行线程开始工作时,投机执行线程被挂起或停止。在节点的CPU硬件资源可以支持的情况下,投机执行线程可以与正式执行线程并行执行。
下面分别描述投机执行和正式执行过程中的具体实施步骤。
图4示出根据一个实施例的对交易进行投机执行的方法流程图。该方法可以通过区块链网络中的节点执行,该节点可以体现为任何具有计算、处理能力的设备、平台或设备集群。如图4所示,投机执行交易的过程可以包括以下步骤:步骤41,读取本地记录的第一交易;步骤42,执行第一交易中的交易逻辑,在内存中记录执行结果所对应的变量操作请求;步骤43,将该第一交易标记为已投机执行的交易。下面分别描述以上各个步骤的具体执行过程。
首先,在步骤41,读取本地记录的第一交易。该第一交易可以是本地交易池中的任一交易,包括普通转账交易,创建智能合约的交易,调用智能合约的交易,在此不做限定。
在一个实施例中,使用本地交易列表来记录本地交易。例如,每当产生或接收到一条交易,将其放入交易池时,就在本地交易列表中添加该交易的信息。此时可以假设,在交易传播的其他环节已经对交易进行校验。
图5示出根据一个实施例的本地交易列表和本地交易散列列表的示意图。随着节点不断获取到本地交易,这些本地交易的信息被依次不断添加到本地交易列表中。本地交易列表包含多个表项,每个表项对应一条交易。在一个例子中,本地交易列表的表项中可以记录交易的交易内容。然而,更典型的,如图5所示,本地交易列表的表项中记录本地交易的内存地址作为指针(txp),通过该内存地址可以读取到交易的交易内容。
结合图5的本地交易列表,在以上的步骤41中,可以依次从本地交易列表中读取交易,以进行投机执行。此时,可以设置一个位置指针,记录在本地交易列表中的读取位置。假定当前从本地交易列表的第一位置读取到第一交易。例如,在图5中,假定当前读取到txp2指向的交易为第一交易,那么相应的,txp2存储在本地交易列表的例如第3个表项中,那么第一位置即为3。
为了便于后续正式执行时查找到同样的交易,还建立如图5右侧所示的本地交易散列列表。该散列列表包含多个表项,一个表项对应一条交易,表项i的索引基于对应的本地交易i的交易标识而确定,并且该表项i中包含一个指针,该指针指示该本地交易i在上述本地交易列表中的位置。
结合以上读取的第一交易进行描述。具体的,对于位于本地交易列表的第一位置的第一交易,首先根据交易内容确定其交易标识。在一个具体例子中,通过交易哈希来标识各个交易,也就是说,第一交易的交易标识即为其交易内容的哈希值。具体的,可以根据第一位置记录的内存地址获取到第一交易的交易内容,对交易内容进行哈希运算得到对应的交易哈希,作为交易标识。在其他例子中,也可以通过其他算法,将根据交易内容唯一确定出的信息作为交易标识。然后根据该第一交易的交易标识,确定该第一交易在本地交易散列列表中的索引,称为第一索引。在该第一索引对应的表项中,添加指向第一位置的指针。
更为具体的,在一个例子中,根据第一交易的交易标识确定上述第一索引可以是,将该交易标识作为对应的索引。然而,在更为优选的实施例中,对交易标识再次进行哈希运算,得到一个哈希值,将该哈希值作为索引。
例如,假定第一交易为txp2对应的交易。对该交易的交易内容进行哈希,得到交易哈希Hash1(作为标识),再对交易哈希Hash1进行哈希运算后,得到一个哈希值Hash2(作为散列表索引)。假定得到的哈希值Hash2为4,于是在本地交易散列列表的第4项表项中,添加一个指针3,以指示该交易位于本地交易列表中的第3个表项中。
以上描述了在从本地交易列表中读取本地交易以进行投机执行时,在本地交易散列列表中填充对应的表项。在另一实施例中,也可以在构建本地交易列表的同时,一并填充和构建本地交易散列列表。例如,每当将一条新的本地交易添加到本地交易列表,就在本地交易散列列表中添加对应于该条新的本地交易的位置指针。
在以上实施例中,通过本地交易列表和本地交易散列列表记录各个本地交易。在另一实施例中,还对本地交易进行校验,或称为前置校验,在校验通过后,才将其添加到列表中。此时,本地交易列表可以称为已校验交易列表,其中记录已校验的交易信息。相应的,本地交易散列列表可以称为已校验散列列表。已校验交易列表和已校验交易散列列表的结构和构建方式都与图5所示的本地交易列表和本地交易散列列表相同,只是加入表之前增加了校验的步骤。
上述校验的步骤可以通过如图3所示的前置校验线程执行,因此,已校验交易列表和已校验交易散列列表可以由该前置校验线程生成。具体的,前置校验的内容可以包括,校验本地交易的交易签名是否正确,交易账号是否合法,(以太坊中的)gas价格是否足够,等等。
如此,通过上述的本地交易列表或已校验交易列表记录了本地交易。于是,在步骤41中,可以从上述本地交易列表,或已校验交易列表中依次读取交易,来进行投机执行。
进而,在接下来的步骤42,执行以上读取的第一交易中的交易逻辑,在内存中记录执行结果所对应的变量操作请求。
具体而言,当第一交易为普通转账交易时,其交易逻辑可以理解为确定出对相关账户金额的加减操作;当第一交易为涉及智能合约的交易时,其交易逻辑则为合约代码中的执行逻辑。不管是转账交易还是涉及智能合约的交易,最终的执行结果都会包含对变量的读/写操作请求,上述变量可以是表征账户余额的变量,也可以是智能合约中定义的变量。
与常规正式执行不同的是,在进行投机执行时,仅仅对变量操作请求进行记录,而并不真正执行变量读写操作,也就是并不真正提交交易的执行结果。
在一个实施例中,在内存中创建交易操作记录,用于记录投机执行的执行结果对应的变量操作请求。
更具体而言,在一个实施例中,交易操作记录可以包括,读操作集合(ReadSet),写操作集合(WriteSet)。相应的,在交易操作记录中记录变量操作请求时,可以将变量操作请求中包括的变量读操作请求,记录在读操作集合中,将其中的变量写操作请求,记录在写操作集合中。
在一个实施例中,在交易操作记录中对操作请求进行记录时,还记录变量操作请求所基于的区块编号。例如,假定区块链网络中已经共识了n个区块,当前是针对即将形成的第n+1个区块进行投机执行,那么就针对变量操作请求记录区块编号n+1。
在执行完第一交易的交易逻辑并记录执行结果对应的变量操作请求后,就可以认为,该第一交易已经完成了投机执行。于是,接下来在步骤43,将该第一交易标记为已投机执行的交易。在一个实施例中,上述交易操作记录中包括投机执行状态字段;在这样的情况下,可以在第一交易对应的交易操作记录中将投机执行状态标注为,已完成投机执行。在其他例子中,也可以在其他表单中记录交易的执行状态。例如,创建一个单独的表,一旦交易完成投机执行,就将其添加到该表中。
如此,通过图4所示的流程,不断读取本地交易,进行投机执行,并记录投机执行的状态和结果。投机执行的状态和结果,可以用于在正式执行已共识的交易时,加快执行速度,提高效率。
图6示出根据一个实施例的对已共识交易进行正式执行的方法流程图。该方法可以通过区块链网络中的节点执行,该节点可以体现为任何具有计算、处理能力的设备、平台或设备集群。如图6所示,执行交易的过程至少包括以下步骤:步骤61,从已共识交易列表中获取当前有待执行的第二交易;步骤62,判断所述第二交易是否为已投机执行的交易,其中,已投机执行的交易在内存中记录有对应于执行结果的尚未提交的变量操作请求;步骤63,如果第二交易为已投机执行的交易,获取该第二交易对应的尚未提交的变量操作请求;步骤64,根据变量操作请求,判断该第二交易的投机执行与基于共识的交易执行是否存在冲突;步骤65,在不存在冲突的情况下,提交上述变量操作请求所对应的变量操作。下面分别描述以上各个步骤的具体执行过程。
首先,在步骤61,从已共识交易列表中获取当前有待执行的第二交易。可以理解,通过区块链网络预先设置的共识算法,节点之间会就接下来要上链的区块达成共识,该共识的区块被广播到区块链网络的每个节点。该共识的区块中会包含已共识交易列表,其中列出已共识的交易。各个节点接收到上述共识的区块后,都需要按照已共识交易列表,依次执行其中的交易。相应的,在步骤61,依次从已共识交易列表中读取交易来进行执行。简单清楚起见,将当前读取的有待执行的已共识交易称为第二交易。
接着,在步骤62,判断该第二交易是否为已投机执行的交易。如果不是,则跳转到步骤66,按照常规方式执行该第二交易;如果是,则进行后续步骤的判断。
在一个实施例中,为了判断第二交易是否为已投机执行的交易,首先在步骤621,判断本地是否接收过第二交易。下文中将本地接收过的交易称为本地交易。如果第二交易不是节点的本地交易,则必然没有投机执行过,跳转到步骤66;如果是本地交易,则在步骤622进一步判断,第二交易的状态是否为完成投机执行。
需要理解,一般而言,节点在获取到共识区块中的已共识交易列表后,会将其存储在内存中。然而,用于存储本地交易池中的交易的内存区段,与用于存储已共识交易列表的内存区段,是两段相互独立而不同的内存区段。也就是说,即使是同一笔交易,它在已共识交易列表中和本地交易列表中,具有不同的地址指针。因此,无法通过直接比对内存地址来确定共识交易是否为本地交易。而同样的交易必然具有同样的交易哈希,因此,在一个实施例中,利用本地交易散列列表作为中间媒介,尝试将共识交易映射到本地交易列表中,以此判断共识交易是否为本地交易。这也正是图5中构建本地交易散列列表的意义所在。
具体的,图7示出在一个实施例中判断第二交易是否为本地交易的流程,也就是上述步骤621的执行过程。
如图7所示,首先在步骤701,对第二交易的交易内容进行哈希运算,得到第二交易哈希。此处,第二交易哈希起到第二交易的标识的作用。应理解,在其他例子中,也可以通过其他算法基于交易内容得到其他形式的标识。标识的确定方式与前述构建本地交易散列表时的方式相一致。简单清楚起见,在以下说明中,以第二交易哈希作为具体例子进行说明。
然后在步骤702,根据第二交易哈希,确定该交易在本地交易散列列表中的第二索引,根据第二索引检索本地交易散列列表。与图5构建本地交易散列列表时的说明相对应的,在一个例子中,直接将第二交易哈希作为第二索引。然而,更为优选的,对第二交易哈希再次进行哈希运算,得到第二哈希值,将该第二哈希值作为第二索引,检索本地交易散列列表。
接着,在步骤703,判断第二索引对应的表项中是否包含有效指针。如果不包含,则跳转到步骤708,确定第二交易不是本地交易。
如果包含有效指针,在步骤704,根据该有效指针得到本地交易列表中的第二位置,并从本地交易列表的所述第二位置读取第二内存地址。例如,假定在步骤702中得到的第二索引为13,那么就查找本地交易散列列表的第13个表项。参考图5,例如第13个表项中记录有有效指针2,该指针即指向本地交易列表中第2表项。于是,从本地交易列表的第2个表项中,读取第二内存地址txp1。
接着,在步骤705,根据上述第二内存地址,获取其中存储的交易内容,并计算该交易内容对应的交易哈希,称为第三交易哈希。进一步地,在步骤706,判断第二交易哈希和第三交易哈希是否匹配。如果匹配,则在步骤707,确定第二交易是本地交易;否则,在步骤708,确定第二交易不是本地交易。其中,根据第二交易的交易哈希可以确定出第二内存地址,但是其中存储的交易的交易哈希与第二交易的交易哈希不匹配的情况,可以是由于两次哈希确定索引时可能的哈希碰撞造成的。
如此,通过图7所示的方式,判断第二交易是否为本地交易。在其他实施例中,还可以采取其他方式对此进行判断,例如,使用与之类似的前述已校验交易列表和已校验交易散列列表,通过同样的过程进行判断。或者,在其他例子中,逐条读取存储本地交易的内存区段中的交易,计算其哈希,进行哈希比对。
回到图6,如果判断出第二交易是本地交易,那么接着在步骤622,判断第二交易的状态是否为完成投机执行。该步骤的执行方式与图4中步骤43的执行方式相对应。例如,在一个实施例中,在交易操作记录中对交易的执行状态进行标注。于是,相应的,在步骤622中,在第二交易对应的交易操作记录中查询第二交易是否被标记为完成投机执行。在其他实施例中,通过其他表单,例如一个单独的状态表,来记录交易的执行状态。那么相应地,该步骤中,就在该单独的状态表中查询第二交易是否被标记为完成投机执行。
如果通过查询,发现第二交易的状态不是完成投机执行,那就意味着,该第二交易虽然是本地交易,但是还没有开始进行投机执行,或者已开始投机执行但是尚未执行完毕。在这样的情况下,在步骤623,将该第二交易的执行状态修改为执行中,然后跳转至步骤66,进行常规执行。步骤623的状态标记,是为了避免后续投机执行线程继续对该交易进行不必要的投机执行。
如果通过查询,发现第二交易的状态为完成投机执行,至此可以确定第二交易为已投机执行的交易,于是,按照图6的流程图,继续执行步骤63。
在步骤63,获取第二交易对应的尚未提交的变量操作请求。具体的,可以是从上述交易操作记录中获取第二交易对应的变量操作请求。更具体的,可以从读操作集合中读取第二交易对应的读操作请求,从写操作集合中读取第二交易对应的写操作请求。
需要理解,在获取到上述变量操作请求后,需要将写操作集合中的写操作请求向冲突检测模块声明,也就是将写操作请求添加到执行环境记录表中。冲突检测模块和执行环境记录表在后续结合第二冲突的检测进行详细描述。
然后,在步骤64,根据变量操作请求,判断该第二交易的投机执行与基于共识的交易执行是否存在冲突。更具体的,该冲突判断可以包括,在步骤641,判断该第二交易的投机执行是否与已提交的交易存在冲突,这样的冲突称为第一冲突;以及在步骤642,判断该第二交易的投机执行是否与正在执行中的其他交易存在冲突,这样的冲突称为第二冲突。
冲突判断主要基于第二交易中的读操作请求进行。假定第二交易中包括针对第一变量的第一读操作请求。那么步骤641中对第一冲突的判断,可以通过在已修改变量表中查询第一变量的修改记录来进行,其中已修改变量表中包括,已提交交易针对各个变量的修改记录。
具体地,在一个实施例中,可以在上述已修改变量表中查询上述第一变量;如果已修改变量表中包含对第一变量的修改记录,则说明,在第二交易投机执行时请求读取该第一变量之后,有正式提交的交易修改了该第一变量,因此,可以确定投机执行中对该第一变量的读取是无效的,也就是说,投机执行与已提交交易存在冲突。
需要理解,已修改变量表在对变量进行记录时,往往采取变量哈希的形式。为了避免哈希碰撞带来的误判,在一个实施例中,已修改变量表中还记录,各条修改记录对应的区块编号。
在这样的情况下,还从交易上下文中获取第二交易投机执行时基于的区块编号,称为第一编号。相应的,步骤641的判断具体可以包括,查询上述已修改变量表,如果从中查询到针对第一变量的第一修改记录,且该第一修改记录所对应区块的第二编号大于所述第一编号,该确定存在第一冲突。
例如,假定在本地投机执行第二交易时,正在形成第10个区块,那么第二交易基于第10块而执行,第一编号为10。然而,在共识结果中,该第二交易被确定为在第11块中正式执行。如果第11块的执行中,有其他交易修改了第一变量,于是在已修改变量表中就会包含对第一变量的修改记录,且对应的第二编号为11。由于第二编号大于第一编号,意味着,投机执行之后有交易已修改了第一变量,因此投机执行时的读操作请求是无效的。
如果确定存在第一冲突,那么在步骤643,丢弃第二交易的全部变量操作请求,然后跳转至步骤66,改为常规执行。
如果不存在第一冲突,那么接着在步骤642,判断是否存在第二冲突。
需要理解,为了提高交易执行效率,已经存在一些交易并行执行方案。在交易并行执行中,交易之间的冲突检测是必不可少的。第二冲突的检测,与交易并行执行时的冲突检测是类似的,可以采用各种冲突检测模块来实现。
例如,在一个实施例中,在步骤642,可以获取执行环境记录表中的写操作集合(WriteSet),其中执行环境记录表用于记录正在执行中的所有交易的变量操作请求。然后,遍历(或称为播放)该写操作集合中的各个写操作请求;如果第二交易中的第一读操作请求与所述写操作集合中某个写操作请求冲突,并且该某个写操作请求对应的交易在已共识交易列表中排在第二交易之前,则意味着,第二交易所请求读取的第一变量,已经被排在第二交易之前的正在执行中的其他交易所修改,因此确定存在所述第二冲突。
注意在步骤64之前,已经将第二交易本身的写操作请求也添加到了执行环境记录表中,以便检测其他交易的读操作请求是否与第二交易的写操作请求存在第二冲突。
如果存在第二冲突,则类似的在步骤643,丢弃第二交易的全部变量操作请求,然后跳转至步骤66,常规执行该第二交易。
如果不存在第二冲突,则意味着,第二交易的投机执行与基于共识的交易执行不存在冲突,于是,在步骤65,提交第二交易的变量操作请求所对应的变量操作,也就是提交第二交易的执行结果。于是,第二交易的投机执行结果得以生效。
通过以上过程可以看到,如果第二交易已经投机执行过,并且投机执行的结果与正式执行没有冲突,那么在正式执行时,仅需要提交变量操作结果即可,而不需要重新执行整个交易的交易逻辑。特别是对于执行逻辑较为复杂的交易,预先的投机执行可以极大节省正式执行的耗时。在交易冲突率较低的情况下,投机执行机制可以极大提高交易执行效率,进而提升区块链平台的性能。
根据另一方面的实施例,提供了一种在区块链节点中投机执行交易的装置,该装置部署在区块链网络中任意的节点中,节点可以体现为任何具有计算、处理能力的设备、平台或设备集群。图8示出根据一个实施例的在节点中投机执行交易的装置的示意性框图。如图8所示,该投机执行装置800包括:
读取单元81,配置为读取本地记录的第一交易;
记录单元82,配置为执行所述第一交易中的交易逻辑,在内存中记录执行结果所对应的变量操作请求;
标记单元83,配置为将所述第一交易标记为已投机执行的交易。
具体的,在一个实施例中,读取单元81包括(未示出):
交易读取模块,配置为从本地交易列表的第一位置读取所述第一交易,所述本地交易列表中记录有各个本地交易的内存地址;
散列添加模块,配置为根据所述第一交易的交易哈希,确定所述第一交易在本地交易散列列表中的第一索引,在该第一索引对应的表项中,添加指向所述第一位置的指针。
在一个具体例子中,上述本地交易列表可以是已校验交易列表,其中记录有各个已校验的本地交易的内存地址;相应的,上述本地交易散列列表可以是已校验交易散列列表。
在一个实施例中,上述装置通过第一线程实现,而上述已校验交易列表由第二线程生成,第二线程用于对本地交易进行校验。
更具体的,对本地交易进行校验可以包括,校验本地交易的以下至少一项:交易签名,交易账号是否合法。
在一个实施例中,上述散列添加模块配置为:
通过对所述第一交易的交易内容进行哈希运算,得到所述第一交易的交易哈希;通过对所述交易哈希进行哈希运算,得到第一哈希值,作为所述第一索引的索引值。
根据一种实施方式,所述记录单元82配置为:
在内存中创建第一交易操作记录,其中包括读操作集合和写操作集合;
在所述第一交易操作记录中记录所述变量操作请求,其中包括,将所述变量操作请求中包括的变量读操作请求,记录在所述读操作集合中,将所述变量操作请求中包括的变量写操作请求,记录在所述写操作集合中。
在一个实施例中,所述第一交易操作记录还包括投机执行状态;所述标记单元83配置为:在所述第一交易操作记录中将所述投机执行状态标记为完成投机执行。
更具体的,在一个实施例中,记录单元82配置为:还将变量操作请求所基于的区块编号,记录在所述第一交易操作记录中。
根据另一方面的实施例,提供了一种在区块链中执行交易的装置,该装置部署在区块链网络中任意的节点中,节点可以体现为任何具有计算、处理能力的设备、平台或设备集群。图9示出根据一个实施例的交易执行装置的示意性框图。如图9所示,该交易执行装置900包括:
交易获取单元91,配置为从已共识交易列表中获取当前有待执行的第二交易;
投机判断单元92,配置为判断所述第二交易是否为已投机执行的交易,其中,已投机执行的交易在内存中记录有对应于执行结果的尚未提交的变量操作请求;
变量操作获取单元93,配置为,如果所述第二交易为已投机执行的交易,获取该第二交易对应的尚未提交的变量操作请求;
冲突判断单元94,配置为根据所述变量操作请求,判断该第二交易的投机执行与基于共识的交易执行是否存在冲突;
变量操作提交单元95,配置为,在不存在冲突的情况下,提交所述变量操作请求所对应的变量操作。
根据一个实施例,投机判断单元92进一步包括:
本地交易判断模块921,配置为,基于所述第二交易的交易内容对应的第二交易哈希,判断所述第二交易是否为本地交易;
执行状态判断模块922,配置为如果第二交易是本地交易,判断第二交易的状态是否为完成投机执行;
确定模块923,配置为,如果第二交易的状态为完成投机执行,则确定所述第二交易为已投机执行的交易;如果第二交易的状态不是完成投机执行,则确定所述第二交易不是已投机执行的交易,并将第二交易标注为执行中。
进一步的,在一个实施例中,所述本地交易判断模块821配置为:对所述第二交易的交易内容进行哈希运算,得到所述第二交易哈希;对所述第二交易哈希进行哈希运算得到第二哈希值,以所述第二哈希值为第二索引,检索本地交易散列列表;如果所述本地交易散列列表中所述第二索引对应的表项中不存在有效指针,则确定所述第二交易不是本地交易,进而确定所述第二交易不是已投机执行的交易。
更进一步的,所述本地交易判断单元921还配置为:如果所述本地交易散列列表中所述第二索引对应的表项中存在第二指针,该第二指针指向本地交易列表中的第二位置,则从所述本地交易列表的所述第二位置读取第二内存地址;根据所述第二内存地址,获取其中存储的交易内容,并计算该交易内容对应的第三交易哈希;如果所述第二交易哈希不等于所述第三交易哈希,则确定所述第二交易不是本地交易,进而不是已投机执行的交易;如果所述第二交易哈希等于所述第三交易哈希,则确定所述第二交易是本地交易。
在一个具体例子中,上述本地交易列表可以是已校验交易列表,其中记录有各个已校验的本地交易的内存地址;所述本地交易散列列表可以是已校验交易散列列表。
根据一个实施例,所述执行状态判断单元922配置为:在第二交易对应的第二交易操作记录中查询所述第二交易是否被标记为完成投机执行。
在一个实施例中,变量操作获取单元93配置为,从所述第二交易操作记录中获取该第二交易对应的变量操作请求。
根据一种实施方式,所述变量操作请求包括,针对第一变量的第一读操作请求;所述冲突判断单元94包括:
第一冲突判断模块941,配置为基于所述第一读操作请求,判断该第二交易的投机执行是否与已提交的交易存在第一冲突;
第二冲突判断模块942,配置为,如果不存在所述第一冲突,则判断该第二交易的投机执行是否与正在执行中的其他交易存在第二冲突。
进一步的,在一个实施例中,所述第一冲突判断模块941配置为:查询已修改变量表,所述已修改变量表中记录有已提交交易针对各个变量的修改记录;如果所述已修改变量表中包含对所述第一变量的修改记录,则确定存在所述第一冲突。
在另一实施例中,所述第一读操作请求基于第一编号的区块而发出;所述第一冲突判断模块941配置为:查询已修改变量表,所述已修改变量表中记录有已提交交易针对各个变量的修改记录,以及修改记录对应的区块编号;如果从所述已修改变量表中查询到针对所述第一变量的第一修改记录,且该第一修改记录所对应的第二编号大于所述第一编号,该确定存在所述第一冲突。
根据一种实施方式,第二冲突判断模块942配置为:获取执行环境记录表中的写操作集合,并遍历所述写操作集合中的各个写操作请求,其中执行环境记录表用于记录正在执行中交易的变量操作请求;如果所述第一读操作请求与所述写操作集合中第一写操作请求冲突,并且该第一写操作请求对应的交易在所述已共识交易列表中排在所述第二交易之前,则确定存在所述第二冲突。
根据一种实施方式,装置900还包括交易执行单元96,配置为,如果所述投机判断单元92判断所述第二交易不是已投机执行的交易,则执行所述第二交易,并提交执行结果。
根据一种实施方式,交易执行单元96还配置为,如果所述冲突判断单元94判断所述第二交易的投机执行与基于共识的交易执行存在冲突,则丢弃所述变量操作请求,重新执行所述第二交易,并提交重新执行的结果。
通过以上方面的装置,可以利用在交易达成共识之前对其进行投机执行;如此,在对已共识交易进行正式执行时,可以利用投机执行的结果,提高执行效率,提升平台性能。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图4和图6所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图4和图6所述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (40)
1.一种在区块链节点中投机执行交易的方法,所述方法包括:
读取本地记录的第一交易;
执行所述第一交易中的交易逻辑,在内存中记录执行结果所对应的尚未提交的变量操作请求;
将所述第一交易标记为已投机执行的交易,以指示该交易处于已产生执行结果,但该执行结果尚未提交的状态。
2.根据权利要求1所述的方法,其中,读取本地记录的第一交易,包括:
从本地交易列表的第一位置读取所述第一交易,所述本地交易列表中记录有各个本地交易的内存地址;
根据所述第一交易的交易标识,确定所述第一交易在本地交易散列列表中的第一索引,在该第一索引对应的表项中,添加指向所述第一位置的指针。
3.根据权利要求2所述的方法,其中,
所述本地交易列表为已校验交易列表,其中记录有各个已校验的本地交易的内存地址;所述本地交易散列列表为已校验交易散列列表。
4.根据权利要求3所述的方法,其中,所述方法通过第一线程执行,所述已校验交易列表由第二线程生成,所述第二线程用于对本地交易进行校验。
5.根据权利要求4所述的方法,其中,所述对本地交易进行校验包括,校验本地交易的以下至少一项:交易签名,交易账号是否合法。
6.根据权利要求2所述的方法,其中,根据所述第一交易的交易标识,确定所述第一交易在本地交易散列列表中的第一索引,包括:
通过对所述第一交易的交易内容进行哈希运算,得到所述第一交易的交易标识;
通过对所述交易标识进行哈希运算,得到第一哈希值,作为所述第一索引的索引值。
7.根据权利要求1所述的方法,其中,在内存中记录执行结果所对应的变量操作请求,包括:
在内存中创建第一交易操作记录,其中包括读操作集合和写操作集合;
在所述第一交易操作记录中记录所述变量操作请求,其中包括,将所述变量操作请求中包括的变量读操作请求,记录在所述读操作集合中,将所述变量操作请求中包括的变量写操作请求,记录在所述写操作集合中。
8.根据权利要求7所述的方法,其中,所述第一交易操作记录还包括投机执行状态;
将所述第一交易标记为已投机执行的交易,包括:在所述第一交易操作记录中将所述投机执行状态标记为完成投机执行。
9.根据权利要求7所述的方法,其中,在所述第一交易操作记录中记录所述变量操作请求还包括:将所述变量读操作请求所基于的区块编号,记录在所述第一交易操作记录中。
10.一种在区块链中执行交易的方法,该方法通过区块链网络中任意节点执行,包括:
从已共识交易列表中获取当前有待执行的第二交易;
判断所述第二交易是否为已投机执行的交易,其中,已投机执行的交易在内存中记录有对应于执行结果的尚未提交的变量操作请求;
如果所述第二交易为已投机执行的交易,获取该第二交易对应的尚未提交的变量操作请求;
根据所述变量操作请求,判断该第二交易的投机执行与基于共识的交易执行是否存在冲突;
在不存在冲突的情况下,提交所述变量操作请求所对应的变量操作。
11.根据权利要求10所述的方法,其中,判断所述第二交易是否为已投机执行的交易,包括:
基于所述第二交易的交易内容对应的第二交易哈希,判断所述第二交易是否为本地交易;
如果第二交易是本地交易,判断第二交易的状态是否为完成投机执行;
如果第二交易的状态为完成投机执行,则确定所述第二交易为已投机执行的交易;
如果第二交易的状态不是完成投机执行,则确定所述第二交易不是已投机执行的交易,并将第二交易标注为执行中。
12.根据权利要求11所述的方法,其中,判断所述第二交易是否为本地交易,包括:
对所述第二交易的交易内容进行哈希运算,得到所述第二交易哈希;
对所述第二交易哈希进行哈希运算得到第二哈希值,以所述第二哈希值为第二索引,检索本地交易散列列表;
如果所述本地交易散列列表中所述第二索引对应的表项中不存在有效指针,则确定所述第二交易不是本地交易,进而确定所述第二交易不是已投机执行的交易。
13.根据权利要求12所述的方法,其中,判断所述第二交易是否为本地交易,还包括:
如果所述本地交易散列列表中所述第二索引对应的表项中存在第二指针,该第二指针指向本地交易列表中的第二位置,则从所述本地交易列表的所述第二位置读取第二内存地址;
根据所述第二内存地址,获取其中存储的交易内容,并计算该交易内容对应的第三交易哈希;
如果所述第二交易哈希不等于所述第三交易哈希,则确定所述第二交易不是本地交易,进而不是已投机执行的交易;
如果所述第二交易哈希等于所述第三交易哈希,则确定所述第二交易是本地交易。
14.根据权利要求13所述的方法,其中,所述本地交易列表为已校验交易列表,其中记录有各个已校验的本地交易的内存地址;所述本地交易散列列表为已校验交易散列列表。
15.根据权利要求11所述的方法,其中,判断第二交易的状态是否为完成投机执行,包括:在第二交易对应的第二交易操作记录中查询所述第二交易是否被标记为完成投机执行。
16.根据权利要求15所述的方法,其中,获取该第二交易对应的尚未提交的变量操作请求,包括:
从所述第二交易操作记录中获取该第二交易对应的变量操作请求。
17.根据权利要求10所述的方法,其中,所述变量操作请求包括,针对第一变量的第一读操作请求;判断该第二交易的投机执行与基于共识的交易执行是否存在冲突,包括:
基于所述第一读操作请求,判断该第二交易的投机执行是否与已提交的交易存在第一冲突;
如果不存在所述第一冲突,则判断该第二交易的投机执行是否与正在执行中的、共识排序中排在第二交易前面的其他交易存在第二冲突。
18.根据权利要求17所述的方法,其中,基于所述第一读操作请求,判断该第二交易的投机执行是否与已提交的交易存在第一冲突,包括:
查询已修改变量表,所述已修改变量表中记录有已提交交易针对各个变量的修改记录;
如果所述已修改变量表中包含对所述第一变量的修改记录,则确定存在所述第一冲突。
19.根据权利要求17所述的方法,其中,所述第一读操作请求基于第一编号的区块而发出;
基于所述第一读操作请求,所述判断该第二交易的投机执行是否与已提交的交易存在第一冲突,包括:
查询已修改变量表,所述已修改变量表中记录有已提交交易针对各个变量的修改记录,以及修改记录对应的区块编号;
如果从所述已修改变量表中查询到针对所述第一变量的第一修改记录,且该第一修改记录所对应的第二编号大于所述第一编号,该确定存在所述第一冲突。
20.根据权利要求17所述的方法,其中,判断该第二交易的投机执行是否与正在执行中的其他交易存在第二冲突,包括:
获取执行环境记录表中的写操作集合,并遍历所述写操作集合中的各个写操作请求,其中执行环境记录表用于记录正在执行中交易的变量操作请求;
如果所述第一读操作请求与所述写操作集合中第一写操作请求冲突,并且该第一写操作请求对应的交易在所述已共识交易列表中排在所述第二交易之前,则确定存在所述第二冲突。
21.根据权利要求10所述的方法,还包括:
如果所述第二交易不是已投机执行的交易,则执行所述第二交易,并提交执行结果。
22.根据权利要求10所述的方法,还包括:
如果所述第二交易的投机执行与基于共识的交易执行存在冲突,则丢弃所述变量操作请求,重新执行所述第二交易,并提交重新执行的结果。
23.一种在区块链节点中投机执行交易的装置,所述装置法包括:
读取单元,配置为读取本地记录的第一交易;
记录单元,配置为执行所述第一交易中的交易逻辑,在内存中记录执行结果所对应的尚未提交的变量操作请求;
标记单元,配置为将所述第一交易标记为已投机执行的交易,以指示该交易处于已产生执行结果,但该执行结果尚未提交的状态。
24.根据权利要求23所述的装置,其中,所述读取单元包括:
交易读取模块,配置为从本地交易列表的第一位置读取所述第一交易,所述本地交易列表中记录有各个本地交易的内存地址;
散列添加模块,配置为根据所述第一交易的交易哈希,确定所述第一交易在本地交易散列列表中的第一索引,在该第一索引对应的表项中,添加指向所述第一位置的指针。
25.根据权利要求24所述的装置,其中,所述散列添加模块配置为:
通过对所述第一交易的交易内容进行哈希运算,得到所述第一交易的交易哈希;
通过对所述交易哈希进行哈希运算,得到第一哈希值,作为所述第一索引的索引值。
26.根据权利要求23所述的装置,其中,
所述记录单元配置为:
在内存中创建第一交易操作记录,其中包括读操作集合和写操作集合;
在所述第一交易操作记录中记录所述变量操作请求,其中包括,将所述变量操作请求中包括的变量读操作请求,记录在所述读操作集合中,将所述变量操作请求中包括的变量写操作请求,记录在所述写操作集合中。
27.根据权利要求26所述的装置,其中,所述记录单元配置为:将所述变量操作请求所基于的区块编号,记录在所述第一交易操作记录中。
28.一种在区块链中执行交易的装置,该装置部署在区块链网络中任意节点中,该装置包括:
交易获取单元,配置为从已共识交易列表中获取当前有待执行的第二交易;
投机判断单元,配置为判断所述第二交易是否为已投机执行的交易,其中,已投机执行的交易在内存中记录有对应于执行结果的尚未提交的变量操作请求;
变量操作获取单元,配置为,如果所述第二交易为已投机执行的交易,获取该第二交易对应的尚未提交的变量操作请求;
冲突判断单元,配置为根据所述变量操作请求,判断该第二交易的投机执行与基于共识的交易执行是否存在冲突;
变量操作提交单元,配置为,在不存在冲突的情况下,提交所述变量操作请求所对应的变量操作。
29.根据权利要求28所述的装置,其中,投机判断单元包括:
本地交易判断模块,配置为,基于所述第二交易的交易内容对应的第二交易哈希,判断所述第二交易是否为本地交易;
执行状态判断模块,配置为如果第二交易是本地交易,判断第二交易的状态是否为完成投机执行;
确定模块,配置为,如果第二交易的状态为完成投机执行,则确定所述第二交易为已投机执行的交易;如果第二交易的状态不是完成投机执行,则确定所述第二交易不是已投机执行的交易,并将第二交易标注为执行中。
30.根据权利要求29所述的装置,其中,所述本地交易判断模块配置为:
对所述第二交易的交易内容进行哈希运算,得到所述第二交易哈希;
对所述第二交易哈希进行哈希运算得到第二哈希值,以所述第二哈希值为第二索引,检索本地交易散列列表;
如果所述本地交易散列列表中所述第二索引对应的表项中不存在有效指针,则确定所述第二交易不是本地交易,进而确定所述第二交易不是已投机执行的交易。
31.根据权利要求30所述的装置,其中,所述本地交易判断单元还配置为:
如果所述本地交易散列列表中所述第二索引对应的表项中存在第二指针,该第二指针指向本地交易列表中的第二位置,则从所述本地交易列表的所述第二位置读取第二内存地址;
根据所述第二内存地址,获取其中存储的交易内容,并计算该交易内容对应的第三交易哈希;
如果所述第二交易哈希不等于所述第三交易哈希,则确定所述第二交易不是本地交易,进而不是已投机执行的交易;
如果所述第二交易哈希等于所述第三交易哈希,则确定所述第二交易是本地交易。
32.根据权利要求29所述的装置,其中,所述执行状态判断单元配置为:在第二交易对应的第二交易操作记录查询所述第二交易是否被标记为完成投机执行。
33.根据权利要求28所述的装置,其中,所述变量操作请求包括,针对第一变量的第一读操作请求;所述冲突判断单元包括:
第一冲突判断模块,配置为基于所述第一读操作请求,判断该第二交易的投机执行是否与已提交的交易存在第一冲突;
第二冲突判断模块,配置为,如果不存在所述第一冲突,则判断该第二交易的投机执行是否与正在执行中的其他交易存在第二冲突。
34.根据权利要求33所述的装置,其中,所述第一冲突判断模块配置为:
查询已修改变量表,所述已修改变量表中记录有已提交交易针对各个变量的修改记录;
如果所述已修改变量表中包含对所述第一变量的修改记录,则确定存在所述第一冲突。
35.根据权利要求33所述的装置,其中,所述第一读操作请求基于第一编号的区块而发出;所述第一冲突判断模块配置为:
查询已修改变量表,所述已修改变量表中记录有已提交交易针对各个变量的修改记录,以及修改记录对应的区块编号;
如果从所述已修改变量表中查询到针对所述第一变量的第一修改记录,且该第一修改记录所对应的第二编号大于所述第一编号,该确定存在所述第一冲突。
36.根据权利要求33所述的装置,其中,所述第二冲突判断模块配置为:
获取执行环境记录表中的写操作集合,并遍历所述写操作集合中的各个写操作请求,其中执行环境记录表用于记录正在执行中交易的变量操作请求;
如果所述第一读操作请求与所述写操作集合中第一写操作请求冲突,并且该第一写操作请求对应的交易在所述已共识交易列表中排在所述第二交易之前,则确定存在所述第二冲突。
37.根据权利要求28所述的装置,还包括交易执行单元,配置为,如果所述投机判断单元判断所述第二交易不是已投机执行的交易,则执行所述第二交易,并提交执行结果。
38.根据权利要求28所述的装置,还包括交易执行单元,配置为,如果所述冲突判断单元判断所述第二交易的投机执行与基于共识的交易执行存在冲突,则丢弃所述变量操作请求,重新执行所述第二交易,并提交重新执行的结果。
39.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-22中任一项的所述的方法。
40.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-22中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010754103.2A CN111882435B (zh) | 2020-03-12 | 2020-03-12 | 在区块链中执行交易的方法及装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010170493.9A CN111047449B (zh) | 2020-03-12 | 2020-03-12 | 在区块链中执行交易的方法及装置 |
CN202010754103.2A CN111882435B (zh) | 2020-03-12 | 2020-03-12 | 在区块链中执行交易的方法及装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010170493.9A Division CN111047449B (zh) | 2020-03-12 | 2020-03-12 | 在区块链中执行交易的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111882435A true CN111882435A (zh) | 2020-11-03 |
CN111882435B CN111882435B (zh) | 2023-01-31 |
Family
ID=70231147
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010754103.2A Active CN111882435B (zh) | 2020-03-12 | 2020-03-12 | 在区块链中执行交易的方法及装置 |
CN202010170493.9A Active CN111047449B (zh) | 2020-03-12 | 2020-03-12 | 在区块链中执行交易的方法及装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010170493.9A Active CN111047449B (zh) | 2020-03-12 | 2020-03-12 | 在区块链中执行交易的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN111882435B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199204A (zh) * | 2020-12-04 | 2021-01-08 | 支付宝(杭州)信息技术有限公司 | 一种在区块链中处理交易的方法和装置 |
CN113254467A (zh) * | 2021-07-02 | 2021-08-13 | 支付宝(杭州)信息技术有限公司 | 在区块链系统中执行交易的方法和区块链节点 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111522648B (zh) * | 2020-07-03 | 2020-10-09 | 支付宝(杭州)信息技术有限公司 | 一种区块链的交易处理方法、装置及电子设备 |
CN111754349B (zh) | 2020-08-28 | 2020-12-04 | 支付宝(杭州)信息技术有限公司 | 对区块链中的交易进行分组的方法和装置 |
CN111813795B (zh) * | 2020-08-28 | 2020-12-04 | 支付宝(杭州)信息技术有限公司 | 在区块链网络中确认交易的方法及装置 |
CN111754350B (zh) | 2020-08-28 | 2020-11-24 | 支付宝(杭州)信息技术有限公司 | 并行获取区块链中的交易访问变量的编号的方法和装置 |
CN112001798B (zh) * | 2020-10-28 | 2021-01-26 | 支付宝(杭州)信息技术有限公司 | 在区块链中并发执行交易的方法和装置 |
CN114564412B (zh) * | 2022-04-27 | 2022-07-22 | 北京微芯感知科技有限公司 | 区块链的确定性交易并发调度方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150106255A1 (en) * | 2011-06-17 | 2015-04-16 | Chicago Mercantile Exchange Inc. | Facilitation of payments between counterparties by a central counterparty |
US20160225085A1 (en) * | 2015-01-30 | 2016-08-04 | Trading Technologies International, Inc. | System and Method for Implementing a Dynamic Simulation System |
US20180365674A1 (en) * | 2017-06-19 | 2018-12-20 | Accenture Global Solutions Limited | Using a mixture model to generate simulated transaction information |
CN110046523A (zh) * | 2019-03-15 | 2019-07-23 | 阿里巴巴集团控股有限公司 | 智能合约校验方法及装置和电子设备 |
US20190362361A1 (en) * | 2018-05-23 | 2019-11-28 | International Business Machines Corporation | Autocommit transaction management in a blockchain network |
US20200052884A1 (en) * | 2018-08-13 | 2020-02-13 | International Business Machines Corporation | Parallel transaction validation and block generation in a blockchain |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101807144B (zh) * | 2010-03-17 | 2014-05-14 | 上海大学 | 一种前瞻多线程并行执行优化方法 |
CN107688999B (zh) * | 2017-08-11 | 2020-11-13 | 杭州溪塔科技有限公司 | 一种基于区块链的并行交易执行方法 |
CN109040029B (zh) * | 2018-07-13 | 2021-03-12 | 上海点融信息科技有限责任公司 | 在区块链中执行事务的方法和装置 |
CN109189396B (zh) * | 2018-08-16 | 2022-04-12 | 北京京东尚科信息技术有限公司 | 智能合约引擎组件、运行方法及存储介质 |
CN109685502B (zh) * | 2018-12-06 | 2021-04-30 | 成都佰纳瑞信息技术有限公司 | 一种适用于区块链网络的加速共识方法 |
CN110675255B (zh) * | 2019-08-30 | 2021-04-02 | 创新先进技术有限公司 | 在区块链中并发执行交易的方法和装置 |
-
2020
- 2020-03-12 CN CN202010754103.2A patent/CN111882435B/zh active Active
- 2020-03-12 CN CN202010170493.9A patent/CN111047449B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150106255A1 (en) * | 2011-06-17 | 2015-04-16 | Chicago Mercantile Exchange Inc. | Facilitation of payments between counterparties by a central counterparty |
US20160225085A1 (en) * | 2015-01-30 | 2016-08-04 | Trading Technologies International, Inc. | System and Method for Implementing a Dynamic Simulation System |
US20180365674A1 (en) * | 2017-06-19 | 2018-12-20 | Accenture Global Solutions Limited | Using a mixture model to generate simulated transaction information |
US20190362361A1 (en) * | 2018-05-23 | 2019-11-28 | International Business Machines Corporation | Autocommit transaction management in a blockchain network |
US20200052884A1 (en) * | 2018-08-13 | 2020-02-13 | International Business Machines Corporation | Parallel transaction validation and block generation in a blockchain |
CN110046523A (zh) * | 2019-03-15 | 2019-07-23 | 阿里巴巴集团控股有限公司 | 智能合约校验方法及装置和电子设备 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199204A (zh) * | 2020-12-04 | 2021-01-08 | 支付宝(杭州)信息技术有限公司 | 一种在区块链中处理交易的方法和装置 |
CN112199204B (zh) * | 2020-12-04 | 2021-03-12 | 支付宝(杭州)信息技术有限公司 | 一种在区块链中处理交易的方法和装置 |
CN113254467A (zh) * | 2021-07-02 | 2021-08-13 | 支付宝(杭州)信息技术有限公司 | 在区块链系统中执行交易的方法和区块链节点 |
Also Published As
Publication number | Publication date |
---|---|
CN111047449A (zh) | 2020-04-21 |
CN111047449B (zh) | 2020-06-23 |
CN111882435B (zh) | 2023-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111047449B (zh) | 在区块链中执行交易的方法及装置 | |
EP3678346B1 (en) | Blockchain smart contract verification method and apparatus, and storage medium | |
CN107392608B (zh) | 基于区块链系统的数字资产交易方法及区块链系统 | |
US11481765B2 (en) | Blockchain-based transaction processing method and apparatus and electronic device | |
CN107577427B (zh) | 用于区块链系统的数据迁移方法、设备和存储介质 | |
EP3816922A1 (en) | Blockchain-based transaction processing method and apparatus, and electronic device | |
US20210049715A1 (en) | Blockchain-based data procesing method, apparatus, and electronic device | |
CN110706101B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN111241061B (zh) | 状态数据库的写入方法、数据处理装置及存储介质 | |
CN110675255B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
US11245762B1 (en) | Data request servicing using smart network interface cards | |
CN110648124B (zh) | 在区块链中并发执行交易的方法和装置 | |
US20230275771A1 (en) | Pre-execution of block chain transaction in parallel during block consensus | |
WO2023184052A1 (zh) | 一种数据处理方法、区块链节点及区块链系统 | |
CN111177225A (zh) | 账户状态存在性证明方法及装置和状态查询方法及装置 | |
CN113220717A (zh) | 基于区块链的数据核验方法及装置、电子设备 | |
CN106599247B (zh) | LSM-tree结构中数据文件的合并方法及装置 | |
CN110689344B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN112711462A (zh) | 一种云平台虚拟cpu热绑定方法、装置及计算机可读存储介质 | |
CN110706108B (zh) | 在区块链中并发执行交易的方法和装置 | |
WO2021064852A1 (ja) | トランザクション管理装置、トランザクション管理プログラム、及びトランザクション管理方法 | |
CN116977067A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN115795563A (zh) | 一种状态数据校验方法及装置 | |
CN116009940A (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40039794 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |