SPV Node如何用Bloom Filter询问自己有多少钱?

Wallet (SPV Node)如何知道自己有多少钱?在上一篇文章,如何知道Bitcoin Wallet有多少钱,列出三种方法。

方法一:下载完整帐本(Blockchain)后自己从里面去找

方法二:向Peer公开Wallet的所有讯息,Peer就回传属于该WalletUTXO

方法三:向Peer公开Wallet的部份讯息,Peer回传可能属于该WalletUTXO


三种方法,各有优缺点。本篇介绍第三种,参考自,BIP37 - Connection Bloom Filtering。想深入了解Bloom FilterBitcoin Protocol的运作原理,建议多花一些时间阅读。看得懂的,本篇文章就不用再看下去了。若看不太懂,希望本文对大家会有一些帮助,当然,最重要的一点是,鼓励大家对照原来的BIP37,质疑本文的正确性,这样做,有助于提升大家的思考能力。


用下图说明,Wallet如何用Bloom Filter,去向Peer问,自己拥有多少钱。这里,我们的前提条件是,Wallet被重启后,只剩下Private Key,其它什么都没有。不用担心,透过下面步骤,可以把钱找回来。


WalletPeer询问,自己应该有多少钱,步骤如下:


  1. WalletPrivate Key推衍Public Key,再来是一组Address (a1, a2, a3)。最后建立Bloom Filter。可以想像它是一个过泸器,用来过泸大部份不属于WalletTransaction
  2. WalletPeer发送filterload message,将Bloom Filter传给Peer
  3. Wallet发送getblocks message,要求Peer传回Block。若Wallet没有发filterload,那么Peer会准备一股脑的Block。但因为现在Peer有了Bloom Filter,所以它会过泸大部份不相干的Transaction
  4. 这时Peer开始从Blockchain中,用Bloom Filter找出可能属于WalletTransaction,及其所属的Block。假设第一个找到的是Block1,底下挂了一个tx1,其output指向a1,表示该transaction属于Wallet
  5. 为了要确保tx1output没有被花费到,Peer必须检查是否有其它的transactioninput花费了a1。假设Peer发现了Block1底下挂了一个tx2,其input指向a1,就表示tx2花费了tx1output
  6. 若在Step 5发现Transaction有被花费,则Peer会依据Transaction的格式,及当初从filterload设定的Flag,决定要不要更新Bloom Filter。这样会造成Bloom Filter的孔会愈来愈大,导致判定Transaction属于Wallet的准确率也会变大。其中的细节,留待下一篇文章说明吧!
  7. Peer找到所有可能的Transaction后,就会发一个inv message,给Walletinv里面会有:待选Transaction所属Block的头、Merkle Path、以及Transaction本身。
  8. 最后,Wallet收到inv message带来的东西后。就依照中本聪论文理所提的两种检查方式:Merkle Path ProofProof of Work(这一点我以后再解释),检查那些Transaction是属于Wallet,并且是尚未被花费的Transaction,然后建立UTXO Pool,暂时存放尚未被花费的属于该WalletTransaction。将这些TransactionOutput加总,就是该Wallet的余额(Balance)了。

本文遗留几个问题,近期之内会说明:

  • Peer在什么情况下,会去更新Bloom Filter
  • 如何从,中本总Bitcoin P2P Network论文,解释SPV检查Transaction的方法?

至于Merkle TreeBloom Filter的原理,建议大家自己上网找资料,没必要我就不多解释了。


-Count

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值