Efficient Public Blockchain Client for Lightweight Users
Xu, Lei & Chen, Lin & Gao, Zhimin & Xu, Shouhuai & Shi, Weidong. (2018). Efficient Public Blockchain Client for Lightweight Users.
WHY
传统区块链轻节点保存所有区块的块头,随着交易的增长,存储负担也逐渐增加
WHAT
区块链的轻节点只保存整个区块链的摘要,当需要验证交易时,轻节点向区块链网络中的全节点发送验证请求,全节点返回证明,轻节点通过返回的证明来确认交易的有效性
在本文中,轻节点请求验证的不是具体的某个交易,而是包含该交易的区块是否在区块链上
HOW
Setup
Setup生成其他算法需要的公共参数
区块链的创建者选择两个大素数p和q,并计算N = pq,就像RSA累加系统一样。
N嵌入第一块并向公众公开;然后p q被丢弃。
创建者也选择一个随机值g∈Z∗n,每个块将用一个整数标记,“genesis”块(即区块链上的第一个块)有标签“1”。
Block and summary construction
每个块中除了包含标准属性,还包含整个区块链的摘要S,第i块区块用blki表示
Proof generation
生成一个证明,证明块blki是区块链上的第i块。
证明者需要计算pi并返回给请求者
证明一般由保存了整个区块链的全节点提供
Proof verification
通过给定区块blk,proof p=(p(1),p(2))和整个区块链的摘要Sn
用户就可以验证区块blki是否是当前整个区块链Sn的第i个区块
在Proof generation中的验证过程,需要遍历区块链中所有的块来实现验证计算
但这个遍历过程,会随着区块数量的增加,计算复杂度增加
由此提出以下改进:
将所有的区块blk1···blki生成一棵二叉树
树的叶子节点为区块blk的hash,内部节点是两个叶子结点的hash的相乘
整个树的root即为当前区块链中所有区块的hash的相乘
通过这个树来提供中间计算
使整个过程能够更快的生成proof
供中间计算
使整个过程能够更快的生成proof
[外链图片转存中…(img-XrBIuEe2-1619360939938)]