CN114610812A - 读写集生成方法、装置、存储介质及电子设备 - Google Patents
读写集生成方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN114610812A CN114610812A CN202210204892.1A CN202210204892A CN114610812A CN 114610812 A CN114610812 A CN 114610812A CN 202210204892 A CN202210204892 A CN 202210204892A CN 114610812 A CN114610812 A CN 114610812A
- Authority
- CN
- China
- Prior art keywords
- write set
- transaction
- target
- read
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
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/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
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及一种读写集生成方法、装置、存储介质及电子设备,以解决基于读写集方式的区块链中所存在的读集锁问题。所述方法包括:接收应用端发送的交易预案;模拟执行所述交易预案,得到所述交易预案的目标读写集,所述目标读写集包括目标读集以及目标写集,所述目标读集用于确定所述目标写集是否有效,在所述目标写集有效的情况下用于更新世界状态数据库;并,根据所述目标读写集缓存写集预执行数据,以在根据所述目标写集更新所述世界状态数据库之前用于针对新的交易预案生成新的目标读写集。
Description
技术领域
本公开涉及区块链技术领域,具体地,涉及一种读写集生成方法、装置、存储介质及电子设备。
背景技术
区块链,从狭义上讲是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。每一个区块都包含了上一个区块的哈希值(hash),从创始区块(genesis block)开始连接,数据一旦记录至区块,那么这个数据就不可逆。从广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。
区块链通过交易的方式修改分布式账本。目前区块链世界主要有两种账本方式,一种是记录交易,比如比特币。一种是记录状态,比如以太坊和超级账本(即Hyperledger)。基于记录交易的区块链,由于没有直接记录最终状态,所以对智能合约不太友好。而基于状态记录的以太坊和Hyperledger则非常适合使用智能合约。智能合约赋予了区块链实现无限应用的可能,所以智能合约的使用越来越广泛。同样是基于状态记录的区块链,以太坊和Hyperledger有着不同的交易执行机制。简单来说,以太坊是在共识的时候执行交易,而Hyperledger是在共识之前执行交易。在共识之前执行交易,共识只决定交易的最终顺序的一个好处是,区块链不会发生分叉,一旦出块,执行的最终结果就确定,不会存在回滚等情况。所以在基于Hyperledger的交易场景中,交易入块后,无需等待确认,就可直接返回交易的执行结果。但是,在基于Hyperledger的交易过程中,存在读集锁问题。
发明内容
本公开的目的是提供一种读写集生成方法、装置、存储介质及电子设备,以解决基于读写集方式的区块链中所存在的读集锁问题。
为了实现上述目的,本公开实施例的第一方面提供一种读写集生成方法,所述方法包括:
接收应用端发送的交易预案;
模拟执行所述交易预案,得到所述交易预案的目标读写集,所述目标读写集包括目标读集以及目标写集,所述目标读集用于确定所述目标写集是否有效,在所述目标写集有效的情况下用于更新世界状态数据库;并,
根据所述目标读写集缓存写集预执行数据,以在根据所述目标写集更新所述世界状态数据库之前用于针对新的交易预案生成新的目标读写集。
可选地,所述目标读集包括唯一键以及对应的版本,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,包括:
在模拟执行所述交易预案的过程中,确定所述唯一键;
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本确定所述唯一键的所述版本,以得到所述目标读集。
可选地,所述目标写集包括所述唯一键以及对应的修改值,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,还包括:
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值确定所述修改值,以得到所述目标写集。
可选地,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,包括:
模拟执行所述交易预案,以基于本地状态数据库确定初始读写集,所述初始读写集包括初始读集,所述初始读集包括唯一键以及对应的初始版本;
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本修正所述初始读集中的所述初始版本,以得到所述目标读集。
可选地,所述初始读写集还包括初始写集,所述初始写集包括所述唯一键以及对应的初始修改值;
所述方法还包括:
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值修正所述初始写集中的所述初始修改值,以得到所述目标写集。
可选地,所述在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本确定所述唯一键的所述版本,以得到所述目标读集,包括:
若缓存有多个包括所述唯一键的所述历史写集预执行数据,则从最近一次缓存的所述历史写集预执行数据中确定所述唯一键的所述版本,得到所述目标读集。
可选地,所述接收应用端发送的交易预案,包括:
接收所述应用端发送的多个所述交易预案;
所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据,包括:
依次针对多个所述交易预案中的每一所述交易预案执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
可选地,所述依次针对多个所述交易预案中的每一所述交易预案执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤,包括:
针对多个所述交易预案进行排序,得到交易预案序列;
根据所述交易预案序列,依次针对各所述交易预案,执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
可选地,所述针对多个所述交易预案进行排序,得到交易预案序列,包括:
确定交易预案之间具有引用关系的目标交易预案;
将各所述目标交易预案捆绑为一个整体预案;
将所述整体预案与除所述目标交易预案以外的其他交易预案进行排序,得到所述交易预案序列。
可选地,所述方法还包括:
在根据所述目标写集更新所述世界状态数据库之后,删除根据所述目标读写集缓存的所述写集预执行数据。
本公开实施例的第二方面提供一种读写集生成装置,所述装置包括:
接收模块,用于接收应用端发送的交易预案;
执行模块,用于模拟执行所述交易预案,得到所述交易预案的目标读写集,所述目标读写集包括目标读集以及目标写集,所述目标读集用于确定所述目标写集是否有效,在所述目标写集有效的情况下用于更新世界状态数据库;并根据所述目标读写集缓存写集预执行数据,以在根据所述目标写集更新所述世界状态数据库之前用于针对新的交易预案生成新的目标读写集。
可选地,所述目标读集包括唯一键以及对应的版本,所述执行模块包括:
第一确定子模块,用于在模拟执行所述交易预案的过程中,确定所述唯一键;
第二确定子模块,用于在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本确定所述唯一键的所述版本,以得到所述目标读集。
可选地,所述目标写集包括所述唯一键以及对应的修改值,所述执行模块还包括:
第三确定子模块,用于在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值确定所述修改值,以得到所述目标写集。
可选地,所述执行模块包括:
生成子模块,用于模拟执行所述交易预案,以基于本地状态数据库确定初始读写集,所述初始读写集包括初始读集,所述初始读集包括唯一键以及对应的初始版本;
第一修正模块,用于在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本修正所述初始读集中的所述初始版本,以得到所述目标读集。
可选地,所述初始读写集还包括初始写集,所述初始写集包括所述唯一键以及对应的初始修改值;
所述执行模块还包括:
第二修正模块,用于在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值修正所述初始写集中的所述初始修改值,以得到所述目标写集。
可选地,所述第二确定子模块,包括:
第一执行子模块,用于若缓存有多个包括所述唯一键的所述历史写集预执行数据,则从最近一次缓存的所述历史写集预执行数据中确定所述唯一键的所述版本,得到所述目标读集。
可选地,所述接收模块还用于接收所述应用端发送的多个所述交易预案;
相应地,所述执行模块还用于依次针对多个所述交易预案中的每一所述交易预案执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
可选地,所述执行模块包括:
排序子模块,用于针对多个所述交易预案进行排序,得到交易预案序列;
第二执行子模块,用于根据所述交易预案序列,依次针对各所述交易预案,执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
可选地,所述排序子模块包括:
第四确定子模块,用于确定交易预案之间具有引用关系的目标交易预案;
捆绑子模块,用于将各所述目标交易预案捆绑为一个整体预案;
第三执行子模块,用于将所述整体预案与除所述目标交易预案以外的其他交易预案进行排序,得到所述交易预案序列。
可选地,所述装置还包括:
删除模块,用于在根据所述目标写集更新所述世界状态数据库之后,删除根据所述目标读写集缓存的所述写集预执行数据。
本公开实施例的第三方面提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面所述方法的步骤。
本公开实施例的第四方面提供一种电子设备,包括:
存储器,其上存储有计算机程序;
处理器,用于执行所述存储器中的所述计算机程序,以实现第一方面所述方法的步骤。
采用上述技术方案,至少能够达到如下的有益技术效果:
接收应用端发送的交易预案,并模拟执行该交易预案,以得到该交易预案的目标读写集。根据该目标读写集缓存写集预执行数据,以在根据该目标读写集中的目标写集更新世界状态数据库之前用于针对新的交易预案生成新的目标读写集。采用这种方式,可以在该交易预案的交易数据上链(即指将数据存储到区块链)之前(即在根据该交易预案的目标读写集中的目标写集更新世界状态数据库之前),避免该交易预案对新的交易预案造成读集锁问题,以使得新的交易预案的交易数据能够正确地存储到区块链账本中。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是根据本公开一示例性实施例示出的一种读写集生成方法的流程图。
图2是根据本公开一示例性实施例示出的一种读写集生成装置的框图。
图3是根据本公开一示例性实施例示出的一种电子设备的框图。
图4是根据本公开一示例性实施例示出的另一种电子设备的框图。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
需要说明的是,本公开中所有获取信号、信息或数据的动作都是在遵照所在地国家相应的数据保护法规政策的前提下,并获得由相应装置所有者给予授权的情况下进行的。
为了便于本领域普通技术人员更加容易理解本公开的技术方案,下面先对本公开的应用场景进行说明。
本公开的技术方案应用于基于读写集交易的区块链方案中。例如,可以应用于超级账本Hyperledger的交易处理过程中,具体地可以应用于基于读写集交易的区块链账本的背书节点。
示例地,Hyperledger Fabric的交易流程大致如下:
应用端首先构建交易的预案,预案的作用是调用通道中的链码来读取或者写入账本的数据。应用端使用Fabric的SDK打包交易预案,并使用用户的私钥对预案进行签名。应用打包完交易预案后,接着把预案提交给通道中的背书节点。通道的背书策略定义了哪些节点背书后交易才能有效,应用端根据背书策略选择相应的背书节点,并向它们提交交易预案。
接着,背书节点收到交易预案后,先校验交易的签名是否合法,然后根据签名者的身份,确认其是否具有权限进行相关交易。此外,背书节点还需要检查交易预案的格式是否正确以及是否之前提交过(防止重放攻击)。在所有合法性校验通过后,背书节点按照交易预案,调用链码。链码执行时,读取的数据(键值对)是该节点中本地的状态数据库。需要指出的是,链码在背书节点中是模拟执行,即对数据库的写操作并不会对账本作改变,所有的写操作将归总到一个写入的集合(Write Set)中记录下来。在链码执行完成之后,将返回链码读取过的数据集(Read Set)和链码写入的数据集(Write Set)。读集和写集(即读写集)将在确认节点中用于确定交易是否最终写入账本。背书节点把链码模拟执行后得到的读写集(Read-Write Set)等信息签名后发回给预案提交方(即应用端)。其中,读写集定义为在背书节点(Endorser)模拟执行交易的过程中,会生成读写集(Read-Write Set)。读集(ReadSet)包含了唯一键的列表,还有在模拟执行过程中交易读取的已提交键值。写集(WriteSet)也包含了一个唯一键的列表,还有在模拟执行过程中交易写的键值。即读集会包含键的版本,写集只会包含键的最新值。可以理解为读写集是对当前区块链世界状态的一个访问和修改记录。区块链世界状态是个key-value数据集合,每个key都有版本记录。在修改了key对应的value之后,key的版本会变更。读写集就是一个包含了所有受影响(读和写)的key的集合。
应用端在收到背书响应之后,检查背书节点的签名和比较不同节点背书的结果是否一致。如果预案是查询账本的请求,则应用端无需提交交易给排序节点。如果是更新账本的请求,应用端在收集到满足背书策略的背书响应数量之后,把背书预案中得到的读写集、所有背书节点的签名和通道号发给排序节点。
排序节点在收到各个节点发来的交易后,并不检查交易的全部内容,而是按照交易中的通道号对交易分类排序,然后把相同通道的交易打包成数据块(block)。排序节点把打包好的数据块广播给通道中所有的成员。
确认节点收到排序节点发来的交易数据块后,逐笔检查区块中的交易。先检查交易的合法性以及该交易是否曾经出现过。然后调用VSCC(Validation System Chaincode)的系统链码检验交易的背书签名是否合法,以及背书的数量是否满足背书策略的要求。接下来进行多版本并发控制MVCC的检查,即校验交易的读集(Read Set)是否和当前账本中的版本一致(即没有变化)。如果没有改变,说明交易写集(Write Set)中对数据的修改有效,把该交易标注为有效,交易的写集更新到状态数据库中。如果当前账本的数据和读集版本不一致,则该交易被标注为无效,不更新状态数据库。数据块中的交易数据在标注成“有效”或“无效”后封装成区块(block)写入账本的区块链中。
上述的交易流程中,MVCC具有一些局限性。例如存在读集锁问题:在同一个区块中若有两个交易先后对某个数据项做更新,顺序在后的交易将失败,因为它的读集版本和当前数据项版本已经不一致(因为之前的交易更新了数据),存在读集锁问题。
下面举例说明读集锁问题:假设一个交易a,交易a读取了key1(假设状态数据库中当前key1的版本为v1)的值,然后修改了key2(假设状态数据库中当前key2的版本为v2)的值,并且修改key2后的新值为value2`。那么,交易a在背书节点模拟执行后的读集为:key1[v1](中括号里为key1的当前版本),写集为:key2[value2`](中括号里为key2的新值value2`)。
接着,继续假设另一个交易b,交易b读取key2,并修改key3(假设状态数据库中当前key3的版本为v3,且修改后的新值是value3`)。那么,交易b在背书节点模拟执行后的读集为:key2[v2](中括号里为key2的当前版本v2,原因在于:由于交易a还未提交即还未根据交易a的写集更新世界状态数据库,所以背书节点的状态数据库中key2的版本仍旧是v2),写集为:key3[value3`](中括号里为key3的新值value3`)。
当交易a和交易b在确认节点共识入块的时候,假设交易a排在前交易b之前。那么在交易a提交的时候会将背书节点的状态数据库中的key2版本从v2修改为v2`。而交易b在提交的时候由于其读集key2[v2]中记录的是key2版本为v2,这和当前世界状态中key2的版本v2`不一致(即v2!=v2`),所以交易b会被标记为无效交易,从而不会根据交易b的写集更新世界状态数据库。由此可见,交易a对交易b造成了读集锁问题,导致交易b的交易数据无法正确的上链。
也就是说,目前的基于读写集交易的Hyperledger Fabric的交易方式中存在读集锁问题,影响交易数据上链。
为了解决读集锁问题,本公开实施例提供一种读写集生成方法、装置、存储介质及电子设备。下面对本公开的实施方式进行详细的举例说明。
图1是根据本公开一示例性实施例示出的一种读写集生成方法的流程图,如图1所示,该读写集生成方法应用于背书节点,该读写集生成方法可以包括以下步骤:
S11、接收应用端发送的交易预案。
其中,交易预案也可以称为交易提案。交易预案可以由应用端构建并发送给背书节点。
S12、模拟执行所述交易预案,得到所述交易预案的目标读写集,所述目标读写集包括目标读集以及目标写集,所述目标读集用于确定所述目标写集是否有效,在所述目标写集有效的情况下用于更新世界状态数据库。
S13、根据所述目标读写集缓存写集预执行数据,以在根据所述目标写集更新所述世界状态数据库之前用于针对新的交易预案生成新的目标读写集。
一种实施方式,上述交易预案可以是指第一个交易预案。在交易预案为第一个交易预案的情况下,模拟执行该交易预案以得到该交易预案的目标读写集的实施方式可以与相关技术中的方式一致(即前述的根据背书节点的状态数据库确定读写集的方式)。
另一种实施方式,上述交易预案也可以不是第一个交易预案。在该交易预案之前存在历史交易预案的情况下,模拟执行该交易预案以得到该交易预案的目标读写集的实施方式可以是,根据由历史交易预案确定的历史写集预执行数据生成该交易预案对应的目标读写集。
进一步地,在针对每一个交易预案生成目标读写集之后,都可以根据该目标读写集缓存写集预执行数据,以在根据该交易预案的目标写集更新世界状态数据库之前用于针对新的交易预案生成新的目标读写集。
其中,根据所述目标读写集缓存写集预执行数据,可以是指根据所述目标读写集中的所述目标写集缓存写集预执行数据。示例地,根据目标读写集中的目标写集缓存写集预执行数据的实施方式可以是,缓存目标写集中的唯一键key、修改后的值、修改后的值的版本。
从前述读集锁问题的示例中可以发现,背书阶段得到的读写集在提交(入链)阶段验证不过,根源在于交易在背书阶段预执行时读取的key的版本,该key的版本在提交时已经被另外的交易所修改。为了保证数据最终的一致性,背书和提交时读集版本不一样的情况下,交易只能被标记成无效,而拒绝写入区块链。此方式类似于数据库操作的乐观锁。写入验证不过则回滚。乐观锁的方式适用于数据争用不大,冲突较少的环境。但是区块链作为一个基础系统,为各种业务提供智能合约功能,统一使用这种乐观锁的方式显然不适合一些数据冲突较大的业务场景。发明人发现,优化乐观锁的思路是降低冲突的可能性,而具体到基于读写集方式的区块链系统,如果能够做到某些场景下背书的时候各交易之间能够感知冲突的key,从而在背书预执行的时候能够做到读集版本同提交交易时的版本相同,则可以避免读集锁问题。因此,在本公开中提出,通过缓存历史交易预案的写集预执行数据,以用于在收到新的交易预案的情况下,便于感知是否存在导致该新的交易预案产生读集锁问题的历史交易预案,并基于会导致该新的交易预案产生读集锁问题的历史交易预案生成该新的交易预案的目标读写集,从而避免读集锁问题。
示例地,以前述交易a和交易b进行举例,假设交易a读取了key1(假设状态数据库中当前key1的版本为v1)的值,然后修改了key2(假设状态数据库中当前key2的版本为v2)的值,并且修改key2后的新值为value2`。若在交易a之前没有历史交易,那么交易a在背书节点模拟执行后的读集为key1[v1],写集为key2[value2`]。进一步地,根据交易a的读写集生成并缓存交易a的写集预执行数据key2,v2`,value2`。其中,v2`表征根据写集key2[value2`]更新状态数据库之后key2所对应的版本(根据写集key2[value2`]更新状态数据库之后key2所对应的版本由v2变成了v2`),该处的根据写集key2[value2`]更新状态数据库的步骤是假设执行的,并非真实的执行。
进一步地,假设在交易a之后的另一个交易b读取key2,并修改key3(假设状态数据库中当前key3的版本为v3,且修改后的新值是value3`)。那么针对交易b,根据交易a的写集预执行数据key2,v2`,value2`生成的读集可以为key2[v2`](中括号里的v2`是根据写集预执行数据key2,v2`,value2`生成的),写集为:key3[value3`](中括号里为key3的新值value3`)。进一步地,根据交易b的读写集生成并缓存交易b的写集预执行数据key3,v3`,value3`。其中,v3`表征根据写集key3[value3`]更新状态数据库之后key3所对应的版本(根据写集key3[value3`]更新状态数据库之后key3的版本v3变成了v3`)。
当交易a和交易b在确认节点共识入块的时候,假设交易a排在前交易b之前。那么在交易a提交的时候会将背书节点区块链世界状态中的key2版本从v2修改为v2`。而交易b在提交的时候由于其读集key2[v2`]中记录的是key2版本为v2`,和当前世界状态中key2的版本v2`一致(即v2`=v2`),所以交易b会被标记为有效交易,从而会根据交易b的写集更新世界状态数据库。由此可见,采用本公开的这种方式,可以解决相关技术中交易a对交易b造成的读集锁问题,使得交易b的交易数据正确的上链。
采用这种方式,接收应用端发送的交易预案,并模拟执行该交易预案,以得到该交易预案的目标读写集。根据该目标读写集缓存写集预执行数据,以在根据该目标读写集中的目标写集更新世界状态数据库之前用于针对新的交易预案生成新的目标读写集。采用这种方式,可以在该交易预案的交易数据上链之前(即在根据该交易预案的目标读写集中的目标写集更新世界状态数据库之前),避免该交易预案对新的交易预案造成读集锁问题,以使得新的交易预案的交易数据能够正确地存储到区块链账本中。
可选地,所述目标读集包括唯一键以及对应的版本,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,包括:
在模拟执行所述交易预案的过程中,确定所述唯一键;在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本确定所述唯一键的所述版本,以得到所述目标读集。
相应地,所述目标写集包括所述唯一键以及对应的修改值,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,还包括:在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值确定所述修改值,以得到所述目标写集。
其中,唯一键是指数据项的唯一键。
为了便于更简单的说明本公开的技术方案,下面以交易读取和修改的唯一键相同为例进行说明。举例来说,假设交易c读取了key2的值,然后修改了key2的值,且修改key2后的新值为value2`。那么交易c的交易预案在背书节点模拟执行的过程中,可以先确定唯一键为key2。然后确定是否缓存有包括该唯一键key2的历史写集预执行数据。若不存在,则从背书节点的本地状态数据库(假设本地状态数据库中当前key2的版本为v2,即key2的世界状态为key2,v2,value2)中确定唯一键key2的版本为v2。对应得到的读集为key2[v2],写集为key2[value2`],其中,value2`是根据读集key2[v2]对应的值value2经过交易预案的业务逻辑计算得到的。若根据该读集key2[v2]进行共识上链,则由于读集key2[v2]中key2的版本为v2,与key2的世界状态key2,v2,value2相符合,因此写集key2[value2`]被标记为有效,交易c的交易数据可以正确上链,若世界状态数据库根据写集key2[value2`]进行更新,则可得到更新后的世界状态为key2,v2`,value2`。
进一步地,假设在交易c之后有交易d,交易d读取了key2的值,然后修改了key2的值,且修改key2后的新值为value2``。那么交易d的交易预案在背书节点模拟执行的过程中,可以先确定唯一键为key2。然后确定是否缓存有包括该唯一键key2的历史写集预执行数据。此时,由于缓存有交易c对应的历史写集预执行数据为key2,v2`(v2`表征根据交易c的写集key2[value2`]更新状态数据库之后key2所对应的版本),value2`,因此根据历史写集预执行数据key2,v2`,value2`中的历史版本v2`可以确定唯一键key2的版本为v2`。对应得到的读集为key2[v2`],写集为key2[value2``],其中value2``是根据读集key2[v2`]读取的值经过交易预案的业务逻辑计算得到的。若根据该读集key2[v2`]进行共识上链,则由于读集key2[v2`]中key2的版本为v2`,v2`与交易c共识上链后的key2的世界状态key2,v2`,value2`相符合,因此写集key2[value2``]被标记为有效,交易d的交易数据正确上链,若世界状态数据库根据写集key2[value2``]进行更新,则可得到更新后的世界状态为key2,v2``,value2``。
应说明的是,在读集锁问题中,若读集错误,则相应的导致写集错误,因为写集中的修改值是基于读集读取的值经过业务逻辑计算得到的。
可选地,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,包括:
模拟执行所述交易预案,以基于本地状态数据库确定初始读写集,所述初始读写集包括初始读集,所述初始读集包括唯一键以及对应的初始版本;在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本修正所述初始读集中的所述初始版本,以得到所述目标读集。
可选地,所述初始读写集还包括初始写集,所述初始写集包括所述唯一键以及对应的初始修改值;所述方法还包括:在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值修正所述初始写集中的所述初始修改值,以得到所述目标写集。
示例地,假设交易c读取了key2的值,然后修改了key2的值,修改key2后的新值为value2`,且假设本地状态数据库中key2的世界状态为key2,v2,value2。那么交易c的交易预案在背书节点模拟执行,可以基于本地状态数据库确定交易c的初始读写集为key2[v2],key2[value2`]。接着,确定是否缓存有包括唯一键key2的历史写集预执行数据。若不存在,则将初始读写集确定为目标读写集。若根据该读集key2[v2]进行共识上链,那么由于读集key2[v2]中key2的版本为v2,与key2的世界状态key2,v2,value2相符合,因此写集key2[value2`]被标记为有效,交易c的交易数据可以正确上链。若世界状态数据库根据写集key2[value2`]进行更新,则可以得到更新后的世界状态为key2,v2`,value2`。
进一步地,在交易c共识上链之前,假设交易d读取了key2的值,然后修改了key2的值,修改方式为加1,且假设本地状态数据库中key2的世界状态为key2,v2,value2。那么这个交易d的交易预案在背书节点模拟执行,可以基于本地状态数据库确定初始读写集为key2[v2],key2[value2+1]。接着,确定是否缓存有包括唯一键key2的历史写集预执行数据。由于存在根据交易c的目标读写集缓存的历史写集预执行数据key2,v2`,value2`,因此可以根据历史写集预执行数据中的历史版本v2`修正初始读集key2[v2]中的初始版本v2,以得到目标读集key2[v2`],并根据历史写集预执行数据中的历史修改值value2`修正初始写集中的初始修改值value2+1,以得到目标写集key2[value2`+1]。若在交易c提交以后再提交交易d,那么根据交易d的目标读集key2[v2`]进行共识上链,由于目标读集key2[v2`]中key2的版本为v2`,v2`与交易c共识上链后key2的世界状态key2,v2`,value2`相符合,因此交易d的目标写集key2[value2`+1]被标记为有效,交易d的交易数据可以正确上链。若世界状态数据库根据写集key2[value2`+1]进行更新,则可以得到更新后的世界状态为key2,v2``,value2`+1。
若不根据历史写集预执行数据中的历史修改值value2`修正初始写集中的初始修改值value2+1,则根据初始写集key2[value2+1]更新世界状态数据库后为key2,v2``,value2+1。其中,value2+1显然是错误的。
可选地,所述方法还包括:在根据历史写集预执行数据中的历史版本修正初始读集中的初始版本,以得到目标读集之后,可根据修正后的目标读集确定正确地目标写集。例如根据修正后的目标读集所对应的数据计算得到正确的修正值,以得到目标写集。
可选地,所述在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本确定所述唯一键的所述版本,以得到所述目标读集,包括:
若缓存有多个包括所述唯一键的所述历史写集预执行数据,则从最近一次缓存的所述历史写集预执行数据中确定所述唯一键的所述版本,得到所述目标读集。
示例地,若缓存有A和B两个包括唯一键key1的历史写集预执行数据,且历史写集预执行数据A的缓存时间早于历史写集预执行数据B的时间,则历史写集预执行数据B为最近一次缓存的历史写集预执行数据,可从历史写集预执行数据B中确定唯一键key1的版本,得到目标读集。
同理地,若缓存有多个包括所述唯一键的所述历史写集预执行数据,则根据最近一次缓存的所述历史写集预执行数据中的历史修改值确定所述修改值,以得到所述目标写集
同理地,若缓存有多个包括所述唯一键的所述历史写集预执行数据,则根据最近一次缓存的所述历史写集预执行数据中的历史版本修正所述初始读集中的所述初始版本,以得到所述目标读集。
同理地,若缓存有多个包括所述唯一键的所述历史写集预执行数据,则根据最近一次缓存的所述历史写集预执行数据中的历史修改值修正所述初始写集中的所述初始修改值,以得到所述目标写集。
可选地,所述接收应用端发送的交易预案,包括:接收所述应用端发送的多个所述交易预案;
相应地,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤,包括:依次针对多个所述交易预案中的每一所述交易预案执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
在交易并发的场景下,接收应用端发送的多个交易预案,并依次针对每一交易预案执行模拟执行所述交易预案,得到交易预案的目标读写集,并根据目标读写集缓存写集预执行数据的步骤。采用这种方式,可以解决并发场景下的多个交易预案之间存在的读集锁问题。
可选地,所述接收应用端发送的多个交易预案包括:
接收同一应用端发送的多个交易预案,或者,接收多个应用端分别发送的交易预案。
若同一应用端发送多个并发交易预案,则该应用端在确定该多个并发交易预案之间具有引用关系的情况下,可以对该多个并发交易预案进行标记,以提示背书节点,该多个并发交易预案之间可能存在读集锁问题。其中,应用端可以通过用户的前端操作确定该多个并发交易预案之间是否具有引用关系。其中,多个交易预案之间具有引用关系是指,各交易预案均针对同一数据项进行了读和/或写操作。
那么,所述针对多个所述交易预案进行排序,得到交易预案序列,可以包括:
确定交易预案之间具有引用关系的目标交易预案;将各所述目标交易预案捆绑为一个整体预案;将所述整体预案与除所述目标交易预案以外的其他交易预案进行排序,得到所述交易预案序列。
示例地,假设有交易a、b、c、d,其中,a和c具有引用关系标识,那么,背书节点将交易a和c捆绑为一个整体预案A(a、c),然后,对A、b、d进行排序。
其中,上述排序方式与排序节点中的排序方式保持一致。
示例地,假设当前区块链中图书A的世界状态为:[A,V(Tx0),10],其含义是以A作为图书A的key,图书A现存10本,并且当前A的版本为V(Tx0)。现在用户甲和乙先后借了一本图书A,图书管理员现在要将这两条借书信息记录至区块链。
那么,图书管理员连续(某时间窗口内)发送交易Tx1(对应甲)和Tx2(对应乙)到背书节点。假设Tx1的时间戳早于Tx2的时间戳,并且Tx1、Tx2标记具有引用关系(例如,在Tx2的交易预案中标记引用Tx1,和/或,在Tx1的交易预案中标记被Tx2引用)。若背书节点接收到Tx1的交易预案、且根据标记可以确定Tx1被Tx2引用,那么可以等待Tx2的交易预案,并在接收到Tx2的交易预案之后,再依次对Tx1和Tx2进行背书。也可以主动去获取Tx2的交易预案,并在获取到Tx2的交易预案之后,再依次对Tx1和Tx2进行背书。还可以在未接收到Tx2的情况下,先对Tx1进行背书。然后等待Tx2的交易预案,在接收到Tx2的情况下对Tx2进行背书。
背书节点接收到Tx1和Tx2后,验证两个交易的合法性。背书节点根据标识确定Tx1被Tx2引用,通过排序Tx1和Tx2,先模拟执行Tx1的交易预案,得到Tx1的读集<A,V(Tx0)>(图书A当前世界状态中的版本是V(Tx0));写集<A,9>(借阅一本给用户甲后,图书A的数量从10变为9);背书节点本地缓存中缓存写集预执行数据[A,V(Tx1),9]的记录,以用于表示如果Tx1最终被提交(共识上链),那么世界状态中图书A的版本应当是V(Tx1),值应当是9。相应地,对Tx2进行模拟执行得到读集为<A,V(Tx1)>(图书A当前世界状态中的版本是V(Tx0),缓存的写集预执行数据中Tx1执行后的版本是V(Tx1)),写集为<A,8>(借阅一本给用户乙后,图书A的数量从9变为8)。上述示例中,背书节点对Tx1和Tx2进行背书的方式可以称之为引用策略。在排序时,将具有引用关系的交易Tx1和Tx2捆绑以排在一起的方式,有利于后续应用中对交易Tx1和Tx2的账本数据的处理。例如,在用户甲借书后,A书的库存为9,并在用户乙借书后,A书的库存为8。而不会存在,甲乙两人同时借书,而甲借书后,A书的库存为9,在用户乙借书后,A书的库存为6的情况。
再示例地,假设当前区块链中用户总数T的世界状态为:[T,V(Tx0),10],其含义是以T作为用户总数的key,总用户数现在为10,并且当前T的版本为V(Tx0)。现在用户丙和丁同时注册为新用户,用户丙和丁的信息需要记录至区块链。
用户丙的注册交易Tx1和用户丁的注册交易Tx2同时发送到背书节点。假设Tx1的时间戳小于Tx2的时间戳。背书节点接收到Tx1和Tx2后,验证两个交易的合法性。然后通过排序Tx1和Tx2,先预执行Tx1,得到Tx1的读集<T,V(Tx0)>(用户总数T当前世界状态中的版本是V(Tx0));写集<T,11>(用户丙注册后,用户总数T的数量从10变为11);同时背书节点本地写集缓存中插入写集预执行数据[T,V(Tx1),11]的记录,以表示Tx1执行后,如果Tx1最终被提交,世界状态中用户总数T的版本应当是V(Tx1),值应当是11。背书节点继续模拟执行Tx2,得到Tx2的读集<T,V(Tx1)>(图书A当前世界状态中的版本是V(Tx0),缓存写集预执行数据中为是V(Tx1)),写集为<A,12>(用户丁注册后,用户总数量从11变为12)。上述示例中,背书节点对Tx1和Tx2进行背书的方式可以称之为最新策略。
可选地,所述方法还包括:在根据所述目标写集更新所述世界状态数据库之后,删除根据所述目标读写集缓存的所述写集预执行数据。
根据目标写集更新世界状态数据库之后,该写集预执行数据所表征的世界状态与背书节点本地的状态数据库一致(因为世界状态数据库更新了)。所以在根据目标写集更新世界状态数据库之后,可以删除根据目标读写集缓存的写集预执行数据以避免背书节点内存膨胀。
图2是根据本公开一示例性实施例示出的一种读写集生成装置的框图,如图2所示,该装置200包括:
接收模块210,用于接收应用端发送的交易预案;
执行模块220,用于模拟执行所述交易预案,得到所述交易预案的目标读写集,所述目标读写集包括目标读集以及目标写集,所述目标读集用于确定所述目标写集是否有效,在所述目标写集有效的情况下用于更新世界状态数据库;并根据所述目标读写集缓存写集预执行数据,以在根据所述目标写集更新所述世界状态数据库之前用于针对新的交易预案生成新的目标读写集。
采用上述装置,接收应用端发送的交易预案,并模拟执行该交易预案,以得到该交易预案的目标读写集。根据该目标读写集缓存写集预执行数据,以在根据该目标读写集中的目标写集更新世界状态数据库之前用于针对新的交易预案生成新的目标读写集。采用这种方式,可以在该交易预案的交易数据上链(即指将数据存储到区块链)之前(即在根据该交易预案的目标读写集中的目标写集更新世界状态数据库之前),避免该交易预案对新的交易预案造成读集锁问题,以使得新的交易预案的交易数据能够正确地存储到区块链账本中。
可选地,所述目标读集包括唯一键以及对应的版本,所述执行模块220包括:
第一确定子模块,用于在模拟执行所述交易预案的过程中,确定所述唯一键;
第二确定子模块,用于在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本确定所述唯一键的所述版本,以得到所述目标读集。
可选地,所述目标写集包括所述唯一键以及对应的修改值,所述执行模块220还包括:
第三确定子模块,用于在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值确定所述修改值,以得到所述目标写集。
可选地,所述执行模块220包括:
生成子模块,用于模拟执行所述交易预案,以基于本地状态数据库确定初始读写集,所述初始读写集包括初始读集,所述初始读集包括唯一键以及对应的初始版本;
第一修正模块,用于在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本修正所述初始读集中的所述初始版本,以得到所述目标读集。
可选地,所述初始读写集还包括初始写集,所述初始写集包括所述唯一键以及对应的初始修改值;
所述执行模块220还包括:
第二修正模块,用于在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值修正所述初始写集中的所述初始修改值,以得到所述目标写集。
可选地,所述第二确定子模块,包括:
第一执行子模块,用于若缓存有多个包括所述唯一键的所述历史写集预执行数据,则从最近一次缓存的所述历史写集预执行数据中确定所述唯一键的所述版本,得到所述目标读集。
可选地,所述接收模块还用于接收所述应用端发送的多个所述交易预案;
相应地,所述执行模块还用于依次针对多个所述交易预案中的每一所述交易预案执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
可选地,所述执行模块220包括:
排序子模块,用于针对多个所述交易预案进行排序,得到交易预案序列;
第二执行子模块,用于根据所述交易预案序列,依次针对各所述交易预案,执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
可选地,所述排序子模块包括:
第四确定子模块,用于确定交易预案之间具有引用关系的目标交易预案;
捆绑子模块,用于将各所述目标交易预案捆绑为一个整体预案;
第三执行子模块,用于将所述整体预案与除所述目标交易预案以外的其他交易预案进行排序,得到所述交易预案序列。
可选地,所述装置200还包括:
删除模块,用于在根据所述目标写集更新所述世界状态数据库之后,删除根据所述目标读写集缓存的所述写集预执行数据。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图3是根据一示例性实施例示出的一种电子设备700的框图。如图3所示,该电子设备700可以包括:处理器701,存储器702。该电子设备700还可以包括多媒体组件703,输入/输出(I/O)接口704,以及通信组件705中的一者或多者。
其中,处理器701用于控制该电子设备700的整体操作,以完成上述的读写集生成方法中的全部或部分步骤。存储器702用于存储各种类型的数据以支持在该电子设备700的操作,这些数据例如可以包括用于在该电子设备700上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器702可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件703可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器702或通过通信组件705发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口704为处理器701和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件705用于该电子设备700与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near FieldCommunication,简称NFC),2G、3G、4G、NB-IOT、eMTC、或其他5G等等,或它们中的一种或几种的组合,在此不做限定。因此相应的该通信组件705可以包括:Wi-Fi模块,蓝牙模块,NFC模块等等。
在一示例性实施例中,电子设备700可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的读写集生成方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的读写集生成方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器702,上述程序指令可由电子设备700的处理器701执行以完成上述的读写集生成方法。
图4是根据一示例性实施例示出的一种电子设备1900的框图。例如,电子设备1900可以被提供为一服务器。参照图4,电子设备1900包括处理器1922,其数量可以为一个或多个,以及存储器1932,用于存储可由处理器1922执行的计算机程序。存储器1932中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器1922可以被配置为执行该计算机程序,以执行上述的读写集生成方法。
另外,电子设备1900还可以包括电源组件1926和通信组件1950,该电源组件1926可以被配置为执行电子设备1900的电源管理,该通信组件1950可以被配置为实现电子设备1900的通信,例如,有线或无线通信。此外,该电子设备1900还可以包括输入/输出(I/O)接口1958。电子设备1900可以操作基于存储在存储器1932的操作系统,例如WindowsServerTM,Mac OS XTM,UnixTM,LinuxTM等等。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的读写集生成方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器1932,上述程序指令可由电子设备1900的处理器1922执行以完成上述的读写集生成方法。
在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由该可编程的装置执行时用于执行上述的读写集生成方法的代码部分。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。
实施例
1、一种读写集生成方法,所述方法包括:
接收应用端发送的交易预案;
模拟执行所述交易预案,得到所述交易预案的目标读写集,所述目标读写集包括目标读集以及目标写集,所述目标读集用于确定所述目标写集是否有效,在所述目标写集有效的情况下用于更新世界状态数据库;并,
根据所述目标读写集缓存写集预执行数据,以在根据所述目标写集更新所述世界状态数据库之前用于针对新的交易预案生成新的目标读写集。
2、根据实施例1所述的方法,所述目标读集包括唯一键以及对应的版本,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,包括:
在模拟执行所述交易预案的过程中,确定所述唯一键;
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本确定所述唯一键的所述版本,以得到所述目标读集。
3、根据实施例2所述的方法,所述目标写集包括所述唯一键以及对应的修改值,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,还包括:
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值确定所述修改值,以得到所述目标写集。
4、根据实施例1所述的方法,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,包括:
模拟执行所述交易预案,以基于本地状态数据库确定初始读写集,所述初始读写集包括初始读集,所述初始读集包括唯一键以及对应的初始版本;
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本修正所述初始读集中的所述初始版本,以得到所述目标读集。
5、根据实施例4所述的方法,所述初始读写集还包括初始写集,所述初始写集包括所述唯一键以及对应的初始修改值;
所述方法还包括:
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值修正所述初始写集中的所述初始修改值,以得到所述目标写集。
6、根据实施例2所述的方法,所述在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本确定所述唯一键的所述版本,以得到所述目标读集,包括:
若缓存有多个包括所述唯一键的所述历史写集预执行数据,则从最近一次缓存的所述历史写集预执行数据中确定所述唯一键的所述版本,得到所述目标读集。
7、根据实施例1-6中任一项所述的方法,所述接收应用端发送的交易预案,包括:
接收所述应用端发送的多个所述交易预案;
所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据,包括:
依次针对多个所述交易预案中的每一所述交易预案执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
8、根据实施例7所述的方法,所述依次针对多个所述交易预案中的每一所述交易预案执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤,包括:
针对多个所述交易预案进行排序,得到交易预案序列;
根据所述交易预案序列,依次针对各所述交易预案,执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
9、根据实施例8所述的方法,所述针对多个所述交易预案进行排序,得到交易预案序列,包括:
确定交易预案之间具有引用关系的目标交易预案;
将各所述目标交易预案捆绑为一个整体预案;
将所述整体预案与除所述目标交易预案以外的其他交易预案进行排序,得到所述交易预案序列。
10、根据实施例1所述的方法,所述方法还包括:
在根据所述目标写集更新所述世界状态数据库之后,删除根据所述目标读写集缓存的所述写集预执行数据。
11、一种读写集生成装置,所述装置包括:
接收模块,用于接收应用端发送的交易预案;
执行模块,用于模拟执行所述交易预案,得到所述交易预案的目标读写集,所述目标读写集包括目标读集以及目标写集,所述目标读集用于确定所述目标写集是否有效,在所述目标写集有效的情况下用于更新世界状态数据库;并根据所述目标读写集缓存写集预执行数据,以在根据所述目标写集更新所述世界状态数据库之前用于针对新的交易预案生成新的目标读写集。
12、一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现实施例1-10中任一项所述方法的步骤。
13、一种电子设备,包括:
存储器,其上存储有计算机程序;
处理器,用于执行所述存储器中的所述计算机程序,以实现实施例1-10中任一项所述方法的步骤。
Claims (13)
1.一种读写集生成方法,其特征在于,所述方法包括:
接收应用端发送的交易预案;
模拟执行所述交易预案,得到所述交易预案的目标读写集,所述目标读写集包括目标读集以及目标写集,所述目标读集用于确定所述目标写集是否有效,在所述目标写集有效的情况下用于更新世界状态数据库;并,
根据所述目标读写集缓存写集预执行数据,以在根据所述目标写集更新所述世界状态数据库之前用于针对新的交易预案生成新的目标读写集。
2.根据权利要求1所述的方法,其特征在于,所述目标读集包括唯一键以及对应的版本,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,包括:
在模拟执行所述交易预案的过程中,确定所述唯一键;
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本确定所述唯一键的所述版本,以得到所述目标读集。
3.根据权利要求2所述的方法,其特征在于,所述目标写集包括所述唯一键以及对应的修改值,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,还包括:
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值确定所述修改值,以得到所述目标写集。
4.根据权利要求1所述的方法,其特征在于,所述模拟执行所述交易预案,得到所述交易预案的目标读写集,包括:
模拟执行所述交易预案,以基于本地状态数据库确定初始读写集,所述初始读写集包括初始读集,所述初始读集包括唯一键以及对应的初始版本;
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本修正所述初始读集中的所述初始版本,以得到所述目标读集。
5.根据权利要求4所述的方法,其特征在于,所述初始读写集还包括初始写集,所述初始写集包括所述唯一键以及对应的初始修改值;
所述方法还包括:
在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史修改值修正所述初始写集中的所述初始修改值,以得到所述目标写集。
6.根据权利要求2所述的方法,其特征在于,所述在确定缓存有包括所述唯一键的历史写集预执行数据的情况下,根据所述历史写集预执行数据中的历史版本确定所述唯一键的所述版本,以得到所述目标读集,包括:
若缓存有多个包括所述唯一键的所述历史写集预执行数据,则从最近一次缓存的所述历史写集预执行数据中确定所述唯一键的所述版本,得到所述目标读集。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述接收应用端发送的交易预案,包括:
接收所述应用端发送的多个所述交易预案;
所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据,包括:
依次针对多个所述交易预案中的每一所述交易预案执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
8.根据权利要求7所述的方法,其特征在于,所述依次针对多个所述交易预案中的每一所述交易预案执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤,包括:
针对多个所述交易预案进行排序,得到交易预案序列;
根据所述交易预案序列,依次针对各所述交易预案,执行所述模拟执行所述交易预案,得到所述交易预案的目标读写集,并根据所述目标读写集缓存写集预执行数据的步骤。
9.根据权利要求8所述的方法,其特征在于,所述针对多个所述交易预案进行排序,得到交易预案序列,包括:
确定交易预案之间具有引用关系的目标交易预案;
将各所述目标交易预案捆绑为一个整体预案;
将所述整体预案与除所述目标交易预案以外的其他交易预案进行排序,得到所述交易预案序列。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在根据所述目标写集更新所述世界状态数据库之后,删除根据所述目标读写集缓存的所述写集预执行数据。
11.一种读写集生成装置,其特征在于,所述装置包括:
接收模块,用于接收应用端发送的交易预案;
执行模块,用于模拟执行所述交易预案,得到所述交易预案的目标读写集,所述目标读写集包括目标读集以及目标写集,所述目标读集用于确定所述目标写集是否有效,在所述目标写集有效的情况下用于更新世界状态数据库;并根据所述目标读写集缓存写集预执行数据,以在根据所述目标写集更新所述世界状态数据库之前用于针对新的交易预案生成新的目标读写集。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-10中任一项所述方法的步骤。
13.一种电子设备,其特征在于,包括:
存储器,其上存储有计算机程序;
处理器,用于执行所述存储器中的所述计算机程序,以实现权利要求1-10中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210204892.1A CN114610812A (zh) | 2022-03-03 | 2022-03-03 | 读写集生成方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210204892.1A CN114610812A (zh) | 2022-03-03 | 2022-03-03 | 读写集生成方法、装置、存储介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114610812A true CN114610812A (zh) | 2022-06-10 |
Family
ID=81860991
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210204892.1A Pending CN114610812A (zh) | 2022-03-03 | 2022-03-03 | 读写集生成方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114610812A (zh) |
-
2022
- 2022-03-03 CN CN202210204892.1A patent/CN114610812A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108389129B (zh) | 基于区块链的交易执行方法及装置、电子设备 | |
CN110597925B (zh) | 一种基于区块链的跨链数据处理方法及装置 | |
JP7199466B2 (ja) | クロスブロックチェーン認証方法および装置 | |
CN110493007B (zh) | 一种基于区块链的信息验证方法、装置、设备及存储介质 | |
CN110599069B (zh) | 基于区块链网络的应用评价方法及装置 | |
US20210049715A1 (en) | Blockchain-based data procesing method, apparatus, and electronic device | |
CN110874739B (zh) | 实现高完整性、高带宽、低延迟、安全处理的分布式计算和存储网络 | |
CN113537984A (zh) | 基于区块链的内容验证方法及装置、电子设备 | |
TW202016817A (zh) | 基於區塊鏈的交易處理方法及裝置、電子設備 | |
US11556658B2 (en) | Cross-partition calls in partitioned, tamper-evident data stores | |
US20230090296A1 (en) | Transaction verification of a transaction based on a blockchain network | |
CN112714158B (zh) | 事务处理方法、中继网络、跨链网关、系统、介质和设备 | |
WO2022206454A1 (zh) | 提供跨链消息的方法和装置 | |
CN115131022B (zh) | 基于区块链的数字资产交易方法、装置、设备及介质 | |
CN116569517A (zh) | 用于发布操作系统的基于区块链的系统和方法 | |
CN112565369B (zh) | 一种智能合约实现方法、应用服务节点、存储介质及系统 | |
US20220343323A1 (en) | Method and apparatus maintaining private data with consortium blockchain | |
KR102109201B1 (ko) | 사용자 단말기들 사이의 게임 아이템 거래를 중개하는 네트워크 서버 및 그것의 동작 방법 | |
CN114610812A (zh) | 读写集生成方法、装置、存储介质及电子设备 | |
CN115221559A (zh) | 数据账户的访问授权方法及装置 | |
CN117540356B (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN117151712B (zh) | 区块链交易处理方法、装置、计算机设备和存储介质 | |
CN115442123B (zh) | 实名制认证方法、装置、电子设备及计算机可读介质 | |
WO2024007690A1 (zh) | 一种基于区块链的交易处理方法、装置、设备、计算机可读存储介质及计算机程序产品 | |
CA3182400A1 (en) | Method, terminal, and coin register for transmitting electronic coin data sets |
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 |