CN110443712A - 合约冲突检测方法、装置、可读存储介质和计算机设备 - Google Patents
合约冲突检测方法、装置、可读存储介质和计算机设备 Download PDFInfo
- Publication number
- CN110443712A CN110443712A CN201910736343.7A CN201910736343A CN110443712A CN 110443712 A CN110443712 A CN 110443712A CN 201910736343 A CN201910736343 A CN 201910736343A CN 110443712 A CN110443712 A CN 110443712A
- Authority
- CN
- China
- Prior art keywords
- transaction
- processed
- caching
- contract
- trading
- 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
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Economics (AREA)
- General Business, Economics & Management (AREA)
- Technology Law (AREA)
- Computing Systems (AREA)
- Strategic Management (AREA)
- Marketing (AREA)
- Development Economics (AREA)
- Computational Linguistics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本申请涉及一种合约冲突检测方法、装置、计算机可读存储介质和计算机设备,该方法包括:接收交易请求,交易请求包括至少一个待处理交易,根据交易请求获取各个待处理交易对应的智能合约方法,创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存,在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存,获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存,当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。本申请提供的方案能够提高合约冲突检测的多样性。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种合约冲突检测方法、装置、计算机可读存储介质和计算机设备。
背景技术
随着计算机技术的发展,智能合约与区块链密切相关,智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。然而,目前区块链中的智能合约冲突检测都必须在智能合约执行之前检测是否存在冲突,而无法在智能合约并行执行时检测各个待处理交易对应的智能合约是否存在冲突,检测方式较为单一。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高合约冲突检测多样性的合约冲突检测方法、装置、计算机可读存储介质和计算机设备。
一种合约冲突检测方法,该方法包括:
接收交易请求,交易请求包括至少一个待处理交易;
根据交易请求获取各个待处理交易对应的智能合约方法;
创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存;
在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存;
获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存;
当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
一种合约冲突检测装置,该装置包括:
交易请求接收模块,用于接收交易请求,交易请求包括至少一个待处理交易;
智能合约方法获取模块,用于根据交易请求获取各个待处理交易对应的智能合约方法;
缓存区域创建模块,用于创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存;
智能合约方法执行模块,用于在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存;
交易结果合并模块,用于获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存;
合约冲突结果生成模块,用于当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行程序时实现以下步骤:
接收交易请求,交易请求包括至少一个待处理交易;
根据交易请求获取各个待处理交易对应的智能合约方法;
创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存;
在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存;
获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存;
当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:
接收交易请求,交易请求包括至少一个待处理交易;
根据交易请求获取各个待处理交易对应的智能合约方法;
创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存;
在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存;
获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存;
当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
上述合约冲突检测方法、装置、计算机可读存储介质和计算机设备,将至少一个待处理交易通过交易请求获取对应的智能合约方法,通过创建目标块对应的块缓存,再创建与各个待处理交易对应的初始交易缓存,在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存,获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存,当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
因此,在各个待处理交易对应的智能合约方法并行时,通过当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据是否存在交集来检测当前待处理交易对应的智能合约方法与历史待处理交易对应的智能合约方法是否存在冲突。无需在智能合约方法执行之前就检测是否存在冲突,在各个待处理交易对应的智能合约方法并行执行的过程中检测是否存在冲突,提高了合约冲突检测的多样性。进一步地,实时检测是否存在合约冲突,合约冲突检测便利,其中,若出现问题不仅可以及时修复,而且容易维护,提高了合约冲突检测的全面性和准确率。
附图说明
图1为一个实施例中合约冲突检测方法的应用环境图;
图2为一个实施例中合约冲突检测方法的流程示意图;
图3为一个实施例中块缓存和初始交易缓存的示意图;
图4为一个实施例中智能合约方法执行步骤的流程示意图;
图5为一个实施例中更新交易缓存合并至块缓存的合并步骤的流程示意图;
图5A为一个实施例中更新交易缓存中的交易结果合并至块缓存的示意图;
图6为一个实施例中合约冲突结果生成步骤的流程示意图;
图6A为一个实施例中智能合约方法冲突检测的示意图;
图7为一个实施例中当前更新写缓存与历史已合并交易缓存数据是否存在交集的判断步骤的流程示意图;
图8为另一个实施例中智能合约方法冲突检测的示意图;
图9为一个实施例中当前更新读缓存与历史已合并交易缓存数据是否存在交集的判断步骤的流程示意图;
图9A为一个实施例中当前更新读缓存与历史已合并交易缓存数据是否存在交集的判断步骤的原理示意图;
图10为另一个实施例中合约冲突检测方法的流程示意图;
图11为一个实施例中合约冲突检测装置的结构框图;
图12为一个实施例中智能合约方法执行模块的结构框图;
图13为一个实施例中交易结果合并模块的结构框图;
图14为一个实施例中计算机设备的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
图1为一个实施例中合约冲突检测方法的应用环境图。参照图1,该合约冲突检测方法应用于合约冲突检测系统。该合约冲突检测系统包括终端110和服务器120。终端110和服务器120通过网络连接。终端110具体可以是台式终端或移动终端,移动终端具体可以手机、平板电脑、笔记本电脑等中的至少一种。服务器120可以用独立的服务器或者是至少一个服务器组成的服务器集群来实现。其中,服务器120为一个节点,节点中保存有一条完整的区块链,区块链包括至少一个区块。
具体地,终端110将至少一个待处理交易通过交易请求发送至服务器120。服务器120接收到交易请求,根据交易请求获取各个待处理交易对应的智能合约方法,创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存,在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存,获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存,当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
如图2所示,在一个实施例中,提供了一种合约冲突检测方法。该合约冲突检测方法可以由计算机设备执行,计算机设备可以是服务器或终端中的至少一个。本实施例主要以该方法应用于上述图1中的服务器120来举例说明。参照图2,该合约冲突检测方法具体包括如下步骤:
步骤202,接收交易请求,交易请求包括至少一个待处理交易。
其中,交易请求是用来请求处理待处理交易的,通常由终端发送交易请求至服务器中,服务器接收到交易请求后,可根据交易请求处理对应的待处理交易。其中,交易请求包括至少一个待处理交易,待处理交易为等待处理的交易。其中,这里的待处理交易存在对应智能合约方法,存在对应的智能合约方法的待处理交易可创建对应的初始交易缓存,而不存在对应的智能合约方法的待处理交易无需创建对应的初始交易缓存。
具体地,终端可通过相关应用或者控件触发生成交易请求,将至少一个待处理交易对应的交易信息携带至交易请求中,通过网络发送至服务器。
步骤204,根据交易请求获取各个待处理交易对应的智能合约方法。
其中,智能合约与区块链密切相关,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,区块链本质上是一个去中心化的数据库,同时区块链作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。而智能合约是区块链被称之为“去中心化的”重要原因,它允许不需要第三方的情况下,执行可追溯、不可逆转和安全的交易。
其中,智能合约是智能合约是区块链技术中使用的一种计算机协议,智能合约包含了至少一个待处理交易的所有信息,只有在满足要求后才会执行结果操作。而智能合约包括至少一个变量以及对应的合约方法,这里的智能合约方法是指智能合约中的合约方法。
具体地,服务器接收到交易请求后,根据交易请求获取各个待处理交易对应的智能合约方法。具体可以是,根据各个待处理交易确定对应的变量,再根据变量确定对应的合约方法,将变量对应的合约方法作为对应的待处理交易对应的智能合约方法。
步骤206,创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存。
其中,目标块是用来创建块缓存的,可以从区块中确定目标块,例如,目标块可以是最新区块,所谓最新区块是指服务器保存的区块中高度最高的区块。而块缓存是用来缓存各个待处理交易对应的交易结果的,而初始交易缓存是用来缓存各个待处理交易执行对应的智能合约方法产生的交易结果的。各个待处理交易在执行对应的智能合约方法时,智能合约方法所带来的改动都会缓存至对应的初始交易缓存中,而各个待处理交易执行对应的智能合约方法产生的交易结果都可合并至块缓存中。即,块缓存中暂时保存了所有待处理交易对应的交易结果。
具体地,块缓存可基于合约缓存为最新区块创建得到的,最新区块是指服务器保存的区块中高度最高的区块,在创建得到块缓存后,可基于块缓存为各个待处理交易创建对应的初始交易缓存。这里的合约缓存是指用来保存各个待处理交易对应的智能合约方法的,各个待处理交易从数据库中获取对应的智能合约方法后,将获取到的智能合约方法统一放入合约缓存保存。其中,合约缓存包括合约读缓存和合约写缓存,合约读缓存用来记录智能合约方法的读访问情况,合约写缓存用来记录智能合约方法的写访问情况。
在一个实施例中,基于合约缓存为最新区块创建块缓存对应的读缓存和写缓存,再基于块缓存的读缓存和写缓存为各个待处理交易创建对应的初始交易缓存对应的读缓存和写缓存。其中,待处理交易在对应的初始交易缓存对应的读缓存和写缓存分别执行对应的智能合约方法,分别得到初始交易缓存的读缓存对应的交易结果,和初始交易缓存的写缓存对应的交易结果,最后将初始交易缓存的读缓存对应的交易结果合并至块缓存对应的读缓存中,将初始交易缓存的写缓存对应的交易结果合并至块缓存对应的写缓存中。
步骤208,在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存。
具体地,在创建完块缓存以及各个待处理交易对应的初始交易缓存后,由于初始交易缓存是用来记录待处理交易在执行智能合约方法过程中产生的交易信息的,因此在各个待处理交易对应的初始交易缓存中执行对应的智能合约方法,从而得到各个待处理交易对应的更新交易缓存。即,智能合约是一套以数字形式定义的承诺,在获取到各个待处理交易对应的智能合约方法后,需要各个待处理交易根据对应的智能合约方法所规定的协议执行,因此得到各个待处理交易对应的交易结果,根据交易结果更新初始交易缓存,即将交易结果保存至更新交易缓存中。这里的交易结果是各个待处理交易在对应的交易缓存中执行对应的智能合约方法,智能合约方法所带来的改动结果都可作为对应的交易结果。
其中,各个待处理交易在对应的初始交易缓存中执行对应的智能合约方法是并行执行,即不管各个待处理交易的交易顺序,各个待处理交易直接并行在对应的初始交易缓存中执行对应的智能合约方法。
步骤210,获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存。
其中,待处理交易打包到目标块时已经排好序,此处不需再排序,可直接获取各个待处理交易对应的交易顺序。而在待处理交易未打包至目标块时,可根据各个待处理交易时间的交易时间确定交易顺序,这里的交易时间是指各个待处理交易对应的交易时间点。而交易顺序是指各个待处理交易之间的交易次序,可根据各个待处理交易对应的交易时间确定各个待处理交易对应的交易顺序。具体地,根据交易请求可直接获取各个待处理交易对应的交易顺序。
进一步地,根据各个待处理交易对应的交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存中,即合并完成后,块缓存中包括了所有待处理交易对应的交易结果,也就是说,块缓存中包括了更新交易缓存中的各个待处理交易对应的交易结果。
在一个实施例中,块缓存包括对应的读缓存和写缓存,各个待处理交易对应的初始交易缓存包括读缓存和写缓存,各个待处理交易在对应的初始交易缓存对应的读缓存和写缓存分别执行对应的智能合约方法,分别得到初始交易缓存的读缓存对应的交易结果,和初始交易缓存的写缓存对应的交易结果,再根据交易结果更新初始交易缓存,得到更新交易缓存。
最后,获取各个待处理交易之间的交易顺序,按照交易顺序依次将各个待处理交易对应的初始交易缓存的读缓存对应的交易结果合并至块缓存对应的读缓存中,将初始交易缓存的写缓存对应的交易结果合并至块缓存对应的写缓存中,即根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存中。
步骤212,当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
其中,在根据交易顺序依次将各个待处理交易对应的交易结果合并至块缓存的合并过程中,可能存在智能合约方法之间的冲突,而这里的合约冲突结果就是指在合并过程中,当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法之间存在冲突。
其中,待合并更新交易缓存暂时保存了当前待处理交易对应的当前待处理交易,而当前待处理交易是指当前正在处理的待处理交易,获取当前待处理交易对应的当前交易结果所在的待合并更新交易缓存,具体可以是将当前待处理交易对应的更新交易缓存作为待合并更新交易缓存,由于各个待处理交易对应的更新交易缓存暂时保存了对应的交易结果,即将更新交易缓存合并至块缓存中就是将各个待处理交易对应的交易结果合并至块缓存中,此时成功合并至块缓存的待处理交易更新为已处理交易,即块缓存中暂时保存了当前待处理交易对应的已处理交易的所有交易结果,即已合并交易缓存数据。这里的已处理交易是指待处理交易对应的更新交易缓存成功合并至块缓存更新之后的处理交易,即已经成功将对应的更新交易缓存合并至块缓存的处理交易。
具体地,获取当前待处理交易对应的当前更新交易缓存,将当前更新交易缓存作为待合并更新交易缓存,再获取块缓存中暂时保存的历史已合并交易缓存数据,当待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果,即在合并过程中,当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法之间存在冲突。反之,当当待合并更新交易缓存与块缓存中历史已合并交易缓存数据不存在交集时,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法之间不存在冲突。
其中,当当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法之间存在冲突时,则确定当前待处理交易与已处理交易无法并行,反之,当当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法之间不存在冲突时,则确定当前待处理交易与已处理交易可以并行。
上述合约冲突检测方法,将至少一个待处理交易通过交易请求获取对应的智能合约方法,通过创建目标块对应的块缓存,再创建与各个待处理交易对应的初始交易缓存,在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存,获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存,当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
因此,在各个待处理交易对应的智能合约方法并行时,通过当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据是否存在交集来检测当前待处理交易对应的智能合约方法与历史待处理交易对应的智能合约方法是否存在冲突。无需在智能合约方法执行之前就检测是否存在冲突,在各个待处理交易对应的智能合约方法并行执行的过程中检测是否存在冲突,提高了合约冲突检测的多样性。进一步地,实时检测是否存在合约冲突,合约冲突检测便利,其中,若出现问题不仅可以及时修复,而且容易维护,提高了合约冲突检测的全面性和准确率。
在一个实施例中,创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存,包括:获取目标块,基于合约缓存为目标块创建对应的块读缓存和块写缓存,基于块读缓存和块写缓存为各个待处理交易创建对应的初始交易读缓存和初始交易写缓存。
其中,合约缓存是指用来保存各个待处理交易对应的智能合约方法的,各个待处理交易从数据库中获取对应的智能合约方法后,将获取到的智能合约方法统一放入合约缓存保存。而块缓存是用来缓存各个待处理交易对应的交易结果的,而初始交易缓存是用来缓存各个待处理交易执行对应的智能合约方法产生的交易信息。各个待处理交易在执行对应的智能合约方法时,智能合约方法所带来的改动都会缓存至对应的初始交易缓存中,从而得到更新交易缓存,而各个待处理交易执行对应的智能合约方法产生的交易结果都可合并至块缓存中。即,块缓存中暂时保存了所有待处理交易对应的交易结果。
具体地,基于合约缓存为最新区块创建块缓存对应的块读缓存和块写缓存,再基于块读缓存和块写缓存为各个待处理交易创建对应的初始交易缓存对应的初始交易读缓存和初始交易写缓存。其中,待处理交易在对应的初始交易缓存对应的初始交易读缓存和初始交易写缓存分别执行对应的智能合约方法,分别得到初始交易缓存的初始交易读缓存对应的交易结果,和初始交易缓存的初始交易写缓存对应的交易结果,根据初始交易读缓存对应的交易结果更新初始交易读缓存,得到更新交易读缓存,同样地根据初始交易写缓存对应的交易结果更新初始交易写缓存得到更新交易写缓存。
最后,将更新交易缓存的更新交易读缓存对应的交易结果合并至块缓存对应的块读缓存中,将更新交易缓存的更新交易写缓存对应的交易结果合并至块缓存对应的块写缓存中。
在一个实施例中,如图3所示,图3示出一个实施例中块缓存和初始交易缓存的示意图,具体可以是,服务器获取最新区块,基于合约缓存为最新区块创建块缓存对应的块读缓存和块写缓存,即块缓存中包括块读缓存和块写缓存。进一步地,基于块读缓存和块写缓存为各个待处理交易创建对应的初始交易读缓存和初始交易写缓存,即各个待处理交易存在对应的初始交易读缓存和初始交易写缓存。
在一个实施例中,如图4所示,在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存,包括:
步骤402,在各个待处理交易对应的初始交易读缓存中执行对应的智能合约方法,得到各个待处理交易对应的更新交易读缓存。
步骤404,在各个待处理交易对应的初始交易写缓存中执行对应的智能合约方法,得到各个待处理交易对应的更新交易写缓存。
其中,各个待处理交易对应的更新交易缓存包括更新交易读缓存和更新交易写缓存,更新交易读缓存是用来记录待处理交易的读访问情况,更新交易写缓存是用来记录待处理交易的写访问情况,各个待处理交易可在初始交易缓存中执行对应的智能合约方法,从而得到更新交易缓存。
具体地,在各个待处理交易对应的交易读缓存中执行对应的智能合约方法,将智能合约方法对所带来的变动都保存至交易读缓存中,得到各个待处理交易对应的交易读缓存结果,将交易读缓存结果保存至更新交易读缓存。同样地,在各个待处理交易对应的交易写缓存中执行对应的智能合约方法,得到各个待处理交易对应的交易写缓存结果,将交易写缓存结果保存至更新交易写缓存中。即,交易读缓存和交易写缓存都用来执行对应的执行合约,暂时保存对应的执行结果。
在一个实施例中,如图5所示,获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存,包括:
步骤502,获取各个待处理交易对应的交易顺序。
其中,待处理交易打包到目标块时已经排好序,此处不需再排序,可直接获取各个待处理交易对应的交易顺序。而在待处理交易未打包至目标块时,可根据各个待处理交易时间的交易时间确定交易顺序,这里的交易时间是指各个待处理交易对应的交易时间点。具体地,服务器(节点)直接获取各个待处理交易对应的交易顺序。
步骤504,根据交易顺序依次将各个待处理交易对应的更新交易写缓存合并至块写缓存中。
具体地,在获取各个待处理交易对应的交易顺序后,依次将各个待处理交易对应的更新交易写缓存合并至块写缓存中。即,将交易写缓存的交易写缓存结果提交至块写缓存中,即块写缓存为所有待处理交易对应的交易写缓存结果的并集。
其中,通过将更新交易写缓存提交至块写缓存来识别各个待处理交易对应的智能合约方法之间是否存在冲突,具体可通过以下实施例进行解释说明,在此不作任何赘述。
其中,而在各个待处理交易对应的智能合约方法在执行过程中,会将从数据库或合约缓存中读取的数据存入块读缓存中。
在一个实施例中,如图5A所示,图5A示出一个实施例中更新交易缓存中的交易结果合并至块缓存的示意图。图5A示出交易1读缓存、交易1写缓存和交易2读缓存、交易2写缓存。具体地,按照交易顺序,将交易1读缓存提交至块读缓存中,将交易1写缓存提交至块写缓存中。之后,再将交易2读缓存提交至块读缓存中,将交易2写缓存提交至块写缓存中。
在一个实施例中,如图6所示,当前交易结果为当前更新交易写缓存或当前更新交易读缓存,初始交易缓存包括初始交易读缓存和初始交易写缓存,当前更新交易写缓存是当前待处理交易在当前初始交易写缓存中执行对应的智能合约方法得到的,当前更新交易读缓存是当前待处理交易在当前初始交易读缓存中执行对应的智能合约方法得到的,块缓存包括块读缓存和块写缓存,当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果,包括:
步骤602,当待合并更新交易缓存为当前更新交易写缓存时,获取块写缓存中的历史已合并交易缓存数据,历史已合并交易缓存数据是已处理交易对应的更新交易写缓存,待处理交易对应的更新交易缓存合并至块缓存后更新为已处理交易。
其中,待合并更新交易缓存可以为当前交易写缓存结果或当前交易读缓存结果,更新交易缓存包括更新交易读缓存和更新交易写缓存,当前交易写缓存结果是当前待处理交易在当前更新交易写缓存中执行对应的智能合约方法得到的,当前交易读缓存是当前待处理交易在当前更新交易读缓存中执行对应的智能合约方法得到的,块缓存包括块读缓存和块写缓存,各个待处理交易对应的更新交易读缓存合并至块读缓存中,各个待处理交易对应的交易写缓存合并至块写缓存中。
其中,这里待合并更新交易缓存可以是当前更新交易写缓存,还可以为当前更新交易读缓存。具体地,当待合并更新交易缓存为当前更新交易写缓存,说明将当前待处理交易在更新交易写缓存执行对应的智能合约方法得到的当前更新交易写缓存作为待合并更新交易缓存。获取块写缓存中的历史已合并交易缓存数据,历史已合并交易缓存数据是已处理交易对应的更新交易写缓存,待处理交易对应的更新交易缓存合并至块缓存后更新为已处理交易。
其中,块缓存中的历史已合并交易缓存数据对应的已处理交易之间不存在冲突。即,如果待处理交易存在冲突则不会将交易写缓存结果提交至块写缓存中的,因此块写缓存中的已处理交易之间都不存在任何冲突。
步骤604,当当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法存在冲突。
具体地,当当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集时,说明当前待处理交易与已处理交易都改动了同一存储槽,所以在实际智能合约方法执行过程中,当前待处理交易必须等待所有已处理交易对应的交易完成后才能开始,即当前待处理交易与已处理交易不能并行,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法存在冲突。
在一个实施例中,如图6A所示,图6A示出一个实施例中智能合约方法冲突检测的示意图。图6A示出块写缓存和当前待处理交易对应的当前交易写缓存结果,当前待处理交易为交易4,块写缓存中包括交易1、交易2、交易3对应的交易写缓存结果,组成块写缓存中的历史交易写缓存结果集合。如图6A所示,当前待处理交易对应的当前交易写缓存结果与块写缓存中的至少一个历史交易写缓存结果存在交集,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法存在冲突,即当前待处理交易必须等待所有已处理交易对应的交易完成后交易才能开始。
在一个实施例中,如图7所示,当当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集时,包括:
步骤702,获取当前更新交易写缓存对应的当前交易写键值对,当前交易写键值对包括当前键和对应的当前值。
步骤704,获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
其中,当前更新交易写缓存暂时保存了当前交易写缓存结果,交易写缓存结果可以是键值对,所谓键值对(”key=value”)字符串,在开发中经常使用,每个键后面对应着相应的值,当按下相应的键时,就会输出相应的结果。因此,可通过更新交易写缓存对应的键值对检测智能合约方法之间是否存在冲突。
具体地,获取当前更新交易写缓存中的当前交易写缓存结果对应的当前交易写键值对,当前交易写键值对包括当前键和对应的当前值,同时获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
步骤706,当各个历史键中存在至少一个与当前键相同的目标历史键时,,则确定当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集。
具体地,从各个历史键中获取与当前键相同的目标历史键,说明当前待处理交易与已处理交易都改动了同一存储槽,所以在实际智能合约方法执行过程中,当前待处理交易必须等待所有已处理交易对应的交易完成后才能开始,即当前待处理交易与已处理交易不能并行,则确定当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集。
在一个实施例中,如图6A所示,图6A中的块写缓存中包括已处理交易对应的历史交易写缓存结果,如交易1的交易写缓存结果:1=1,等号左边的1代表键key,等号右边的1代表值value,交易2的交易写缓存结果:2=2以及交易3的交易写缓存结果3=3,当前待处理交易为交易4对应的交易写缓存结果:3=4,4=4,因此可见,交易4的交易写缓存结果中key为3与块缓存中的历史交易写缓存结果中key为3的值并不相同,则确定当前待处理交易与前面的已处理交易存在冲突,需要等前面的所有已处理交易对应的交易完成后才能开始。
在一个实施例中,如图8所示,在图6的基础上,当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果,包括:
步骤802,获取当前待处理交易对应的当前更新交易读缓存,将当前更新交易读缓存作为待合并更新交易缓存。
步骤804,当当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法存在冲突。
其中,当前更新交易读缓存中包括当前待处理交易在对应的更新交易读缓存中执行对应智能合约方法得到的,历史已合并交易缓存数据为块缓存中所有已处理交易对应的更新交易写缓存结果,这里更新交易写缓存结果是指已处理交易在对应的更新交易写缓存执行对应的智能合约得到的。
其中,已处理交易是指交易顺序在当前待处理交易之前的所有待处理交易。块缓存中的历史已合并交易缓存数据对应的待处理交易之间不存在冲突。即,如果待处理交易存在冲突则不会将交易写缓存结果提交至块写缓存中的,因此块写缓存中的前向待处理之间都不存在任何冲突。
具体地,获取当前待处理交易对应的当前更新交易读缓存,当前更新交易读缓存中包括当前待处理交易在对应的更新交易读缓存中执行对应智能合约方法得到的,将当前更新交易读缓存作为待合并更新交易缓存,当当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法存在冲突。
在一个实施例中,如图9所示,当当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集时,包括:
步骤902,获取当前更新交易读缓存对应的当前交易读键值对,当前交易读键值对包括当前键和对应的当前值。
步骤904,获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
其中,当前更新交易读缓存暂时保存了当前交易读缓存结果,交易读缓存结果可以是键值对,这里的键值对(”key=value”)字符串,在开发中经常使用,每个键后面对应着相应的值,当按下相应的键时,就会输出相应的结果。因此,可通过更新交易读缓存对应的键值对检测智能合约方法之间是否存在冲突。
具体地,获取当前更新交易读缓存中的当前交易读缓存结果对应的当前交易读键值对,当前交易读键值对包括当前键和对应的当前值,同时获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
步骤906,当各个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集。
具体地,当各个历史键中存在至少一个与当前键相同的目标历史键时,说明在各个待处理交易对应的智能合约方法在并行情况下,不同服务器中的目标历史键的值都有可能会有不同的情况,为了保持各个服务器之间的一致性,统一悲观地认为当前待处理交易读取了旧数据,即当前待处理交易必须等待所有已处理交易对应的交易完成后才能开始,所以当前待处理交易与已处理交易不能并行,则确定当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集。
在一个实施例中,如图9A所示,图9A中的块写缓存中包括已处理交易对应的历史交易写缓存结果,如交易1的交易写缓存结果:1=1,等号左边的1代表键key,等号右边的1代表值value,交易2的交易写缓存结果:2=2以及交易3的交易写缓存结果3=3,当前待处理交易3对应的交易读缓存结果:3=0,4=4,因此可见,交易4的交易读缓存结果中存在与块缓存中的历史键相同的目标历史键,即key=3,因此不管key=3对应的值是否相同,都可确定当前待处理交易与前面的已处理交易存在冲突,需要等前面的所有已处理交易对应的交易完成后才能开始。
在一个实施例中,如图10所示,得到合约冲突结果之前,还包括:
步骤1002,接收合约部署请求,根据合约部署请求获取各个待处理交易对应的智能合约方法对应的合约字节码。
其中,合约部署请求是用来请求扫描智能合约方法对应的合约字节码的,这里的合约字节码是指智能合约方法对应的代码。其中,检测智能合约方法之间是否存在冲突,可通过智能合约方法对应的合约字节码进行检测。
具体地,终端可以向服务器发送合约部署请求,服务器接收到合约部署请求后,根据合约部署请求获取各个待处理交易对应的智能合约方法对应的合约字节码,具体可以是通过合约虚拟机扫描各个待处理交易对应的智能合约方法,从而得到各个待处理交易对应的智能合约方法对应的合约字节码。
步骤1004,获取预设检测合约字节码,预设检测合约字节码为预编码合约对应的预编码字节码、自定义合约字节码中的至少一种。
步骤1006,当合约字节码与预设检测合约字节码匹配时,则确定合约字节码对应的智能合约方法存在冲突。
其中,这里的预设检测合约字节码可预先设置,用来检测智能合约方法对应的合约字节码是否存在冲突的标准。预设检测合约字节码为预编码合约对应的预编码字节码、自定义合约字节码中的至少一种,这里的预编码合约是指调用了外部智能合约方法,因此当预设检测合约字节码为预编码合约对应的预编码字节码时,则认为扫描得到的合约字节码对应的智能合约方法可能调用了外部智能合约方法,因为调用链有可能过场,分析难度大,确定为智能合约方法存在冲突。
其中,自定义合约字节码是指根据业务实际需要或者实际应用场景自定义用来检测智能合约方法是否存在冲突的,可将自定义合约字节码也作为预设检测合约字节码。
具体地,当合约字节码与预设检测合约字节码匹配时,则确定合约字节码对应的智能合约方法存在冲突。具体可以是,当合约字节码中存在与预设检测合约字节码相同的合约字节码,则可确定合约字节码对应的智能合约方法存在冲突。或者还可以是,获取预设检测合约字节码对应的功能或者作用,当合约字节码中存在与预设检测合约字节码相同或者相似功能或者作用的合约字节码,则可确定合约字节码对应的智能合约方法存在冲突。
在一个具体的实施例中,提供了一种合约冲突检测方法,具体包括以下步骤:
1、接收交易请求,交易请求包括至少一个待处理交易。
2、根据交易请求获取各个待处理交易对应的智能合约方法。
3、创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存。
3-1、获取目标块,基于合约缓存为目标块创建对应的块读缓存和块写缓存。
3-2、基于块读缓存和块写缓存为与各个待处理交易创建对应的初始交易读缓存和初始交易写缓存。
4、在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存。
4-1、在各个待处理交易对应的初始交易读缓存中执行对应的智能合约方法,得到各个待处理交易对应的更新交易读缓存。
4-2、在各个待处理交易对应的初始交易写缓存中执行对应的智能合约方法,得到各个待处理交易对应的更新交易写缓存。
5、获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存。
5-1、获取各个待处理交易对应交易顺序。
5-2、根据交易顺序依次将各个待处理交易对应的更新交易写缓存合并至块写缓存中。
6、当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
6-1、当待合并更新交易缓存为当前更新交易写缓存时,获取块写缓存中的历史已合并交易缓存数据,历史已合并交易缓存数据是是已处理交易对应的更新交易写缓存,待处理交易对应的更新交易缓存合并至块缓存后更新为已处理交易,当当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法存在冲突。
6-1-1、获取当前更新交易写缓存对应的当前交易写键值对,当前交易写键值对包括当前键和对应的当前值。
6-1-2、获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
6-1-3、当各个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集。
6-2、获取当前待处理交易对应的当前更新交易读缓存,将当前更新交易读缓存作为待合并更新交易缓存,当当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法存在冲突。
6-2-1、获取当前更新交易读缓存对应的当前交易读键值对,当前交易读键值对包括当前键和对应的当前值。
6-2-2、获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值。
6-2-3、当各个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集。
7、接收合约部署请求,根据合约部署请求获取各个待处理交易对应的智能合约方法对应的合约字节码。
8、获取预设检测合约字节码,预设检测合约字节码为预编码合约对应的预编码字节码、自定义合约字节码中的至少一种。
9、当合约字节码与预设检测合约字节码匹配时,则确定合约字节码对应的智能合约方法存在冲突。
应该理解的是,虽然上述流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图11所示,提供了一种合约冲突检测装置1100,包括:
交易请求接收模块1102,用于接收交易请求,交易请求包括至少一个待处理交易。
智能合约方法获取模块1104,用于根据交易请求获取各个待处理交易对应的智能合约方法。
缓存区域创建模块1106,用于创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存。
智能合约方法执行模块1108,用于在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存。
交易结果合并模块1110,用于获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存。
合约冲突结果生成模块1112,用于当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
在一个实施例中,缓存区域创建模块1106还用于获取目标块,基于合约缓存为目标块创建对应的块读缓存和块写缓存,基于块读缓存和块写缓存为各个待处理交易创建对应的初始交易读缓存和初始交易写缓存。
在一个实施例中,如图12所示,智能合约方法执行模块1108包括:
交易读缓存执行单元1108a,用于在各个待处理交易对应的初始交易读缓存中执行对应的智能合约方法,得到各个待处理交易对应的更新交易读缓存。
交易写缓存执行单元1108b,用于在各个待处理交易对应的初始交易写缓存中执行对应的智能合约方法,得到各个待处理交易对应的更新交易写缓存。
在一个实施例中,如图13所示,交易结果合并模块1110包括:
交易顺序确定单元1110a,用于获取各个待处理交易对应的交易顺序。
交易写缓存结果合并单元1110b,用于根据交易顺序依次将各个待处理交易对应的更新交易写缓存合并至块写缓存中。
在一个实施例中,当前交易结果为当前更新交易写缓存或当前更新交易读缓存,初始交易缓存包括初始交易读缓存和初始交易写缓存,当前更新交易写缓存是当前待处理交易在当前初始交易写缓存中执行对应的智能合约方法得到的,当前更新交易读缓存是当前待处理交易在当前初始交易读缓存中执行对应的智能合约方法得到的,块缓存包括块读缓存和块写缓存,合约冲突结果生成模块1112还用于当待合并更新交易缓存为当前更新交易写缓存时,获取块写缓存中的历史已合并交易缓存数据,历史已合并交易缓存数据是已处理交易对应的更新交易写缓存,待处理交易对应的更新交易缓存合并至块缓存后更新为已处理交易,当当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法存在冲突。
在一个实施例中,合约冲突结果生成模块1112还用于获取当前更新交易写缓存对应的当前交易写键值对,当前交易写键值对包括当前键和对应的当前值,获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值,当各个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易写缓存与至少一个历史已合并交易缓存数据存在交集。
在一个实施例中,合约冲突结果生成模块1112还用于获取当前待处理交易对应的当前更新交易读缓存,将当前更新交易读缓存作为待合并更新交易缓存,当当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集时,则确定当前待处理交易对应的智能合约方法与已处理交易对应的智能合约方法存在冲突。
在一个实施例中,合约冲突结果生成模块1112还用于获取当前更新交易读缓存对应的当前交易读键值对,当前交易读键值对包括当前键和对应的当前值,获取历史已合并交易缓存数据对应的历史交易写键值对,历史交易写键值对包括历史键和对应的历史值,当各个历史键中存在至少一个与当前键相同的目标历史键时,则确定当前更新交易读缓存与至少一个历史已合并交易缓存数据存在交集。
在一个实施例中,合约冲突检测装置1100还用于接收合约部署请求,根据合约部署请求获取各个待处理交易对应的智能合约方法对应的合约字节码,获取预设检测合约字节码,预设检测合约字节码为预编码合约对应的预编码字节码、自定义合约字节码中的至少一种,当合约字节码与预设检测合约字节码匹配时,则确定合约字节码对应的智能合约方法存在冲突。
图14示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的服务器120。如图14所示,该计算机设备包括该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现合约冲突检测方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行合约冲突检测方法。计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图14中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的合约冲突检测装置可以实现为一种计算机程序的形式,计算机程序可在如图14所示的计算机设备上运行。计算机设备的存储器中可存储组成该合约冲突检测装置的各个程序模块,比如,图11所示的交易请求接收模块、智能合约方法获取模块、缓存区域创建模块、智能合约方法执行模块、交易结果合并模块和合约冲突结果生成模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的合约冲突检测方法中的步骤。
例如,图14所示的计算机设备可以通过如图11所示的合约冲突检测装置中的交易请求接收模块执行接收交易请求,交易请求包括至少一个待处理交易。计算机设备可通过智能合约方法获取模块执行根据交易请求获取各个待处理交易对应的智能合约方法。计算机设备可通过缓存区域创建模块执行创建目标块对应的块缓存,创建与各个待处理交易对应的初始交易缓存。计算机设备可通过智能合约方法执行模块执行在各个待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个待处理交易对应的更新交易缓存。计算机设备可通过交易结果合并模块执行获取各个待处理交易的交易顺序,根据交易顺序依次将各个待处理交易对应的更新交易缓存合并至块缓存。计算机设备可通过合约冲突结果生成模块执行当当前待处理交易对应的待合并更新交易缓存与块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述合约冲突检测方法的步骤。此处合约冲突检测方法的步骤可以是上述各个实施例的合约冲突检测方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述合约冲突检测方法的步骤。此处合约冲突检测方法的步骤可以是上述各个实施例的合约冲突检测方法中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (15)
1.一种合约冲突检测方法,包括:
接收交易请求,所述交易请求包括至少一个待处理交易;
根据交易请求获取各个所述待处理交易对应的智能合约方法;
创建目标块对应的块缓存,创建与各个所述待处理交易对应的初始交易缓存;
在各个所述待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易缓存;
获取各个所述待处理交易的交易顺序,根据所述交易顺序依次将各个所述待处理交易对应的更新交易缓存合并至所述块缓存;
当当前待处理交易对应的待合并更新交易缓存与所述块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
2.根据权利要求1所述的方法,其特征在于,所述创建目标块对应的块缓存,创建与各个所述待处理交易对应的初始交易缓存,包括:
获取目标块,基于合约缓存为所述目标块创建对应的块读缓存和块写缓存;
基于所述块读缓存和所述块写缓存为各个所述待处理交易创建对应的初始交易读缓存和初始交易写缓存。
3.根据权利要求2所述的方法,其特征在于,所述在各个所述待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易缓存,包括:
在各个所述待处理交易对应的初始交易读缓存中执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易读缓存;
在各个所述待处理交易对应的初始交易写缓存中执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易写缓存。
4.根据权利要求3所述的方法,其特征在于,所述获取各个所述待处理交易的交易顺序,根据所述交易顺序依次将各个所述待处理交易对应的更新交易缓存合并至所述块缓存,包括:
获取各个所述待处理交易对应的交易顺序;
根据所述交易顺序依次将各个所述待处理交易对应的更新交易写缓存合并至所述块写缓存中。
5.根据权利要求1所述的方法,其特征在于,所述当前交易结果为当前更新交易写缓存或当前更新交易读缓存,所述初始交易缓存包括初始交易读缓存和初始交易写缓存,所述当前更新交易写缓存是当前待处理交易在当前初始交易写缓存中执行对应的智能合约方法得到的,所述当前更新交易读缓存是所述当前待处理交易在当前初始交易读缓存中执行对应的智能合约方法得到的,所述块缓存包括块读缓存和块写缓存;
所述当当前待处理交易对应的待合并更新交易缓存与所述块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果,包括:
当所述待合并更新交易缓存为当前更新交易写缓存时,获取所述块写缓存中的历史已合并交易缓存数据,所述历史已合并交易缓存数据是已处理交易对应的更新交易写缓存,待处理交易对应的更新交易缓存合并至所述块缓存后更新为已处理交易;
当所述当前更新交易写缓存与至少一个所述历史已合并交易缓存数据存在交集时,则确定所述当前待处理交易对应的智能合约方法与所述已处理交易对应的智能合约方法存在冲突。
6.根据权利要求5所述的方法,其特征在于,所述当所述当前更新交易写缓存与至少一个所述历史已合并交易缓存数据存在交集时,包括:
获取所述当前更新交易写缓存对应的当前交易写键值对,所述当前交易写键值对包括当前键和对应的当前值;
获取所述历史已合并交易缓存数据对应的历史交易写键值对,所述历史交易写键值对包括历史键和对应的历史值;
当各个所述历史键中存在至少一个与所述当前键相同的目标历史键时,则确定所述当前更新交易写缓存与至少一个所述历史已合并交易缓存数据存在交集。
7.根据权利要求5所述的方法,其特征在于,所述方法还包括:
获取所述当前待处理交易对应的当前更新交易读缓存,将所述当前更新交易读缓存作为所述待合并更新交易缓存;
当所述当前更新交易读缓存与至少一个所述历史已合并交易缓存数据存在交集时,则确定所述当前待处理交易对应的智能合约方法与所述已处理交易对应的智能合约方法存在冲突。
8.根据权利要求7所述的方法,其特征在于,所述当所述当前更新交易读缓存与至少一个所述历史已合并交易缓存数据存在交集时,包括:
获取所述当前更新交易读缓存对应的当前交易读键值对,所述当前交易读键值对包括当前键和对应的当前值;
获取所述历史已合并交易缓存数据对应的历史交易写键值对,所述历史交易写键值对包括历史键和对应的历史值;
当各个所述历史键中存在至少一个与所述当前键相同的目标历史键时,则确定所述当前更新交易读缓存与至少一个所述历史已合并交易缓存数据存在交集。
9.根据权利要求1所述的方法,其特征在于,所述得到合约冲突结果之前,还包括:
接收合约部署请求,根据所述合约部署请求获取各个所述待处理交易对应的智能合约方法对应的合约字节码;
获取预设检测合约字节码,所述预设检测合约字节码为预编码合约对应的预编码字节码、自定义合约字节码中的至少一种;
当所述合约字节码与所述预设检测合约字节码匹配时,则确定所述合约字节码对应的智能合约方法存在冲突。
10.一种合约冲突检测装置,其特征在于,所述装置包括:
交易请求接收模块,用于接收交易请求,所述交易请求包括至少一个待处理交易;
智能合约方法获取模块,用于根据交易请求获取各个待处理交易对应的智能合约方法;
缓存区域创建模块,用于创建目标块对应的块缓存,创建与各个所述待处理交易对应的初始交易缓存;
智能合约方法执行模块,用于在各个所述待处理交易对应的初始交易缓存中并行执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易缓存;
交易结果合并模块,用于获取各个所述待处理交易的交易顺序,根据所述交易顺序依次将各个所述待处理交易对应的更新交易缓存合并至所述块缓存;
合约冲突结果生成模块,用于当当前待处理交易对应的待合并更新交易缓存与所述块缓存中历史已合并交易缓存数据存在交集时,得到合约冲突结果。
11.根据权利要求10所述的装置,其特征在于,所述缓存区域创建模块还用于获取目标块,基于合约缓存为所述目标块创建对应的块读缓存和块写缓存,基于所述块读缓存和所述块写缓存为各个所述待处理交易创建对应的初始交易读缓存和初始交易写缓存。
12.根据权利要求11所述的装置,其特征在于,所述智能合约方法执行模块包括:
交易读缓存执行单元,用于在各个所述待处理交易对应的初始交易读缓存中执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易读缓存;
交易写缓存执行单元,用于在各个所述待处理交易对应的初始交易写缓存中执行对应的智能合约方法,得到各个所述待处理交易对应的更新交易写缓存。
13.根据权利要求12所述的装置,其特征在于,所述交易结果合并模块包括:
交易顺序确定单元,用于获取各个所述待处理交易对应的交易顺序;
交易写缓存结果合并单元,用于根据所述交易顺序依次将各个所述待处理交易对应的更新交易写缓存合并至所述块写缓存中。
14.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至9中任一项所述方法的步骤。
15.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至9中任一项所述方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910853885.2A CN110555773B (zh) | 2019-08-09 | 2019-08-09 | 合约冲突检测方法、装置、可读存储介质和计算机设备 |
CN201910736343.7A CN110443712B (zh) | 2019-08-09 | 2019-08-09 | 合约冲突检测方法、装置、可读存储介质和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910736343.7A CN110443712B (zh) | 2019-08-09 | 2019-08-09 | 合约冲突检测方法、装置、可读存储介质和计算机设备 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910853885.2A Division CN110555773B (zh) | 2019-08-09 | 2019-08-09 | 合约冲突检测方法、装置、可读存储介质和计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110443712A true CN110443712A (zh) | 2019-11-12 |
CN110443712B CN110443712B (zh) | 2021-04-20 |
Family
ID=68434513
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910853885.2A Active CN110555773B (zh) | 2019-08-09 | 2019-08-09 | 合约冲突检测方法、装置、可读存储介质和计算机设备 |
CN201910736343.7A Active CN110443712B (zh) | 2019-08-09 | 2019-08-09 | 合约冲突检测方法、装置、可读存储介质和计算机设备 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910853885.2A Active CN110555773B (zh) | 2019-08-09 | 2019-08-09 | 合约冲突检测方法、装置、可读存储介质和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN110555773B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110866036A (zh) * | 2019-11-15 | 2020-03-06 | 腾讯科技(深圳)有限公司 | 数据处理方法、系统、装置、终端及可读存储介质 |
CN113609167A (zh) * | 2021-10-09 | 2021-11-05 | 腾讯科技(深圳)有限公司 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
CN114564412A (zh) * | 2022-04-27 | 2022-05-31 | 北京微芯感知科技有限公司 | 区块链的确定性交易并发调度方法及系统 |
CN115455457A (zh) * | 2022-11-11 | 2022-12-09 | 北京共识数信科技有限公司 | 基于智慧大数据的链数据管理方法、系统和存储介质 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111343208B (zh) * | 2020-05-21 | 2020-08-14 | 腾讯科技(深圳)有限公司 | 基于区块链的数据检测方法、装置及计算机可读存储介质 |
CN112214502B (zh) * | 2020-08-28 | 2023-07-07 | 迅鳐成都科技有限公司 | 一种联盟链的用户合约部署方法、装置、系统及存储介质 |
CN113220795B (zh) * | 2021-02-19 | 2022-06-24 | 腾讯科技(深圳)有限公司 | 基于分布式存储的数据处理方法、装置、设备以及介质 |
CN114022148B (zh) * | 2021-12-24 | 2022-04-22 | 杭州趣链科技有限公司 | 基于区块链的交易冲突检测方法、装置、设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109040029A (zh) * | 2018-07-13 | 2018-12-18 | 上海点融信息科技有限责任公司 | 在区块链中执行事务的方法和装置 |
CN109784930A (zh) * | 2019-02-18 | 2019-05-21 | 深圳市网心科技有限公司 | 一种区块链交易数据的处理方法、装置、电子设备及介质 |
CN110019202A (zh) * | 2017-10-19 | 2019-07-16 | 深圳区块链金融服务有限公司 | 用于并发处理区块链交易的方法、计算机系统和介质 |
-
2019
- 2019-08-09 CN CN201910853885.2A patent/CN110555773B/zh active Active
- 2019-08-09 CN CN201910736343.7A patent/CN110443712B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019202A (zh) * | 2017-10-19 | 2019-07-16 | 深圳区块链金融服务有限公司 | 用于并发处理区块链交易的方法、计算机系统和介质 |
CN109040029A (zh) * | 2018-07-13 | 2018-12-18 | 上海点融信息科技有限责任公司 | 在区块链中执行事务的方法和装置 |
CN109784930A (zh) * | 2019-02-18 | 2019-05-21 | 深圳市网心科技有限公司 | 一种区块链交易数据的处理方法、装置、电子设备及介质 |
Non-Patent Citations (1)
Title |
---|
王磊等: "基于区块链机制的云计算环境下服务组合策略的研究", 《计算机应用研究》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110866036A (zh) * | 2019-11-15 | 2020-03-06 | 腾讯科技(深圳)有限公司 | 数据处理方法、系统、装置、终端及可读存储介质 |
CN110866036B (zh) * | 2019-11-15 | 2023-02-10 | 腾讯科技(深圳)有限公司 | 数据处理方法、系统、装置、终端及可读存储介质 |
CN113609167A (zh) * | 2021-10-09 | 2021-11-05 | 腾讯科技(深圳)有限公司 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
CN113609167B (zh) * | 2021-10-09 | 2021-12-10 | 腾讯科技(深圳)有限公司 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
WO2023056797A1 (zh) * | 2021-10-09 | 2023-04-13 | 腾讯科技(深圳)有限公司 | 基于区块链的数据处理方法、装置、设备及存储介质 |
CN114564412A (zh) * | 2022-04-27 | 2022-05-31 | 北京微芯感知科技有限公司 | 区块链的确定性交易并发调度方法及系统 |
CN115455457A (zh) * | 2022-11-11 | 2022-12-09 | 北京共识数信科技有限公司 | 基于智慧大数据的链数据管理方法、系统和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110555773A (zh) | 2019-12-10 |
CN110443712B (zh) | 2021-04-20 |
CN110555773B (zh) | 2021-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110443712A (zh) | 合约冲突检测方法、装置、可读存储介质和计算机设备 | |
CN110457353A (zh) | 合约数据处理方法、装置、计算机可读存储介质和计算机设备 | |
CN109614262B (zh) | 业务校验方法、装置及计算机可读存储介质 | |
US20210049715A1 (en) | Blockchain-based data procesing method, apparatus, and electronic device | |
US11087371B2 (en) | Blockchain-based invoice creation method apparatus, and electronic device | |
CN109615343A (zh) | 电子合同生成方法、装置、计算机设备和存储介质 | |
CN114022148B (zh) | 基于区块链的交易冲突检测方法、装置、设备和存储介质 | |
CN109816563A (zh) | 电子合同模板流转方法、装置、计算机设备和存储介质 | |
CN110599267B (zh) | 电子发票开票方法、装置、计算机可读存储介质和计算机设备 | |
CN110209681A (zh) | 区块链数据入链方法、装置、计算机设备和存储介质 | |
CN110223127A (zh) | 票据数据回退方法和系统 | |
CN110489086A (zh) | 流程执行控制方法、装置、计算机设备及存储介质 | |
CN109361628A (zh) | 报文组装方法、装置、计算机设备和存储介质 | |
CN109992506A (zh) | 调度测试方法、装置、计算机设备和存储介质 | |
CN110147386A (zh) | 数据的缓存方法、装置、计算机设备 | |
CN110175475A (zh) | 一种智能卡数据处理方法、装置及计算机可读存储介质 | |
CN113064730A (zh) | 区块链交易执行方法、区块链节点及控制装置 | |
CN112988818B (zh) | 区块链交易执行方法、区块链节点及控制装置 | |
CN112884587B (zh) | 区块链交易执行方法、区块链节点及控制装置 | |
CN109522060A (zh) | 业务场景的还原方法及终端设备 | |
CN112883067A (zh) | 区块链交易执行方法、区块链节点及控制装置 | |
CN109783837A (zh) | 仿真设备、仿真系统、仿真方法和仿真程序 | |
CN116701246B (zh) | 一种提升缓存带宽的方法、装置、设备及存储介质 | |
CN117251887A (zh) | 具有人工智能节点的区块链系统 | |
CN107515724A (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40016759 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |