【技术实现步骤摘要】
一种Tendermint系统中基于动态分析的事务并行执行方法及装置
[0001]本专利技术涉及区块链
,尤其涉及一种
Tendermint
系统中基于动态分析的事务并行执行方法及装置
。
技术介绍
[0002]Tendermint
系统是一个基于共识算法的分布式账本平台,旨在提供安全
、
可扩展和高性能的区块链解决方案
。Tendermint
系统采用了一种称为拜占庭容错
(Byzantine Fault Tolerant,BFT)
共识算法的机制,即使有部分节点存在故障或恶意行为,该算法也能够在节点之间达成一致
。
这确保了在
Tendermint
系统中的交易和状态转换能够得到正确验证和确认
。
同时这种共识算法具有高吞吐量和快速确认的特点,能够处理大量交易并具有几乎是实时的交易最终性
。
[0003]Tendermint
系统通过使用一组验证节点
(validators)
来管理和维护区块链网络,这些验证节点负责提案和确认区块,确保所有节点在共识过程中达成一致
。
在
Tendermint
系统中,应用程序以独立的方式运行,通过区块链应用接口
(Application BlockChain Interface
,
ABCI)
与
Tendermint
核心引擎进 ...
【技术保护点】
【技术特征摘要】
1.
一种
Tendermint
系统中基于动态分析的事务并行执行方法,其特征在于,包括:步骤1:领导者节点获取待执行事务;所述待执行事务为预定义的包含特定字段的字符串,领导者节点持续地处理来自客户端的事务广播请求,直到本地事务数量超过一定阈值;步骤2:领导者节点根据待执行事务构建事务依赖三元组,并将其广播至验证节点;步骤3:验证节点接收事务依赖三元组并完成验证执行,并进行区块提交
。2.
根据权利要求1所述的一种
Tendermint
系统中基于动态分析的事务并行执行方法,其特征在于,所述步骤2的执行过程中包含以下数据结构:多版本存储中的数据项
Item
:存储了一个数据版本,包含以下三个字段:
(1)string
类型的
value
字段,用于存储数据;
(2)int32
类型的
tid
字段,用于存储数据的版本号,即写入此数据的事务的序列号;
(3)int8
类型的
state
字段,用于存储数据项状态信息,共有
waiting、commit
和
abort
三种状态,分别表示写入此数据的事务的执行状态为执行中
、
已提交和已中止;存储某个键上的多版本数据的数据列
MultiVersionLine
:包含以下三个字段:
(1)string
类型的
key
字段,用于存储多版本数据的键;
(2)int32
类型的
RTS
字段,用于存储对该键中数据进行读取的事务的最大序列号;
(3)Item
数据组成的数组
values
字段,记为
[]Item
,用于存储多版本数据,字段中所有数据项根据其
tid
字段的大小从小到大排列;多版本存储
MultiVersionStore
:
string
类型的键到
MultiVersionLine
类型的多版本数据列的映射,记为
map[string]MultiVersionLine
;事务的依赖项
DepSet
:由
string
到
*Item
的映射,记为
map[string]*Item
,用于记录
string
类型的主键对应的多版本存储中的
Item
数据项的地址指针;事务执行结果
resultMsg
:包含两个字段:
(1)int32
类型的事务序列号
tid
,用于表明所执行的事务;
(2)string
类型的事务执行结果
state
,当
state
的值为
error
时,表明事务因存在错误而被中止,当
state
的值为
abort
时,表明事务因冲突中止,当
state
的值为
commit
时,表明事务成功执行并提交;事务依赖三元组
TxTuple
:用于记录事务的内容
、
序列号和依赖关系,包含三个字段:
(1)string
类型的事务的内容
Tx
,用于记录事务的内容;
(2)int32
类型的事务序列号
tid
,用于记录事务的序列号;
(3)int32
类型的事务最大读依赖
maxDep
,用于记录事务的依赖关系
。3.
根据权利要求2所述的一种
Tendermint
系统中基于动态分析的事务并行执行方法,其特征在于,所述步骤2包括:步骤
2.1
:初始化一个空的多版本存储,记为
S
,给每个待执行事务分配唯一的序列号,并根据序列号顺序对待执行事务进行排序,构建任务队列;步骤
2.2
:工作线程循环地从任务队列中取出待执行事务及其序列号,并行地执行事务,将事务执行结果写入多版本存储中,并根据事务执行结果生成事务的事务读集
R
和事务的事务写集
W
;步骤
2.3
:向执行结果中因冲突而中止的事务重新分配新的递增的序列号,并将该任务重新加入任务队列中,更新任务队列;步骤
2.4
:对更新后的任务队列重复执行步骤
2.2
和步骤
2.3
,得到新的任务队列;步骤
2.5
:对步骤
2.4
中更新后的任务队列中的事务进行串行执行,生成事务执行结果,
并根据事务执行结果更新事务的事务读集和事务的事务写集,完成待执行事务的执行过程;步骤
2.6
:领导者节点根据事务的事务读集和事务的事务写集构建事务的调度图,构建事务依赖三元组存储事务间的依赖关系,并根据事务依赖三元组构建事务依赖三元组集
D
;步骤
2.7
:领导者节点将事务依赖三元组集
D
打包为字节编码,并将该字节编码广播至验证节点
。4.
根据权利要求3所述的一种
Tendermint
系统中基于动态分析的事务并行执行方法,其特征在于,将所述步骤
2.2
中取出的待执行事务记为
T
且将该事务的序列号记为
id
,所述步骤
2.2
的执行过程包括以下三个阶段:
(1)
读写集生成阶段:工作线程初始化
DepSet
类型的事务读集
R
和事务写集
W
;每当事务读取键
A
时,如果
R
中存在该键,则读取
R
中属于该键的
Item
,否则,在多版本存储中寻找合适的数据项,方法为:如果映射
S[A]
不存在,则锁定
S
,并从键值数据库中读取键
A
的值
vA
,将
S[A]
设置为空的
MultiVersionLine
,然后将数据
Item{value:vA,tid:
‑
1,state:commit}
插入
S[A]
中,将
S[A]
的
RTS
字段,即
S[A].RTS
置为
id
,然后释放
S
的锁;如果映射
S[A]
存在,且
S[A].RTS
小于
id
,则将
S[A].RTS
置为
id
;完成上述操作后,选择
S[A]
中版本号不大于
id
的且版本号最大的数据项进行读取,并将其加入
R
中;每当事务向键
A
写入数据
v
时,将
Item{value:v,tid:id,state:waiting}
插入
W
中;如果事务因错误中止,返回
state
字段为
error
的
resultMsg
消息,并结束事务执行;
(2)
冲突消解阶段:将
W
中所有
Item
插入
S
中,如果在写入某个键
A...
【专利技术属性】
技术研发人员:赵恒泰,袁野,王子尧,要鑫,赵相国,
申请(专利权)人:东北大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。