1.本说明书实施例属于区块链技术领域,尤其涉及一种在区块链中执行交易的方法、区块链、主节点和从节点。
背景技术:
2.区块链(blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。然而,由于调用智能合约的交易在执行前不能预知访问的变量,因此通常不能并行执行。
技术实现要素:
3.本发明的目的在于提供一种在区块链中执行交易的方法,使得可以区块链中的从节点可根据主节点的共识提议并行执行交易。
4.本说明书第一方面提供一种在区块链中执行交易的方法,所述区块链包括主节点和从节点,所述方法包括:
5.所述主节点预执行接收的多个交易,生成多个变量各自的访问列表和各个交易的交易信息,其中,所述访问列表包括顺序排列的多个表项,每个表项中包括该表项的顺序号、访问该变量的交易标识和访问类型,所述顺序号与该表项中的交易对该变量的访问顺序对应,所述交易信息包括该交易访问的变量标识和对该变量的访问对应的顺序号;
6.所述主节点将所述多个变量的访问列表和所述多个交易的交易信息发送给所述从节点;
7.所述从节点基于所述多个变量的访问列表和所述多个交易的交易信息执行所述多个交易。
8.本说明书第二方面提供一种区块链,包括主节点和从节点,
9.所述主节点用于预执行接收的多个交易,生成多个变量各自的访问列表和各个交易的交易信息,其中,所述访问列表包括顺序排列的多个表项,每个表项中包括该表项的顺序号、访问该变量的交易标识和访问类型,所述顺序号与该表项中的交易对该变量的访问顺序对应,所述交易信息包括该交易访问的变量标识和对该变量的访问对应的顺序号;将所述多个变量的访问列表和所述多个交易的交易信息发送给所述从节点;
10.所述从节点用于基于所述多个变量的访问列表和所述多个交易的交易信息执行所述多个交易。
11.本说明书第三方面提供一种区块链主节点,包括:
12.预执行单元,用于预执行接收的多个交易,生成多个变量各自的访问列表和各个交易的交易信息,其中,所述访问列表包括顺序排列的多个表项,每个表项中包括该表项的顺序号、访问该变量的交易标识和访问类型,所述顺序号与该表项中的交易对该变量的访
问顺序对应,所述交易信息包括该交易访问的变量标识和对该变量的访问对应的顺序号;
13.发送单元,用于将所述多个变量的访问列表和所述多个交易的交易信息发送给所述区块链的从节点。
14.本说明书第四方面提供一种区块链从节点,包括:
15.接收单元,用于从所述主节点接收多个变量的访问列表和多个交易的交易信息,所述多个变量访问列表和多个交易的交易信息由主节点预执行所述多个交易之后生成,其中,所述访问列表包括顺序排列的多个表项,每个表项中包括该表项的顺序号、访问该变量的交易标识和访问类型,所述顺序号与该表项中的交易对该变量的访问顺序对应,所述交易信息包括该交易访问的变量标识和对该变量的访问对应的顺序号;
16.执行单元,用于基于所述多个变量的访问列表和所述多个交易的交易信息执行所述多个交易。
17.通过本说明书实施例提供的在区块链中执行交易的方案,从节点根据主节点生成的变量的访问队列和交易信息执行交易,对于没有冲突的交易可以并行执行,对于有冲突的交易可根据访问队列记录的交易的先后顺序先后执行,从而提高了交易执行效率。
附图说明
18.为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
19.图1为本说明书一实施例所应用的区块链架构图;
20.图2为本说明书一实施例中的在区块链中执行交易的方法流程图;
21.图3为本说明书一实施例中生成访问列表和交易信息的过程示意图;
22.图4为本说明书一实施例中的在从节点中执行交易的过程示意图;
23.图5为本说明书一实施例中的区块链主节点的架构图;
24.图6为本说明书一实施例中的一种区块链从节点的架构图。
具体实施方式
25.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
26.图1示出本说明书一实施例所应用的区块链架构图。如图1中,区块链中例如包含主节点1、从节点2~从节点6共6个节点。节点之间的连线示意性的表示p2p(peer to peer,点对点)连接。这些节点上都存储全量的账本,即存储全部区块和全部账户的状态。其中,区块链中的每个节点通过执行相同的交易而产生区块链中的相同的状态,区块链中的每个节点存储相同的状态数据库。所不同的是,主节点1可负责从客户端接收交易,并向各个从节点发起共识提议,该共识提议中例如包括将要成块的区块(例如区块b1)中的多个交易及各
个交易的提交顺序等信息。在区块链中的节点对共识提议共识成功之后,各个节点可根据共识提议中的提交顺序执行该多个交易,从而生成区块b1。
27.可以理解,图1所示的区块链仅仅是示例性的,本说明书实施例不限于应用于图1所示的区块链,例如还可以应用于包括分片的区块链系统中。
28.另外,图1中虽然示出了区块链中包括6个节点,本说明书实施例不限于此,而是可以包括其他数目的节点。具体是,区块链中包含的节点可以满足拜占庭容错(byzantine fault tolerance,bft)要求。所述的拜占庭容错要求可以理解为在区块链内部可以存在拜占庭节点,而区块链对外不体现拜占庭行为。一般的,一些拜占庭容错算法中要求节点个数大于3f 1,f为拜占庭节点个数,例如实用拜占庭容错算法pbft(practical byzantine fault tolerance)。
29.区块链领域中的交易可以指在区块链中执行并记录在区块链中的任务单元。交易中通常包括发送字段(from)、接收字段(to)和数据字段(data)。其中,在交易为转账交易的情况中,from字段表示发起该交易(即发起对另一个账户的转账任务)的账户地址,to字段表示接收该交易(即接收转账)的账户地址,data字段中包括转账金额。在交易调用区块链中的智能合约的情况中,from字段表示发起该交易的账户地址,to字段表示交易所调用的合约的账户地址,data字段中包括调用合约中的函数名、及对该函数的传入参数等数据,以用于在交易执行时从区块链中获取该函数的代码并执行该函数的代码。
30.区块链中可提供智能合约的功能。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。在以太坊中调用智能合约,是发起一笔指向智能合约地址的交易,使得以太坊网络中每个节点分布式地运行智能合约代码。需要说明的是,除了可以由用户创建智能合约,也可以在创世块中由系统设置智能合约。这类合约一般称为创世合约。一般的,创世合约中可以设置一些区块链的数据结构、参数、属性和方法。此外,具有系统管理员权限的账户可以创建系统级的合约,或者修改系统级的合约(简称为系统合约)。其中,所述系统合约可用于在区块链中增加不同业务的数据的数据结构。
31.在部署合约的场景中,例如,bob将一个包含创建智能合约信息(即部署合约)的交易发送到如图1所示的区块链中,该交易的data字段包括待创建的合约的代码(如字节码或者机器码),交易的to字段为空,以表示该交易用于部署合约。节点间通过共识机制达成一致后,确定合约的合约地址“0x6f8ae93
…”
,各个节点在状态数据库中添加与该智能合约的合约地址对应的合约账户,分配与该合约账户对应的状态存储,并将合约代码保存在该合约的状态存储中,从而合约创建成功。
32.在调用合约的场景中,例如,bob将一个用于调用智能合约的交易发送到如图1所示的区块链中,该交易的from字段是交易发起方(即bob)的账户的地址,to字段中的“0x6f8ae93
…”
代表了被调用的智能合约的地址,交易的data字段包括调用智能合约的方法和参数。在区块链中对该交易进行共识之后,区块链中的各个节点可分别执行该交易,从而分别执行该合约,基于该合约的执行更新状态数据库。
33.在相关技术中,为了提高区块链中的每秒执行交易(tps)指标,需要加快交易的执行速度。为此,区块链节点中可通过并行执行交易来加快交易的执行速度。在一种实施方式中,区块链节点可通过单机中的多个进程并行执行交易,在另一种实施方式中,区块链节点
可部署在服务器集群中,通过多台服务器并行执行交易。通常,对于转账交易,区块链节点首先根据交易访问的账户将多个交易划分为多个交易组,各个交易组之间不访问相同的账户,从而可并行执行各个交易组。然而,当交易中调用智能合约时,在执行该交易之前不能预知该交易中访问的变量,从而无法对多个交易进行有效的分组,也就无法并行执行交易。
34.在另一种相关技术中,可由主节点执行交易,并将执行结果发送给从节点进行验证,为了加速验证阶段,主节点会在执行时仅打包无冲突的交易,将有冲突的交易推迟到下一个区块打包,这样从节点可以实现并发验证。然而,在该方式中,当交易间的冲突率较高时,这些交易会被放到不同的区块中,降低了系统性能,增大了存储成本。
35.图2为本说明书一实施例中的在区块链中执行交易的方法流程图,该方法可由图1所示的主节点和各个从节点执行,图2中示出主节点1和从节点2作为示例,可以理解,区块链中的其他从节点进行与从节点2相同的操作。
36.如图2所示,首先,在步骤s201,主节点1预执行接收的多个交易,生成多个变量各自的访问列表和各个交易的交易信息。
37.所述预执行是指主节点在进行共识提议前对交易的执行。在进行共识提议之前,主节点1还未设置各个交易的提交顺序,主节点1可按照任意顺序进行对交易的预执行。例如,主节点1可按照接收各个交易的先后顺序预执行接收的各个交易,或者主节点1也可以在同时接收到多个交易之后,并行预执行该多个交易。
38.主节点1在成功预执行各个交易之后,根据各个交易对变量的读写操作维护变量最新状态集(下文标识为预执行状态集),并根据预执行状态集预执行其他交易。
39.例如,交易txi中包括对变量a的读操作和对变量b的写操作。主节点1在预执行交易txi时,在执行对变量a的读操作时,确定预执行状态集是否有变量a的值,如果没有则从状态数据库中读取变量a的值,在交易txi的预执行读集中记录变量a的键值对,并在预执行状态集中存储该读取的变量a的值,如果预执行状态集中包括变量a的值,则直接从预执行状态集中读取变量a的值,在交易txi的预执行读集中记录变量a的键值对。主节点1在执行对变量b的写操作时,在交易txi的预执行写集中记录变量b的键值对。从而得到交易txi的预执行读写集。
40.主节点1在完成对交易txi的预执行之后,判断交易txi的预执行读集与预执行状态集中的变量值是否一致,如果不一致说明交易txi与其他在先预执行的交易存在冲突,则重新预执行交易txi,如果一致,则确定交易txi成功预执行,根据交易txi的预执行读写集更新预执行状态集,即将预执行读写集中的变量b的键值对更新到预执行状态集中。
41.主节点1可在预执行完成每个交易之后更新变量的访问列表,并根据变量的访问列表生成该交易的交易信息。其中,所述访问列表包括顺序排列的多个表项,每个表项中包括该表项的顺序号、访问该变量的交易标识和访问类型,所述顺序号与该表项中的交易对该变量的访问顺序对应。具体是,所述访问列表可以为链表的形式。所述访问类型包括共享类型和独占类型。其中,如果交易仅包括对某个变量的读操作,则该交易对该变量的访问类型为共享类型,如果交易仅包括对某个变量的写操作或者交易包括对某个变量的写操作和读操作,则该交易对该变量的访问类型为独占类型。所述交易信息包括该交易访问的变量标识和对该变量的该次访问对应的顺序号。主节点1可在交易的预执行读写集中与读或者写的变量关联地存储该交易对变量的访问对应的顺序号。
42.图3为本说明书一实施例中生成访问列表和交易信息的过程示意图。
43.参考图3中的上部,假设交易a中包括对变量x的读访问,主节点1在预执行交易a之后,在变量信息中更新变量x的信息。假设当前变量信息中不包括变量x的访问列表,从而,主节点1生成变量x的访问列表的第1个表项,该第1个表项即是变量x的访问列表的头部表项,也是尾部表项。该第1个表项中的顺序号为0,访问类型为共享类型,交易集合(图3中以{}示出)中包括交易a的标识(例如“a”)。同时,主节点1在交易信息部分添加交易a的信息,其中关联地记录了变量x的标识和交易a对变量x的访问对应的顺序号(例如“x.0”)。
44.假设交易b中也包括对变量x的读访问,主节点1在预执行交易b之后,根据变量信息可确定变量x的访问列表中的尾部表项(即顺序号为0的表项)的访问类型为共享类型,因此,主节点1可直接在该表项中的交易集合中添加交易b的标识。同时,主节点1在交易信息部分添加交易b的信息,其中关联地记录了变量x的标识和交易b对变量x的访问对应的顺序号(例如“x.0”)。
45.可以理解,图3中虽然示出将交易a和交易b都写入访问队列的一个表项中,本说明书实施例不限于此,例如,也可以将交易a和交易b写入不同顺序号的两个表项中,通过该两个表项中的共享类型确定该两个变量可以并行执行。
46.假设交易c中包括对变量的写访问,主节点1在预执行交易c之后,与上文类似地,在变量信息中生成变量y的访问列表的第1个表项。该表项的顺序号为0,访问类型为独占类型,交易队列(图3中以《》示出)包括交易c的标识。其中,交易队列与上述交易集合的区别在于,在执行交易(或者验证交易是否可执行)时,不需要考虑交易集合中的多个交易的排列顺序,而需要考虑交易队列中的多个交易的排列顺序。同时,主节点1在交易信息部分添加交易c的信息,其中关联地记录了变量y的标识和交易c对变量y的访问对应的顺序号(例如“y.0”)。可以理解,假设交易c中除了包括对变量y的写操作之外还包括对变量y的读操作,同样地生成如表3中上部所示的变量y的表项和交易c的交易信息。
47.也就是说,主节点1在预执行完成交易a、交易b和交易c之后,得到图3上部所示的变量信息和交易信息。
48.参考图3中的中部,假设交易d包括对变量x的写访问和对变量y的读访问。主节点1在预执行完成交易d之后,对于变量x,由于变量x的当前尾部表项的访问类型为共享类型(参考图3上部),因此,主节点1在变量x的访问列表中顺序增加一个表项作为新的尾部表项。该新增加的表项的顺序号为1,访问类型为独占类型,交易队列中包括交易d的标识。对于变量y,由于变量y的当前尾部表项的访问类型为独占类型(参考图3上部),因此,主节点1在变量y的访问列表中顺序增加一个表项作为新的尾部表项。该新增加的表项的顺序号为1,访问类型为共享类型,交易集合中包括交易d的标识。同时,主节点1在交易信息中增加交易d的信息,该信息中关联地记录变量x和顺序号1,以及关联地记录变量y和顺序号1。
49.参考图3中的下部,假设交易e包括对变量x的写访问和对变量y的读访问。主节点1在预执行完成交易e之后,对于变量x,由于变量x的当前尾部表项的访问类型为独占类型(参考图3中部),因此,主节点1在该尾部表项中的交易队列中顺序添加交易d的标识。对于变量y,由于变量y的当前尾部表项的访问类型为共享类型(参考图3中部),因此,主节点1在变量y的该尾部表项中的交易集合中添加交易e的标识。同时,主节点1在交易信息中增加交易e的信息,该信息中关联地记录变量x和顺序号1,以及关联地记录变量y和顺序号1。
50.可以理解,虽然图3中示意示出将交易d和交易e记录到一个表项中的交易队列中,本说明书实施例不限于此。例如,可以将交易d和交易e写入不同顺序号的两个表项中,从而可通过顺序号的先后顺序指示交易d和交易e的执行顺序。
51.在一种实施方式中,在表项中,除了记录如图3所示的顺序号之外,还可以记录另一个版本号。例如如图3中中部所示,在预执行完成交易d添加变量x的第2个表项后,在该第2个表项中除了记录顺序号“1”之外,还增加版本号“1”,如图3中下部所示,在预执行完成交易e之后,在变量x的第2个表项中将版本号加1,即更新为“2”。在共享型表项中,可设置恒定为预设值或者空值的版本号。假设交易f中包括对变量x的读取,主节点在预执行交易f时读取变量x时,记录在读取变量x时变量x的尾部表项的顺序号和版本号。具体是,如果交易f读取变量x时的变量x的访问队列如图3中上部所示,则记录尾部表项的顺序号为0,版本号为空,如果交易f读取变量x时的变量x的访问队列如图3中中部所示,则记录尾部表项的顺序号为1,版本号为1。主节点在预执行完交易f之后,再次读取当前变量x的尾部表项的最新顺序号和版本号,如果与预执行过程中记录的顺序号和版本号一致,则可确认交易f读取了正确的值,交易f预执行成功,如果与预执行过程中记录的顺序号和版本号不一致,则可确认交易f读取了错误的值,交易f预执行失败。通过比较顺序号和版本号来确定交易是否预执行成功,相比于前述的在预执行完成交易之后比较读取的变量状态值和变量当前状态值的方法,节省了读取和比较的数据量,提高了交易预执行的效率。
52.在步骤s203,主节点1将变量信息和交易信息发送给从节点2。
53.主节点1可如上所述预执行多个交易,从而可获取该多个交易访问的多个变量各自的访问列表、以及该多个交易各自的交易信息。主节点1可将该多个交易的交易信息和该多个变量的访问列表作为共识提议发送给各个从节点(包括从节点2)。主节点1还可以将接收的多个交易发送给各个从节点。可以理解,各个从节点也可能从其他从节点或者客户端接收到多个交易。各个从节点也可以从其他从节点接收到该多个交易的交易信息和该多个变量的访问列表。
54.在步骤s205,从节点2基于多个变量的访问列表和多个交易的交易信息执行所述多个交易。
55.从节点2中可通过多个线程并行执行交易。具体是,可以将变量信息中的多个变量分成多个组,使得每个线程根据一个组中的多个变量的访问列表执行交易。例如,线程1可处理变量x的访问列表,线程2可并行地处理变量y的访问列表。
56.图4为本说明书一实施例中的在从节点中执行交易的过程示意图。
57.参考图4的上部,线程1首先读取变量x的访问列表的头部表项,从该表项的交易集合中获取交易a和交易b的标识。之后,线程1读取交易a的交易信息x.0,即交易a只访问了变量x,并且该次访问对应的顺序号为0,与当前变量x的头部表项中的顺序号一致,因此,线程1确定交易a当前可执行。类似地,线程1可确定交易b当前可执行。也就是说,交易a和交易b当前可并行执行。线程1可指示另一个线程执行交易b,以使得在从节点2中并行执行交易a和交易b。线程1也可以串行地执行交易a和交易b,或者以“交易b-交易a”的先后顺序串行执行交易a和交易b。
58.与线程1并行地,线程2读取变量y的访问列表的头部表项,从该表项的交易队列中获取交易c的标识。之后,线程2读取交易c的交易信息y.0,类似地可确定交易c当前可执行。
因此,线程2可执行交易c。也就是说,在从节点2中根据变量信息和交易信息实现了并行执行多个交易,提高了交易执行效率。
59.线程1在执行完成交易a之后,将变量x的头部表项中的交易集合中的交易a的标识删除,在执行完成交易b之后,由于交易集合中只剩下交易b,因此将该头部表项删除,从而得到如图4的中部所示的变量x的访问列表。
60.参考图4的中部,线程1再次读取变量x的当前头部表项,从该表项的交易队列中获取排在首位的交易d的标识。之后,线程1读取交易d的交易信息x.1,y.1,即交易d以顺序号1访问了变量x、以顺序号1访问了变量y。线程1根据当前的变量信息可确定:变量x的当前头部表项的顺序号为1,与交易d访问变量x的顺序号一致,变量y的当前头部表项的顺序号为0,与交易d访问变量y的顺序号不一致。因此,线程1可确定交易d当前不可执行,即需要等待交易c执行完成之后才可以执行。也就是说,在从节点2中根据变量信息和交易信息实现了串行执行存在变量访问冲突的多个交易,提高了交易执行的正确率。另外,由于交易e在交易队列中排在交易d之后,因此,线程1可确定交易e当前不可执行。线程1在确定交易d和交易e当前不可执行之后,可根据分给线程1的组中其他变量的访问列表获取其他可执行的交易进行交易执行,并在空闲时再次读取变量x的访问列表,以确定交易d是否可以执行。
61.线程2在执行完成交易c之后,在变量y的访问队列中删除当前的头部表项,得到图4中下部所示的访问队列。
62.参考图4的下部,线程1再次对变量x的头部表项中的交易进行确定,此时,交易d中的交易信息中的变量x和变量y对应的顺序号与变量信息中的各个变量的头部表项中的顺序号一致,且交易d在变量x的访问列表表项中的交易队列中排在首位、交易d还位于交易d访问的另一个变量y的访问列表表项的交易集合中(即不涉及交易执行顺序),因此,线程1可确定交易d可执行,并开始执行交易d。线程1在执行完成交易d之后可删除变量x的访问列表的头部表项中的交易d、以及变量y的访问列表的头部表项中的交易d。
63.线程2可类似地确定变量y的交易队列中的交易是否可执行,由于线程1已经开始执行交易d,因此,线程2可确定交易d不可执行,并继续确定交易e是否可执行。线程2读取交易e的交易信息x.1,y.1,即交易e以顺序号1访问了变量x、以顺序号1访问了变量y。线程2根据当前的变量信息可确定:变量x的当前头部表项的顺序号为1,与交易e访问变量x的顺序号一致,变量y的当前头部表项的顺序号为1,与交易e访问变量y的顺序号一致。线程2继续根据变量x的访问列表可确定交易e在交易队列的非首位的位置(即排在交易d之后),因此可确认交易e当前不可执行。线程2可在交易d执行完成之后执行交易e。
64.图5为本说明书一实施例中的区块链主节点的架构图,包括:
65.预执行单元51,用于预执行接收的多个交易,生成多个变量各自的访问列表和各个交易的交易信息,其中,所述访问列表包括顺序排列的多个表项,每个表项中包括该表项的顺序号、访问该变量的交易标识和访问类型,所述顺序号与该表项中的交易对该变量的访问顺序对应,所述交易信息包括该交易访问的变量标识和对该变量的访问对应的顺序号;
66.发送单元52,用于将所述多个变量的访问列表和所述多个交易的交易信息发送给所述区块链的从节点。
67.在一种实施方式中,在所述访问列表中的多个表项中,每两个相邻表项的访问类
型包括共享类型和独占类型,所述共享类型的表项中包括读取该变量的一个或多个交易的交易标识,所述独占类型的表项中包括顺序排列的写该变量的一个或多个交易的交易标识。
68.在一种实施方式中,所述多个交易中包括第一交易,所述第一交易包括对所述第一变量的读操作,所述预执行单元51具体用于:
69.在预执行完成所述第一交易之后,在所述第一变量的第一访问列表的作为当前尾部表项的第一表项为共享类型的情况中,将所述第一交易的标识添加到所述第一表项的交易集合中,将所述第一顺序号与所述第一变量的标识关联地记录到所述第一交易的交易信息中;
70.在所述第一变量的第一访问列表的作为当前尾部表项的第一表项为独占类型的情况中,在所述第一访问列表中在所述第一表项之后添加第二表项,所述第二表项包括:第二顺序号、共享类型、包括第一交易标识的交易集合,将所述第二顺序号与所述第一变量的标识关联地记录到所述第一交易的交易信息中。
71.在一种实施方式中,所述多个交易中包括第一交易,所述第一交易包括对所述第一变量的写操作,所述预执行单元51具体用于:
72.在预执行完成所述第一交易之后,在所述第一变量的第一访问列表的作为当前尾部表项的第一表项为独占类型的情况中,将所述第一交易顺序添加到所述第一表项中的交易队列中,将所述第一顺序号与所述第一变量的标识关联地记录到所述第一交易的交易信息中;
73.在所述第一变量的第一访问列表的作为当前尾部表项的第一表项为共享类型的情况中,在所述第一访问列表中在所述第一表项之后添加第二表项,所述第二表项包括:第二顺序号、独占类型、包括第一交易的标识的交易队列,将所述第二顺序号与所述第一变量的标识关联地记录到所述第一交易的交易信息中。
74.在一种实施方式中,所述预执行单元51具体用于,基于预执行状态集预执行接收的第一交易,在预执行完成所述第一交易之后,基于所述第一交易的预执行读写集更新所述预执行状态集。
75.在一种实施方式中,所述第一交易的预执行读写集包括对第一变量的读操作,所述预执行单元具体51用于:确定所述预执行读写集中所述第一变量的值与所述预执行状态集中的所述第一变量的值是否一致,在一致的情况中,基于所述第一交易的预执行读写集更新所述预执行状态集。
76.图6为本说明书一实施例中的一种区块链从节点的架构图,包括:
77.接收单元61,用于从所述主节点接收多个变量的访问列表和多个交易的交易信息,所述多个变量访问列表和多个交易的交易信息由主节点预执行所述多个交易之后生成,其中,所述访问列表包括顺序排列的多个表项,每个表项中包括该表项的顺序号、访问该变量的交易标识和访问类型,所述顺序号与该表项中的交易对该变量的访问顺序对应,所述交易信息包括该交易访问的变量标识和对该变量的访问对应的顺序号;
78.执行单元62,用于基于所述多个变量的访问列表和所述多个交易的交易信息执行所述多个交易。
79.在一种实施方式中,所述执行单元62具体用于:
80.选取第一变量的第一访问列表,所述第一访问列表的当前头部表项包括第一交易的标识;
81.读取所述第一交易的交易信息,确定所述第一交易访问的多个变量及各个变量对应的顺序号,所述多个变量中包括所述第一变量;
82.在确定所述多个变量中的任一变量对应的顺序号与该变量当前的访问列表中的头部表项中的顺序号不一致的情况中,确定所述第一交易不可执行。
83.在一种实施方式中,所述执行单元62具体用于:
84.在确定所述多个交易中的第二交易可执行之后,执行所述第二交易,所述第二交易中包括对第二变量的访问;
85.在所述第二变量的第二访问列表中的当前头部表项中删除所述第二交易。
86.在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmable logic device,pld)(例如现场可编程门阵列(field programmable gate array,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardware description language,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advanced boolean expression language)、ahdl(altera hardware description language)、confluence、cupl(cornell university programming language)、hdcal、jhdl(java hardware description language)、lava、lola、myhdl、palasm、rhdl(ruby hardware description language)等,目前最普遍使用的是vhdl(very-high-speed integrated circuit hardware description language)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
87.控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(application specific integrated circuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc 625d、atmel at91sam、microchip pic18f26k20以及silicone labs c8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视
为既可以是实现方法的软件模块又可以是硬件部件内的结构。
88.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本技术不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
89.虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
90.为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
91.本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
92.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
93.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
94.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网
络接口和内存。
95.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
96.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
97.本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
98.本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
99.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
100.以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
转载请注明原文地址:https://tc.8miu.com/read-2079.html