一种基于区块链的并行交易执行方法技术

技术编号:17266080 阅读:115 留言:0更新日期:2018-02-14 13:50
本发明专利技术公开了一种基于区块链的并行交易执行方法,首先对链上的数据单元进行索引编号,用户的并发交易除了基本的交易内容外,需再提供交易执行所需读取和写入的数据索引。用户的串行交易只需提供基本的交易内容。节点根据并发交易的数据依赖关系,安排并发处理,并发处理完成后,再将无法并发的交易和串行交易进行顺序执行。

A parallel transaction execution method based on block chain

The invention discloses a parallel transaction execution method based on block chain. First, indexing and numbering data units on the chain. Besides the basic transaction contents, users need to provide data index for reading and writing transactions. The user's serial transaction only needs to provide the basic content of the transaction. Nodes arrange concurrent processing according to the data dependence of concurrent transactions. After completing concurrent processing, sequential transactions are executed sequentially.

【技术实现步骤摘要】
一种基于区块链的并行交易执行方法
本专利技术涉及区块链模型状态索引的创建,并发交易的生成、执行和校验的相关领域,改进了原有区块链模型中交易无法并发处理,或并发处理会出现大范围冲突的情况。
技术介绍
区块链是一种新的分布式技术,由一个个顺序排列而成的交易组成块,再由一个个顺序排列而成的块组成链,每个块包含一个自增的高度作为编号,还有一个时间戳用于记载打包时间。现有区块链内一般以账户为基本单元,账户内有各种属性,包括余额、交易数、合约代码、合约存储数据结构等。区块链内的一个交易会涉及两个或多个账户属性的相互读写操作,这些属性的状态存在前后线性依赖关系,以解决双花问题。区块链为了追求全链状态的确定性,要求交易在块内以列表形式存在,并且由所有节点一个个地顺序执行,不能出现随机跳序或随意并发执行的情况,否则各个节点的计算结果可能会出现不一致,最终无法达成共识。完全串行执行使节点的物理机器性能无法得到完全发挥,节点处理能力受制于单核CPU的最高主频,无法发挥多核优势和集群优势,严重影响区块链技术的处理性能。
技术实现思路
本专利技术的目的在于针对现有技术的不足,提供一种基于区块链的并行交易执行方法。本专利技术的目的是通过以下技术方案实现的:一种基于区块链的并行交易执行方法,该方法中,首先对区块链中的交易所涉及的数据单元进行划分,每个数据单元产生唯一性索引index。各用户节点实时同步出块节点的最新区块,保持本地最新的链状态备份。用户发起交易时,选择交易类型,如果选择的交易类型为“串行执行”,直接将交易内容Data签名广播;如果选择的交易类型为“并行执行”,根据本地最新状态,对交易内容进行模拟执行,获得状态依赖信息State,并签名广播。其中State包含如下内容:上述模拟执行过程中会读取的数据单元的索引集合read_indexes;模拟执行过程会写入的数据单元的索引集合write_indexes;以及状态冲突处理方法:“交易报错”或“改为串行”。出块节点执行交易、打包出块的方法如下:(1)出块节点生成一个空的列表serial_txs用于存放串行交易。(2)构建一个空的集合rely_txs,用于存放多组并行交易列表;构建一个空的集合rely_indexes用于存放一系列子集。rely_txs中的每组并行交易列表会生成一组对应的依赖数据单元,rely_indexes的每一个子集就是用于存放这组依赖数据单元的索引集合的。具体如下:出块节点逐个选择交易类型为“并行执行”的交易。假设当前选择的“并行执行”交易为tx,当前已生成的rely_indexes子集个数为N个,出块节点对这N个子集进行遍历。假设当前正在遍历的子集为rely_indexes_%i%,如果该子集对应的并行交易列表rely_indexes_%i%为空列表,即子集rely_indexes_%i%为空,或tx的read_indexes和write_index的并集与rely_indexes_%i%存在交集,则将tx加入到rely_txs_%i%中,将tx的write_indexes加入到rely_indexes_%i%中。如果对所有子集遍历完成,均不存在交集或空元素,则新建子集,将tx中的write_indexes中的数据单元索引加入到rely_indexes的N+1个子集中,并在rely_txs中建立新的并行交易列表,将该交易tx加入到该新建的交易列表中。(3)出块节点并行执行rely_txs中的的并行交易列表,串行执行每个并行交易列表内部的交易。在执行某交易的过程中,如果该交易所读取的数据单元信息集合read_indexes’和写入的数据单元索引集合write_indexes’,与该交易的状态依赖信息State中声明的read_indexes或write_indexes不一致,则根据状态冲突处理方法进行处理,如果是“交易报错”则按照错误交易处理,如果是“改为串行”,将该交易添加到串行交易列表serial_txs中。(4)所有并发交易执行完毕后,逐个选择类型为“串行执行”的交易添加到串行交易列表serial_txs中,并串行执行serial_txs中的所有交易。(5)出块节点在执行完rely_txs的所有并行交易和serial_txs中的所有串行交易后,将这些列表分别存储于块中,并广播区块。同步节点验证交易的方法如下:(1)同步节点收到出块节点的新块后,首先并行执行所有并行交易列表,串行执行每个列表内部的交易,如果在执行过程中出现下列情况,则判断该区块中止执行。(a)如果交易的类型为“串行执行”。(b)如果交易所读取的数据单元信息集合read_state’和写入的数据单元索引集合write_index’,与用户发起的交易中的read_state或write_index不一致,且状态冲突处理方法字段为“改为串行”。(2)同步节点串行执行serial_txs中的所有交易,完成后,该区块即同步完成。进一步地,数据单元划分的方法,可以按照账户地址、UTXO输出或账户内部基本数据结构(int,map,struct)进行划分。本专利技术的有益效果在于:本专利技术舍弃了区块链必须串行执行交易的规则,同时又不对交易进行简单并发执行,而是让用户首先进行简单模拟执行,简化节点端并发难度,最终使节点端可以高效地对交易进行并发处理,同时容忍并发失败和串行执行,极大地加快了节点的交易吞吐量。附图说明图1为本专利技术总体架构图。具体实施方式下面结合附图对本专利技术做进一步说明。如图1所示,一种基于区块链的并行交易执行方法,该方法中,首先对区块链中的交易所涉及的数据单元进行划分,每个数据单元产生唯一性索引index。本专利技术不限制数据单元划分的方法,可以按照账户地址、UTXO输出、账户内部基本数据结构(int,map,struct)等进行划分,还需要考虑块高度、时间戳等非账户数据。各用户节点实时同步出块节点的最新区块,保持本地最新的链状态备份。用户发起交易时,选择交易类型,如果选择的交易类型为“串行执行”,直接将交易内容Data签名广播;如果选择的交易类型为“并行执行”,根据本地最新状态,对交易内容进行模拟执行,获得状态依赖信息State,并签名广播。其中State包含如下内容:上述模拟执行过程中会读取的数据单元的索引集合read_indexes;模拟执行过程会写入的数据单元的索引集合write_indexes;以及状态冲突处理方法:“交易报错”或“改为串行”。出块节点执行交易、打包出块的方法如下:(1)出块节点生成一个空的列表serial_txs用于存放串行交易。(2)构建一个空的集合rely_txs,用于存放多组并行交易列表;构建一个空的集合rely_indexes用于存放一系列子集。rely_txs中的每组并行交易列表会生成一组对应的依赖数据单元,rely_indexes的每一个子集就是用于存放这组依赖数据单元的索引集合的。具体如下:出块节点逐个选择交易类型为“并行执行”的交易。假设当前选择的“并行执行”交易为tx,当前已生成的rely_indexes子集个数为N个,出块节点对这N个子集进行遍历。假设当前正在遍历的子集为rely_indexes_%i%,如果该子集对应的并行交易列表rely_index本文档来自技高网...
一种基于区块链的并行交易执行方法

