比特币原理分析(三)布隆过滤器在比特币中的应用

布隆过滤器在比特币中的应用

比特币中布隆过滤器是在BIP-0037中提到。下面我们通过“比特币钱包如何知道有多少钱”的问题来介绍布隆过滤器在比特币中的应用。这个问题其实就是“比特币钱包如何知道有多少UTXO

比特币网络中主要有两种节点类型:

  • 全节点:存放所有区块数据和交易
  • SPV节点:只存放区块头(Block Header)

我们假设,比特币钱包最开始值存储了私钥,没有任何其他数据。那么它要获取跟自己地址相关的UTXO,只能向比特币网络中相邻的全节点询问,询问的方式有3中:

方法一:下载完整的区块链账本,自己查找

这种方法很简单,也能隐藏用户的隐私(全节点无法知道SPV节点关联的钱包的地址)。但是在手机端是不现实的,每次用户需要下载上百G的区块链数据,才能知道自己钱包有多少钱,虽然保护了用户隐私,但是浪费了存储空间和带宽。所以这种方法不行,而这也是为什么有SPV的概念存在,中本聪也是考虑到移动支付的场景的。

方法二:直接告诉全节点自己钱包的所有地址,全节点返回所有跟钱包地址相关的UTXO

这种方法直接等于是泄露了用户隐私,其他全节点就知道SPV节点所关联的钱包地址。但是好处是所要下载的数据少了很多,也更精确了。

方法三:告诉全节点部分自己钱包的地址信息,全节点返回可能相关的UTXO

这种方法实际上就是采用布隆过滤器的方法隐藏用户隐私,从而做到即保护用户隐私,又节省存储空间和带宽。在前面的章节,我们知道布隆过滤器的两个特点:只能告诉你某个元素可能存在集合中以及某个元素一定不存在集合中。这里可以简单理解Bloom Filter就是一个过滤器,用来过滤不属于钱包的UTXO。

钱包节点(SPV节点)会以布隆过滤器的形式告诉相邻全节点自己地址信息,那么根据布隆过滤器的特性,会有两种结果:

  • 没有通过布隆过滤器过滤出来的UTXO,就【一定】不属于钱包地址
  • 通过布隆过滤器过滤出来的UTXO,【可能】属于钱包地址

这种方法虽然在一定程度上保护用户隐私,节省了存储空间和带宽,但是根据布隆过滤器的特点,我们知道,随着钱包交易的UTXO越多,布隆过滤器误报率会越高,也就是相邻全节点返回正确的UTXO概率越低。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页