CN113254467B - 在区块链系统中执行交易的方法和区块链节点 - Google Patents
在区块链系统中执行交易的方法和区块链节点 Download PDFInfo
- Publication number
- CN113254467B CN113254467B CN202110748977.1A CN202110748977A CN113254467B CN 113254467 B CN113254467 B CN 113254467B CN 202110748977 A CN202110748977 A CN 202110748977A CN 113254467 B CN113254467 B CN 113254467B
- Authority
- CN
- China
- Prior art keywords
- transaction
- variable
- execution
- contract
- executing
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Computing Systems (AREA)
- Finance (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供了一种在区块链系统中执行交易的方法和区块链节点,所述交易中调用合约,所述合约中调用用于确认变量存在性的接口函数,所述方法由区块链节点执行,包括:执行所述接口函数;在所述接口函数的结果返回之前,按照所述变量的预设存在性执行所述合约。
Description
技术领域
本说明书实施例涉及区块链技术领域,更具体地,涉及一种在区块链系统中执行交易的方法和区块链节点。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。
在例如以太坊的区块链系统中,允许在区块链系统中部署和调用智能合约。在很多智能合约中,为了防止重复创建相同的对象或变量(下文表示为key),在创建对象前会首先试图检查该对象的存在性,并且只有在此对象并不存在时才会执行后续的操作。
发明内容
本说明书实施例旨在提供一种更有效的在区块链系统中执行交易的方法,使得在执行用于确认key存在性的接口的同时,并行地按照key的预设存在性执行交易,减少因key存在性检查造成的耗时,提高了系统效率。
为实现上述目的,本说明书第一方面提供一种在区块链系统中执行交易的方法,所述交易中调用合约,所述合约中调用用于确认变量存在性的接口函数,所述方法由区块链节点执行,包括:
执行所述接口函数;
在所述接口函数的结果返回之前,按照所述变量的预设存在性执行所述合约。
本说明书第二方面提供一种区块链节点,所述区块链节点用于执行交易,所述交易中调用合约,所述合约中调用用于确认变量存在性的接口函数,所述区块链节点包括:
第一执行单元,用于执行所述接口函数;
第二执行单元,用于在所述接口函数的结果返回之前,按照所述变量的预设存在性执行所述合约。
本说明书第三方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面所述的任一项方法。
本说明书第四方面提供一种区块链节点,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面所述的任一项方法。
通过本说明书实施例提供的执行交易的方案,执行交易的执行体在首次执行交易时可以通过平台提供的用于检查key存在性的接口,向执行平台代码的执行体发送用于进行key存在性检查的请求,并且平台在收到该请求后,按照key的预设存在性,让交易执行体继续执行交易,执行平台代码的执行体在接收到上述请求之后进行存储访问并根据存储访问的结果确定是否重新执行交易,并通知执行交易的执行体。在合约开发人员能较高准确率预估key存在性的情况中,即在key的实际存在性与预设存在性大概率相同的情况中,大概率不需要重新执行交易,从而可以减少执行交易的过程中等待存储访问的结果的时间,提高了交易执行速度,提高了系统效率。另外,区块链平台通过提供结合key存在性检查和其它预定操作的接口,可以减少对系统请求的生成和发送次数,提高了系统效率。
附图说明
通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:
图1示出本说明书实施例所应用的区块链架构图;
图2示出本说明书实施例提供的区块链节点的架构图;
图3示出本说明书实施例提供的一种在区块链中执行交易的方法流程图;
图4示出本说明书实施例提供的一种在区块链中执行交易的方法流程图;
图5示出本说明书实施例提供的一种区块链节点的架构图。
具体实施方式
下面将结合附图描述本说明书实施例。
图1示出本说明书实施例所应用的区块链系统架构图。如图1中,区块链系统(下文简称为区块链)中例如包含A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P共16个全量节点。节点之间的连线示意性的表示P2P(Peer to Peer,点对点)连接。这些节点上都存储全量的账本,即承担着存储全部交易、智能合约和各种状态。其中,区块链中的每个全量节点通过执行相同的交易而产生区块链系统中的相同的状态,即,区块链中的每个全量节点执行相同的操作,存储相同的状态数据库。下文中以区块链中的一个节点中对交易的执行为例进行描述。
可以理解,图1所示的区块链仅仅是示例性的,本说明书实施例不限于应用于图1所示的区块链,例如还可以应用于包括分片的区块链系统中。
另外,图1中虽然示出了区块链中包括16个全量节点,本说明书实施例不限于此,而是可以包括其他数目的全量节点。具体是,区块链中包含的节点可以满足拜占庭容错(Byzantine Fault Tolerance,BFT)要求。所述的拜占庭容错要求可以理解为在区块链内部可以存在拜占庭节点,而区块链对外不体现拜占庭行为。一般的,一些拜占庭容错算法中要求节点个数大于3f+1,f为拜占庭节点个数,例如实用拜占庭容错算法PBFT(PracticalByzantine Fault Tolerance)。
图2示出本说明书实施例提供的区块链节点的架构图。如图2所示,区块链节点中包括处理单元21和存储单元22。在一种实施方式中,区块链节点为单台服务器,处理单元21可以为该服务器中包括的多个CPU,存储单元22可以为该服务器中包括的存储介质(如存储),存储单元22中例如存储有区块数据库和状态数据库。其中,区块数据库用于存储区块链中的区块数据,状态数据库中用于存储区块链中的状态数据。在另一种实施方式中,区块链节点为服务器集群,处理单元21可以为区块链节点中的任一服务器中包括的CPU,存储单元22可以为区块链节点中任一服务器中包括的存储介质。在另一种实施方式中,区块链节点包括一台或多台服务器和与服务器连接的计算硬件(如FPGA),处理单元21除了包括服务器中的CPU之外,还可以包括为与服务器连接的FPGA。另外,在处理单元21为服务器中的CPU的情况中,服务器中可使用TEE技术(如Intel的SGX,AMD的SEV,ARM的TrustZone(可信区)等),从而处理单元21可以在TEE中进行例如执行交易的处理。其中,在上述各种实施方式中,处理单元21在执行交易中调用的合约时,通常在虚拟机中执行合约,虚拟机用于为合约提供执行环境,在该执行环境中包括用于执行合约的上下文、用于存储执行过程中的数据的缓存等。
鉴于很多区块链平台和应用是基于以太坊(Ethereum)的底层技术而构建的,这里以太坊为例对状态数据库进行说明。当然,基于其他区块链技术构建的区块链系统,也可能适用于本说明书实施例,例如基于Fabric的超级账本(Hyperledger)和企业操作系统(Enterprise Operating System,EOS)、Quorum、Corda等,不再赘述。
以太坊相比于比特币网络进行了拓展,采用账户系统和世界状态,可以在状态数据库中直接通过账户来记录账户的余额和状态。以太坊的账户可以分为两种类型:外部账户(Externally owned account):用户的账户,例如以太币拥有者账户;合约账户(contract account):存储执行的智能合约代码以及智能合约代码中状态的值,通常只能通过外部账户调用激活。其中,智能合约代码中状态的值即为在智能合约中定义的变量的值,该变量的值存储在状态数据库中的合约的状态存储中,例如,以MPT树的数据结构存储。
参考图2,当区块链节点执行交易时,处理单元21可以分配一个执行体(例如线程1)执行交易。其中,该执行体可以通过服务器中的多个CPU中的一个CPU实现,或者通过前述FPGA实现。其中,在线程1通过CPU实现的情况中,线程1可在TEE环境中执行交易。在该交易调用合约的情况中,该TEE可实现为虚拟机的形式。当交易的执行过程中需要访问存储单元22中的状态数据库时,在相关技术中,线程1可将存储访问请求发送给线程2,并等待线程2返回对状态数据库的访问结果,或者,线程1可中止对交易的执行,并进行对状态数据库的访问,在获取到访问结果之后再恢复对交易的执行。
其中,在很多合约中,包括对key的存在性的检查。例如,为了防止重复创建某个key(重复创建key,会导致该key之前的值被覆盖),(set:创建和更新)在创建key前会首先检查key的存在性,如果不存在才执行创建操作。或者,为了确认删除动作有效(“删除不存在的key”说明系统存在异常),在删除key之前首先检查key的存在性,如果存在才执行删除操作。区块链节点在执行调用该合约的交易时,当需要检查key的存在性时,执行交易的线程1可将key存在性检查请求发送给线程2,从而线程2通过对key的value进行读取并返回读取结果,以此确定key的存在性。在对key进行读取时,线程2将读取请求发送给硬盘中的状态数据库,并等待硬盘返回读取结果。线程1需要在通过线程2获取到读取结果之后才能继续进行对交易的执行,耗时较多,降低了交易的执行效率。
本说明书实施例提供一种执行交易的方案,执行交易的线程1在需要进行key存在性检查时,基于由区块链平台提供的确认key的存在性的接口,对线程2发送用于进行存在性检查的请求,基于key的预设存在性执行交易。在预设存在性大概率与key的实际存在性相同的情况中,大概率不需要重新执行交易,而线程1可以在线程2进行存储访问的同时执行交易,减少了交易执行时间,提高了交易的执行效率。可以理解,在本说明书实施例中,不限于通过两个执行体并行执行key存在性检查接口和交易,而是可以采用任何可以实现并行执行的方式,例如,可通过一个执行体中的两个模块执行key存在性检查接口和交易,其中当一个模块执行key存在性检查接口之后,向存储(例如硬盘)发送访问请求,从而另一个模块在等待访问的结果的同时可并行地执行交易中的后续操作。下文中,将以两个执行体并行执行为例进行描述。
下文将详细描述本说明书实施例提供的执行交易的方案。
图3示出本说明书实施例提供的一种在区块链中执行交易的方法流程图,该流程由区块链节点中的线程1和线程2执行,其中,线程1用于执行交易,线程2用于执行区块链平台提供的代码,该代码用于支持该交易的执行。所述交易中调用合约,所述合约中调用用于确认变量存在性的接口函数。
参考图3,首先,线程1执行步骤S301,执行交易,生成key存在性确认请求。
在执行调用合约的交易时,在进行与合约中定义的key相关的操作之前,需要首先确认key的存在性。例如,在执行调用合约的交易时,在添加变量之前,可首先确认该变量是否不存在,或者在删除变量之前,可首先确认该变量是否存在。
在第一种情况中,区块链平台中可提供用于确认变量存在性的接口(即函数)。假设交易中调用的合约中将要添加新的key,并在该添加之前调用用于确认变量存在性的接口,以进行对key的存在性的检查,从而确认key是否不存在。具体是,合约中例如包括如下指令:
If(KeyexistCheck(key1))
{KeyexistHandle(key1)},
Else SetKV(key1, new_value);
其中,KeyexistCheck()函数为由区块链平台提供的用于检查key是否存在的接口,合约中可直接调用该接口,以进行对key存在性的检查。KeyexistHandle()函数是合约中定义的函数,用于在KeyexistCheck()函数返回的key存在性为存在的情况下进行的预定操作,例如向用户返回交易失败等。“Else”表示,在KeyexistCheck()函数返回的key存在性为不存在的情况下,执行SetKV()函数。SetKV()函数用于创建新的key(例如key1),其中new_value为key1的初始值。线程1在开始执行合约之后,当执行到合约中包含的上述KeyexistCheck()函数之后,可以生成与该函数对应的用于确认key存在性的请求,以发送给线程2。
在第二种情况中,区块链平台中可以提供AddNewKey接口,该接口用于进行存在性检查、在确定key不存在的情况中,添加key。合约中可在需要添加key时,在合约中调用上述接口。与上述第一种情况类似地,在合约中可设置当AddNewKey接口返回的key存在性为存在时进行的预定操作,例如向用户返回交易失败。线程1在执行AddNewKey接口之后,可生成对应的执行AddNewKey接口的请求,以发送给线程2。线程2根据该请求向存储发送对key的访问请求,并且在等待访问结果的同时,可并行地进行添加Key的操作。添加Key的操作可以包括,根据AddNewKey的传入参数,在内存中记录key的标识和key的初始值,以用于后续更新到存储中,例如在区块的全部交易都执行完之后更新到存储中。其中,在访问结果指示key的存在性为存在的情况下,线程2可删除已经执行的添加key的操作的操作结果,或者可根据AddNewKey接口中的设置终止对合约的执行,结束交易,并返回交易失败。
在第三种情况中,假设交易中调用的合约中将要删除已有的key,并在该删除之前调用区块链平台提供的用于确定变量存在性的接口,以进行对key的存在性的检查,从而确认key是否存在。具体是,合约中例如包括如下指令:
If(KeynotexistCheck(key1))
{KeynotexistHandle(key1)},
Else,DelKV(key1);
其中,KeynotexistCheck ()函数为区块链平台提供的用于检查key(例如代码中示出的key1)是否不存在的接口,合约中可直接调用该接口。KeynotexistHandle()函数是合约中定义的函数,用于在KeynotexistCheck()函数返回的key存在性为不存在的情况下进行的预定操作,例如向用户返回交易失败等。“Else”表示,在KeynotexistCheck()函数返回的key存在性为存在的情况下,执行DelKV()函数。DelKV()函数用于删除key。处理单元21中的线程1在虚拟机中开始执行合约之后,当执行到合约中包含的上述KeynotexistCheck ()函数之后,可以生成用于确认key存在性的请求,以发送给线程2。
在第四种情况中,区块链平台中可以提供DelKey接口,该接口用于进行存在性检查、并在确定key存在的情况中,删除key。合约中可在需要删除key时,在合约中调用上述接口。区块链节点中的线程1在执行DelKey接口之后,可生成对应的执行DelKey接口的请求,以发送给线程2,线程2根据该请求向存储发送对key的访问请求,并且在等待访问结果的同时,可并行地进行删除Key的操作。与上文类似地,该删除key的操作可在内存中进行。
其中,在上述第二种和第四种情况中,通过一个接口进行key存在性检查和添加/删除两个操作,线程1在调用该接口时,可以仅向线程2发送一个系统请求。在线程1在FPGA中实现的情况下,线程1和线程2之间的通信为两个硬件(即服务器和FPGA)之间的通信,通信成本较高,因此通过上述AddNewkey接口和DelKey接口可以大大减少生成和发送系统请求的资源开销,提高系统效率。
另外,在由一个线程中的模块1和模块2执行接口代码和合约代码的情况中,假设模块1在SGX内,在模块1需要向模块2发送系统请求时,模块1需要进行SGX技术下的切换,以切换为模块2,切换成本较高,因此通过上述AddNewkey接口和DelKey接口同样可以大大减少生成和发送系统请求的资源开销。
在步骤S302,线程1将生成的key存在性确认请求发送给线程2。
在步骤S303,线程1按照key的预设存在性继续执行交易。
在一种实施方式中,在所述交易中调用的合约中,除了包括上述Key存在性检查接口之外,在该接口之后还包括对交易执行次数的查询,例如交易中定义了指示交易执行次数的参数T,参数的初始值设为T=1,线程1通过查询该参数T的值可确定交易的本次执行为对交易的首次执行,从而,线程1在进行该确定之后执行步骤S303,按照key的预设存在性继续执行交易。例如,参考上述KeyexistCheck接口的代码,线程1可将Else分支对应的key1的存在性作为预设存在性,从而执行合约中的Else分支。对于上述AddNewKey接口、KeynotexistCheck接口和DelKey接口,线程1可类似地按照预设存在性执行交易(即执行交易中调用的合约)。
在另一种实施方式中,在平台提供的代码(例如上述进行key存在性检查的接口)中可包括对交易执行次数的查询,例如在平台提供的代码中可定义指示交易执行次数的参数N,参数的初始值设为N=1,线程2在从线程1接收到key存在性确认请求之后,可查询参数N的值,从而确定交易的本次执行为首次执行,从而,线程2可立即向线程1返回对预设存在性的确认应答,同时执行步骤S304,进行存储访问,以确认key的存在性。线程1在从线程2接收到确认应答之后,从而执行步骤S303,按照key的预设存在性继续执行交易。
具体是,对于上述第一种情况,线程1在执行步骤S303时,按照假设key1不存在的情况继续执行合约中的后续代码,即交易中的创建key的操作。例如,如上述第一种情况中的代码所示,线程1可继续执行合约中的代码SetKV(key1, new_value),即在存储中创建key1。
在上述第二种情况中,由于线程2在确定key1不存在的情况中进行创建key1的操作,并且线程2执行的创建key1的操作不会影响线程1执行交易中后续的操作,因此,线程1可以按照线程2假设key1不存在并且已创建key1的情况,继续执行交易所调用的合约中的后续操作。
在上述第三种情况中,线程1按照假设key存在的情况继续执行合约中的后续代码,即合约中删除key的操作。例如,如上述第三种情况中的代码所示,线程1可按照key1存在的情况执行代码 “DelKV(key1)”,即在状态数据库中删除“key1”。
在上述第四种情况中,与第二种情况类似地,线程1可以按照假设key存在并且已删除key的情况,继续执行交易中的后续操作。
线程2在步骤S304进行存储访问,确认key存在性。
具体是,线程2可访问硬盘中的状态数据库,以从状态数据库中读取key1的值,从而确认key1是否存在,如果读取到key1的值,则可确认key1已经存在,如果未读取到key1的值,则可确认key1不存在。线程2在根据存储访问结果确定key1的存在性之后,可将key1的存在性存储在内存中。
在步骤S305,线程1向线程2发送系统服务请求。
线程1在继续执行所述交易的过程中可能产生了新的系统服务请求需要发送给线程2,以请求系统服务。所述系统服务请求例如包括其它key的存在性确认请求、交易完成请求等请求。可以理解,由于线程2可在交易结束之前的任何时间执行步骤S306,因此,也有可能在线程1发送系统服务请求之前执行步骤S306,因此,图3中以虚线示出步骤S305,表示该步骤为可选的步骤。
在步骤S306,线程2确定是否重新执行交易。
线程2可以在交易结束之前的任意时间,例如在接收到任一系统服务请求之后,执行该步骤,确定是否重新执行交易。此时,如果线程2尚未得到上述存储访问的结果,假设系统服务请求为其它key的存在性确认请求,线程2可确定不重新执行交易,从而线程1和线程2可继续进行与上述针对key1的处理相同的处理;假设系统服务请求为交易完成请求,即,线程1已经执行完了交易中的全部处理,请求结束对交易的执行,线程2需要等待存储访问的结果,并在得到存储访问的结果之后确认key1的存在性,从而确定是否重新执行交易。
如果线程2已经得到存储访问的结果并将key1的存在性存储在内存中,则可从内存中读取key1的存在性,并将key1的存在性与上述预设存在性进行比较,以确定是否重新执行交易。如果key1的存在性与预设存在性相同,则不需要重新执行交易。具体是,如果系统服务器请求为其它key的存在性确认请求,线程1和线程2可继续进行与上述针对key1的处理相同的处理;假设系统服务请求为交易完成请求,线程2可进行完成交易的处理,并通知线程1结束对所述交易的执行。
如果key1的存在性与预设存在性不同,则线程2执行步骤S307,向线程1发送重新执行交易的通知。
线程1在接收到重新执行交易的通知之后,执行步骤S308,弃用交易在之前的执行过程中产生的执行结果数据,并重新执行该交易。线程1在重新执行交易的过程中,可再次生成key(即key1)存在性确认请求,并之后执行步骤S309,将key存在性确认请求发送给线程2。
如上文所述,在一种实施方式中,线程1在接收到重新执行交易的通知之后,可将合约中定义的参数T加1,以指示对交易的执行为第2次执行,即非首次执行,或者在另一种实施方式中,线程2在发送重新执行交易的通知之后,可将平台代码中定义的参数N加1,以指示对交易的执行为第2次执行。从而,线程1在向线程2发送key存在性请求之后,可根据参数T的值,确定对交易的执行为非首次执行,因此等待线程2返回请求的应答。线程2在接收到key存在性确认请求之后,可根据参数N的值确定对交易的执行为非首次执行,因此,线程2从内存中获取key1的存在性,并执行步骤S310,根据该存在性返回请求应答,可以理解,这里的应答指示key1的存在性与预设存在性不同。
线程1在接收到线程2返回的应答之后,执行步骤S311,结束对交易的执行。由于线程2返回的应答指示key1的存在性与预设存在性不同,因此交易执行失败,线程1结束对交易的执行,并向用户返回交易执行失败。
图4示出本说明书实施例提供的一种在区块链系统中执行交易的方法,所述交易中调用合约,所述合约中调用用于确认变量存在性的接口函数,所述方法由区块链节点执行,包括:
步骤S401,执行所述接口函数;
步骤S403,在所述接口函数的结果返回之前,按照所述变量的预设存在性执行所述合约。
图4中的步骤S401和步骤S403具体可参考上文对步骤S304和步骤S303的具体描述,在此不再赘述。
在一种实现方式中,所述执行所述接口函数包括:向存储发送访问请求,以确认所述变量的存在性。
在一种实现方式中,所述执行所述接口函数还包括:在等待所述存储对所述访问请求返回结果之前,按照所述预设存在性对所述变量进行预定处理。
在一种实现方式中,所述接口函数用于:在确认所述变量不存在的情况中在存储中添加所述变量,或者在确认所述变量存在的情况中在存储中删除所述变量。
在一种实现方式中,所述方法还包括,在所述交易的执行完成之前,获取所述访问请求的访问结果,在根据所述访问结果确定所述变量的存在性与所述预设存在性不同的情况下,确定重新执行所述交易。
在一种实现方式中,所述合约中定义了指示交易执行次数的第一参数,所述按照所述变量的预设存在性执行所述合约包括,在根据所述第一参数确定所述交易的执行为首次执行之后,按照所述变量的预设存在性执行所述合约,所述方法还包括,在确定重新执行所述交易之后,更新所述第一参数。
在一种实现方式中,所述方法还包括,在重新执行所述交易中开始执行所述接口函数时,在根据所述第一参数确定所述交易为非首次执行的情况中,在获取执行所述接口函数返回的所述变量的存在性之后,按照所述变量的存在性执行所述合约。
在一种实现方式中,所述接口函数的代码中定义了指示交易执行次数的第二参数,所述执行所述接口函数包括,在根据所述第二参数确定所述交易的执行为首次执行之后,返回对所述预设存在性的确定应答,所述按照所述变量的预设存在性执行所述合约包括,根据所述确定应答按照所述变量的预设存在性执行所述合约,所述方法还包括,在确定重新执行所述交易之后,更新所述第二参数。
图5示出本说明书实施例提供的一种区块链节点的架构图,所述区块链节点用于执行交易,所述交易中调用合约,所述合约中调用用于确认变量存在性的接口函数,所述区块链节点包括:
第一执行单元51,用于执行所述接口函数;
第二执行单元52,用于在所述接口函数的结果返回之前,按照所述变量的预设存在性执行所述合约。
在一种实现方式中,所述第一执行单元51还用于:向存储发送访问请求,以确认所述变量的存在性。
在一种实现方式中,所述第一执行单元51还用于:在等待所述存储对所述访问请求返回结果之前,按照所述预设存在性对所述变量进行预定处理。
在一种实现方式中,所述接口函数用于:在确认所述变量不存在的情况中在存储中添加所述变量,或者在确认所述变量存在的情况中在存储中删除所述变量。
在一种实现方式中,所述区块链节点还包括确定单元53,用于在所述交易的执行完成之前,获取所述访问请求的访问结果,在根据所述访问结果确定所述变量的存在性与所述预设存在性不同的情况下,确定重新执行所述交易。
在一种实现方式中,所述合约中定义了指示交易执行次数的第一参数,所述第二执行单元52还用于,在根据所述第一参数确定所述交易的执行为首次执行之后,按照所述变量的预设存在性执行所述合约,所述区块链节点还包括,更新单元54,用于在确定重新执行所述交易之后,更新所述第一参数。
在一种实现方式中,所述区块链节点还包括,重新执行单元,用于在重新执行所述交易中开始执行所述接口函数时,在根据所述第一参数确定所述交易为非首次执行的情况中,在获取执行所述接口函数返回的所述变量的存在性之后,按照所述变量的存在性执行所述合约。
在一种实现方式中,所述接口函数的代码中定义了指示交易执行次数的第二参数,所述第一执行单元51还用于,在根据所述第二参数确定所述交易的执行为首次执行之后,返回对所述预设存在性的确定应答,所述第二执行单元52还用于,根据所述确定应答按照所述变量的预设存在性执行所述合约,所述更新单元54还用于在确定重新执行所述交易之后,更新所述第二参数。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行图3和图4所示方法。
本说明书实施例还提供一种区块链节点,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现图3和图4所示方法。
需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。其中,软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (18)
1.一种在区块链系统中执行交易的方法,所述交易中调用合约,所述合约中调用由区块链平台提供的用于确认变量存在性的接口函数,所述方法由区块链节点执行,包括:
执行所述接口函数,返回对预设存在性的确定应答;
在所述接口函数的结果返回之前,根据所述确定应答按照所述变量的预设存在性执行所述合约。
2.根据权利要求1所述的方法,其中,所述执行所述接口函数包括:向存储发送访问请求,以确认所述变量的存在性。
3.根据权利要求2所述的方法,所述执行所述接口函数还包括:在等待所述存储对所述访问请求返回结果之前,按照所述预设存在性对所述变量进行预定处理。
4.根据权利要求3所述的方法,其中,所述接口函数用于:在确认所述变量不存在的情况中在存储中添加所述变量,或者在确认所述变量存在的情况中在存储中删除所述变量。
5.根据权利要求2所述的方法,所述方法还包括,在所述交易的执行完成之前,获取所述访问请求的访问结果,在根据所述访问结果确定所述变量的存在性与所述预设存在性不同的情况下,确定重新执行所述交易。
6.根据权利要求5所述的方法,其中,所述合约中定义了指示交易执行次数的第一参数,所述按照所述变量的预设存在性执行所述合约包括,在根据所述第一参数确定所述交易的执行为首次执行之后,按照所述变量的预设存在性执行所述合约,所述方法还包括,在确定重新执行所述交易之后,更新所述第一参数。
7.根据权利要求6所述的方法,还包括,在重新执行所述交易中开始执行所述接口函数时,在根据所述第一参数确定所述交易为非首次执行的情况中,在获取执行所述接口函数返回的所述变量的存在性之后,按照所述变量的存在性执行所述合约。
8.根据权利要求5所述的方法,所述接口函数的代码中定义了指示交易执行次数的第二参数,所述执行所述接口函数包括,在根据所述第二参数确定所述交易的执行为首次执行之后,返回对所述预设存在性的确定应答,所述方法还包括,在确定重新执行所述交易之后,更新所述第二参数。
9.一种区块链节点,所述区块链节点用于执行交易,所述交易中调用合约,所述合约中调用由区块链平台提供的用于确认变量存在性的接口函数,所述区块链节点包括:
第一执行单元,用于执行所述接口函数,返回对预设存在性的确定应答;
第二执行单元,用于在所述接口函数的结果返回之前,根据所述确定应答按照所述变量的预设存在性执行所述合约。
10.根据权利要求9所述的区块链节点,其中,所述第一执行单元还用于:向存储发送访问请求,以确认所述变量的存在性。
11.根据权利要求10所述的区块链节点,所述第一执行单元还用于:在等待所述存储对所述访问请求返回结果之前,按照所述预设存在性对所述变量进行预定处理。
12.根据权利要求11所述的区块链节点,其中,所述接口函数用于:在确认所述变量不存在的情况中在存储中添加所述变量,或者在确认所述变量存在的情况中在存储中删除所述变量。
13.根据权利要求10所述的区块链节点,所述区块链节点还包括确定单元,用于在所述交易的执行完成之前,获取所述访问请求的访问结果,在根据所述访问结果确定所述变量的存在性与所述预设存在性不同的情况下,确定重新执行所述交易。
14.根据权利要求13所述的区块链节点,其中,所述合约中定义了指示交易执行次数的第一参数,所述第二执行单元还用于,在根据所述第一参数确定所述交易的执行为首次执行之后,按照所述变量的预设存在性执行所述合约,所述区块链节点还包括,更新单元,用于在确定重新执行所述交易之后,更新所述第一参数。
15.根据权利要求14所述的区块链节点,还包括,重新执行单元,用于在重新执行所述交易中开始执行所述接口函数时,在根据所述第一参数确定所述交易为非首次执行的情况中,在获取执行所述接口函数返回的所述变量的存在性之后,按照所述变量的存在性执行所述合约。
16.根据权利要求14所述的区块链节点,所述接口函数的代码中定义了指示交易执行次数的第二参数,所述第一执行单元还用于,在根据所述第二参数确定所述交易的执行为首次执行之后,返回对所述预设存在性的确定应答,所述更新单元还用于在确定重新执行所述交易之后,更新所述第二参数。
17.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-8中任一项的所述的方法。
18.一种区块链节点,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-8中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110748977.1A CN113254467B (zh) | 2021-07-02 | 2021-07-02 | 在区块链系统中执行交易的方法和区块链节点 |
PCT/CN2022/103384 WO2023274409A1 (zh) | 2021-07-02 | 2022-07-01 | 在区块链系统中执行交易的方法和区块链节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110748977.1A CN113254467B (zh) | 2021-07-02 | 2021-07-02 | 在区块链系统中执行交易的方法和区块链节点 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113254467A CN113254467A (zh) | 2021-08-13 |
CN113254467B true CN113254467B (zh) | 2022-05-10 |
Family
ID=77190491
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110748977.1A Active CN113254467B (zh) | 2021-07-02 | 2021-07-02 | 在区块链系统中执行交易的方法和区块链节点 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113254467B (zh) |
WO (1) | WO2023274409A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113254467B (zh) * | 2021-07-02 | 2022-05-10 | 支付宝(杭州)信息技术有限公司 | 在区块链系统中执行交易的方法和区块链节点 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11070360B2 (en) * | 2018-08-13 | 2021-07-20 | International Business Machines Corporation | Parallel transaction validation and block generation in a blockchain |
CN109299335A (zh) * | 2018-08-31 | 2019-02-01 | 阿里巴巴集团控股有限公司 | 数据存储的控制方法、装置、服务器及可读存储介质 |
CN111324425B (zh) * | 2020-02-28 | 2023-03-31 | 百度在线网络技术(北京)有限公司 | 一种数据访问方法、装置、设备及存储介质 |
CN111047449B (zh) * | 2020-03-12 | 2020-06-23 | 支付宝(杭州)信息技术有限公司 | 在区块链中执行交易的方法及装置 |
CN111324396B (zh) * | 2020-03-19 | 2023-09-15 | 深圳市迅雷网络技术有限公司 | 一种区块链智能合约执行方法、装置及设备 |
CN113254467B (zh) * | 2021-07-02 | 2022-05-10 | 支付宝(杭州)信息技术有限公司 | 在区块链系统中执行交易的方法和区块链节点 |
-
2021
- 2021-07-02 CN CN202110748977.1A patent/CN113254467B/zh active Active
-
2022
- 2022-07-01 WO PCT/CN2022/103384 patent/WO2023274409A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2023274409A1 (zh) | 2023-01-05 |
CN113254467A (zh) | 2021-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6353924B2 (ja) | ブロックベースストレージに対するデータボリュームの耐久性状態の低減 | |
CN109951547B (zh) | 事务请求并行处理方法、装置、设备和介质 | |
CN106325978B (zh) | 分布式事务的处理方法及装置 | |
US9189303B2 (en) | Shadow queues for recovery of messages | |
JP2010157202A (ja) | 分散トランザクション回復システムおよび方法 | |
CN109241186A (zh) | 分布式事务的管理方法、系统、计算机设备及存储介质 | |
CN110502319B (zh) | 分布式事务的处理方法、装置、电子设备及存储介质 | |
CN113568981B (zh) | 一种交易数据处理方法、装置、设备以及介质 | |
CN114253673A (zh) | 一种分布式系统的事务处理方法和事务处理装置 | |
CN113254467B (zh) | 在区块链系统中执行交易的方法和区块链节点 | |
CN112995262B (zh) | 分布式事务提交方法、系统及计算设备 | |
WO2022206438A1 (zh) | 提供跨链消息的方法和装置 | |
CN112148436A (zh) | 去中心化的tcc事务管理方法、装置、设备及系统 | |
CN109684128B (zh) | 消息中间件的集群整体故障恢复方法、服务器及存储介质 | |
Pandey et al. | LIFT-A new linear two-phase commit protocol | |
JP2017516237A (ja) | 分散データグリッドにおける分散データ構造をサポートするためのシステムおよび方法 | |
US10726047B2 (en) | Early thread return with secondary event writes | |
CN110297822A (zh) | 面向区块链的密钥管理方法、装置、设备及存储介质 | |
CN111242621B (zh) | 交易数据存储方法、装置、设备及存储介质 | |
CN110347659B (zh) | 数据处理方法和装置、交易数据处理方法和装置 | |
CN112395104B (zh) | 一种分布式事务上下文在路由层传递的实现方法与装置 | |
CN113051008A (zh) | 接口请求处理方法、装置、计算机设备和存储介质 | |
Zeghache et al. | Optimistic replication approach for transactional mobile agent fault tolerance | |
CN114356599A (zh) | 业务消息处理系统及方法 | |
CN114691309A (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 |