【技术实现步骤摘要】
一种基于序列标记值的可编辑区块链结构及更新方法
[0001]本专利技术涉及区块链
,特别涉及一种基于序列标记值的可编辑区块链结构及更新方法。
技术介绍
[0002]区块链技术具有去中心化、不可篡改的特点,然而区块链不可篡改的特性使得上链数据很难按照常规手段进行修改和删除。一旦区块链上出现有害数据、错误数据及冗余数据,必须通过硬分叉、回滚等技术手段来修改和删除,实施难度大,代价高。因此,要求区块链具有一定程度的可编辑特性有着迫切的现实应用需求。
[0003]目前,基于变色龙哈希函数的可编辑区块链方案因其编辑代价小、效率高而受到广泛关注。然而,该类方案容易导致同一区块具有相同哈希值的新旧版本同时存在,这挑战了区块链账本的一致性,严重影响了区块链系统的安全。另外,基于共识机制的区块链修改方案也能实现区块链的可编辑特性。Marsalek A等人在《A correctable public blockchain》一文中提出了一种可编辑的双链结构,数据链存储原始数据,修正链存储修改的数据。修正数据的提交是通过分散的投票完成的。Deuber D等人在《Redactable blockchain in the permissionless setting》一文中提出了双哈希链结构,修正的完成也是依赖于共识机制的投票。这些方案具有投票周期长、编辑代价大等缺陷,在一定程度上降低了可编辑区块链系统的效率和可用性。另外这些基于共识机制的可编辑区块链方案和结构没有考虑单个区块多次重复性编辑的问题。然而在现实应用中,由于Merkl ...
【技术保护点】
【技术特征摘要】
1.一种基于序列标记值的可编辑区块链结构,其特征在于,为双链结构,一条为主链B,用于存储区块链的数据;一条为修正链BC,用于存储历次编辑过的区块数据。2.根据权利要求1所述的一种基于序列标记值的可编辑区块链结构,其特征在于,所述主链B由{seq
i
,B
i
}组成,其中i∈[0,m],m为主链最新区块的高度,B
i
为主链的区块,seq
i
为区块B
i
的序列标记值,具有单向递增、可修改且不参与区块哈希值的计算;区块B
i
结构可简要表示为B
i
=<s
i
,x
i
,ctr,CH(a
iη
)>,i∈[0,m],s
i
∈{0,1}
K
表示长度为K位的前一个区块的哈希值,x
i
∈{0,1}
*
表示区块内任意长度的不可编辑数据,ctr代表主链的共识机制,a
iη
为区块B
i
内可编辑区域η的数据,CH(a
iη
)为可编辑数据a
iη
的变色龙哈希值。3.根据权利要求1所述的一种基于序列标记值的可编辑区块链结构,其特征在于,所述修正链BC结构表示为{BC
j
},j∈[0,n],n为修正链最新区块的高度;区块结构简要表示为BC
j
=<sc
j
,xc
j
,ctrc>,其中sc
j
∈{0,1}
k
为修正链上长度为k的前一个区块的哈希值,xc
j
∈{0,1}
*
代表长度任意的修正链区块数据,ctrc代表修正链的共识机制;区块数据xc
j
={seq
′
j
,B
j
′
},seq
′
j
代表封装在区块数据xc
j
中的序列标记值,主链区块B
i
=<s
i
,x
i
,ctr,CH(a
iη
)>经过编辑后成功提交到修正链成为B
j
′
=<s
i
,x
i
,ctr,CH(a
i
′
η
)>,a
i
′
η
代表修改后的数据。4.一种基于序列标记值的可编辑区块链更新方法,其特征在于,包括以下步骤:S1:构建区块链之前,对区块链可编辑区域和可编辑权限作出界定;S2:构造可编辑区块链的双链结构,一条为主链B,用来存储整个区块链的完整账本,每块由区块序列标记值seq标记;一条为修正链BC,用于存储主链历次编辑成功的区块数据;首先分别创建主链创世区块和修正链创世区块;创建主链创世区块B0,并用seq0标记,其中seq0=1,将{seq0,B0}打包封装后形成修正链创世区块BC0;S3:主链区块序列标记值一致性检查S4:新增修正链区块,修正链用于存储主链历次编辑成功的区块数据,当修正区块提交成功后,通过修正链的共识机制对修正链新增区块;S5:更新主链,主链根据修正链区块的数据,更新主链编辑区块和相关区块的序列标记值,进而保证可编辑区块链账本的一致性。5.根据权利要求4所述的一种基于序列标记值的可编辑区块链更新方法,其特征在于,所述步骤S1具体为:S1.1:对区块链可编辑区域进行划定,可编辑区域根据场景从数据项级到区块级进行不同粒度的划定并用变色龙哈希函数对可编辑内容进行封装;S1.2:对区块链编辑权限进行划定,规定交易双方均有权对交易附加信息进行修改,经对方同意后可将编辑区块提交至修正链。6.根据权利要求4所述的一种基于序列标记值的可编辑区块链更新方法,其特征在于,所述步骤S3具体为:S3.1:检查主链创世区块B0是否存在及创世区块的序列标记值seq0是否为1;若B0不存在,则创建创世区块B0,将创世区块的序列标记值seq0赋值为1;S3.2:通过对主链序列标记值的大小关系进行比较,检查主链的序列标记是否存在错误,原则是:当前一个区块的序列标记值大于后一个区块的序列标记值时,说明主链的区块序列标记存在错误,将所有区块的序列标记值赋值为创世区块的序列标记值,即seq
i
=1,i
∈[1,m];S3.3:通过比较主链最新区块的序列标记值seq
m
和修正链中最新区块封装的数据中seq
n
...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。