CN109118214A - 运行智能合约的方法和装置 - Google Patents
运行智能合约的方法和装置 Download PDFInfo
- Publication number
- CN109118214A CN109118214A CN201710496967.7A CN201710496967A CN109118214A CN 109118214 A CN109118214 A CN 109118214A CN 201710496967 A CN201710496967 A CN 201710496967A CN 109118214 A CN109118214 A CN 109118214A
- Authority
- CN
- China
- Prior art keywords
- node
- qualifications
- intelligent contract
- endorsement
- operation result
- 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
Classifications
-
- 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/389—Keeping log of transactions for guaranteeing non-repudiation of a transaction
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/1824—Distributed file systems implemented using Network-attached Storage [NAS] architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/1834—Distributed file systems implemented based on peer-to-peer networks, e.g. gnutella
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- General Engineering & Computer Science (AREA)
- Accounting & Taxation (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Finance (AREA)
- General Business, Economics & Management (AREA)
- Strategic Management (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请实施例提供了一种运行智能合约的方法和装置,该方法包括:分布式网络中的处理节点接收共识服务节点发送的交易,该交易包括在智能合约的背书过程中产生的多个运行结果;该处理节点检查该多个运行结果是否满足验证策略,该检查包括对该多个运行结果中由除该智能合约的限定条件之外的其他程序产生的数据和版本号的检查;在该多个运行结果满足该验证策略的情况下,该处理节点识别该智能合约中的限定条件,确定本地账本数据是否满足该限定条件;在该本地账本数据满足该限定条件的情况下,该处理节点接受该交易。本申请实施例的运行智能合约的方法和装置,有利于提高交易写入账本的成功率,从而有利于提高系统的整体性能。
Description
技术领域
本申请实施例涉及信息技术领域,特别涉及信息技术领域中的运行智能合约的方法和装置。
背景技术
互联网上的贸易,几乎都需要借助可信赖的第三方信用机构来处理,而区块链技术基于密码学原理,可以达成一致的双方直接支付,不需要第三方中介的参与。区块链是一个分布式的账本,是一种去中心化的数据库,需要区块链网络中的所有节点集体进行维护,本文称能够处理账本数据的这些节点为处理节点。它包含多个区块(block),每个区块包括若干条交易记录,同时包含了前一个区块的哈希值,这样所有的区块按顺序相连组成了区块链。智能合约(chaincode)是区块链技术中的一个重要概念,智能合约是由事件驱动的、具有状态的、运行在一个复制的、分享的账本之上的、且能够管理账本上数据的程序。智能合约看上去就是一段普通的计算机执行程序,智能合约的代码内容规定了交易的规则和逻辑,使用者签署调用智能合约就意味着合约内容将会被执行,并且执行的结果会被写入账本。
由于区块链是一种去中心化、去信任的分布式账本,因此,区块链网络中的处理节点相互之间并不信任,有可能存在恶意说谎节点,而共识算法可以很好地解决这一问题。虽然区块链网络中的每个处理节点都有可能是恶意说谎节点,但是众多节点聚到一个网络中,它们共识的结果就是一个可信的结果。共识算法的主要作用,就是让区块链网络中的所有处理节点记录相同的有效交易区块内容。在现有的一种共识机制PoE(proof ofendorse)中,客户端在需要运行某一智能合约时,可以先向多个背书节点发送模拟运行智能合约的请求,模拟运行该智能合约。其中,背书节点也属于处理节点,是处理节点中具有背书功能的一部分节点。该多个背书节点运行该智能合约,对自身的运行结果进行签名后返回给客户端(本文称之为“背书”),该客户端再按照区块链消息格式把该多个背书节点的多个运行结果封装到交易消息中,发送给共识服务节点,通过共识服务节点以区块为单位将其广播到该区块链网络中的所有处理节点(包括上述多个背书节点),该区块链网络中的处理节点对接收到的交易进行校验,满足验证策略的交易才会被认为是有效交易,进而对数据进行修改,将更新后的数据写入区块链。这里,用户可以根据自己的实际需求通过客户端设置智能合约要信任的多个背书节点,并设置对该多个背书节点的验证策略,例如,用户A的背书节点可以为3个,用户A的客户端A向这3个背书节点发送模拟运行智能合约的请求,会收到对应的3个运行结果,验证策略可以为3个运行结果的内容必须一致,也可以为至少2个运行结果的内容一致。
实际运行过程中,整个区块链网络是分布式的,并且区块链网络中的每个处理节点都保存一份区块链的完整账本数据。但是由于数据同步会有先后顺序,背书节点在运行某个交易的智能合约时所访问的区块链数据,与该交易后续在该区块链网络中的每个处理节点上要写入本地账本时的数据很有可能会不一致,使得背书节点的背书失效,因此,需要一些机制来防止背书失效的交易写入账本。
现有技术为智能合约的每一个数据设置了一个自增的版本号,每次对数据进行更新就修改一次版本号(例如,版本号加1)。背书节点在运行智能合约的时候,如果需要访问智能合约保存在区块链上的数据,就记录下需要访问的数据的版本号。该背书节点返回给客户端的运行结果中包含这些数据的版本号。该区块链网络中的所有处理节点在进行校验时,需要校验交易中数据的版本号是否与本地账本数据的版本号一致,在一致的情况下,确认该交易为有效交易,对本地账本数据进行更新。
但是,在区块链的数据变化比较频繁时,对于某个交易而言,背书节点在运行智能合约时的访问的本地账本中的数据版本号,与该交易通过共识服务节点广播到区块链网络中的所有处理节点进行验证时各个处理节点的数据版本号很有可能不一致,导致该交易无效。在这种情况下,客户端只好重新发起交易,直到数据版本号一致后交易合法写入账本为止。因此,现有的方法交易写入账本的成功率较低。
发明内容
本申请实施例提供的运行智能合约的方法和装置,有利于提高交易写入账本的成功率,从而有利于提高系统的整体性能。
第一方面,提供了一种运行智能合约的方法,应用于分布式网络中,所述方法包括:所述分布式网络中的处理节点接收共识服务节点发送的交易,所述交易包括在智能合约的背书过程中产生的多个运行结果;所述处理节点检查所述多个运行结果是否满足验证策略,所述检查包括对所述多个运行结果中由除所述智能合约的限定条件之外的其他程序产生的数据和版本号的检查,所述限定条件用于表示运行所述智能合约时所述分布式网络中的账本数据需要满足的条件;在所述多个运行结果满足所述验证策略的情况下,所述处理节点识别所述智能合约中的限定条件,确定本地账本数据是否满足所述限定条件;在所述本地账本数据满足所述限定条件的情况下,所述处理节点接受所述交易。
具体地,限定条件的代码一般为智能合约中修改比较频繁的数据对应的需要满足某种条件的代码,该处理节点接收到的多个运行结果可以分为两种情况:
(1)该多个运行结果为该智能合约的所有程序被运行产生的结果,即该多个运行结果均包括了运行该智能合约的限定条件的程序所产生的数据和版本号,在这种情况下,该处理节点可以忽略该多个运行结果中与该限定条件相关的数据和版本号,仅检查除该限定条件之外的其他程序产生的数据和版本号;
(2)该多个运行结果为运行除上述限定条件之外的其他程序产生的数据和版本号,在这种情况下,该处理节点可以直接对该多个运行结果进行检查。
因此,无论该多个运行结果中是否包括运行上述限定条件的程序产生的数据和版本号,该处理节点在进行检查时,都需要仅仅检查由除该限定条件之外的其他程序产生的数据和版本号。
具体地,分布式网络中的处理节点在按照验证策略对交易的多个运行结果进行验证时,先忽略对变化较频繁的数据对应的限定条件的验证,在多个运行结果中除限定条件之外的数据和版本号满足验证策略之后,再验证本地账本数据是否满足限定条件,在本地账本数据满足限定条件的情况下,接受该交易。
本申请实施例的运行智能合约的方法,通过将变化较频繁的数据对应的限定条件的验证后置,在交易的多个运行结果中除该限定条件之外的数据和版本号满足验证策略之后,再验证本地账本数据是否满足该限定条件,有利于提高交易写入账本的成功率,从而有利于提高系统的整体性能。
在第一方面的第一种可能的实现方式中,所述处理节点为背书节点,在所述处理节点接收共识服务节点发送的交易之前,所述方法还包括:所述处理节点对所述智能合约进行背书,得到本次背书的运行结果;所述处理节点将所述本次背书的运行结果发送给需要在交易中使用所述本次背书的运行结果的客户端或所述客户端的代理节点。
结合第一方面的上述可能的实现方式,在第一方面的第二种可能的实现方式中,所述处理节点对所述智能合约进行背书,得到本次背书的运行结果,包括:所述处理节点接收客户端或所述客户端的代理节点发送的模拟运行所述智能合约的请求,所述请求包括所述智能合约的标识信息;所述处理节点根据所述智能合约的标识信息,识别所述智能合约中的所述限定条件;所述处理节点基于所述本地账本数据运行所述智能合约中除所述限定条件之外的其它程序并进行签名,得到所述本次背书的运行结果。
具体地,该处理节点可以识别该智能合约的限定条件,并基于该处理节点的本地账本数据运行该智能合约中除该限定条件之外的其它程序并进行签名,得到本次背书的运行结果;应理解,该处理节点可以运行该智能合约中的全部程序,也可以仅运行该智能合约中除该限定条件之外的其他程序,本申请实施例对此不作限定。
结合第一方面的上述可能的实现方式,在第一方面的第三种可能的实现方式中,在所述处理节点对所述智能合约进行背书,得到本次背书的运行结果之前,所述方法还包括:所述处理节点接收所述客户端或所述客户端的代理节点发送的所述智能合约的程序;所述处理节点解析所述智能合约的程序,获得所述限定条件的程序;所述处理节点向所述客户端或所述客户端的代理节点发送所述限定条件的程序。
具体地,在所述处理节点即为背书节点的情况下,客户端或该客户端的代理节点可以向背书节点发送智能合约的程序;该背书节点接收该智能合约的程序,对该智能合约的程序进行解析,并将该智能合约的限定条件的代码发送给该客户端或代理节点;该客户端或代理节点接收该限定条件的代码,通过一个交易将该智能合约的限定条件的代码发送给该分布式网络中的所有处理节点。应理解,通过一个交易将一段代码记入到所有处理节点中是现有技术,因此本文不再赘述。
结合第一方面的上述可能的实现方式,在第一方面的第四种可能的实现方式中,所述处理节点为代理节点,在所述处理节点接收共识服务节点发送的交易之前,所述方法还包括:所述处理节点向所述分布式网络中的多个背书节点发送模拟运行所述智能合约的请求,所述请求包括所述智能合约的标识信息;所述处理节点接收所述多个背书节点根据所述请求发送的各自的运行结果;所述处理节点检查接收到的所述多个运行结果是否满足所述验证策略,所述检查包括对所述多个运行结果中由除所述限定条件之外的其他程序产生的数据和版本号的检查;在所述多个运行结果满足所述验证策略的情况下,所述处理节点向客户端发送所述多个运行结果。
在一种可选的实施例中,该处理节点可以先确定上述两个运行结果中签名合法的运行结果的数量是否超过预设值(即验证运行结果的合法性),然后在通过合法性验证的运行结果中确定数据和版本号相同的运行结果的数量是否超过预设值(即验证剩余运行结果的一致性)。
在另一种可选的实施例中,该处理节点可以每收到一个运行结果就检测该运行结果的签名是否合法,如果该运行结果的签名合法,则记录该运行结果的数据和版本号,签名验证不合法则不记录。当该处理节点收到的签名合法的运行结果中,数据和版本号相同的运行结果的数量超过预设值时,该处理节点确定该运行结果满足验证策略。
结合第一方面的上述可能的实现方式,在第一方面的第五种可能的实现方式中,在所述处理节点向所述分布式网络中的多个背书节点发送模拟运行所述智能合约的请求之前,所述方法还包括:所述处理节点向所述多个背书节点发送所述智能合约的程序;所述处理节点接收所述多个背书节点根据所述智能合约的程序发送的所述限定条件的程序;所述处理节点向所述分布式网络中的所有处理节点发送所述限定条件的程序。
应理解,该智能合约的限定条件为背书节点根据智能合约的代码预先解析出来的,背书节点将该限定条件的代码发送给客户端或代理节点,再由代理节点或客户端将该限定条件的代码通过交易记录到分布式网络中的所有处理节点中。
第二方面,提供了另一种运行智能合约的方法,包括:客户端向分布式网络中的多个背书节点发送模拟运行智能合约的请求,所述请求包括所述智能合约的标识信息;所述客户端接收所述多个背书节点根据所述请求发送的各自的运行结果;所述客户端检查接收到的多个运行结果是否满足验证策略,所述检查包括对所述多个运行结果中由除所述智能合约的限定条件之外的其他程序产生的数据和版本号的检查,所述限定条件用于表示运行所述智能合约时所述分布式网络中的账本数据需要满足的条件;在所述多个运行结果满足所述验证策略的情况下,所述客户端向共识服务节点发送包括所述多个运行结果的交易。
在第二方面的第一种可能的实现方式中,在所述客户端向分布式网络中的多个背书节点发送模拟运行智能合约的请求之前,所述方法还包括:所述客户端向所述多个背书节点发送所述智能合约的程序;所述客户端接收所述多个背书节点根据所述智能合约的程序发送的所述限定条件的程序;所述客户端向所述分布式网络中的所有处理节点发送所述限定条件的程序。
第三方面,提供了一种运行智能合约的装置,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行上述第一方面或第一方面的任意可能的实现方式中的方法的单元。
第四方面,提供了另一种运行智能合约的装置,用于执行上述第二方面或第二方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行上述第二方面或第二方面的任意可能的实现方式中的方法的单元。
第五方面,提供了一种运行智能合约的装置,该装置包括:收发器、存储器和处理器。其中,该收发器、该存储器和该处理器通过内部连接通路互相通信,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,以控制接收器接收信号,并控制发送器发送信号,并且当该处理器执行该存储器存储的指令时,该执行使得该处理器执行第一方面或第一方面的任一种可能的实现方式中的方法。
第六方面,提供了一种运行智能合约的装置,该装置包括:收发器、存储器和处理器。其中,该收发器、该存储器和该处理器通过内部连接通路互相通信,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,以控制接收器接收信号,并控制发送器发送信号,并且当该处理器执行该存储器存储的指令时,该执行使得该处理器执行第二方面或第二方面的任一种可能的实现方式中的方法。
第七方面,提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
第八方面,提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第二方面或第二方面的任意可能的实现方式中的方法的指令。
附图说明
图1示出了本申请实施例的网络架构的示意图。
图2示出了根据本申请实施例的运行智能合约的方法的示意性流程图。
图3示出了根据本申请实施例的另一运行智能合约的方法的示意性流程图。
图4示出了根据本申请实施例的另一运行智能合约的方法的示意性流程图。
图5示出了根据本申请实施例的运行智能合约的装置的示意性框图。
图6示出了根据本申请实施例的另一运行智能合约的装置的示意性框图。
图7示出了根据本申请实施例的另一运行智能合约的装置的示意性框图。
图8示出了根据本申请实施例的另一运行智能合约的装置的示意性框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
首先介绍一下本申请实施例所涉及的区块链技术以及智能合约。
区块链技术:区块链首先是一个分布式系统,它基于密码学原理,可以达成一致的双方直接支付,不需要第三方中介的参与。区块链是一个分布式的账本,是一种去中心化的数据库,需要区块链网络中的所有处理节点集体进行维护。它包含多个区块(block),每个区块包括若干条交易记录,同时包含了前一个区块的哈希值,这样所有的区块按顺序相连组成了区块链。
智能合约:智能合约是由事件驱动的、具有状态的、运行在一个复制的、分享的账本之上的、且能够管理账本上数据的程序。智能合约看上去就是一段普通的计算机执行程序,其代码内容规定了交易的规则和逻辑,使用者签署调用智能合约就意味着合约内容将会被执行,执行的结果会被写入账本。
以用区块链及智能合约来实现资产交易为例,一个可能的智能合约伪码如下:
用户如果要购买资产,就会通过客户端发出一个调用BuyOneAsset这个智能合约函数的交易,智能合约会从区块链保存的数据中读取购买者的资金余额、拥有者的资产剩余数量,判断满足交易条件后,执行交易,并修改购买者的资金余额及拥有者的资产剩余数量,当交易经过共识写入账本之后,用户购买资产的交易就成功了。
要保障网络满足不同程度的一致性,往往需要共识算法来达成。下面介绍一下本申请实施例所涉及的共识算法。
共识算法解决的是对某个提案,多个节点达成一致的过程。由于区块链是一种去中心化、去信任的分布式账本,因此,区块链网络中的处理节点相互之间并不信任,有可能存在恶意说谎节点,而共识算法可以很好地解决这一问题。虽然区块链网络中的每个处理节点都有可能是恶意说谎节点,但是众多处理节点聚到一个网络中,它们共识的结果就是一个可信的结果。共识算法的主要作用,就是让区块链网络中的所有处理节点记录相同的有效交易区块内容。常用的共识算法包括实用拜占庭容错(practical byzantine faulttolerance, PBFT)算法、工作量证明(proof of work,PoW)算法、POE(proof of endorse)算法等等。
在PoE算法中,客户端在需要运行某一智能合约时,可以先向多个背书节点发送模拟运行智能合约的请求,模拟运行该智能合约,该多个背书节点运行该智能合约,对自身的运行结果进行签名后返回给客户端(本文称之为“背书”),该客户端再按照区块链消息格式把该多个背书节点的多个运行结果封装到交易消息中,发送给共识服务节点,通过共识服务节点以区块为单位将其广播到该区块链网络中的所有处理节点(包括上述多个背书节点),该区块链网络中的处理节点对接收到的交易进行校验,满足验证策略的交易才会被认为是有效交易,进而对数据进行修改,将更新后的数据写入区块链。这里,用户可以根据自己的实际需求通过客户端设置智能合约要信任的多个背书节点,并设置对该多个背书节点的验证策略,例如,用户A的背书节点可以为3个,用户A的客户端A向这3个背书节点发送模拟运行智能合约的请求,会收到对应的3个运行结果,验证策略可以为3 个运行结果的内容必须一致,也可以为至少2个运行结果的内容一致。应理解,用户的验证策略需要提前被广播到该区块链网络中的所有处理节点。
实际运行过程中,整个区块链网络是分布式的,并且区块链网络中的每个处理节点都保存一份区块链的完整账本数据。但是由于数据同步会有先后顺序,背书节点在运行某个交易的智能合约时所访问的区块链数据,与该交易后续在该区块链网络中的每个处理节点上要写入本地账本时的数据很有可能会不一致,使得背书节点的背书失效,因此,需要一些机制来防止背书失效的交易写入账本。
现有技术为智能合约的每一个数据设置了一个自增的版本号,每次对数据进行更新就修改一次版本号(例如,版本号加1)。背书节点在运行智能合约的时候,如果需要访问智能合约保存在区块链上的数据,就记录下需要访问的数据的版本号。该背书节点返回给客户端的运行结果中包含这些数据的版本号。客户端通过共识服务节点广播的交易消息中也会包含对应的数据的版本号,该区块链网络中的所有处理节点在对交易进行校验时,需要校验交易中数据的版本号是否与本地账本数据的版本号一致,在一致的情况下,确认该交易为有效交易,对本地账本数据进行更新。
但是,在区块链的数据变化比较频繁时,对于某个交易而言,背书节点在运行智能合约时的访问的本地账本中的数据版本号,与该交易通过共识服务节点广播到区块链网络中的所有处理节点进行验证时各个处理节点的数据版本号很有可能不一致,导致该交易无效。在这种情况下,客户端只好重新发起交易,直到数据版本号一致后交易合法写入账本为止。有鉴于此,本申请实施例提出了一种新的运行智能合约的方法。
图1示出了本申请实施例的网络架构100。如图1所示,该网络架构100包括客户端和网络侧,网络侧为分布式网络,分布式网络是由多个节点组成的对等(peer to peer,p2p) 网络,该网络是由分布在不同地点且具有多个终端的节点相互连接组成的。网络中任一节点均至少与两条线路相连,当任意一条线路发生故障时,通信可转经其他链路完成,具有较高的可靠性,同时易于扩充。上述客户端可以通过分布式网络中的节点与网络侧进行通信,从而实现相应的业务需求。
在客户端和网络侧进行通信的过程中,可以根据节点所具有的功能,为不同的节点赋予不同的角色,下面首先介绍一下本申请实施例中所涉及的客户端以及网络侧节点。
(1)客户端:客户端可以根据用户的需求,向用户的背书节点发送模拟运行智能合约的请求,接收背书节点发送的运行结果,并对运行结果进行验证。
(2)处理节点:分布式网络中的基本节点,保存有区块链的一份完整的账本数据,并对本地保存的账本数据进行管理。应理解,一份账本数据通常需要多个处理节点共同进行维护。具体地,处理节点可以接收共识服务节点广播的交易集合,验证交易合法性,在交易合法的前提下修改本地账本数据。
(3)代理节点:具有代理功能的处理节点,代理节点可以代理客户端向背书节点发送模拟运行智能合约的请求,并代理客户端接收背书节点发送的运行结果,并对运行结果进行验证,在运行结果通过验证的情况下,将满足验证策略的运行结果发送给客户端。
(4)背书节点:具有背书功能的处理节点,背书节点一般是一些具有公信力的机构(例如,政府、银行和大型公司等)运行的节点。该背书节点可以接收客户端或代理节点发送的模拟运行智能合约的请求,运行智能合约,并对该智能合约的运行结果进行“背书”,再将该智能合约的运行结果返回给客户端或代理节点。应理解,“背书”即背书节点对自身的智能合约的运行结果内容进行签名,保证该运行结果的合法性。
(5)共识服务节点:用于进行区块的共识服务,主要功能是接收客户端或代理节点发送的交易,根据一定的规则,确定某个区块中应该包含的交易集合(并不对交易的合法性做验证),并确定该交易集合中多个交易的顺序,然后广播该交易集合到该分布式网络中的所有节点(包括背书节点)。应理解,共识服务节点可以是一个节点,也可以是由多个节点组成的集群。
图1示例性地示出了两个客户端以及分布式网络中的节点,包括:客户端110、客户端120、处理节点130-处理节点180以及共识服务节点190。在一个可选的实施例中,该分布式网络可以是区块链网络,但本申请实施例对此不作限定。
下面,以处理节点130、处理节点140和处理节点150为背书节点,处理节点160为客户端120的代理节点为例进行说明。
应理解,用户将哪些节点作为自己的背书节点可以是用户通过客户端提前预设的,例如,客户端110的背书节点为处理节点130和处理节点140,客户端120的背书节点为处理节点130和处理节点150,本申请实施例对此不作限定。对于一个客户端而言,可以具有代理节点,也可以没有代理节点,例如,在上述网络架构100中,处理节点160为客户端120的代理节点,而客户端110并不具有代理节点,本申请实施例对此也不作限定。
还应理解,图1示例性地示出了两个客户端和部分处理节点,可选地,该网络架构100可以包括其它数量的客户端以及其他数量的处理节点,本申请实施例对此不做限定。
上述网络架构100中的各种处理节点的程序基本一样,仅仅因为运行时的角色不同,被划分成不同种类的节点而已。该网络架构100中的处理节点可以根据角色的不同开启或关闭相应的模块,本申请实施例对此不作限定。
在运行某一智能合约时,客户端可以先向多个背书节点发送模拟运行智能合约的请求,模拟运行该智能合约,该多个背书节点运行该智能合约,对自身的运行结果进行背书后返回给客户端,该客户端再按照区块链消息格式把该多个背书节点的多个运行结果封装到交易消息中,发送给共识服务节点,通过共识服务节点以区块为单位将其广播到该分布式网络中的所有处理节点,该分布式网络中的处理节点对接收到的交易进行校验,满足验证策略的交易才会被认为是有效交易,进而对数据进行修改,将更新后的数据写入区块链。
正如前面所提到的,在区块链的数据变化比较频繁时,对于某个交易而言,背书节点在运行智能合约时的访问的本地账本中的数据版本号,与该交易通过共识服务节点广播到分布式网络中的所有处理节点进行验证时各个处理节点的数据版本号很有可能不一致,导致该交易无效。在这种情况下,客户端只好重新发起交易,直到数据版本号一致后交易合法写入账本为止。
由于智能合约中常用的一部分代码逻辑(本文称为限定条件)需要读取区块链中保存的数据,然后根据这些数据及智能合约的这部分代码逻辑进行条件判断。这些数据一般是判断智能合约能够正常执行的前置条件。如果这些数据变化比较频繁,经常会出现无效交易或者重试。因此,本申请的主要思路就是对于区块链中修改比较频繁的数据(即限定条件对应的数据),提供一种机制,使得多个背书节点在运行区块链时忽略这部分数据,从而使多个运行结果更容易达成一致,同时在网络中的处理节点验证交易并将交易最终写入账本之前,再根据该处理节点的本地账本数据来校验这部分数据,如果满足交易成立条件的话,仍然可以接受交易对数据的修改,即将限定条件的判断逻辑后置,从而提高在数据变化比较频繁时,交易的写入成功率,提高系统的整体性能。
下面结合图2和图3对本申请实施例进行详细地说明。
图2示出了本申请实施例的运行智能合约的方法的示意性流程图200。该方法200可以应用于图1所示的网络架构100,但本申请实施例不限于此。应理解,运行智能合约一般包括背书阶段和交易阶段。
具体地,S201-S206为背书阶段,包括:
S201,客户端110分别向多个处理节点(背书节点)发送模拟运行智能合约的请求,该请求中包括该智能合约的标识信息;则对应地,该多个处理节点(背书节点)分别接收该请求;
具体地,以该客户端110仅具有两个背书节点(处理节点130和处理节点140)为例进行说明,在这种情况下,如图2所示,S201可以包括S201a和S201b,S201a和S201b 可以分开执行,也可以同时执行,本申请实施例对此不作限定。
S202,处理节点130根据该请求,运行该智能合约并对运行结果进行背书,得到本次背书的运行结果;
具体地,该处理节点130可以识别该智能合约的限定条件,并基于该处理节点130的本地账本数据运行该智能合约中除该限定条件之外的其它程序并进行签名,得到本次背书的运行结果;应理解,该处理节点130可以运行该智能合约中的全部程序,也可以仅运行该智能合约中除该限定条件之外的其他程序,本申请实施例对此不作限定。
S203,处理节点140根据该请求,运行该智能合约并对运行结果进行背书,得到本次背书的运行结果;
具体地,该处理节点140可以识别该智能合约的限定条件,并基于该处理节点140的本地账本数据运行该智能合约中除该限定条件之外的其它程序并进行签名,得到本次背书的运行结果;应理解,该处理节点140可以运行该智能合约中的全部程序,也可以仅运行该智能合约中除该限定条件之外的其他程序,本申请实施例对此不作限定。
S204,上述多个处理节点(包括处理节点130和处理节点140)向客户端110发送多个本次背书的运行结果;则对应地,该客户端110接收该多个处理节点发送的本次背书的运行结果;
具体地,如图2所示,S204可以包括S204a和S204b,由于每个背书节点对智能合约的处理速度不同,S204a和S204b的执行可以按照任意顺序,本申请实施例对此不作限定。
S205-S211为交易阶段,包括:
S205,客户端110判断上述多个运行结果是否满足验证策略,并将满足验证策略的运行结果封装到交易中;
由于客户端110接收多个运行结果存在先后顺序,且该验证策略一般包括合法性验证和一致性验证,该客户端110对上述多个运行结果的验证可以采用多种验证方式。
在一种可选的实施例中,该客户端110可以先确定上述多个运行结果中签名合法的运行结果的数量是否超过预设值(即验证运行结果的合法性),然后在通过合法性验证的运行结果中确定数据和版本号相同的运行结果的数量是否超过预设值(即验证剩余运行结果的一致性);
在另一种可选的实施例中,该客户端110可以每收到一个运行结果就检测该运行结果的签名是否合法,如果该运行结果的签名合法,则记录该运行结果的数据和版本号,签名验证不合法则不记录。当该客户端110收到的签名合法的运行结果中,数据和版本号相同的运行结果的数量超过预设值时,该客户端110确定该运行结果满足验证策略。
S206,客户端110向共识服务节点190发送上述交易;则对应地,该共识服务节点190接收该交易;
S207,该共识服务节点190按照一定的规则,将一段时间内积累的包括交易A的多个交易按照顺序打包成一个交易集合;
S208,该共识服务节点190向分布式网络中的所有处理节点广播上述交易集合;
应理解,图2仅仅示出了部分处理节点,但这不应对本申请的实施例构成任何限定。在图2中,S208可以包括S208a、S208b、S208c以及S208d,则对应地,处理节点130 接收该交易集合,处理节点140接收该交易集合,处理节点170接收该交易集合,处理节点180接收该交易集合。
为了便于理解和说明,在本申请实施例中,以该分布式网络中的处理节点170为例,应理解,上述所有处理节点中除该处理节点170外的其他处理节点对该交易的下述处理步骤与该处理节点170相同,此处不再赘述。
S209,该处理节点170检查该交易中的多个运行结果是否满足验证策略,这里的检查是指对上述多个运行结果中由除该智能合约的限定条件之外的其他程序产生的数据和版本号的检查,该限定条件用于表示运行该智能合约时该分布式网络中的账本数据需要满足的条件;
具体地,限定条件的代码一般为智能合约中修改比较频繁的数据对应的需要满足某种条件的代码,该处理节点170接收到的多个运行结果可以分为两种情况:
(1)该多个运行结果为该智能合约的所有程序被运行产生的结果,即该多个运行结果均包括了运行该智能合约的限定条件的程序所产生的数据和版本号,在这种情况下,该处理节点170可以忽略该多个运行结果中与该限定条件相关的数据和版本号,仅检查除该限定条件之外的其他程序产生的数据和版本号;
(2)该多个运行结果为运行除上述限定条件之外的其他程序产生的数据和版本号,在这种情况下,该处理节点170可以直接对该多个运行结果进行检查。
因此,无论该多个运行结果中是否包括运行上述限定条件的程序产生的数据和版本号,该处理节点170在进行检查时,都需要仅仅检查由除该限定条件之外的其他程序产生的数据和版本号。
应理解,用户可以根据自己的实际需求通过客户端设置上述智能合约要信任的多个背书节点,并设置对该多个背书节点的验证策略,该验证策略可以包括对多个运行结果的一致性验证。一致性验证可以是在数据和版本号相同的运行结果的数量满足预设值时,认为该多个运行结果通过一致性验证。例如,上述客户端预设的背书节点为3个,对应的验证策略可以为3个运行结果的数据和版本号必须一致,也可以为至少2个运行结果的数据和版本号一致,本申请实施例对此不作限定。
可选地,由于上述多个运行结果是由背书节点进行签名之后生成的,上述验证还可以包括对多个运行结果的合法性进行验证。合法性验证可以是多个运行结果的签名合法的运行结果的数量满足预设值,即认为该多个运行结果通过合法性验证,但本申请实施例对此不作限定。此外,该处理节点170一般需要先对多个运行结果的合法性进行验证,在签名合法的剩余运行结果中再对多个运行结果的一致性进行验证,但本申请实施例对此不作限定。
S210,在上述多个运行结果满足验证策略的情况下,该处理节点170识别该智能合约中的限定条件,确定本地账本数据是否满足该限定条件;
具体地,该处理节点170可以在该多个运行结果满足验证策略(即通过合法性验证和一致性验证)的情况下,确定该智能合约中的限定条件,再确定本地账本数据是否满足该限定条件。应理解,若该多个运行结果不满足上述验证策略,该处理节点170可以直接认为该交易为无效交易,拒绝对本地账本数据进行修改。
应理解,该智能合约的限定条件为背书节点根据智能合约的代码预先解析出来的,背书节点将该限定条件的代码发送给客户端或代理节点,再由代理节点或客户端将该限定条件的代码通过交易记录到分布式网络中的所有节点中。因此,处理节点170能够识别该智能合约的限定条件。
S211,在该处理节点170的本地账本数据满足该限定条件的情况下,该处理节点170 接受该交易。
具体地,该处理节点170可以在本地账本数据满足限定条件的情况下,任务该交易为有效交易,进一步地,该处理节点170可以根据该多个运行结果,修改该处理节点170的本地账本数据。应理解,若该处理节点170的本地账本数据不满足上述限定条件,该处理节点170可以确定该交易为无效交易,拒绝对本地账本数据进行修改。
应理解,该处理节点170接收该交易集合,按照该多个交易的顺序,依次进行处理。由于该多个交易中每个交易的处理方式都与S209-S211中一个交易的处理方式相同,此处不再赘述。
作为一个可选的实施例,在S201之前,上述方法还包括:客户端110向所述多个背书节点(即处理节点130和处理节点140)发送智能合约的程序;该多个背书节点接收该智能合约的程序,对该智能合约的程序进行解析,并将该智能合约的限定条件的代码发送给该客户端110;该客户端110接收该限定条件的代码,通过一个交易将该智能合约的限定条件的代码发送给该分布式网络中的所有处理节点。应理解,通过一个交易将一段代码记入到所有处理节点中是现有技术,因此本文不再赘述。
在本申请实施例中,分布式网络中的所有处理节点在按照验证策略对交易的多个运行结果进行验证时,先忽略对变化较频繁的数据对应的限定条件的验证,在多个运行结果中除限定条件之外的数据和版本号满足验证策略之后,再验证本地账本数据是否满足限定条件,在本地账本数据满足限定条件的情况下,接受该交易。因为在分布式网络的数据变化比较频繁时,对于某个交易而言,背书节点在运行智能合约时的访问的本地账本中的数据和版本号,与该交易通过共识服务节点广播到分布式网络中的所有处理节点进行验证时各个节点的数据和版本号很有可能不一致,在这种情况下,客户端只好重新发起交易,而本申请实施例的方式,避免了由于数据修改比较频繁导致客户端不断重试的情况。
因此,本申请实施例的运行智能合约的方法,通过将变化较频繁的数据对应的限定条件的验证后置,在交易的多个运行结果中除该限定条件之外的数据和版本号满足验证策略之后,再验证本地账本数据是否满足该限定条件,有利于提高交易写入账本的成功率,从而有利于提高系统的整体性能。
应理解,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
以下,为了便于理解和说明,不失一般性,以客户端120存在代理节点(即处理节点160)为例进行说明。
图3示出了本申请实施例的另一运行智能合约的方法的示意性流程图300。该方法300 可以应用于图1所示的网络架构100,但本申请实施例不限于此。
S301,客户端120向处理节点160发送模拟运行智能合约的请求,该请求中包括该智能合约的标识信息;则对应地,该处理节点160接收该请求;
S302,该处理节点160分别向多个处理节点(背书节点)发送模拟运行智能合约的请求;则对应地,该多个处理节点(背书节点)分别接收该请求;
具体地,以该客户端120仅具有两个背书节点(处理节点130和处理节点150)为例进行说明,在这种情况下,如图3所示,S302可以包括S302a和S302b,S302a和S302b 可以分开执行,也可以同时执行,本申请实施例对此不作限定。
S303,该处理节点130根据该请求,运行该智能合约并对运行结果进行背书,得到本次背书的运行结果;
具体地,该处理节点130可以识别该智能合约的限定条件,并基于该处理节点130的本地账本数据运行该智能合约中除该限定条件之外的其它程序并进行签名,得到本次背书的运行结果;应理解,该处理节点130可以运行该智能合约中的全部程序,也可以仅运行该智能合约中除该限定条件之外的其他程序,本申请实施例对此不作限定。
S304,该处理节点140根据该请求,运行该智能合约并对运行结果进行背书,得到本次背书的运行结果;
具体地,该处理节点140可以识别该智能合约的限定条件,并基于该处理节点140的本地账本数据运行该智能合约中除该限定条件之外的其它程序并进行签名,得到本次背书的运行结果;应理解,该处理节点140可以运行该智能合约中的全部程序,也可以仅运行该智能合约中除该限定条件之外的其他程序,本申请实施例对此不作限定。
S305,上述多个处理节点(包括处理节点130和处理节点150)分别向处理节点160发送本次背书的运行结果;则对应地,该处理节点160接收多个运行结果;
具体地,如图3所示,S305可以包括S305a和S305b,由于每个背书节点对智能合约的处理速度不同,S305a和S305b的执行可以按照任意顺序,本申请实施例对此不作限定。
S306,处理节点160对收到的多个运行结果进行验证,判断多个运行结果是否满足验证策略;
由于处理节点160接收多个运行结果存在先后顺序,且该验证策略一般包括合法性验证和一致性验证,该处理节点160对上述多个运行结果的验证可以采用多种验证方式。
在一种可选的实施例中,该处理节点160可以先确定上述多个运行结果中签名合法的运行结果的数量是否超过预设值(即验证运行结果的合法性),然后在通过合法性验证的运行结果中确定数据和版本号相同的运行结果的数量是否超过预设值(即验证剩余运行结果的一致性);
在另一种可选的实施例中,该处理节点160可以每收到一个运行结果就检测该运行结果的签名是否合法,如果该运行结果的签名合法,则记录该运行结果的数据和版本号,签名验证不合法则不记录。当该处理节点160收到的签名合法的运行结果中,数据和版本号相同的运行结果的数量超过预设值时,该处理节点160确定该运行结果满足验证策略。
S307,在运行结果满足验证策略的情况下,该处理节点160向客户端120发送满足验证策略的运行结果;则对应地,该客户端120接收满足验证策略的运行结果;
S308,该客户端120将满足验证策略的运行结果封装成一个交易(例如交易A);
S309,该客户端120向处理节点160发送上述交易;则对应地,该处理节点160接收该交易;
S310,该处理节点160向共识服务节点190发送上述交易;则对应地,该共识服务节点190接收该交易;
S311,该共识服务节点190按照一定的规则,将一段时间内积累的包括交易A的多个交易按照顺序打包成一个交易集合;
S312,该共识服务节点190向分布式网络中的所有处理节点广播上述交易集合;
应理解,图3仅仅示出了部分处理节点,但这不应对本申请的实施例构成任何限定。在图3中,S312可以包括S312a、S312b、S312c、S312d以及S312e,则对应地,处理节点160接收该交易集合,处理节点130接收该交易集合,处理节点150接收该交易集合,处理节点170接收该交易集合,处理节点180接收该交易集合。
接下来,所有处理节点分别按顺序处理该交易集合中的多个交易,处理流程同S209-S211,此处不再赘述。
应理解,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本申请实施例的运行智能合约的方法,通过将变化较频繁的数据对应的限定条件的验证后置,在交易的多个运行结果中除该限定条件之外的数据和版本号满足验证策略之后,再验证本地账本数据是否满足该限定条件,有利于提高交易写入账本的成功率,从而有利于提高系统的整体性能。
作为一个可选的实施例,在S301之前,上述方法还包括:客户端120可以向其代理节点(即处理节点160)发送智能合约的程序;代理节点接收该智能合约的程序并将其发送给多个背书节点(即处理节点130和处理节点150);该多个背书节点接收该智能合约的程序,对该智能合约的程序进行解析,并将该智能合约的限定条件的代码发送给代理节点;该代理节点接收该限定条件的代码,将其返回给客户端120;该客户端120接收该限定条件的代码,再通过一个交易将该智能合约的限定条件的代码发送给该分布式网络中的所有处理节点。应理解,通过一个交易将一段代码记入到所有节点中是现有技术,因此本文不再赘述。
本申请实施例的运行智能合约的方法,通过将变化较频繁的数据对应的限定条件的验证后置,在交易的多个运行结果中除该限定条件之外的数据和版本号满足验证策略之后,再验证本地账本数据是否满足该限定条件,有利于提高交易写入账本的成功率,从而有利于提高系统的整体性能。
应理解,在一种可能的实现方式中,本申请实施例的运行智能合约的上述方法具体可以应用于区块链网络,但本申请实施例对此不作限定。
下面以一个销售商品的智能合约为例对本申请实施例的运行智能合约的方法进行说明。该销售商品的智能合约中包括限定条件接口IfStateCondition,IfStateCondition中输入的是对保存在区块链中数据的条件判断。在本例中,IfStateCondition会检查购买者buyer 的资金余额是否足够购买资产,检查拥有者owner资产的剩余数量是否可售,如果区块链中的数据满足上述条件,该智能合约中的资产购买过程才能够被执行,如果不满足,则无法执行资产购买操作。
本申请实施例中的智能合约伪码如下:
管理员或者智能合约提供方会通过客户端向多个背书节点发送一个运行上述智能合约的交易。该多个背书节点分别解析该智能合约的代码,获取智能合约的IfStateCondition 函数,即智能合约的限定条件接口的代码(stub.Get(“BuyerId”,“Money”)>1&& stub.Get(“OwnerID”,“Asset_account”)>100)。该多个背书节点分别向该客户端返回上述限定条件接口的代码,该客户端将该智能合约的代码和该智能合约的限定条件接口的代码通过一个交易记入到该区块链网络的所有节点中。应理解,通过一个交易将一段代码记入到所有节点中是现有技术,因此本文不再赘述。
当用户A需要调用该智能合约的BuyOneAsset函数时,用户A通过客户端A向背书节点M和背书节点N发送模拟运行该智能合约的请求,该请求中包含了用户A请求调用的该智能合约的标识ID以及函数名(BuyOneAsset)。应理解,若用户A需要调用的函数为有参函数,该请求中还应该包括该有参函数的参数。
背书节点M和背书节点N分别收到该客户端发送的模拟运行上述智能合约的请求,并分别执行如下步骤:
根据该智能合约的ID从区块链账本中获取该智能合约的代码,在忽略其中的限制条件接口的代码的情况下运行该智能合约的代码,记录执行该智能合约的代码时访问的数据值以及版本号。应理解,最终的运行结果可以为不包含宽容数据集合之外的其他数据以及版本号,该宽容数据集合是指运行上述限定条件接口的代码时需要访问的数据及版本号,在本申请实施例中,宽容数据集合为BuyerId_Money和Owner_asset_account。
最终,背书节点M将运行结果M返回给用户A的客户端,背书节点N将运行结果N 返回给用户A的客户端。
该客户端在收到所有背书节点发送来的运行结果之后,按照区块链消息格式把接收到的多个运行结果封装到一个交易中,并发送给共识服务节点。
可选的,该客户端可以对多个运行结果的数据及版本号进行对比,判断该多个运行结果是否满足验证策略,在该多个运行结果满足验证策略的情况下再将其封装并发送给共识服务节点。在本申请实施例中,验证策略设置为背书节点M和背书节点N返回的运行结果必须一致,即所有运行结果中的参数必须相同。
图4示出了本申请实施例的另一运行智能合约的方法的示意性流程图。
S410,共识服务节点向区块链网络中的所有节点广播客户端B的交易集合;
则对应地,背书节点M接收客户端B的交易集合,背书节点N接收客户端B的交易集合;
S420,客户端A分别向背书节点M和背书节点N发送模拟运行智能合约的请求,如图4所示,S420包括S420a和S420b,则对应地,背书节点M接收该请求,根据该请求基于本地账本数据运行该智能合约,得到本次背书的运行结果,背书节点N接收该请求,根据该请求基于本地账本数据运行该智能合约,得到本次背书的运行结果;
S430,该背书节点M和该背书节点N分别向客户端A发送本次背书的运行结果;则对应地,客户端A接收多个本次背书的运行结果。
由于网络有延迟,当背书节点M收到客户端B的交易集合,对该交易集合中的数据进行验证,并修改了本地账本数据时,背书节点N并未收到客户端B的交易集合。因此,背书节点M运行客户端A的智能合约所使用的本地账本数据与背书节点N运行客户端A 的智能合约所使用的本地账本数据不一致。因此,若采用现有技术,背书节点M和背书节点N的账本中Owner_asset_account的数据版本号不一致,具体涉及到的账本数据如下:
表一:背书节点M的账本
表二:背书节点N的账本
这样,用户A的交易无效,客户端需要重新发起该笔交易。
而采用本申请的运行智能合约的方法,除去宽容数据集合(BuyerId_Money和Owner_ asset_account)之外,收集到的数据及版本号如下:
表三:背书节点M的账本
表四:背书节点N的账本
由于背书节点M的账本与背书节点N的账本相同,因此结果为SUCCESS。客户端确定背书节点M和背书节点N的运行结果满足验证策略,将其封装在一个交易消息中并发送给上述共识服务节点。
该共识服务节点收集一段时间内的交易,形成一个区块,该区块中包括按序组成交易集合,该共识服务节点广播该交易集合至区块链网络中的所有节点,所有节点中的每个节点分别对该交易集合中的交易按顺序逐条进行处理。
为了便于理解和说明,不失一般性,此处仍以区块链网络中的任一处理节点为例,处理节点接收到广播的交易集合后,从该交易集合中按顺序逐条处理交易。假设该交易集合中含有同一时刻不同用户A、C、D分别发送的三条交易Tx1、Tx2、Tx3,都是购买资产的交易,且因为时间相同,所以它们的运行结果也是相同的,即交易集合中按照交易的先后顺序包含如下交易:
表五:交易集合
(1)处理Tx1
处理节点在处理Tx1时,首先判断运行结果M和N是否满足验证策略,即Tx1中的endorsementM和endorsementN中运行结果及对数据的修改是否相同。在本申请实施例中,运行结果M和N如表三和表四所示,满足验证策略。
然后,该处理节点查看本地账本数据中的版本号与Tx1(即Tx1的endorsementM和endorsementN)的数据版本号是否一致。经检查,本地账本数据与Tx1的数据版本号一致。
最后,该处理节点根据CCID获取该智能合约的限定条件接口的代码,具体代码为:stub.Get(“BuyerId”,“Money”)>1&&stub.Get(“OwnerID”,“Asset_account”)>100。该处理节点根据本地账本数据,运行该智能合约的限定条件接口的代码,运行结果为真,接受Tx1对数据的修改,并将修改的数据的版本号增1,相关数据及版本号变为:
表六:接受Tx1后的账本数据
Key | Version | Value |
Owner_money | 102 | 4400 |
Owner_asset_account | 102 | 1 |
UserA_money | 56 | 500 |
UserA_asset_account | 2 | 1 |
UserC_money | 30 | 900 |
UserC_asset_account | 1 | 0 |
(2)处理Tx2
处理节点首先判断运行结果M和N是否满足验证策略,即Tx2中的endorsementM和endorsementN中运行结果及对数据的修改是否相同。在本申请实施例中,运行结果M和 N相同,满足验证策略。
然后,该处理节点查看本地账本数据中的版本号与Tx2(即Tx2的endorsementM和endorsementN)的数据版本号是否一致。经检查,本地账本数据与Tx2的数据版本号一致。
最后,该处理节点根据CCID获取该智能合约的限定条件接口的代码,具体代码为:stub.Get(“BuyerId”,“Money”)>1&&stub.Get(“OwnerID”,“Asset_account”)>100。该处理节点根据本地账本数据,运行该智能合约的限定条件接口的代码,运行结果为真,接受Tx2对数据的修改,并将修改的数据的版本号增1,相关数据及版本号变为:
表七:接受Tx2后的账本数据
Key | Version | Value |
Owner_money | 103 | 4500 |
Owner_asset_account | 103 | 0 |
UserA_money | 56 | 500 |
UserA_asset_account | 2 | 1 |
UserC_money | 31 | 800 |
UserC_asset_account | 2 | 1 |
(3)处理Tx3
处理节点首先判断运行结果M和N是否满足验证策略,即Tx3中的endorsementM和endorsementN中运行结果及对数据的修改是否相同。在本申请实施例中,运行结果M和 N相同,满足验证策略。
然后,该处理节点查看本地账本数据中的版本号与Tx3(即Tx3的endorsementM和endorsementN)的数据版本号是否一致。经检查,本地账本数据与Tx3的数据版本号一致。
最后,该处理节点根据CCID获取该智能合约的限定条件接口的代码,具体代码为:stub.Get(“BuyerId”,“Money”)>1&&stub.Get(“OwnerID”,“Asset_account”)>100。该处理节点根据本地账本数据,运行该智能合约的限定条件接口的代码,此时Owner_asset_account 为0,因此交易Tx3不能通过限定条件接口的验证,该处理节点将Tx3记录为无效交易,不接受其对数据的修改。
应理解,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
上文中结合图1至图4,详细描述了根据本申请实施例的运行智能合约的方法,下面将结合图5至图8,详细描述根据本申请实施例的运行智能合约的装置。
图5示出了本申请实施例提供的运行智能合约的装置500的示意性框图。如图5所示,该装置500包括:接收单元510、检查单元520、确定单元530以及处理单元540。
其中,接收单元510,用于接收共识服务节点发送的交易,所述交易包括在智能合约的背书过程中产生的多个运行结果;
检查单元520,用于检查所述多个运行结果是否满足验证策略,所述检查包括对所述多个运行结果中由除所述智能合约的限定条件之外的其他程序产生的数据和版本号的检查,所述限定条件用于表示运行所述智能合约时所述分布式网络中的账本数据需要满足的条件;
确定单元530,用于在所述多个运行结果满足所述验证策略的情况下,识别所述智能合约中的限定条件,确定本地账本数据是否满足所述限定条件;
处理单元540,用于在所述本地账本数据满足所述限定条件的情况下,接受所述交易。
本申请实施例的运行智能合约的装置,通过将变化较频繁的数据对应的限定条件的验证后置,在交易的多个运行结果中除该限定条件之外的数据和版本号满足验证策略之后,再验证本地账本数据是否满足该限定条件,有利于提高交易写入账本的成功率,从而有利于提高系统的整体性能。
可选地,所述装置500为背书节点,所述装置500还包括:背书单元,用于在所述接收共识服务节点发送的交易之前,对所述智能合约进行背书,得到本次背书的运行结果;第一发送单元,用于将所述本次背书的运行结果发送给需要在交易中使用所述本次背书的运行结果的客户端或所述客户端的代理节点。
可选地,所述接收单元510还用于:接收客户端或所述客户端的代理节点发送的模拟运行所述智能合约的请求,所述请求包括所述智能合约的标识信息;所述背书单元用于在所述接收共识服务节点发送的交易之前,对所述智能合约进行背书,得到本次背书的运行结果,具体包括:根据所述智能合约的标识信息,识别所述智能合约中的所述限定条件;基于所述本地账本数据运行所述智能合约中除所述限定条件之外的其它程序并进行签名,得到所述本次背书的运行结果。
可选地,所述接收单元510还用于:在所述对所述智能合约进行背书,得到本次背书的运行结果之前,接收所述客户端或所述客户端的代理节点发送的所述智能合约的程序;所述装置500还包括:解析单元,用于解析所述智能合约的程序,获得所述限定条件的程序;所述第一发送单元还用于:向所述客户端或所述客户端的代理节点发送所述限定条件的程序。
可选地,所述装置500为代理节点,所述装置500还包括:第二发送单元,用于在所述接收共识服务节点发送的交易之前,向所述分布式网络中的多个背书节点发送模拟运行所述智能合约的请求,所述请求包括所述智能合约的标识信息;所述接收单元510还用于:接收所述多个背书节点根据所述请求发送的各自的运行结果;所述检查单元520还用于:检查接收到的所述多个运行结果是否满足所述验证策略,所述检查包括对所述多个运行结果中由除所述限定条件之外的其他程序产生的数据和版本号的检查;所述第二发送单元还用于:在所述多个运行结果满足所述验证策略的情况下,向客户端发送所述多个运行结果。
可选地,所述第二发送单元还用于:在所述向所述分布式网络中的多个背书节点发送模拟运行所述智能合约的请求之前,向所述多个背书节点发送所述智能合约的程序;所述接收单元510还用于:接收所述多个背书节点根据所述智能合约的程序发送的所述限定条件的程序;所述第二发送单元还用于:向所述分布式网络中的所有处理节点发送所述限定条件的程序。
应理解,这里的装置500以功能单元的形式体现。这里的术语“单元”可以指应用特有集成电路(application specific integrated circuit,ASIC)、电子电路、用于执行一个或多个软件或固件程序的处理器(例如共享处理器、专有处理器或组处理器等)和存储器、合并逻辑电路和/或其它支持所描述的功能的合适组件。在一个可选例子中,本领域技术人员可以理解,装置500可以具体为上述方法实施例中的分布式网络中的处理节点,装置500可以用于与执行上述方法实施例的处理节点对应的各个流程和/或步骤,为避免重复,在此不再赘述。
图6示出了本申请实施例提供的另一运行智能合约的装置600的示意性框图。如图6 所示,该装置600包括:发送单元610、接收单元620以及检查单元630。
其中,发送单元610,用于向分布式网络中的多个背书节点发送模拟运行智能合约的请求,所述请求包括所述智能合约的标识信息;
接收单元620,用于接收所述多个背书节点根据所述请求发送的各自的运行结果;
检查单元630,用于检查接收到的多个运行结果是否满足验证策略,所述检查包括对所述多个运行结果中由除所述智能合约的限定条件之外的其他程序产生的数据和版本号的检查,所述限定条件用于表示运行所述智能合约时所述分布式网络中的账本数据需要满足的条件;
所述发送单元610还用于:在所述多个运行结果满足所述验证策略的情况下,向共识服务节点发送包括所述多个运行结果的交易。
本申请实施例的运行智能合约的装置,通过将变化较频繁的数据对应的限定条件的验证后置,在交易的多个运行结果中除该限定条件之外的数据和版本号满足验证策略之后,再验证本地账本数据是否满足该限定条件,有利于提高交易写入账本的成功率,从而有利于提高系统的整体性能。
可选地,所述发送单元610还用于:在所述向分布式网络中的多个背书节点发送模拟运行智能合约的请求之前,向所述多个背书节点发送所述智能合约的程序;所述接收单元 620还用于:接收所述多个背书节点根据所述智能合约的程序发送的所述限定条件的程序;所述发送单元610还用于:向所述分布式网络中的所有处理节点发送所述限定条件的程序。
应理解,这里的装置600以功能单元的形式体现。这里的术语“单元”可以指应用特有集成电路(application specific integrated circuit,ASIC)、电子电路、用于执行一个或多个软件或固件程序的处理器(例如共享处理器、专有处理器或组处理器等)和存储器、合并逻辑电路和/或其它支持所描述的功能的合适组件。在一个可选例子中,本领域技术人员可以理解,装置600可以具体为上述方法实施例中的客户端,装置600可以用于与执行上述方法实施例的客户端对应的各个流程和/或步骤,为避免重复,在此不再赘述。
图7示出了本申请实施例提供的另一运行智能合约的装置700的示意性框图。该装置 700包括处理器710、收发器720和存储器730。其中,处理器710、收发器720和存储器 730通过内部连接通路互相通信,该存储器730用于存储指令,该处理器710用于执行该存储器730存储的指令,以控制该收发器720发送信号和/或接收信号。
其中,该收发器720用于接收共识服务节点发送的交易,所述交易包括在智能合约的背书过程中产生的多个运行结果;
该处理器710用于检查所述多个运行结果是否满足验证策略,所述检查包括对所述多个运行结果中由除所述智能合约的限定条件之外的其他程序产生的数据和版本号的检查,所述限定条件用于表示运行所述智能合约时所述分布式网络中的账本数据需要满足的条件;在所述多个运行结果满足所述验证策略的情况下,识别所述智能合约中的限定条件,确定本地账本数据是否满足所述限定条件;在所述本地账本数据满足所述限定条件的情况下,接受所述交易。
应理解,装置700可以具体为上述方法实施例中的分布式网络中的处理节点,并且可以用于执行上述方法实施例中处理节点对应的各个步骤和/或流程。可选地,该存储器730 可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。该处理器 710可以用于执行存储器中存储的指令,并且当该处理器710执行存储器中存储的指令时,该处理器710用于执行与上述方法实施例的各个步骤和/或流程。
图8示出了本申请实施例提供的另一运行智能合约的装置800的示意性框图。该装置 800包括处理器810、收发器820和存储器830。其中,处理器810、收发器820和存储器 830通过内部连接通路互相通信,该存储器830用于存储指令,该处理器810用于执行该存储器830存储的指令,以控制该收发器820发送信号和/或接收信号。
其中,该收发器820用于向分布式网络中的多个背书节点发送模拟运行智能合约的请求,所述请求包括所述智能合约的标识信息;接收所述多个背书节点根据所述请求发送的各自的运行结果;
该处理器810用于检查接收到的多个运行结果是否满足验证策略,所述检查包括对所述多个运行结果中由除所述智能合约的限定条件之外的其他程序产生的数据和版本号的检查,所述限定条件用于表示运行所述智能合约时所述分布式网络中的账本数据需要满足的条件;
该收发器820还用于:在所述多个运行结果满足所述验证策略的情况下,向共识服务节点发送包括所述多个运行结果的交易。
应理解,装置800可以具体为上述方法实施例中的客户端,并且可以用于执行上述方法实施例的客户端对应的各个步骤和/或流程。可选地,该存储器830可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。该处理器810可以用于执行存储器中存储的指令,并且当该处理器810执行存储器中存储的指令时,该处理器810用于执行与上述实施例的客户端对应的各个步骤和/或流程。
应理解,在本申请实施例中,上述装置的处理器可以是中央处理单元(centralprocessing unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignal processing,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器执行存储器中的指令,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
另外,本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应理解,在本申请实施例中,“与A相应的B”表示B与A相关联,根据A可以确定B。但还应理解,根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其它信息确定B。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本申请实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备 (可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易向到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (16)
1.一种运行智能合约的方法,其特征在于,应用于分布式网络中,所述方法包括:
所述分布式网络中的处理节点接收共识服务节点发送的交易,所述交易包括在智能合约的背书过程中产生的多个运行结果;
所述处理节点检查所述多个运行结果是否满足验证策略,所述检查包括对所述多个运行结果中由除所述智能合约的限定条件之外的其他程序产生的数据和版本号的检查,所述限定条件用于表示运行所述智能合约时所述分布式网络中的账本数据需要满足的条件;
在所述多个运行结果满足所述验证策略的情况下,所述处理节点识别所述智能合约中的限定条件,确定本地账本数据是否满足所述限定条件;
在所述本地账本数据满足所述限定条件的情况下,所述处理节点接受所述交易。
2.根据权利要求1所述的方法,其特征在于,所述处理节点为背书节点,在所述处理节点接收共识服务节点发送的交易之前,所述方法还包括:
所述处理节点对所述智能合约进行背书,得到本次背书的运行结果;
所述处理节点将所述本次背书的运行结果发送给需要在交易中使用所述本次背书的运行结果的客户端或所述客户端的代理节点。
3.根据权利要求2所述的方法,其特征在于,所述处理节点对所述智能合约进行背书,得到本次背书的运行结果,包括:
所述处理节点接收客户端或所述客户端的代理节点发送的模拟运行所述智能合约的请求,所述请求包括所述智能合约的标识信息;
所述处理节点根据所述智能合约的标识信息,识别所述智能合约中的所述限定条件;
所述处理节点基于所述本地账本数据运行所述智能合约中除所述限定条件之外的其它程序并进行签名,得到所述本次背书的运行结果。
4.根据权利要求2或3所述的方法,其特征在于,在所述处理节点对所述智能合约进行背书,得到本次背书的运行结果之前,所述方法还包括:
所述处理节点接收所述客户端或所述客户端的代理节点发送的所述智能合约的程序;
所述处理节点解析所述智能合约的程序,获得所述限定条件的程序;
所述处理节点向所述客户端或所述客户端的代理节点发送所述限定条件的程序。
5.根据权利要求1所述的方法,其特征在于,所述处理节点为代理节点,在所述处理节点接收共识服务节点发送的交易之前,所述方法还包括:
所述处理节点向所述分布式网络中的多个背书节点发送模拟运行所述智能合约的请求,所述请求包括所述智能合约的标识信息;
所述处理节点接收所述多个背书节点根据所述请求发送的各自的运行结果;
所述处理节点检查接收到的所述多个运行结果是否满足所述验证策略,所述检查包括对所述多个运行结果中由除所述限定条件之外的其他程序产生的数据和版本号的检查;
在所述多个运行结果满足所述验证策略的情况下,所述处理节点向客户端发送所述多个运行结果。
6.根据权利要求5所述的方法,其特征在于,在所述处理节点向所述分布式网络中的多个背书节点发送模拟运行所述智能合约的请求之前,所述方法还包括:
所述处理节点向所述多个背书节点发送所述智能合约的程序;
所述处理节点接收所述多个背书节点根据所述智能合约的程序发送的所述限定条件的程序;
所述处理节点向所述分布式网络中的所有处理节点发送所述限定条件的程序。
7.一种运行智能合约的方法,其特征在于,包括:
客户端向分布式网络中的多个背书节点发送模拟运行智能合约的请求,所述请求包括所述智能合约的标识信息;
所述客户端接收所述多个背书节点根据所述请求发送的各自的运行结果;
所述客户端检查接收到的多个运行结果是否满足验证策略,所述检查包括对所述多个运行结果中由除所述智能合约的限定条件之外的其他程序产生的数据和版本号的检查,所述限定条件用于表示运行所述智能合约时所述分布式网络中的账本数据需要满足的条件;
在所述多个运行结果满足所述验证策略的情况下,所述客户端向共识服务节点发送包括所述多个运行结果的交易。
8.根据权利要求7所述的方法,其特征在于,在所述客户端向分布式网络中的多个背书节点发送模拟运行智能合约的请求之前,所述方法还包括:
所述客户端向所述多个背书节点发送所述智能合约的程序;
所述客户端接收所述多个背书节点根据所述智能合约的程序发送的所述限定条件的程序;
所述客户端向所述分布式网络中的所有处理节点发送所述限定条件的程序。
9.一种运行智能合约的装置,其特征在于,应用于分布式网络中,所述装置包括:
接收单元,用于接收共识服务节点发送的交易,所述交易包括在智能合约的背书过程中产生的多个运行结果;
检查单元,用于检查所述多个运行结果是否满足验证策略,所述检查包括对所述多个运行结果中由除所述智能合约的限定条件之外的其他程序产生的数据和版本号的检查,所述限定条件用于表示运行所述智能合约时所述分布式网络中的账本数据需要满足的条件;
确定单元,用于在所述多个运行结果满足所述验证策略的情况下,识别所述智能合约中的限定条件,确定本地账本数据是否满足所述限定条件;
处理单元,用于在所述本地账本数据满足所述限定条件的情况下,接受所述交易。
10.根据权利要求9所述的装置,其特征在于,所述装置为背书节点,所述装置还包括:
背书单元,用于在所述接收共识服务节点发送的交易之前,对所述智能合约进行背书,得到本次背书的运行结果;
第一发送单元,用于将所述本次背书的运行结果发送给需要在交易中使用所述本次背书的运行结果的客户端或所述客户端的代理节点。
11.根据权利要求10所述的装置,其特征在于,所述接收单元还用于:
接收客户端或所述客户端的代理节点发送的模拟运行所述智能合约的请求,所述请求包括所述智能合约的标识信息;
所述背书单元用于在所述接收共识服务节点发送的交易之前,对所述智能合约进行背书,得到本次背书的运行结果,具体包括:
根据所述智能合约的标识信息,识别所述智能合约中的所述限定条件;
基于所述本地账本数据运行所述智能合约中除所述限定条件之外的其它程序并进行签名,得到所述本次背书的运行结果。
12.根据权利要求10或11所述的装置,其特征在于,所述接收单元还用于:
在所述对所述智能合约进行背书,得到本次背书的运行结果之前,接收所述客户端或所述客户端的代理节点发送的所述智能合约的程序;
所述装置还包括:
解析单元,用于解析所述智能合约的程序,获得所述限定条件的程序;
所述第一发送单元还用于:
向所述客户端或所述客户端的代理节点发送所述限定条件的程序。
13.根据权利要求9所述的装置,其特征在于,所述装置为代理节点,所述装置还包括:
第二发送单元,用于在所述接收共识服务节点发送的交易之前,向所述分布式网络中的多个背书节点发送模拟运行所述智能合约的请求,所述请求包括所述智能合约的标识信息;
所述接收单元还用于:
接收所述多个背书节点根据所述请求发送的各自的运行结果;
所述检查单元还用于:
检查接收到的所述多个运行结果是否满足所述验证策略,所述检查包括对所述多个运行结果中由除所述限定条件之外的其他程序产生的数据和版本号的检查;
所述第二发送单元还用于:
在所述多个运行结果满足所述验证策略的情况下,向客户端发送所述多个运行结果。
14.根据权利要求13所述的装置,其特征在于,所述第二发送单元还用于:
在所述向所述分布式网络中的多个背书节点发送模拟运行所述智能合约的请求之前,向所述多个背书节点发送所述智能合约的程序;
所述接收单元还用于:
接收所述多个背书节点根据所述智能合约的程序发送的所述限定条件的程序;
所述第二发送单元还用于:
向所述分布式网络中的所有处理节点发送所述限定条件的程序。
15.一种运行智能合约的装置,其特征在于,所述装置包括:
发送单元,用于向分布式网络中的多个背书节点发送模拟运行智能合约的请求,所述请求包括所述智能合约的标识信息;
接收单元,用于接收所述多个背书节点根据所述请求发送的各自的运行结果;
检查单元,用于检查接收到的多个运行结果是否满足验证策略,所述检查包括对所述多个运行结果中由除所述智能合约的限定条件之外的其他程序产生的数据和版本号的检查,所述限定条件用于表示运行所述智能合约时所述分布式网络中的账本数据需要满足的条件;
所述发送单元还用于:
在所述多个运行结果满足所述验证策略的情况下,向共识服务节点发送包括所述多个运行结果的交易。
16.根据权利要求15所述的装置,其特征在于,所述发送单元还用于:
在所述向分布式网络中的多个背书节点发送模拟运行智能合约的请求之前,向所述多个背书节点发送所述智能合约的程序;
所述接收单元还用于:
接收所述多个背书节点根据所述智能合约的程序发送的所述限定条件的程序;
所述发送单元还用于:
向所述分布式网络中的所有处理节点发送所述限定条件的程序。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710496967.7A CN109118214B (zh) | 2017-06-26 | 2017-06-26 | 运行智能合约的方法和装置 |
EP18824895.9A EP3629272B1 (en) | 2017-06-26 | 2018-05-05 | Method and device for running chaincode |
PCT/CN2018/085748 WO2019001139A1 (zh) | 2017-06-26 | 2018-05-05 | 运行智能合约的方法和装置 |
US16/727,633 US20200134613A1 (en) | 2017-06-26 | 2019-12-26 | Method and Apparatus for Running Smart Contract |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710496967.7A CN109118214B (zh) | 2017-06-26 | 2017-06-26 | 运行智能合约的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109118214A true CN109118214A (zh) | 2019-01-01 |
CN109118214B CN109118214B (zh) | 2020-11-17 |
Family
ID=64741014
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710496967.7A Active CN109118214B (zh) | 2017-06-26 | 2017-06-26 | 运行智能合约的方法和装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20200134613A1 (zh) |
EP (1) | EP3629272B1 (zh) |
CN (1) | CN109118214B (zh) |
WO (1) | WO2019001139A1 (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109981679A (zh) * | 2019-04-08 | 2019-07-05 | 上海点融信息科技有限责任公司 | 在区块链网络中执行事务的方法和装置 |
CN110224833A (zh) * | 2019-05-20 | 2019-09-10 | 深圳壹账通智能科技有限公司 | 票据数据处理方法和系统 |
CN110233823A (zh) * | 2019-05-06 | 2019-09-13 | 深圳壹账通智能科技有限公司 | 区块链实现方法、系统及存储介质 |
CN110533429A (zh) * | 2019-08-30 | 2019-12-03 | 北京金山云网络技术有限公司 | 区块链中的交易背书方法、装置和区块链网络 |
CN110706106A (zh) * | 2019-09-26 | 2020-01-17 | 联想(北京)有限公司 | 一种信息处理方法及设备 |
CN111414413A (zh) * | 2019-01-07 | 2020-07-14 | 国际商业机器公司 | 区块链背书验证 |
CN111666332A (zh) * | 2019-03-05 | 2020-09-15 | 国际商业机器公司 | 自动演进的数据库背书策略 |
WO2020199177A1 (zh) * | 2019-04-04 | 2020-10-08 | 华为技术有限公司 | 运行智能合约的方法和装置 |
WO2021012572A1 (zh) * | 2019-07-25 | 2021-01-28 | 深圳壹账通智能科技有限公司 | 区块链交易数据处理方法、装置、计算机设备和存储介质 |
CN112417514A (zh) * | 2020-10-30 | 2021-02-26 | 迅鳐成都科技有限公司 | 基于电子合约的多方数据协作方法、系统及存储介质 |
CN113287113A (zh) * | 2019-01-23 | 2021-08-20 | 株式会社斯凯拉 | 具有篡改检测性的系统 |
CN113330473A (zh) * | 2019-01-22 | 2021-08-31 | 索尼集团公司 | 通信网络节点、方法和移动终端 |
CN113452521A (zh) * | 2021-06-28 | 2021-09-28 | 杭州云象网络技术有限公司 | 区块链国密适配方法、国密适配器、系统和装置 |
CN113767412A (zh) * | 2019-05-01 | 2021-12-07 | 索尼集团公司 | 基于分布式账本的maas平台上的交易安全性 |
CN114511324A (zh) * | 2022-04-18 | 2022-05-17 | 云账户技术(天津)有限公司 | 零工经济服务管理方法、系统、网络设备和存储介质 |
CN113287113B (zh) * | 2019-01-23 | 2024-05-31 | 株式会社斯凯拉 | 具有篡改检测性的系统 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3675087B1 (en) * | 2017-08-22 | 2023-10-11 | Nippon Telegraph And Telephone Corporation | Agreement system, agreement apparatus, program, and recording medium |
US11210748B2 (en) * | 2018-03-02 | 2021-12-28 | Panasonic Intellectual Property Corporation Of America | Control method, controller, data structure, and power transaction system |
US11188920B2 (en) * | 2018-05-23 | 2021-11-30 | International Business Machines Corporation | Autocommit transaction management in a blockchain network |
US11362805B2 (en) * | 2018-11-01 | 2022-06-14 | International Business Machines Corporation | Database encryption layer |
US11811769B2 (en) | 2019-01-31 | 2023-11-07 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing a declarative, metadata driven, cryptographically verifiable multi-network (multi-tenant) shared ledger |
US11899817B2 (en) | 2019-01-31 | 2024-02-13 | Salesforce, Inc. | Systems, methods, and apparatuses for storing PII information via a metadata driven blockchain using distributed and decentralized storage for sensitive user information |
US11824864B2 (en) | 2019-01-31 | 2023-11-21 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing a declarative and metadata driven blockchain platform using distributed ledger technology (DLT) |
US11038771B2 (en) * | 2019-04-26 | 2021-06-15 | Salesforce.Com, Inc. | Systems, methods, and apparatuses for implementing a metadata driven rules engine on blockchain using distributed ledger technology (DLT) |
CN110648137B (zh) * | 2019-04-26 | 2021-08-20 | 腾讯科技(深圳)有限公司 | 一种区块处理方法和节点以及系统 |
US11995647B2 (en) | 2019-04-30 | 2024-05-28 | Salesforce, Inc. | System and method of providing interoperable distributed and decentralized ledgers using consensus on consensus and delegated consensus |
CN110716719B (zh) * | 2019-10-09 | 2023-05-09 | 民生科技有限责任公司 | 一种金融区块链联盟平台交易动态背书策略实现方法 |
CN111242617B (zh) * | 2020-01-02 | 2022-05-10 | 支付宝(杭州)信息技术有限公司 | 用于执行交易正确性验证的方法及装置 |
US11687948B2 (en) * | 2020-03-16 | 2023-06-27 | Paypal, Inc. | Adjusting weights of weighted consensus algorithms for blockchains |
CN112991069B (zh) * | 2020-03-30 | 2023-08-15 | 腾讯科技(深圳)有限公司 | 资源处理方法、装置、设备及存储介质 |
US11640392B2 (en) * | 2020-12-04 | 2023-05-02 | International Business Machines Corporation | Blockchain endorsement agreement |
CN112598525B (zh) * | 2021-02-26 | 2021-12-03 | 北京全息智信科技有限公司 | 一种智能合约分簇并行的区块链实现方法及装置 |
CN114047928B (zh) * | 2022-01-12 | 2022-03-15 | 北京大学 | 一种适用于组合交易的智能合约形式化验证方法及系统 |
CN115049061A (zh) * | 2022-07-13 | 2022-09-13 | 卡奥斯工业智能研究院(青岛)有限公司 | 基于区块链的人工智能推理系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105719185A (zh) * | 2016-01-22 | 2016-06-29 | 杭州复杂美科技有限公司 | 区块链的数据对比及共识方法 |
CN105893042A (zh) * | 2016-03-31 | 2016-08-24 | 北京航空航天大学 | 一种基于区块链的智能合约的实现方法 |
CN106548349A (zh) * | 2016-11-02 | 2017-03-29 | 江苏通付盾科技有限公司 | 交易信息验证方法及系统 |
CN106548330A (zh) * | 2016-10-27 | 2017-03-29 | 上海亿账通区块链科技有限公司 | 基于区块链的交易验证方法及系统 |
US20170177898A1 (en) * | 2015-12-16 | 2017-06-22 | International Business Machines Corporation | Personal ledger blockchain |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150379510A1 (en) * | 2012-07-10 | 2015-12-31 | Stanley Benjamin Smith | Method and system to use a block chain infrastructure and Smart Contracts to monetize data transactions involving changes to data included into a data supply chain. |
US20170011460A1 (en) * | 2015-07-09 | 2017-01-12 | Ouisa, LLC | Systems and methods for trading, clearing and settling securities transactions using blockchain technology |
US20170132626A1 (en) * | 2015-11-05 | 2017-05-11 | Mastercard International Incorporated | Method and system for processing of a blockchain transaction in a transaction processing network |
US20170132625A1 (en) * | 2015-11-05 | 2017-05-11 | Mastercard International Incorporated | Method and system for use of a blockchain in a transaction processing network |
US20170140408A1 (en) * | 2015-11-16 | 2017-05-18 | Bank Of America Corporation | Transparent self-managing rewards program using blockchain and smart contracts |
US10650456B2 (en) * | 2016-01-20 | 2020-05-12 | Flair, Inc. | Systems and methods for managing a talent based exchange |
US20180101846A1 (en) * | 2016-10-11 | 2018-04-12 | Fujitsu Limited | Selective signature system |
KR101849917B1 (ko) * | 2016-10-13 | 2018-05-31 | 주식회사 코인플러그 | 스마트 컨트랙트 기반의 인증서 서비스를 제공하는 방법 및 이를 이용한 서버 |
CN106603698A (zh) * | 2016-12-28 | 2017-04-26 | 北京果仁宝科技有限公司 | 基于dpos的区块链共识方法和节点 |
US20180183586A1 (en) * | 2016-12-28 | 2018-06-28 | Intel Corporation | Assigning user identity awareness to a cryptographic key |
WO2018129118A1 (en) * | 2017-01-06 | 2018-07-12 | FirstBlood Technologies, Inc. | Decentralized competitive arbitration using digital ledgering |
US10579368B2 (en) * | 2017-03-10 | 2020-03-03 | Salesforce.Com, Inc. | Blockchain version control systems |
US10521604B2 (en) * | 2017-03-17 | 2019-12-31 | Labyrinth Research Llc | Unified control of privacy-impacting devices |
US20180276626A1 (en) * | 2017-03-21 | 2018-09-27 | Dappsters, LLC | Blockchain systems and methods |
US10176308B2 (en) * | 2017-04-28 | 2019-01-08 | Accenture Global Solutions Limited | Entitlement management system |
US20190303932A1 (en) * | 2018-03-28 | 2019-10-03 | NEC Laboratories Europe GmbH | Method and system for verifying policy compliance of transactions in a blockchain executing smart contracts |
US20190303623A1 (en) * | 2018-04-02 | 2019-10-03 | Ca, Inc. | Promotion smart contracts for software development processes |
-
2017
- 2017-06-26 CN CN201710496967.7A patent/CN109118214B/zh active Active
-
2018
- 2018-05-05 EP EP18824895.9A patent/EP3629272B1/en active Active
- 2018-05-05 WO PCT/CN2018/085748 patent/WO2019001139A1/zh unknown
-
2019
- 2019-12-26 US US16/727,633 patent/US20200134613A1/en not_active Abandoned
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170177898A1 (en) * | 2015-12-16 | 2017-06-22 | International Business Machines Corporation | Personal ledger blockchain |
CN105719185A (zh) * | 2016-01-22 | 2016-06-29 | 杭州复杂美科技有限公司 | 区块链的数据对比及共识方法 |
CN105893042A (zh) * | 2016-03-31 | 2016-08-24 | 北京航空航天大学 | 一种基于区块链的智能合约的实现方法 |
CN106548330A (zh) * | 2016-10-27 | 2017-03-29 | 上海亿账通区块链科技有限公司 | 基于区块链的交易验证方法及系统 |
CN106548349A (zh) * | 2016-11-02 | 2017-03-29 | 江苏通付盾科技有限公司 | 交易信息验证方法及系统 |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111414413A (zh) * | 2019-01-07 | 2020-07-14 | 国际商业机器公司 | 区块链背书验证 |
CN111414413B (zh) * | 2019-01-07 | 2023-09-29 | 国际商业机器公司 | 区块链背书验证 |
CN113330473A (zh) * | 2019-01-22 | 2021-08-31 | 索尼集团公司 | 通信网络节点、方法和移动终端 |
CN113287113B (zh) * | 2019-01-23 | 2024-05-31 | 株式会社斯凯拉 | 具有篡改检测性的系统 |
CN113287113A (zh) * | 2019-01-23 | 2021-08-20 | 株式会社斯凯拉 | 具有篡改检测性的系统 |
CN111666332A (zh) * | 2019-03-05 | 2020-09-15 | 国际商业机器公司 | 自动演进的数据库背书策略 |
CN111666332B (zh) * | 2019-03-05 | 2024-03-15 | 国际商业机器公司 | 自动演进的数据库背书策略 |
WO2020199177A1 (zh) * | 2019-04-04 | 2020-10-08 | 华为技术有限公司 | 运行智能合约的方法和装置 |
CN109981679B (zh) * | 2019-04-08 | 2021-08-10 | 上海点融信息科技有限责任公司 | 在区块链网络中执行事务的方法和装置 |
CN109981679A (zh) * | 2019-04-08 | 2019-07-05 | 上海点融信息科技有限责任公司 | 在区块链网络中执行事务的方法和装置 |
CN113767412A (zh) * | 2019-05-01 | 2021-12-07 | 索尼集团公司 | 基于分布式账本的maas平台上的交易安全性 |
CN113767412B (zh) * | 2019-05-01 | 2024-05-31 | 索尼集团公司 | 基于分布式账本的maas平台上的交易安全性 |
CN110233823A (zh) * | 2019-05-06 | 2019-09-13 | 深圳壹账通智能科技有限公司 | 区块链实现方法、系统及存储介质 |
CN110224833A (zh) * | 2019-05-20 | 2019-09-10 | 深圳壹账通智能科技有限公司 | 票据数据处理方法和系统 |
CN110224833B (zh) * | 2019-05-20 | 2023-03-10 | 深圳壹账通智能科技有限公司 | 票据数据处理方法和系统 |
WO2021012572A1 (zh) * | 2019-07-25 | 2021-01-28 | 深圳壹账通智能科技有限公司 | 区块链交易数据处理方法、装置、计算机设备和存储介质 |
CN110533429A (zh) * | 2019-08-30 | 2019-12-03 | 北京金山云网络技术有限公司 | 区块链中的交易背书方法、装置和区块链网络 |
CN110706106A (zh) * | 2019-09-26 | 2020-01-17 | 联想(北京)有限公司 | 一种信息处理方法及设备 |
CN110706106B (zh) * | 2019-09-26 | 2022-07-26 | 联想(北京)有限公司 | 一种信息处理方法及设备 |
CN112417514A (zh) * | 2020-10-30 | 2021-02-26 | 迅鳐成都科技有限公司 | 基于电子合约的多方数据协作方法、系统及存储介质 |
CN112417514B (zh) * | 2020-10-30 | 2024-04-05 | 迅鳐成都科技有限公司 | 基于电子合约的多方数据协作方法、系统及存储介质 |
CN113452521B (zh) * | 2021-06-28 | 2022-11-04 | 杭州云象网络技术有限公司 | 区块链国密适配方法、国密适配器、系统和装置 |
CN113452521A (zh) * | 2021-06-28 | 2021-09-28 | 杭州云象网络技术有限公司 | 区块链国密适配方法、国密适配器、系统和装置 |
CN114511324A (zh) * | 2022-04-18 | 2022-05-17 | 云账户技术(天津)有限公司 | 零工经济服务管理方法、系统、网络设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP3629272A1 (en) | 2020-04-01 |
EP3629272A4 (en) | 2020-06-17 |
EP3629272B1 (en) | 2021-10-20 |
US20200134613A1 (en) | 2020-04-30 |
WO2019001139A1 (zh) | 2019-01-03 |
CN109118214B (zh) | 2020-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109118214A (zh) | 运行智能合约的方法和装置 | |
Majeed et al. | Blockchain for IoT-based smart cities: Recent advances, requirements, and future challenges | |
Hu et al. | Blockchain-based smart contracts-applications and challenges | |
Dhar Dwivedi et al. | Blockchain and artificial intelligence for 5G‐enabled Internet of Things: Challenges, opportunities, and solutions | |
CN112837048B (zh) | 跨区块链的数据处理方法、装置、设备及计算机存储介质 | |
CN108427601A (zh) | 一种私有链节点的集群交易处理方法 | |
CN107846278A (zh) | 智能合约处理方法及装置 | |
CN108320228A (zh) | 跨区块链资产交易方法、平台、设备及存储介质 | |
CN107615317A (zh) | 区块链交易记录的系统和方法 | |
CN106991612A (zh) | 用于金融数据共享的方法、装置及电子设备 | |
CN108985569A (zh) | 一种车辆风险评估方法、服务器 | |
CN111325581B (zh) | 数据处理方法及装置、电子设备和计算机可读存储介质 | |
CN110060155B (zh) | 区块链的智能合约执行方法及装置和电子设备 | |
Balagolla et al. | Credit card fraud prevention using blockchain | |
CN113409078A (zh) | 积分发放方法、装置、设备和存储介质 | |
CN110009759A (zh) | 基于区块链的考勤方法、考勤系统及考勤装置 | |
CN106971342A (zh) | 去中心化的电子商务平台中基于区块链技术的交易方法及系统 | |
CN109255709A (zh) | 一种基于区块链的结账方法及其系统 | |
CN113553609B (zh) | 基于隐私保护的多方联合进行业务预测的方法及系统 | |
CN106991569B (zh) | 电子商务平台中大数据计算的交易方法及系统 | |
CN111667255B (zh) | 基于联盟链的数字资产流转系统及方法 | |
CN109034916A (zh) | 广告流量的监测方法、装置、存储介质及处理器 | |
Liu et al. | Trust as a service: building and managing trust in the internet of things | |
CN109756556B (zh) | 一种一站式云服务生态系统 | |
CN112541765A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |