CN115760386A - 区块链系统中的交易执行方法和区块链节点 - Google Patents
区块链系统中的交易执行方法和区块链节点 Download PDFInfo
- Publication number
- CN115760386A CN115760386A CN202211347291.2A CN202211347291A CN115760386A CN 115760386 A CN115760386 A CN 115760386A CN 202211347291 A CN202211347291 A CN 202211347291A CN 115760386 A CN115760386 A CN 115760386A
- Authority
- CN
- China
- Prior art keywords
- chain
- transaction
- code segment
- keys
- blockchain
- 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
Landscapes
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
一种区块链系统中的交易执行方法和区块链节点。由节点执行的方法涉及包括第一代码段、第二代码段和第三代码段的智能合约,该方法包括:接收用于调用第一代码段的第一链上交易;根据第一链上交易执行第一代码段,获得用于调用第二代码段的链下交易;根据链下交易执行第二代码段,获得用于调用第三代码段的第二链上交易,第二链上交易包括链下进行第一操作的操作结果;根据第二链上交易执行第三代码段,以实现:记录第二链上交易包括的操作结果,在已记录的操作结果的数量达到第一预设数量且存在至少第二预设数量个相同的目标操作结果,而目标操作结果与世界状态相一致的情况下,根据目标操作结果进行第二操作,并存储第二操作的操作结果。
Description
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种区块链系统中的交易执行方法和区块链节点。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。
发明内容
本发明的目的在于提供一种区块链系统中的交易执行方法和区块链节点,高耗时交易的执行不会对区块链系统中生成区块的时间造成较大影响,可以提高区块链系统的性能。
第一方面,提供了一种区块链系统中的交易执行方法,所述区块链系统中部署有智能合约,所述智能合约包括第一代码段、第二代码段和第三代码段,所述区块链系统包括多个区块链节点,所述方法由所述区块链节点执行。所述方法包括:接收用于调用所述第一代码段的第一链上交易;根据所述第一链上交易执行所述第一代码段,获得用于调用所述第二代码段的链下交易,所述链下交易用于指示在链下进行第一操作;根据所述链下交易执行所述第二代码段,获得所述第一操作的操作结果,并生成用于调用所述第三代码段的第二链上交易,所述第二链上交易中包括所述第一操作的操作结果;将所述第二链上交易广播至所述区块链系统中的其它区块链节点,以及从所述区块链系统的其它区块链节点接收其对应生成的第二链上交易;根据所述第二链上交易执行所述第三代码段,以实现:在所述智能合约的合约状态中与所述第一链上交易关联地记录所述第二链上交易中所包括的操作结果,在已记录的与所述第一链上交易关联的操作结果的数量达到第一预设数量,已记录的与所述第一链上交易关联的操作结果中存在至少第二预设数量个相同的目标操作结果,并且所述目标操作结果与所述区块链系统在当前时刻的世界状态相一致的情况下,根据所述目标操作结果执行第二操作,并存储所述第二操作的操作结果。
第二方面,提供了一种区块链系统中的区块链节点,所述区块链系统中部署有智能合约,所述智能合约包括第一代码段、第二代码段和第三代码段,所述区块链系统包括多个区块链节点。所述区块链节点包括:通信处理单元,配置为接收用于调用所述第一代码段的第一链上交易;链上交易执行单元,配置为根据所述第一链上交易执行所述第一代码段,获得用于调用所述第二代码段的链下交易,所述链下交易用于指示在链下进行第一操作;链下交易执行单元,配置为根据所述链下交易执行所述第二代码段,获得所述第一操作的操作结果,并生成用于调用所述第三代码段的第二链上交易,所述第二链上交易中包括所述第一操作的操作结果;所述通信处理单元,还配置为将所述第二链上交易广播至所述区块链系统中的其它区块链节点,以及从所述区块链系统的其它区块链节点接收其对应生成的第二链上交易;所述链上交易执行单元,还配置为根据所述第二链上交易执行所述第三代码段,以实现:在所述智能合约的合约状态中与所述第一链上交易关联地记录所述第二链上交易中所包括的操作结果,在已记录的与所述第一链上交易关联的操作结果的数量达到第一预设数量,已记录的与所述第一链上交易关联的操作结果中存在至少第二预设数量个相同的目标操作结果,并且所述目标操作结果与所述区块链系统在当前时刻的世界状态相一致的情况下,根据所述目标操作结果执行第二操作,并存储所述第二操作的操作结果。
第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面中所述的方法。
第四方面,提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面所述的方法。
在本说明书实施例的方案中,区块链节点在第一链上交易的触发下通过智能合约来执行的操作被划分为高耗时的第一操作和低耗时的第二操作,第一链上交易可以触发智能合约的第一代码段生成链下交易;多个区块链节点可以分别在链下独立执行该链下交易,单个区块链节点在执行前述链下交易的过程中,可以通过执行智能合约的第二代码段来完成对第一操作的执行,获得第一操作的操作结果并生成包含该操作结果的第二链上交易;最后,可以基于多个区块链节点各自生成的第二链上交易分别执行智能合约的第三代码段,实现从第一操作的多个操作结果中确定出正确的目标操作结果,基于目标操作结果完成对低耗时的第二操作的执行并将第二操作的操作结果上链。总而言之,区块链节点在链上交易的触发下通过智能合约执行的操作,可以被划分为高耗时操作和低耗时操作两个组成部分,高耗时操作在链下执行,低耗时操作在链上执行,不会对区块链系统中生成区块的时间造成较大影响,可以提高区块链系统的性能。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1示出了一实施例中的区块链架构图;
图2为PBFT共识算法中的共识过程示意图;
图3是相关技术中的共识节点的区块链数据存储的结构示意图;
图4为MPT树的结构示意图;
图5为本说明书实施例中提供的一种区块链系统中的交易执行方法的流程图;
图6为本说明书实施例中示例性提供的执行由区块链节点生成的链上交易的过程示意图;
图7为本说明书实施例中提供一种区块链节点的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
图1示出了一实施例中的区块链架构图。在图1所示的区块链架构图中,区块链系统100中包括N个节点,图1中示意示出节点1-节点8。节点之间的连线示意性的表示P2P(Peer to Peer,点对点)连接,所述连接例如可以为TCP连接等,用于在节点之间传输数据。这些节点上可存储全量的账本,即存储全部区块和全部账户的状态。其中,区块链系统中的每个节点可通过执行相同的链上交易而产生相同的状态,区块链系统中的每个节点可存储相同的状态数据库,状态数据库中存储的全部账户的状态也经常被表述为区块链系统的世界状态。
区块链领域中的交易是指在区块链系统中执行的任务单元,其可以被划分为链上交易和链下交易两种类型。对于链上交易而言,需要通过相应的共识机制对该链上交易进行共识,并在对该链上交易达成共识的情况下才对该链上交易进行执行;对于链下交易而言,获得链下交易的区块链节点可以直接执行该链下交易,无需通过相应的共识机制对该链上交易进行共识。其中需要特别说明的是,区块链节点对链下交易的执行通常并不会对区块链系统的世界状态直接造成改变,因此区块链节点对链下交易的执行通常不会影响区块链系统的可靠性。
交易中通常包括发送字段(From)、接收字段(To)和数据字段(Data)。其中,在交易为转账交易的情况中,From字段表示发起该交易(即发起对另一个账户的转账任务)的账户地址,To字段表示接收该交易(即接收转账)的账户地址,Data字段中包括转账金额。
区块链系统可提供智能合约的功能。智能合约是在区块链系统上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。在区块链系统中调用智能合约,是发起一笔指向智能合约地址的交易,使得区块链系统中的每个节点分布式地运行智能合约定义的代码。
在部署智能合约的场景中,例如,Bob将一个包含创建智能合约信息(即部署合约)的交易发送到如图1所示的区块链系统中,该交易的data字段包括待创建的合约的代码(如字节码或者机器码),交易的to字段为空,以表示该交易用于部署合约。节点间通过共识机制达成一致后,确定合约的合约地址“0x6f8ae93…”,各个节点在状态数据库中添加与该智能合约的合约地址对应的合约账户,分配与该合约账户对应的状态存储,并存储合约代码,将合约代码的哈希值保存在该合约的状态存储中,从而合约创建成功。
在调用智能合约的场景中,例如,Bob将一个用于调用智能合约的交易发送到如图1所示的区块链中,该交易的from字段是交易发起方(即Bob)的账户的地址,to字段为上述“0x6f8ae93…”,即被调用的智能合约的地址,交易的data字段包括调用智能合约的方法和参数。在区块链系统中对该交易进行共识之后,区块链中的各个节点可分别执行该交易,从而分别执行该合约,基于该合约的执行更新状态数据库。
区块链技术区别于传统技术的去中心化特点之一,就是在各个节点上进行记账,或者称为分布式记账,而不是传统的集中式记账。区块链系统要成为一个难以攻破的、公开的、不可篡改数据记录的去中心化诚实可信系统,需要在尽可能短的时间内做到分布式数据记录的安全、明确及不可逆。不同类型的区块链网络中,为了在各个记录账本的节点中保持账本的一致,通常采用共识算法来保证,即前述提到的共识机制。例如,区块链节点之间可以实现区块粒度的共识机制,比如在节点(例如某个独特的节点)产生一个区块后,如果产生的这个区块得到其它节点的认可,其它节点记录相同的区块。再例如,区块链节点之间可以实现交易粒度的共识机制,比如在节点(例如某个独特的节点)获取一笔区块链交易后,如果这笔区块链交易得到其他节点的认可,认可该区块链交易的各个节点可以分别将该区块链交易添加至自身维护的最新区块中,并且最终能够确保各个节点产生相同的最新区块。共识机制是区块链节点就区块信息(或称区块数据)达成全网一致共识的机制,可以保证最新区块被准确添加至区块链。当前主流的共识机制包括:工作量证明(Proof ofWork,POW)、股权证明(Proof of 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,PP)、准备(Prepare,P)和提交(Commit,C)四个阶段。假设一区块链中包括节点n1-节点n4四个共识节点,其中,节点n1例如为主节点,节点n2-节点n4例如为从节点,根据PBFT算法,在节点n1-节点n4中可容忍f=1个恶意节点。具体是,在请求阶段,区块链的用户可通过其用户设备向节点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在确定提交阶段完成之后,执行所述多个交易,并根据多个交易的执行结果更新世界状态,生成并存储区块。通过上述过程,实现了节点n1、节点n2和节点n3的存储一致性。也就是说,节点n1-节点n4在存在一个恶意节点的情况下仍可以实现对共识提议的共识成功,完成对区块的执行。
图3是相关技术中的共识节点的区块链数据存储的结构示意图。在图3所示的区块链数据存储中,每一区块的区块头包括若干字段,例如上一区块哈希previous_Hash(图中的Prev Hash),随机数Nonce(在一些区块链系统中这个Nonce不是随机数,或者在一些区块链系统中不启用区块头中的Nonce),时间戳Timestamp,区块号Block Num,状态树根哈希State_Root,交易树根哈希Transaction_Root,收据树根哈希Receipt_Root等。其中,下一区块(如区块N+1)的区块头中的Prev Hash指向上一区块(如区块N),即为上一区块的区块hash值(即区块头的哈希值)。通过这种方式,区块链上通过区块头实现了下一区块对上一区块的锁定。特别的,如前所述,state_root是当前区块中所有账户的状态组成的状态树(state trie)的根的哈希值,该状态树例如为MPT树(Merkle Patricia Tree)。
MPT树是结合了Merkle Tree(默克尔树)和Patricia Tree(压缩前缀树,一种更节省空间的Trie树,字典树)的一种树形结构。Merkle Tree算法对每个叶子节点都计算一个Hash(哈希)值,然后两两连接再次计算Hash,一直到最顶层的Merkle根。以太坊中采用改进的MPT树,MPT树例如是16叉树的结构。
状态树中包含以太坊网络中每个账户所对应的存储内容的键值对(key andvalue pair)。状态树中的“键”可以是一个160位的标识符(以太坊账户的地址),这个账户地址中包含的字符分布于从状态树的根节点到叶子节点的路径中的各个节点中。参考图3中所示,MPT状态树的叶子节点(例如节点t4和节点t5)还包括各个账户的Value。其中,当账户为用户账户(又称为外部账户)时,例如图3中的账户A,账户的Value中包括计数器(Nonce)和余额(Balance)。当账户为合约账户时,例如图3中的账户B,账户的Value中包括计数器(Nonce)、余额(Balance)、合约代码哈希值(CodeHash)和存储树根哈希值(Storage_root)。其中,所述计数器,对于外部账户代表从账户地址发送的交易数量;对于合约账户,是账户创建的合约数量。
状态树中的节点通过哈希进行连接,具体是,可以基于父节点的子节点中的数据生成哈希值,将该生成的哈希值存储在父节点中。图4为MPT树的结构示意图。假设图4中的节点t2对应于图3中的状态树中的节点t2,节点t4对应于图3中的状态树中的叶子节点t4。如图4所示,图4中的各个叶子节点中包括的状态分别表示为state1、state2、state3、state4,各个状态也即为各个账户的Value。图4中各个节点中的左侧框中的字符用于对账户进行索引,叶子节点到根节点之间的路径中的各个节点中包括的字符拼接起来即为该叶子节点对应的账户地址。例如,state1所在叶子节点到根节点之间的各个节点包括字符“f”、“5”和“324”,从而可以得到state1对应的账户地址为“f5324”。
在图4中,包括“5”的节点的子节点中包括叶子节点,在计算该节点中包括的hash(324,74)时,可通过如下的公式1计算:
hash(324,74)=hash(hash(324,hash(state1)),hash(74,hash(a,c))) (1)
也就是说,在计算图4中的叶子节点t4的哈希值hash(324,hash(state1)时,对节点t4中的“324”和state1的哈希值hash(state1)进行拼接,然后对拼接的数据计算哈希值,得到叶子节点的哈希值。在计算图4中的非叶子节点(例如包括“74”的节点)的哈希值hash(74,hash(a,c))时,对该节点中的数据直接拼接,然后对拼接得到的数据计算哈希值。可以理解,状态树中的节点的哈希值为基于节点的全部数据计算得到的哈希值,状态树中的非叶子节点、且非根节点的节点中包括的哈希值是对其全部子节点的哈希值拼接之后取哈希得到的哈希值。
如此可在状态树中从下至上计算叶子节点与根节点之间的每个节点中包括的哈希值,从而最后可将计算得到的图3中的节点t2的哈希值与节点t3的哈希值拼接,并对拼接得到的数据取哈希,从而生成节点t1的哈希值。该节点t1的哈希值即为该状态树的状态根,记录在区块N的State_Root字段中。
在MPT树的一种变型中,可以包括分支节点,分支节点可以连接多个子节点,且分支节点中包括其连接的每个子节点中的数据的哈希值,即,分支节点中包括与多个主节点分别对应的多个哈希值,叶子节点连接在分支节点之后。该变型中还包括扩展节点,扩展节点可连接于分支节点之前或之后,扩展节点具有一个子节点,扩展节点中包括与其连接的子节点中的全部数据的哈希值。在该MPT树变型中,同样地可基于各层节点递归得到根节点的哈希值。本说明书实施例方案也同样适用于该种MPT树变型。
智能合约在区块链上完成部署后,会产生一个对应的合约账户。这个合约账户一般会具有一些状态,这些状态由智能合约中的状态变量所定义、并在智能合约创建、执行时产生新的值。如图3所示,合约的相关状态保存在存储树(storage trie)中,图3中示意示出了账户B对应的合约的存储树。存储树根节点st1的hash值即存储于上述storage_root中,从而将该合约的所有状态通过根hash锁定到状态树中该合约账户的Value(即账户状态)下。存储树也可以具有MPT树形结构,与图4所示状态树类似地,从根节点到叶子节点的路径中的每个节点可包括用于寻址变量名的字符,叶子节点中存储有变量的Value,从而存储了变量名(也可以称为状态地址)到状态值的key-value映射。例如,参考图3中的存储树,该存储树的叶子节点st2、st3例如包括变量a的Value、变量b的Value等,以变量a为例,在存储树中的根节点到叶子节点st2的节点路径中的各个节点包括的字符构成变量a的变量名称,该变量名称可以是类似地由16进制字符构成的key。
其中,对存储树中的各个节点的哈希值的计算可参考对状态树中的节点的哈希值计算方法。具体是,在计算存储树中的叶子节点的哈希值时,对该叶子节点中包括的部分key和叶子节点中的状态的哈希值进行拼接,然后对拼接的数据计算哈希值,得到叶子节点的哈希值。在计算存储树中的非叶子节点且非根节点的节点的哈希值时,对该节点中的数据直接拼接,然后对拼接得到的数据计算哈希值,得到该节点的哈希值。
智能合约可能支持基于单个交易,对世界状态中多个被查询的key的值执行查询和/或较为复杂的计算逻辑,即对前述状态树和/或存储树中多个key的值执行查询和/或较为复杂的计算逻辑,并对应的更新世界状态中部分key的值。对于请求调用该智能合约的交易而言,因该交易可能造成对世界状态的更改,该交易通常为链上交易而不能为链下交易;此外,因基于该交易执行智能合约的过程中需要对多个被查询的key的值执行查询和/或较为复杂的计算逻辑,可能导致区块链节点完成对该交易执行需要花费相对较长的时间,进而导致区块链系统无法较为快速的完成生成包含该交易的区块,对区块链系统的整体性能造成负面影响。
鉴于以上问题,本说明书实施例中至少提供了一种区块链系统中的交易执行方法和区块链节点。区块链节点在第一链上交易的触发下通过智能合约来执行的操作被划分为高耗时的第一操作和低耗时的第二操作,第一链上交易可以触发智能合约的第一代码段生成链下交易;多个区块链节点可以分别在链下独立执行该链下交易,单个区块链节点在执行前述链下交易的过程中,可以通过执行智能合约的第二代码段来完成对第一操作的执行,获得第一操作的操作结果并生成包含该操作结果的第二链上交易;最后,可以基于多个区块链节点各自生成的第二链上交易分别执行智能合约的第三代码段,实现从第一操作的多个操作结果中确定出正确的目标操作结果,基于目标操作结果完成对低耗时的第二操作的执行并将第二操作的操作结果上链。总而言之,区块链节点在链上交易的触发下通过智能合约执行的操作,可以被划分为高耗时操作和低耗时操作两个组成部分,高耗时操作在链下执行,低耗时操作在链上执行,不会对区块链系统中生成区块的时间造成较大影响,可以提高区块链系统的性能。
图5为本说明书实施例中提供的一种区块链系统中的交易执行方法的流程图。其中该区块链系统中包括多个区块链节点,该多个区块链节点例如是区块链系统中参与执行共识机制的多个共识节点。该区块链系统中部署有智能合约C1,智能合约C1中例如包括代码段P1、代码段P2和代码段P3。该方法例如可以由前述多个区块链节点中的任一区块链节点执行,即前述多个区块链节点中的每个区块链节点均可以执行该方法。参照图5所示,该方法可以包括但不限于如下步骤S501~步骤S511中的部分或全部。
在步骤S501,接收第一链上交易Tx1,第一链上交易用于调用智能合约C1的代码段P1。
执行步骤S501的区块链节点例如可以是共识提议节点,该区块链节点可以从业务请求方或者区块链系统中的其它区块链节点接收到来自业务请求方的第一链上交易Tx1。执行步骤S501的区块链节点例如可以是除共识提议节点以外的其它共识节点,该区块链节点可以通过从共识提议节点接收包含第一链上交易Tx1的共识提议实现接收第一链上交易Tx1。
业务请求方可以向区块链系统发起第一链上交易Tx1,触发区块链系统通过智能合约C1执行特定的操作,该操作在逻辑意义上可以被划分为高耗时的无需对世界状态进行修改的第一操作和低耗时的需要对世界状态进行修改的第二操作。与之相应的是,可以在编写智能合约的过程中,对应编写包含代码段P1、代码段P2和代码段P3的智能合约C1。代码段P1用于支持基于第一链上交易Tx1生成链下交易Tx2;代码段P2用于支持基于链下交易Tx2执行第一操作,以及生成包含第一操作的操作结果的第二链上交易;代码段P3用于支持基于第二链上交易执行第二操作,并存储第二操作的操作结果。
高耗时的第一操作例如可以包括,从区块链系统的世界状态中查询多个被查询的key的值,和/或,基于区块链系统的世界状态中存储的多个被查询的key的值执行较为复杂的计算逻辑。更具体地说,前述多个被查询的key例如可以包括多个期望查询的key和/或若干待更新的key,其中第一链上交易Tx1的data字段所包括的参数可以指示前述多个期望查询的key,而前述若干待更新的key例如可以由智能合约C1自行定义。与之相应的,第二操作例如是基于若干待更新的key的值以及智能合约C1预定的计算逻辑计算若干待更新的key的更新值。
在步骤S503,根据第一链上交易Tx1执行智能合约C1的代码段P1,获得用于调用代码段P2的链下交易Tx2,链下交易Tx2用于指示在链下进行第一操作。
对于区块链系统中未作恶的区块链节点,其在正确执行第一链上交易Tx1后,可以获得相同的链下交易Tx2。在一种可能的实施方式中,对于第一链上交易Tx1中指示的多个期望查询的key,正确的链下交易Tx2中同样可以指示该多个期望查询的key。在另一种可能的实施方式中,代码段P1中可以预先定义若干待更新的key,从而使得区块链节点通过执行代码段P1而生成的链下交易Tx2还可以指示若干待更新的key。此外需要特别说明的是,为了方便后续对应记录第一操作的操作结果,根据第一链上交易Tx1执行智能合约C1的代码段P1时,还可以在智能合约的合约状态中记录第一链上交易Tx1或者第一链上交易Tx1的哈希值。
在步骤S505,根据链下交易Tx2执行代码段P2,获得第一操作的操作结果,并生成用于调用代码段P3的第二链上交易,第二链上交易中包括第一操作的操作结果。
根据链下交易Tx2执行代码段P2可以完成对第一操作的执行,第一操作的操作结果例如包括多个被查询的key的值,参照前文可知多个被查询的key可以包括多个期望查询的key以及若干待更新的key。其中需要特别说明的是,代码段P1中可以并不定义若干待更新的key,此时链下交易Tx2并不指示若干待更新的key,与之相应的是代码段P2中可以预先定义若干待更新的key,如此仍然可以使第一操作的操作结果中包括该若干待更新的key的值。
对于区块链系统中未作恶的区块链节点,其在正确执行第一链上交易Tx1以及其各自生成的链下交易Tx2后,可以获得相同的第二链下交易。然而,参照前文对链下交易的相关描述可知,对于单个区块链节点而言,其可以对自身生成的链下交易Tx2进行直接执行,无需通过相应的共识机制与其余区块链节点对其自身生成的链下交易Tx2进行共识;如此则意味着,对于单个区块链节点而言,如果该区块链节点作恶,即该区块链节点未能正确执行第一链下交易Tx1、通过正确执行第一链下交易Tx1而生成的链下交易Tx2,则该区块链节点所生成的第二链上交易中,可能并不包括正确执行第一操作以得到的操作结果。
以区块链系统中的节点1和节点n为例,节点1、节点n和其余共识节点通过相应的共识机制对第一链上交易Tx1达成共识后,节点1和节点n可以通过正确执行第一链上交易Tx1而生成相同的链下交易Tx2。节点1执行其生成的链下交易Tx2后可以对应生成第二链下交易Tx31,节点n执行其生成的链下交易Tx2后可以对应生成第二链上交易Tx3n。如果节点1作恶,例如未能基于链下交易Tx2正确执行代码段P2以实现对第一操作的正确执行,则其获得的第一操作的操作结果D1可能并不准确,换而言之即节点1生成的第二链上交易Tx31中所包括的第一操作的操作结果D1可能并不准确。类似的,如果节点n作恶,则节点n生成的第二链上交易Tx3n中所包括的第一操作的操作结果Dn可能并不准确。
在步骤S507,向其它区块链节点广播其生成的第二链上交易,以及从其它区块链节点接收由其它区块链节点对应生成的第二链上交易。
例如节点1可以向包含节点n在内的其余共识节点广播其生成的第二链上交易Tx31,与之相应的是节点1可以从节点n接收到由节点n生成的第二链上交易Tx3n。
区块链节点可以对其生成和接收的每个第二链上交易均执行如下步骤S509,根据第二链上交易执行代码段P3,以实现:在智能合约C1的合约状态中与第一链上交易Tx1关联地记录第二链上交易中所包括的操作结果,在已记录的与第一链上交易Tx1关联的操作结果的数量达到第一预设数量,已记录的与第一链上交易Tx1关联的操作结果中存在至少第二预设数量个相同的目标操作结果,并且目标操作结果与区块链系统在当前时刻的世界状态相一致的情况下,根据目标操作结果执行第二操作,并将第二操作的操作结果上链。
第一预设数量例如可以是区块链系统中参与执行共识机制的区块链节点的数量,或者也可以是预先设定的经验值。第二预设数量可以基于第一预设数量确定,或者也可以是预先设定的经验值。在一种可能的实施方式中,可以在第一预设数量的取值是3f+1或3f+2的情况下,第二预设数量的值被设置为2f+1。
对于任意第二链上交易例如第二链上交易Tx31,参见图6所示,基于第二链上交易Tx31执行代码段P3的过程中,具体可以实现如下步骤S600~步骤S606中的部分或全部:
步骤600,确定第二链上交易Tx31所属区块的区块高度与第一链上交易Tx1所属区块的区块高度之间的差值是否大于预设阈值。
如果否则继续执行如下步骤601,如果是则可以结束对第二链上交易Tx31的执行过程。
如此可以使区块链节点在至多缓存预设阈值个最新区块的状态更新信息的情况下,支持区块链节点在后续过程中快速决策出正确执行第一操作的目标操作结果与世界状态是否一致。
步骤S601,在智能合约C1的合约状态中与第一链上交易Tx1关联地记录第二链上交易Tx31中所包括的第一操作的操作结果。
其中为了方便对不同第二链上交易所分别包括的第一操作的操作的结果的异同进行比较,还可以选择性的实现步骤S602,在智能合约C1的合约状态中与第一链上交易Tx1关联地记录第二链上交易Tx31中所包括的第一操作的操作结果的哈希值。
步骤S603,确定智能合约C1的合约状态中已记录的并且与第一链上交易Tx1关联的操作结果的数量是否达到第一预设数量。
如果是则继续执行后续步骤S604,否则可以结束对第二链上交易Tx31的执行过程。
步骤S604,确定智能合约C1的合约状态中已记录的并且与第一链上交易Tx1关联的操作结果中,是否存在至少第二预设数量个相同的目标操作结果。
如果是则继续执行后续步骤S605,否则可以结束对第二链上交易Tx31的执行过程。
其中在实现前述步骤S602的基础上,步骤S604中可以比较智能合约C1的合约状态中已记录的并且与第一链上交易Tx1关联的操作结果的哈希值,从而确定出是否存在至少第二预设数量个相同的目标操作结果,无需花费过多的时间对已记录的操作结果进行直接比较。
步骤S605,确定目标操作结果与区块链系统在当前时刻的世界状态是否一致。
如果是则继续执行后续步骤S606,否则可以结束对第二链上交易Tx31的执行过程。
区块链节点中可以缓存其最新生成的多个区块的状态更新信息,状态更新信息中包括若干被更新的key的值。对于单个区块的状态更新信息而言,其可以包括属于该区块的若干交易各自对应的执行写集,执行写集中包括被更新的key。在此基础上,前述步骤S605中,例如可以从区块链节点缓存的状态更新信息中,确定出区块高度不小于k的若干目标区块分别对应的状态更新信息,k表征第一链上交易Tx1在区块链系统中所属区块的区块高度;进而可以根据若干目标区块分别对应的状态更新信息中所包括的被更新的key,确定目标操作结果所包括的多个被查询的key的值与区块链系统在当前时刻的世界状态是否一致。示例性的,对于若干目标区块分别对应的状态更新信息中的每个被更新的key,可以查询目标操作结果中是否存在与其相同的被查询的key,如果是则可以直接确定目标操作结果与区块链系统在当前时刻的世界状态不一致。如此,在被查询的key的数量较大的情况下,由于若干目标区块分别对应的状态更新信息中所包括的被更新的key的数量通常相对较小,相比于直接将目标操作结果中所包括的多个被查询的key的值与区块链系统在当前时刻的世界状态进行比较,可以更为快速的完成确定目标操作结果与区块链系统在当前时刻的世界状态是否一致。
步骤S606,根据目标操作结果执行第二操作,并存储第二操作的操作结果。
第二操作可以是较为简单的确定、判断或计算操作。例如步骤S606中具体可以根据目标操作结果所包括的若干待更新的key的值以及代码段P3中预定义的计算逻辑,确定若干待更新的key各自对应的更新值,进而可以根据若干待更新的key各自对应的更新值,对区块链系统在当前时刻的世界状态进行更新,完成将第二操作的操作结果上链。
回到图5,当第一链上交易Tx1指示多个期望查询的key的情况下,如果目标操作结果与区块链系统在当前时刻的世界状态相一致,则区块链节点还可以执行步骤S511,向业务请求方发送目标操作结果中所包括的多个期望查询的key的值。
与前述方法实施例基于相同的构思,本说明书实施例中提供了一种区块链系统中的区块链节点,所述区块链系统中部署有智能合约,所述智能合约包括第一代码段、第二代码段和第三代码段,所述区块链系统包括多个区块链节点。如图7所示,所述区块链节点包括:通信处理单元71,配置为接收用于调用所述第一代码段的第一链上交易;链上交易执行单元73,配置为根据所述第一链上交易执行所述第一代码段,获得用于调用所述第二代码段的链下交易,所述链下交易用于指示在链下进行第一操作;链下交易执行单元75,配置为根据所述链下交易执行所述第二代码段,获得所述第一操作的操作结果,并生成用于调用所述第三代码段的第二链上交易,所述第二链上交易中包括所述第一操作的操作结果;所述通信处理单元71,还配置为将所述第二链上交易广播至所述区块链系统中的其它区块链节点,以及从所述区块链系统的其它区块链节点接收其对应生成的第二链上交易;所述链上交易执行单元73,还配置为根据所述第二链上交易执行所述第三代码段,以实现:在所述智能合约的合约状态中与所述第一链上交易关联地记录所述第二链上交易中所包括的操作结果,在已记录的与所述第一链上交易关联的操作结果的数量达到第一预设数量,已记录的与所述第一链上交易关联的操作结果中存在至少第二预设数量个相同的目标操作结果,并且所述目标操作结果与所述区块链系统在当前时刻的世界状态相一致的情况下,根据所述目标操作结果执行第二操作,并存储所述第二操作的操作结果。
在一种可能的实施方式中,所述第一链上交易用于指示多个期望查询的key;其中,所述链上交易执行单元73,还配置为在根据所述第二链上交易执行所述第三代码段时,实现在所述目标操作结果与所述区块链系统在当前时刻的世界状态相一致的情况下,向所述业务请求方返回所述目标操作结果中所包括的所述多个期望查询的key的值,所述第一链上交易来自所述业务请求方。
在一种可能的实施方式中,所述链上交易执行单元73,还配置为在根据所述第二链上交易执行所述第三代码段时,实现:在所述智能合约的合约状态中与所述第一链上交易关联地记录所述第二链上交易中所包括的操作结果的哈希值,根据已记录的与所述第一链上交易关联的哈希值,确定已记录的与所述第一链上交易关联的操作结果中是否存在至少第二预设数量个相同的目标操作结果。
在一种可能的实施方式中,所述第一操作包括,从所述区块链系统的世界状态中查询多个被查询的key的值,和/或,基于区块链系统的世界状态中存储的多个被查询的key的值执行所述第二代码段中定义的计算逻辑。
在一种可能的实施方式中,所述第一操作的操作结果中包括多个被查询的key的值;其中,所述链上交易执行单元73,还配置为在根据所述第二链上交易执行所述第三代码段时,实现确定所述区块链系统中区块高度不小于k的若干目标区块分别对应的状态更新信息,所述状态更新信息用于更新所述区块链系统的世界状态,所述状态更新信息中包括若干被更新的key的值,k表征所述第一上链交易所属区块的区块高度;以及,根据所述被更新的key的值,确定所述目标操作结果所包括的所述多个被查询的key的值与所述区块链系统在当前时刻的世界状态是否一致。
在一种可能的实施方式中,所述多个被查询的key中包括若干待更新的key;其中,所述链上交易执行单元73,配置为在根据所述第二链上交易执行所述第三代码段时,实现根据所述目标操作结果所包括的所述多个待更新的key的值确定其各自对应的更新值,并根据所述多个待更新的key各自对应的更新值更新所述区块链系统的世界状态。
在一种可能的实施方式中,所述第一代码段和所述链下交易中指示所述若干待更新的key;或者,所述第二代码段中指示所述若干待更新的key。
在一种可能的实施方式中,所述第一链上交易用于指示多个期望查询的key;所述多个被查询的key中包括所述多个期望查询的key。
本说明书实施例中还提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行前述图5和/或或图6中所示的方法。
本说明书实施例中还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现前述前述图5和/或图6中所示的方法。
在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 (17)
1.一种区块链系统中的交易执行方法,所述区块链系统中部署有智能合约,所述智能合约包括第一代码段、第二代码段和第三代码段,所述区块链系统包括多个区块链节点,所述方法由所述区块链节点执行,所述方法包括:
接收用于调用所述第一代码段的第一链上交易;
根据所述第一链上交易执行所述第一代码段,获得用于调用所述第二代码段的链下交易,所述链下交易用于指示在链下进行第一操作;
根据所述链下交易执行所述第二代码段,获得所述第一操作的操作结果,并生成用于调用所述第三代码段的第二链上交易,所述第二链上交易中包括所述第一操作的操作结果;
将所述第二链上交易广播至所述区块链系统中的其它区块链节点,以及从所述区块链系统的其它区块链节点接收其对应生成的第二链上交易;
根据所述第二链上交易执行所述第三代码段,以实现:在所述智能合约的合约状态中与所述第一链上交易关联地记录所述第二链上交易中所包括的操作结果,在已记录的与所述第一链上交易关联的操作结果的数量达到第一预设数量,已记录的与所述第一链上交易关联的操作结果中存在至少第二预设数量个相同的目标操作结果,并且所述目标操作结果与所述区块链系统在当前时刻的世界状态相一致的情况下,根据所述目标操作结果执行第二操作,并存储所述第二操作的操作结果。
2.根据权利要求1所述的方法,所述第一链上交易用于指示多个期望查询的key;
其中,所述根据所述第二链上交易执行所述第三代码段,还实现:在所述目标操作结果与所述区块链系统在当前时刻的世界状态相一致的情况下,向所述业务请求方返回所述目标操作结果中所包括的所述多个期望查询的key的值,所述第一链上交易来自所述业务请求方。
3.根据权利要求1所述的方法,所述根据所述第二链上交易执行所述第三代码段,还实现:在所述智能合约的合约状态中与所述第一链上交易关联地记录所述第二链上交易中所包括的操作结果的哈希值,根据已记录的与所述第一链上交易关联的哈希值,确定已记录的与所述第一链上交易关联的操作结果中是否存在至少第二预设数量个相同的目标操作结果。
4.根据权利要求1所述的方法,所述第一操作包括,从所述区块链系统的世界状态中查询多个被查询的key的值,和/或,基于区块链系统的世界状态中存储的多个被查询的key的值执行所述第二代码段中定义的计算逻辑。
5.根据权利要求1-4中任一项所述的方法,所述第一操作的操作结果中包括多个被查询的key的值;其中,所述根据所述第二链上交易执行所述第三代码段,还实现:
确定所述区块链系统中区块高度不小于k的若干目标区块分别对应的状态更新信息,所述状态更新信息用于更新所述区块链系统的世界状态,所述状态更新信息中包括若干被更新的key的值,k表征所述第一上链交易所属区块的区块高度;
根据所述被更新的key的值,确定所述目标操作结果所包括的所述多个被查询的key的值与所述区块链系统在当前时刻的世界状态是否一致。
6.根据权利要求5所述的方法,所述多个被查询的key中包括若干待更新的key;
其中,所述根据所述目标操作结果执行所述第二操作,并存储所述第二操作的操作结果,具体包括:根据所述目标操作结果所包括的所述多个待更新的key的值确定其各自对应的更新值,并根据所述多个待更新的key各自对应的更新值更新所述区块链系统的世界状态。
7.根据权利要求6所述的方法,所述第一代码段和所述链下交易中指示所述若干待更新的key;或者,所述第二代码段中指示所述若干待更新的key。
8.根据权利要求5所述的方法,所述第一链上交易用于指示多个期望查询的key;所述多个被查询的key中包括所述多个期望查询的key。
9.一种区块链系统中的区块链节点,所述区块链系统中部署有智能合约,所述智能合约包括第一代码段、第二代码段和第三代码段,所述区块链系统包括多个区块链节点,所述区块链节点包括:
通信处理单元,配置为接收用于调用所述第一代码段的第一链上交易;
链上交易执行单元,配置为根据所述第一链上交易执行所述第一代码段,获得用于调用所述第二代码段的链下交易,所述链下交易用于指示在链下进行第一操作;
链下交易执行单元,配置为根据所述链下交易执行所述第二代码段,获得所述第一操作的操作结果,并生成用于调用所述第三代码段的第二链上交易,所述第二链上交易中包括所述第一操作的操作结果;
所述通信处理单元,还配置为将所述第二链上交易广播至所述区块链系统中的其它区块链节点,以及从所述区块链系统的其它区块链节点接收其对应生成的第二链上交易;
所述链上交易执行单元,还配置为根据所述第二链上交易执行所述第三代码段,以实现:在所述智能合约的合约状态中与所述第一链上交易关联地记录所述第二链上交易中所包括的操作结果,在已记录的与所述第一链上交易关联的操作结果的数量达到第一预设数量,已记录的与所述第一链上交易关联的操作结果中存在至少第二预设数量个相同的目标操作结果,并且所述目标操作结果与所述区块链系统在当前时刻的世界状态相一致的情况下,根据所述目标操作结果执行第二操作,并存储所述第二操作的操作结果。
10.根据权利要求9所述的区块链节点,所述第一链上交易用于指示多个期望查询的key;
其中,所述链上交易执行单元,还配置为在根据所述第二链上交易执行所述第三代码段时,实现在所述目标操作结果与所述区块链系统在当前时刻的世界状态相一致的情况下,向所述业务请求方返回所述目标操作结果中所包括的所述多个期望查询的key的值,所述第一链上交易来自所述业务请求方。
11.根据权利要求9所述的区块链系统,所述链上交易执行单元,还配置为在根据所述第二链上交易执行所述第三代码段时,实现:在所述智能合约的合约状态中与所述第一链上交易关联地记录所述第二链上交易中所包括的操作结果的哈希值,根据已记录的与所述第一链上交易关联的哈希值,确定已记录的与所述第一链上交易关联的操作结果中是否存在至少第二预设数量个相同的目标操作结果。
12.根据权利要求9所述的区块链系统,所述第一操作包括,从所述区块链系统的世界状态中查询多个被查询的key的值,和/或,基于区块链系统的世界状态中存储的多个被查询的key的值执行所述第二代码段中定义的计算逻辑。
13.根据权利要求9-12中任一项所述的区块链节点,所述第一操作的操作结果中包括多个被查询的key的值;其中,所述链上交易执行单元,还配置为在根据所述第二链上交易执行所述第三代码段时,实现确定所述区块链系统中区块高度不小于k的若干目标区块分别对应的状态更新信息,所述状态更新信息用于更新所述区块链系统的世界状态,所述状态更新信息中包括若干被更新的key的值,k表征所述第一上链交易所属区块的区块高度;以及,根据所述被更新的key的值,确定所述目标操作结果所包括的所述多个被查询的key的值与所述区块链系统在当前时刻的世界状态是否一致。
14.根据权利要求13所述的区块链节点,所述多个被查询的key中包括若干待更新的key;其中,所述链上交易执行单元,配置为在根据所述第二链上交易执行所述第三代码段时,实现根据所述目标操作结果所包括的所述多个待更新的key的值确定其各自对应的更新值,并根据所述多个待更新的key各自对应的更新值更新所述区块链系统的世界状态。
15.根据权利要求14所述的区块链节点,所述第一代码段和所述链下交易中指示所述若干待更新的key;或者,所述第二代码段中指示所述若干待更新的key。
16.根据权利要求13所述的区块链节点,所述第一链上交易用于指示多个期望查询的key;所述多个被查询的key中包括所述多个期望查询的key。
17.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算设备中执行时,令所述计算设备执行权利要求1-8中任一项的所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211347291.2A CN115760386A (zh) | 2022-10-31 | 2022-10-31 | 区块链系统中的交易执行方法和区块链节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211347291.2A CN115760386A (zh) | 2022-10-31 | 2022-10-31 | 区块链系统中的交易执行方法和区块链节点 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115760386A true CN115760386A (zh) | 2023-03-07 |
Family
ID=85354609
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211347291.2A Pending CN115760386A (zh) | 2022-10-31 | 2022-10-31 | 区块链系统中的交易执行方法和区块链节点 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115760386A (zh) |
-
2022
- 2022-10-31 CN CN202211347291.2A patent/CN115760386A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021017436A1 (zh) | 区块链状态数据同步方法及装置、电子设备 | |
CN114827165B (zh) | 对多个交易进行分组的方法和区块链节点 | |
CN114710507B (zh) | 一种共识方法、区块链节点、介质和共识节点 | |
WO2024001024A1 (zh) | 在区块链系统中执行交易的方法、区块链系统和节点 | |
WO2023231335A1 (zh) | 在区块链中执行交易的方法及区块链的主节点 | |
WO2023231337A1 (zh) | 在区块链中执行交易的方法、区块链的主节点和从节点 | |
CN114942847A (zh) | 执行交易的方法和区块链节点 | |
WO2024066007A1 (zh) | 区块链系统中的交易执行方法、共识节点和区块链系统 | |
CN116366666A (zh) | 区块链系统中的链状态更新方法和区块链节点 | |
CN115760386A (zh) | 区块链系统中的交易执行方法和区块链节点 | |
CN115150409A (zh) | 在区块链系统中执行交易的方法、区块链系统和节点 | |
CN114785800A (zh) | 跨链通信方法及装置 | |
WO2024066014A1 (zh) | 区块链系统中的交易执行方法和节点 | |
WO2024066006A1 (zh) | 区块链系统中的共识方法、共识节点和区块链系统 | |
CN115641141A (zh) | 区块链系统中的状态验证方法、装置、节点和区块链系统 | |
WO2024066019A1 (zh) | 区块链系统中的交易执行方法、共识节点和区块链系统 | |
CN115665176A (zh) | 区块链系统中节点类型的转换方法、装置及区块链系统 | |
CN115174572B (zh) | 区块链中的数据组播方法、区块链节点和存储介质 | |
CN115174573B (zh) | 区块链系统中的数据广播方法、节点和区块链系统 | |
CN114697344B (zh) | 区块链系统中共识节点的确定方法、区块链系统、节点、存储介质及计算设备 | |
CN116186763A (zh) | 在区块链系统中处理区块数据的方法和装置 | |
CN115658808A (zh) | 一种共识节点类型的转换方法和共识节点 | |
CN116305311A (zh) | 区块链系统中验证读写集的方法和装置 | |
CN116455728A (zh) | 状态数据软件版本切换方法、区块链节点和区块链系统 | |
WO2024066010A1 (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 |