2017年3月11日 星期六

如何知道Bitcoin Wallet有多少錢?

Bitcoin Network,大致上有兩種Node:
  • Full Node,存放所有Block和Transaction
  • SPV Node,存放所有Block Header

如果只有Full Node,那我們就不用去想設計Merkle Tree,以及後來的Bloom Filter,那麼這個世界就簡單多了。但為了要讓Bitcoin Wallet(錢包)可以通行所有裝置,特別是手機,SPV Node就很重要了,不然就需要100G以上空間存放整個Blockchain,這是不可行的。

自從中本聰的Bitcoin P2P Network論文,2008年橫空出世之來,他就預測到,將來必定是SPV Node盛行,所以他很早就提出了SPV (Simplified Payment Verification)的概念。

而後來2012年提出的BIP37 - Connection Bloom Filtering,是基於SPV的概念,用Bloom Filter,提出一個更加可行的方案出來。

本篇先為這個問題:「Bitcion Wallet如何知道有多少UTXO?」,提供簡單的回答。

我們知道,Wallet只存所有的Block Header,而沒有全部的Transaction,最多只存屬於自己的Transaction。一開始,連Block Header都沒有的情況下,如何知道Wallet有些UTXO(Unspent Transaction Output)呢?它要去問具有完整帳本(Blockchain)的Peer。問的方式有兩種:

方法一:下載完整帳本(Blockchain)後自己從裡面去找
方法二:向Peer公開Wallet的所有訊息,Peer就回傳屬於該Wallet的UTXO
方法三:向Peer公開Wallet的部份訊息,Peer回傳可能屬於該Wallet的UTXO

這個問題,講白一點,就是:「我想知道錢包有多少錢?」

要知道真實的錢包有多少錢,直接打開來數一下就行了。Bitcoin Wallet,是電子錢包,運行的時候,會顯示目前的餘額,斷電的時候,不需要保存餘額,因為下次重啟的時候,只要去問就好了。根據什麼來問?Wallet惟一需要存放的,是一組Private Keys,被安全存放在晶片裡,可能是Secure Element或Trust Zone。這一組Key是別人獲取不到的,甚至Wallet App自己也獲取不到。Wallet的安全晶片,可以從Private Key去推算出Public Key。這個Public Key可以視為Address。有時候Address是從Public Key被Hash兩次算得來的。

我們把Address視為銀行的帳號。所以別人要給我Bitcoin,我就要將Address給別人,請他將錢匯到這個帳號,就行了。

回到原來的問題「我想知道錢包有多少錢?」

方法一:下載完整帳本(Blockchain),然後自己從裡面去找

這種方法,最簡單,但耗費的網路頻寬最多,至要要傳輸100G以上的資料量。因為Wallet沒有向Peer表明,那些Address屬於Wallet,所以Peer當然不知道那些Address屬於Wallet。我們無法從Blockchain存放的Address,往回推導出是從那一個Wallet產生出來的。所以Peer只好將Blockchain一股腦傳給Wallet,讓Wallet自己去找。

優點:結果精確,保留隱私
缺點:浪費頻寬

方法二:向Peer公開Wallet的所有訊息,Peer就回傳屬於該Wallet的UTXO

Wallet向Peer公開所有的Address,可是這樣一來,就洩露隱私。Peer拿到Address,就回報屬於該Wallet的UTXO,及所屬的Block。根據中本聰的論文,此Block不會自帶所有的Transaction,而是Merkle Path。

優點:結果精確,簡省頻寬
缺點:洩露隱私

方法三:向Peer公開Wallet的部份訊息,Peer回傳可能屬於該Wallet的UTXO

Wallet向Peer公開部份訊息,以Bloom Filter呈現。Peer拿到Bloom Filter,就回報「可能」屬於該Wallet的UTXO,及所屬的Block Header,及Merkle Path。因為Bloom Filter沒有直接呈現Address,所以保留了一點隱私。

但是Bloom Filter,的特性是:
  • 沒有從Bloom Filter過瀘出來的Transaction,「一定」不是屬於Wallet的
  • 從Bloom Filter過瀘出來的Transaction,「應該」是屬於Wallet的
  • 而且隨者Wallet的Transaction數量愈大,「應該」的準確性就愈低。

優點:保留一定程度的隱私,簡省頻寬
缺點:結果不精確 (但可接受)

下一篇,對「方法三」,會有圖文並茂的說明。

-Count

沒有留言:

張貼留言