【区块链】查询-LVQ

简介

针对某一帐户的交易历史溯源问题,提出LVQ(Lightweight Verifiable Query)方法,可以用于在比特币系统中查找交易历史

系统设计

SMT(sorted merkle tree)+ BMT(bloom filter)

SMT

SMT中的每个叶子是一个地址及其在块中出现次数的组合

fig2

BMT

只存地址对应的BF

fig3

分区:以2的幂为分区大小,分区中的最后一个块会聚合分区中该块之前所有块的BF

整体架构

SMT用来确认某地址出现的次数

MT用来给出merkle proof

BNT用来给出不存在证明

fig1

问题1:“草人”设计的块头数据过大,原因是过小的BF会增大出现FPM问题的概率,因此块头中的BF数据较大

解决:块头中只保存BMT的根哈希值,不保存整个BF;奇数块高的块只保存自己的BF即可,偶数块高的块除了自己的BF以外,还要聚合之前的块中的BF(作为叶子节点),但聚合的数量不能过多,设为上限M

问题2:“草人”设计的查询返回值过大,原因是出现FPM问题时,需要返回整个块的数据作为证明

解决:结合SMT来证明某数据的不存在,只需要返回左右区间的merkle proof即可,不需要返回整个块

问题3:“草人”设计无法给出查询结果的完整性证明,即无法给出某数据在块中出现的次数

解决:结合SMT给出完整性证明

查询流程

不存在情况:用BMT给出不存在证明(可以将证明进行分区聚合,有效减小返回值的大小,如图所示,分区大小为8)

fig4

存在情况且非FPM:MT与SMT结合给出证明,用MT验证正确性,SMT验证完整性

FPM情况:SMT给出区间两端点的proof,即为不存在证明

Author: iwannaeat
Link: https://iwannaeat.github.io/2023/02/20/【区块链】查询-LVQ/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.