【技术保护点】
一种基于区块链的并行交易执行方法,其特征在于,该方法中,首先对区块链中的交易所涉及的数据单元进行划分,每个数据单元产生唯一性索引index。各用户节点实时同步出块节点的最新区块,保持本地最新的链状态备份。用户发起交易时,选择交易类型,如果选择的交易类型为“串行执行”,直接将交易内容Data签名广播;如果选择的交易类型为“并行执行”,根据本地最新状态,对交易内容进行模拟执行,获得状态依赖信息State,并签名广播。其中State包含如下内容:上述模拟执行过程中会读取的数据单元的索引集合read_indexes;模拟执行过程会写入的数据单元的索引集合write_indexes;以及状态冲突处理方法:“交易报错”或“改为串行”。出块节点执行交易、打包出块的方法如下:(1)出块节点生成一个空的列表serial_txs用于存放串行交易。(2)构建一个空的集合rely_txs,用于存放多组并行交易列表;构建一个空的集合rely_indexes用于存放一系列子集。rely_txs中的每组并行交易列表会生成一组对应的依赖数据单元,rely_indexes的每一个子集就是用于存放这组依赖数据单元的索引集合的。具体如下:出块节点逐个选择交易类型为“并行执行”的交易。假设当前选择的“并行执行”交易为tx,当前已生成的rely_indexes子集个数为N个,出块节点对这N个子集进行遍历。假设当前正在遍历的子集为rely_indexes_%i%,如果该子集对应的并行交易列表rely_indexes_%i%为空列表,即子集rely_indexes_%i%为空,或tx的read_indexes和write_index的并集与rely_indexes_%i%存在交集,则将tx加入到rely_txs_%i%中,将tx的write_indexes加入到rely_indexes_%i%中。如果对所有子集遍历完成,均不存在交集或空元素,则新建子集,将tx中的write_indexes中的数据单元索引加入到rely_indexes的N+1个子集中,并在rely_txs中建立新的并行交易列表,将该交易tx加入到该新建的交易列表中。(3)出块节点并行执行rely_txs中的的并行交易列表,串行执行每个并行交易列表内部的交易。在执行某交易的过程中,如果该交易所读取的数据单元信息集合read_indexes’和写入的数据单元索引集合write_indexes’,与该交易的状态依赖信息State中声明的read_indexes或write_indexes不一致,则根据状态冲突处理方法进行处理,如果是“交易报错”则按照错误交易处理,如果是“改为串行”,将该交易添加到串行交易列表serial_txs中。(4)所有并发交易执行完毕后,逐个选择类型为“串行执行”的交易添加到串行交易列表serial_txs中,并串行执行serial_txs中的所有交易。(5)出块节点在执行完rely_txs的所有并行交易和serial_txs中的所有串行交易后,将这些列表分别存储于块中,并广播区块。同步节点验证交易的方法如下:(1)同步节点收到出块节点的新块后,首先并行执行所有并行交易列表,串行执行每个列表内部的交易,如果在执行过程中出现下列情况,则判断该区块中止执行。(a)如果交易的类型为“串行执行”。(b)如果交易所读取的数据单元信息集合read_state’和写入的数据单元索引集合write_index’,与用户发起的交易中的read_state或write_index不一致,且状态冲突处理方法字段为“改为串行”。(2)同步节点串行执行serial_txs中的所有交易,完成后,该区块即同步完成。...

