一种在区块链中处理交易的方法和装置转让专利
申请号 : CN202011399167.1
文献号 : CN112199204B
文献日 : 2021-03-12
发明人 : 刘晓建
申请人 : 支付宝(杭州)信息技术有限公司
摘要 :
权利要求 :
1.一种在区块链中处理交易的方法,所述方法由区块链节点执行,包括:获取等待投机执行的第一交易,其中,所述投机执行为在交易共识结束前对交易的预先执行;
在确定正在投机执行的第二交易在先访问了所述第一交易中请求访问的变量的情况中,在对第二交易的投机执行完成之后进行对所述第一交易的投机执行;
其中,所述方法由区块链记账节点执行,所述方法还包括:根据所述第二交易和所述第一交易的投机执行顺序,对所述第二交易和所述第一交易的执行顺序提出共识提议。
2.根据权利要求1所述的方法,所述确定正在投机执行的第二交易在先访问了所述第一交易中请求访问的变量包括,基于变量访问表确定正在投机执行的第二交易在先访问了所述第一交易中请求访问的变量。
3.根据权利要求2所述的方法,其中,所述确定正在投机执行的第二交易在先访问了所述第一交易中请求访问的变量包括以下任一项:确定正在投机执行的第二交易在先读取了所述第一交易中请求写入的变量;确定正在投机执行的第二交易在先写入了所述第一交易中请求读取的变量;确定正在投机执行的第二交易在先写入了所述第一交易中请求写入的变量。
4.根据权利要求2所述的方法,其中,在对第二交易的投机执行完成之后进行对所述第一交易的投机执行包括,获取预先记录的第二交易开始投机执行的第一时间,基于所述第一时间确定开始投机执行所述第一交易的第二时间,以所述第二时间的时间顺序在阻塞交易表中记录所述第一交易和所述第二时间以等待投机执行。
5.根据权利要求4所述的方法,还包括,在对所述第一交易的投机执行成功的情况中,在为投机执行交易所分配的存储空间中保存所述第一交易的投机执行结果,以所述第一交易的开始或结束投机执行的时间顺序在已投机执行交易表中记录所述第一交易。
6.根据权利要求5所述的方法,其中,根据所述第二交易和所述第一交易的投机执行顺序,对所述第二交易和所述第一交易的执行顺序提出共识提议包括,获取已投机执行交易表中的顺序排列的多个交易作为共识提议。
7.根据权利要求6所述的方法,还包括,获取所述阻塞交易表中的顺序排列的多个交易排列在所述已投机执行交易表中的所述多个交易之后,作为共识提议。
8.根据权利要求4所述的方法,所述获取等待投机执行的第一交易包括,从所述阻塞交易表中获取所述第一交易。
9.根据权利要求1所述的方法,还包括,在获取所述第一交易之后,投机执行所述第一交易;
所述在确定正在投机执行的第二交易在先访问了所述第一交易中请求访问的变量的情况中,在对第二交易的投机执行完成之后进行对所述第一交易的投机执行包括,在投机执行所述第一交易的过程中,在确定正在投机执行的第二交易在先访问了所述第一交易中将要访问的变量的情况中,结束对所述第一交易的投机执行,在对第二交易的投机执行完成之后再次进行对所述第一交易的投机执行。
10.根据权利要求1所述的方法,其中,在对第二交易的投机执行完成之后进行对所述第一交易的投机执行包括,在对所述第一交易的投机执行的过程中,在为投机执行交易所分配的存储空间中存储所述第一交易请求写入的变量的值,从所述存储空间中存储的各个变量的值中读取所述第一交易请求读取的变量的值。
11.一种在区块链中处理交易的装置,所述装置部署于区块链节点,包括:获取单元,配置为,获取等待投机执行的第一交易,其中,所述投机执行为在交易共识结束前对交易的预先执行;
投机执行单元,配置为,在确定正在投机执行的第二交易在先访问了所述第一交易中请求访问的变量的情况中,在对第二交易的投机执行完成之后进行对所述第一交易的投机执行;
其中,所述装置部署于区块链记账节点,所述装置还包括:共识提议单元,配置为,根据所述第二交易和所述第一交易的投机执行顺序,对所述第二交易和所述第一交易的执行顺序提出共识提议。
12.根据权利要求11所述的装置,所述投机执行单元还配置为,基于变量访问表确定正在投机执行的第二交易在先访问了所述第一交易中请求访问的变量。
13.根据权利要求12所述的装置,其中,所述投机执行单元还配置为执行以下任一项:确定正在投机执行的第二交易在先读取了所述第一交易中请求写入的变量;确定正在投机执行的第二交易在先写入了所述第一交易中请求读取的变量;确定正在投机执行的第二交易在先写入了所述第一交易中请求写入的变量。
14.根据权利要求12所述的装置,其中,所述投机执行单元包括,获取子单元,配置为,获取预先记录的第二交易开始投机执行的第一时间,确定子单元,配置为,基于所述第一时间确定开始投机执行所述第一交易的第二时间,记录子单元,配置为,以所述第二时间的时间顺序在阻塞交易表中记录所述第一交易和所述第二时间以等待投机执行。
15.根据权利要求14所述的装置,还包括,记录单元,配置为,在对所述第一交易的投机执行成功的情况中,在为投机执行交易所分配的存储空间中保存所述第一交易的投机执行结果,以所述第一交易的开始或结束投机执行的时间顺序在已投机执行交易表中记录所述第一交易。
16.根据权利要求15所述的装置,其中,所述共识提议单元还配置为,获取已投机执行交易表中的顺序排列的多个交易作为共识提议。
17.根据权利要求16所述的装置,其中,所述共识提议单元还配置为,获取所述阻塞交易表中的顺序排列的多个交易排列在所述已投机执行交易表中的所述多个交易之后,作为共识提议。
18.根据权利要求14所述的装置,所述获取单元还配置为,从所述阻塞交易表中获取所述第一交易。
19.根据权利要求11所述的装置,所述投机执行单元还配置为,在获取所述第一交易之后,投机执行所述第一交易;在投机执行所述第一交易的过程中,在确定正在投机执行的第二交易在先访问了所述第一交易中将要访问的变量的情况中,结束对所述第一交易的投机执行,在对第二交易的投机执行完成之后再次进行对所述第一交易的投机执行。
20.根据权利要求11所述的装置,其中,所述投机执行单元还配置为,在对所述第一交易的投机执行的过程中,在为投机执行交易所分配的存储空间中存储所述第一交易请求写入的变量的值,从所述存储空间中存储的各个变量的值中读取所述第一交易请求读取的变量的值。
21.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1‑10中任一项的所述的方法。
22.一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1‑10中任一项所述的方法。
说明书 :
一种在区块链中处理交易的方法和装置
技术领域
背景技术
保存交易的执行结果,该产生的执行结果并不立即提交,而是等待正式执行交易时在确定
可用的情况下才提交。在对交易共识之后正式执行交易时,如果确定所述投机执行的执行
结果有效可用,则直接使用该投机执行的执行结果即可,而不需要再次执行交易。在该实现
方案中,所述对交易的投机执行并不考虑与其它交易的读写冲突,当不同交易访问的变量
没有重叠时,该实现方案可能具有较好的效果,但当不同交易出现对变量的读写冲突时,所
述投机执行的执行结果将无法使用,降低了交易处理效率。
发明内容
易共识结束前对交易的预先执行;在确定正在投机执行的第二交易在先访问了所述第一交
易中请求访问的变量的情况中,在对第二交易的投机执行完成之后进行对所述第一交易的
投机执行。
交易的执行顺序提出共识提议。
先访问了所述第一交易中请求访问的变量。
取了所述第一交易中请求写入的变量;确定正在投机执行的第二交易在先写入了所述第一
交易中请求读取的变量;确定正在投机执行的第二交易在先写入了所述第一交易中请求写
入的变量。
述第一时间确定开始投机执行所述第一交易的第二时间,以所述第二时间的时间顺序在阻
塞交易表中记录所述第一交易和所述第二时间以等待投机执行。
结果,以所述第一交易的开始或结束投机执行的时间顺序在已投机执行交易表中记录所述
第一交易。
交易表中的顺序排列的多个交易作为共识提议。
议。
求访问的变量的情况中,在对第二交易的投机执行完成之后进行对所述第一交易的投机执
行包括,在投机执行所述第一交易的过程中,在确定正在投机执行的第二交易在先访问了
所述第一交易中将要访问的变量的情况中,结束对所述第一交易的投机执行,在对第二交
易的投机执行完成之后再次进行对所述第一交易的投机执行。
所分配的存储空间中存储所述第一交易请求写入的变量的值,从所述存储空间中存储的各
个变量的值中读取所述第一交易请求读取的变量的值。
易共识结束前对交易的预先执行;投机执行单元,配置为,在确定正在投机执行的第二交易
在先访问了所述第一交易中请求访问的变量的情况中,在对第二交易的投机执行完成之后
进行对所述第一交易的投机执行。
述第二交易和所述第一交易的执行顺序提出共识提议。
投机执行的第二交易在先写入了所述第一交易中请求读取的变量;确定正在投机执行的第
二交易在先写入了所述第一交易中请求写入的变量。
一时间确定开始投机执行所述第一交易的第二时间,记录子单元,配置为,以所述第二时间
的时间顺序在阻塞交易表中记录所述第一交易和所述第二时间以等待投机执行。
一交易的投机执行结果,以所述第一交易的开始或结束投机执行的时间顺序在已投机执行
交易表中记录所述第一交易。
为共识提议。
执行的第二交易在先访问了所述第一交易中将要访问的变量的情况中,结束对所述第一交
易的投机执行,在对第二交易的投机执行完成之后再次进行对所述第一交易的投机执行。
写入的变量的值,从所述存储空间中存储的各个变量的值中读取所述第一交易请求读取的
变量的值。
性,并且根据投机执行的顺序确定共识交易的顺序,从而使得各个节点的在共识后执行交
易时可以大概率地复用已经投机执行的交易的投机执行结果,提高了区块链中的交易处理
效率。
附图说明
具体实施方式
能力的节点。记账节点可以将收集到的交易打包成预定的区块形式,形成区块链中新的区
块。
易。并且,该交易Tx可以是普通转账交易,创建智能合约的交易,或者调用智能合约的交易。
交易放入交易池时,或者从交易池中提取交易进行打包时,节点会对交易进行校验,以验证
其合法性。在Bob打包一部分交易后,它会在区块链网络中广播自己打包的交易(即区块),
以期达成共识。在对区块达成共识之后,每个节点都会以共识的顺序执行达成共识的区块
中的交易,以保持整个网络中各个节点处记录的数据内容的一致性。
取到共识结果后,执行共识区块中的顺序排列的交易。可以看到,这个过程中,各个步骤是
依次串行执行的,因此,对交易的处理效率较低。
交易、以及此交易与其它交易的执行顺序的情况下,对此交易进行预先执行或前瞻执行,产
生执行结果,但是并不立即提交这些执行结果,而是将该执行结果缓存到内存中,以在共识
之后执行交易时在确定有效的情况下用作为执行交易的执行结果。投机执行的过程与共识
的过程可以并行进行。在获取到共识结果从而对交易进行正式执行时,判断投机执行的执
行结果是否有效可用,如果可用,则直接提交这样的执行结果即可,而不必重新执行交易。
然而,该投机执行的方案在投机执行交易的阶段并不考虑与其它交易的读写冲突。在并行
投机执行不同交易时因为访问相同的变量而出现读写冲突的情况中,由于实际运行环境的
微小差异,在一个节点对所述不同交易的投机执行顺序使得对变量的读写顺序可能是先读
后写,在另一个节点对所述不同交易的投机执行顺序使得对所述变量的读写顺序可能是先
写后读。在正式执行这两个交易时,与共识的交易顺序不同的节点的投机执行的执行结果
有可能将不可用,从而降低了交易处理效率。
易滞后处理,以防止投机执行的交易出现读写冲突,并根据投机执行交易的顺序来进行共
识提议,以进一步提高投机执行的执行结果可用的概率,从而提高交易处理效率。
交易处理方法包括以下步骤:步骤S302,获取等待投机执行的交易Tx2;步骤S304,确定是否
有其它正在投机执行的交易在先访问了交易Tx2中请求访问的变量;在确定结果为是的情
况中,执行步骤S306,在投机执行所确定的交易之后投机执行交易Tx2;在确定结果为否的
情况中,执行步骤S308,投机执行交易Tx2。下面分别描述以上各个步骤的具体执行过程。
经投机执行的交易进行投机执行。在一种实施方式中,在区块链节点中可如表1所示的待投
机执行交易表来记录交易池中的未投机执行的交易,所述待投机执行交易表以及下文描述
的变量访问表、阻塞交易表和已投机执行交易表例如存储在为投机执行交易所分配的存储
空间(例如内存空间)中。
种实施方式中,该待投机执行交易表的第一行用于记录各个交易的交易内容。在另一种实
施方式中,该待投机执行交易表的第一行用于记录相应交易的交易内容的内存地址,以用
于链接到相应交易的交易内容。所述待投机执行交易表的第二行在相应的交易开始投机执
行并且未执行完成时用于记录相应交易的开始投机执行的时间。如表1所示,其中记录了交
易Tx1为正在投机执行的交易,其开始投机执行的时间为t1,例如当前由线程1在执行交易
Tx1。线程2在从表1中获取最左侧的未开始投机执行的交易(交易Tx2)之后,在表1中记录交
易Tx2的开始投机执行的时间为t2,表1中的交易Tx3为尚未开始投机执行的交易。区块链节
点中例如通过多个执行体(例如线程)来并行投机执行交易池中的交易,通过在待投机执行
交易表中记录交易的开始投机执行的时间,各个进行投机执行的线程可基于该时间确定交
易之间是否存在读写冲突,并设置冲突交易的滞后投机执行的时间,这将在下文详细描述。
后,在存储交易的交易内容的地址中记录该交易的开始投机执行时间,从而,其它线程可从
所述地址确定该交易是否开始投机执行、以及该交易的开始投机执行时间。
文中详细描述。
读记录 (Pos1,t1)
写记录
址对应于相应变量的散列值,例如表2中的第2列的存储地址对应于变量a的散列值,当交易
中存在对变量a的访问时,通过计算变量a的散列值从而可找到变量a的读写记录。变量访问
表的第2行中的“L”为锁标识,表示有线程正在对该列进行操作。另外,变量访问表中的
“Pos1”用于记录访问该变量的交易在待投机执行交易表(或者下文中将描述的阻塞交易
表)中的记录位置,该Pos1例如用于指示表1中的第1列,“t1”用于记录访问该变量的交易的
开始投机执行时间。
定该读写记录表项未锁定的情况中对该读写记录表项进行锁定,即在表2中的变量a对应的
第2行中标记“L”。然后,线程2对变量a的读写记录表项进行读取。
1列,比较第1列中记录的t1与表2中的第2列中记录的t1相一致,即可确定表2中的(Pos1,
t1)与Tx1相对应,即当前Tx1正在投机执行,从而可确定正在投机执行的交易Tx1在先读取
了变量a,交易Tx2与当前正在投机执行的Tx1存在读写冲突。
投机执行的情况中,也可以确定正在投机执行的交易Tx1在先写入了变量a,交易Tx2与正在
投机执行的交易Tx1存在写写冲突。
投机执行情况中,也可以确定正在投机执行的交易Tx1在先写入了变量a,交易Tx2与正在投
机执行的交易Tx1存在读写冲突。
机执行(将在下文中描述),因此,线程2可将表2中记录的(Pos1,t0)删除。之后,如果交易
Tx2没有请求对其它变量的访问,线程2可确定当前没有正在投机执行的交易与Tx2存在访
问冲突。
程2可执行步骤S308,在变量访问表中记录交易Tx2对变量a的读取信息并继续投机执行交
易Tx2。
作,例如可通过对原子操作的形式来对读写冲突表中的变量进行操作。另外,读写冲突表中
不一定记录表1中的位置,而可以直接记录交易编号,以指示当前对变量进行访问的交易,
当交易投机执行完成之后可将该读写冲突表中对该交易的记录进行删除。
就在该变量访问表中记录对变量a的在先访问,该实施方式相比于上述实施方式,对于正在
投机执行的交易Tx1在先读取变量a,并且交易Tx2中请求读取变量a的情况也进行对交易
Tx2的阻塞投机执行,但是由于对于前述读写冲突和写写冲突都可以对交易Tx2进行阻塞投
机执行,因此,整体上仍然能提高节点的交易处理效率。
量,并执行步骤S304。
访问表中的变量a的访问记录中记录(Pos2,t2),在表2中释放对变量a的锁定,并继续投机
执行交易Tx2,其中,Pos2为待投机执行交易表或阻塞交易表中记录交易Tx2的位置,t2为交
易Tx2的开始投机执行的时间。如果交易Tx2中不包括对其它变量的访问,则线程2可完成对
交易Tx2的投机执行,在内存中存储交易Tx2的投机执行的执行结果,在区块链节点中设置
的已投机执行交易表中按照交易投机执行完成的先后顺序记录交易Tx2,并在待投机执行
交易表(或阻塞交易表)中删除交易Tx2的列,例如将表1中的Tx3的相关内容移动到第2列
中。如果交易Tx2除了变量a之外还包括对变量b的访问,则与上文类似地基于变量b的读写
记录确定交易Tx2是否与正在投机执行的其它交易存在访问冲突。
执行完成之后再投机执行交易Tx2。通过确保在投机执行交易Tx1之后投机执行交易Tx2,使
得各个节点投机执行交易Tx1和Tx2的顺序是一致的,从而防止某些节点在共识之后的正式
执行交易时该交易的投机执行结果失效。
开始投机执行时间
设阻塞交易表当前未记录阻塞交易,线程2可在左起第2列的阻塞交易信息中记录存储交易
Tx2的交易内容的内存地址,以链接到交易Tx2,并在第2列第2行的解阻时间中记录交易Tx2
解阻的时间t3,即交易Tx2可再次投机执行的最早时间。时间t3通过对交易Tx1的开始投机
执行时间t1增加预定时间长度(例如200微秒)而确定,所述预定时间长度用于确保在时间
t3之后(包括时间t3),交易Tx1已经投机执行完成。所述预定时间长度基于预计的交易执行
时间和进程调度扰动来确定。例如,对于交易执行耗时较小、执行阶段基本不会被打扰、存
储访问等性能波动很小的系统,可将该预定时间长度设定为较短,否则将该预定时间长度
设定为较长。
机执行之后,可在该阻塞交易表中记录相应交易的开始投机执行时间,以便于在与其它交
易存在读写冲突时,用于计算其它交易的解阻时间。与上述待投机执行交易表类似地,所述
开始投机投机执行时间也可以不记录在阻塞交易表中,而是记录在相应交易的交易内容的
记录地址中。
线程可首先获取阻塞交易表中最左侧的被阻塞的交易进行投机执行,其它线程可以从左到
右的顺序获取阻塞交易表中的各个阻塞的交易。在阻塞交易表中的交易被取空或者获取的
阻塞交易的解阻时间晚于当前时间的情况中,线程可从待投机执行交易表中获取未开始投
机执行的交易进行投机执行。通过这样获取交易进行投机执行,可将阻塞交易表实现为先
入先出队列(First Input First Output,FIFO)。可以理解,上述获取交易的顺序不是必需
的,只要保证阻塞交易表中的交易在该表中记录的解阻时间之后执行即可。线程2在阻塞交
易表中记录交易Tx2之后,这里,由于交易Tx2是阻塞交易表中解阻时间最早的交易,线程2
可在待投机执行交易表中获取其它交易进行投机执行。
间t3,在t4≥t3的情况中,线程1可开始投机执行交易Tx2,并再次对交易Tx2执行上述步骤
S304,在确定没有其它正在投机执行的交易与交易Tx2存在访问冲突的情况中,线程1可执
行步骤S308,完成对交易Tx2的投机执行,并存储交易Tx2的投机执行的执行结果,在表3中
删除交易Tx2的列,并在已投机执行交易表中按照交易Tx2的投机执行完成的先后顺序记录
交易Tx2。在另一种实施方式中,线程在投机执行完成交易Tx2之后,可基于交易Tx2的开始
投机执行的时间顺序在已投机执行交易表中进行记录。表4示出已投机执行交易表中记录
的内容。
已经记录了交易Tx1,从而,按照交易投机完成的先后顺序,在已投机执行交易表中,在记录
交易Tx1标识的位置的右侧记录交易Tx2的标识。
S401,线程获取阻塞交易表中未开始投机执行交易的最早解阻时间etime。如上文所述,线
程在获取交易投机执行时,首先确定阻塞交易表中有没有解阻时间已经过了的交易,以首
先投机执行被阻塞的交易。例如,参考表3,假设表3中的左起第3列和第4列都记录了被阻塞
的交易,由于该阻塞交易表以从左向右的顺序记录解阻时间从先到后的交易,因此,如果表
3中指示Tx2尚未被投机执行,则t3即为最早解阻时间etime。
的t3),则说明交易Tx2当前可以再次投机执行,因此,线程执行步骤S404,获取阻塞交易表
中的etime对应的交易(即交易Tx2)。
参考表1,在如上文所述将交易Tx2从待投机执行交易表中删除之后,表1中未开始投机执行
的最早接收的交易为Tx3,因此,线程可获取交易Tx3进行投机执行。
易Tx3的情况中,线程执行步骤S406,在表1中记录交易Tx3的开始投机执行时间。
过图5详细描述线程对变量访问表进行操作的流程图。
骤S409,将交易Tx2记录到已投机执行交易表中,即,将交易Tx2从阻塞交易表中删除,并如
表4所示将交易Tx2以投机执行成功的时间顺序记录到已投机执行交易表中。同时,线程在
内存中保存对交易Tx2的投机执行的结果,该投机执行的结果中包括读取的变量的值可写
入的变量的值。其中,在投机执行的过程中,当读取例如变量a的值时,首先确定为投机执行
交易所分配的内存空间(或者其它存储空间)中是否维护有变量a的值,如果内存中维护了
变量a的值,则从内存中读取变量a的值,如果内存中未找到变量a的值,则可从世界状态数
据库中读取变量a的值,并在内存中存储该变量a的值。当在投机执行的过程中对变量a进行
写入时,修改内存中维护的变量a的值,而不将该值更新到世界状态数据库中。
交易表中当前记录的交易Tx2删除,并按照交易Tx2的重新确定的解阻时间的顺序在阻塞交
易表中再次记录交易Tx2的信息,以使得交易Tx2再次滞后投机执行。
对变量(例如变量a)的写请求,所述线程基于变量访问表确定是否有正在投机执行的其它
交易预先对变量a进行了读操作,从而确定是否存在读写冲突。可以理解,对于不同交易之
间的其它类型的访问冲突,可使用与图5所示流程类似的流程进行操作,例如,所述线程还
可以基于变量访问表确定是否有正在投机执行的其它交易预先对变量a进行了写操作,从
而确定是否存在写写冲突。
应的第2列的第2行进行互斥性操作而获取变量锁,从而在确定该位置为空的情况中在该位
置记录“L”,以用于指示变量访问表中的变量a的信息已经被锁定。所述互斥性操作例如为
原子操作等操作,在此不作限定。
取了变量a,因此,线程可执行步骤S507,在写记录表项中记录当前交易的信息,即记录交易
Tx2的记录位置(即记录交易Tx2的待投机执行交易表或阻塞交易表中的位置)和开始投机
执行时间。其中,该记录可以为插入式的记录,也可以为覆盖式的记录。所述插入式的记录
为在之前记录的交易信息的后面记录当前交易的信息,而不覆盖之前交易的信息,所述插
入式的记录中的各个交易信息例如可以为链表的形式。所述覆盖式的记录为用当前交易信
息覆盖之前记录的交易信息,即在写记录表项中只记录最新的交易信息。之后可执行步骤
S508,返回变量a的变量锁,并执行步骤S509,返回继续投机执行的标识。从而线程可对变量
a进行写入,并继续投机执行交易Tx2。
式,在该读记录表项中可以插入式地记录过去读取该变量的多个交易的交易信息,也可以
覆盖式地只记录过去读取该变量的最新交易的交易信息。在变量a的读记录表项中只记录
最新的交易信息的情况中,参考表2,即读取(Pos1,t1),这里bt=t1,Pos1为记录该最新的交
易的位置,根据该交易是从待投机执行交易表中获取还是从阻塞交易表中获取,该Pos可以
为待投机执行交易表中的位置或者阻塞交易表中的位置,例如,这里Pos1为如表1所示的待
投机执行交易表中的第1列。之后,线程执行步骤S504,获得Pos对应交易的开始投机执行时
间ct。具体是,线程可读取待投机执行交易表中的第1列中记录的开始投机执行时间ct(其
值为t1)。然后,线程执行步骤S505,比较bt是否等于ct。在变量a的读记录表项中记录过去
访问变量a的多个交易的交易信息的情况中,线程可相对于每个交易的交易信息执行步骤
S503~S505,在此不再详述。
读取操作现在已经终止,因此不会与当前执行的交易存在读写冲突,从而线程执行步骤
S506,从读记录表项中删除当前信息,之后执行步骤S507~S509,该对步骤S507~S509的执
行过程可参考上文的描述,在此不再详述。如果在步骤S505确定bt=ct,则说明读记录表项
中记录的交易当前正在投机执行中,并且该交易与线程当前执行的交易存在读写冲突。从
而,为了保证各个节点的读写一致性,线程将结束对当前交易的投机执行,并使得该当前交
易滞后执行,具体是,线程执行步骤S508,释放锁,即将变量访问表中的变量的变量锁删除,
然后执行步骤S509,返回结束投机执行标识,线程在执行该步骤之后将继续执行图4中的步
骤S410,将交易记录到阻塞交易表中,在执行该步骤中,线程基于与当前交易存在读写冲突
的交易的开始投机执行时间(即ct)确定该当前交易的解阻时间。
根据交易池中的交易发起共识提议以将经共识的交易入块。记账节点为了保证投机执行的
执行结果大部分可用,可根据已经投机执行的交易的顺序来发起共识提议。
机执行交易表中获取顺序排列的多个交易作为共识提议中的以同样顺序排列的多个交易。
多个交易排列在已经共识提议的多个交易之后一起作为共识提议。如果共识提议的交易数
量仍然不足,记账节点还可以从如表1所示的待投机执行交易表中获取顺序排列的多个交
易排列在已经共识提议的多个交易的后面一起作为共识提议。
交易一致,因此,可直接使用这些交易的投机执行的结果作为正式执行的结果。由于共识提
议中的排列在中间的多个交易从阻塞交易表中顺序获取,该多个交易的排列在前面的若干
交易可能已经执行了一部分,并存储了部分执行结果,则可以使用该部分执行结果完成对
交易的执行。其它非记账节点在执行该共识的交易的过程中,对于共识提议中的已经投机
执行、且在共识提议中的排列顺序与投机执行的顺序一致的交易,可以直接使用本地对该
交易的投机执行的执行结果,对于共识提议中的已经投机执行、但是在共识提议中的排列
顺序与投机执行的顺序不一致的交易,在待执行的交易在共识之后执行时的世界状态与对
该交易的投机执行时的世界状态一致的情况中,可将对该交易的投机执行的执行结果用作
为该交易在共识之后的执行结果,否则丢弃投机执行的执行结果,重新执行该交易。
性,并且根据投机执行的顺序确定共识交易的顺序,从而使得各个节点的在共识后执行交
易时可以大概率地复用已经投机执行的交易的投机执行结果,提高了交易处理效率。
的投机执行。
易和所述第一交易的执行顺序提出共识提议。
交易在先写入了所述第一交易中请求读取的变量;确定正在投机执行的第二交易在先写入
了所述第一交易中请求写入的变量。
机执行结果,以所述第一交易的开始或结束投机执行的时间顺序在已投机执行交易表中记
录所述第一交易。
易在先访问了所述第一交易中将要访问的变量的情况中,结束对所述第一交易的投机执
行,在对第二交易的投机执行完成之后再次进行对所述第一交易的投机执行。
值,从所述存储空间中存储的各个变量的值中读取所述第一交易请求读取的变量的值。
施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例
的部分说明即可。
执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺
序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可
以的或者可能是有利的。
楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组
成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计
约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功
能,但是这种实现不应认为超出本申请的范围。其中,软件模块可以置于随机存储器(RAM)、
内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD‑
ROM、或技术领域内所公知的任意其它形式的存储介质中。
的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含
在本发明的保护范围之内。