简介
针对某一帐户的交易历史溯源问题,提出LVQ(Lightweight Verifiable Query)方法,可以用于在比特币系统中查找交易历史
系统设计
SMT(sorted merkle tree)+ BMT(bloom filter)
SMT
SMT中的每个叶子是一个地址及其在块中出现次数的组合
BMT
只存地址对应的BF
分区:以2的幂为分区大小,分区中的最后一个块会聚合分区中该块之前所有块的BF
整体架构
SMT用来确认某地址出现的次数
MT用来给出merkle proof
BNT用来给出不存在证明
问题1:“草人”设计的块头数据过大,原因是过小的BF会增大出现FPM问题的概率,因此块头中的BF数据较大
解决:块头中只保存BMT的根哈希值,不保存整个BF;奇数块高的块只保存自己的BF即可,偶数块高的块除了自己的BF以外,还要聚合之前的块中的BF(作为叶子节点),但聚合的数量不能过多,设为上限M
问题2:“草人”设计的查询返回值过大,原因是出现FPM问题时,需要返回整个块的数据作为证明
解决:结合SMT来证明某数据的不存在,只需要返回左右区间的merkle proof即可,不需要返回整个块
问题3:“草人”设计无法给出查询结果的完整性证明,即无法给出某数据在块中出现的次数
解决:结合SMT给出完整性证明
查询流程
不存在情况:用BMT给出不存在证明(可以将证明进行分区聚合,有效减小返回值的大小,如图所示,分区大小为8)
存在情况且非FPM:MT与SMT结合给出证明,用MT验证正确性,SMT验证完整性
FPM情况:SMT给出区间两端点的proof,即为不存在证明