【技术特征摘要】
1.一种基于区块链的并行交易执行方法,其特征在于,该方法中,首先对区块链中的交易所涉及的数据单元进行划分,每个数据单元产生唯一性索引index。各用户节点实时同步出块节点的最新区块,保持本地最新的链状态备份。用户发起交易时,选择交易类型,如果选择的交易类型为“串行执行”,直接将交易内容Data签名广播;如果选择的交易类型为“并行执行”,根据本地最新状态,对交易内容进行模拟执行,获得状态依赖信息State,并签名广播。其中State包含如下内容:上述模拟执行过程中会读取的数据单元的索引集合read_indexes;模拟执行过程会写入的数据单元的索引集合write_indexes;以及状态冲突处理方法:“交易报错”或“改为串行”。出块节点执行交易、打包出块的方法如下:(1)出块节点生成一个空的列表serial_txs用于存放串行交易。(2)构建一个空的集合rely_txs,用于存放多组并行交易列表;构建一个空的集合rely_indexes用于存放一系列子集。rely_txs中的每组并行交易列表会生成一组对应的依赖数据单元,rely_indexes的每一个子集就是用于存放这组依赖数据单元的索引集合的。具体如下:出块节点逐个选择交易类型为“并行执行”的交易。假设当前选择的“并行执行”交易为tx,当前已生成的rely_indexes子集个数为N个,出块节点对这N个子集进行遍历。假设当前正在遍历的子集为rely_indexes_%i%,如果该子集对应的并行交易列表rely_indexes_%i%为空列表,即子集rely_indexes_%i%为空,或tx的read_indexes和write_index的并集与rely_indexes_%i%存在交集,则将tx加入到rely_txs_%i%中,将tx的write_indexes加入到rely_indexes_%i%中。如果对所有子集遍历完成,均不存在交集或...

【专利技术属性】
技术研发人员:谢晗剑
申请(专利权)人:杭州秘猿科技有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1