這是一篇技術文章,獲取比特幣的工做知識。html
一個完整的節點,好比比特幣核心,知道如下幾點:後端
這須要大量的數據被下載,存儲和索引。 可是,若是不須要完整的塊鏈,則有一些快捷方式能夠減小冗餘信息的數量。網絡
SPV提供了一種方法,能夠肯定某個特定的事務處在塊鏈中的塊中,而不須要整個塊鏈被下載。 它這樣作以下:區塊鏈
一個梅克爾樹是一種數學模型,其中塊是在頂點,全部的交易獲得安置在一個樹狀結構。網站
一個梅克爾樹證實是全部的頂點(塊),葉(交易)之間的散列的列表。 梅克爾樹證實的一點是,您只須要一小部分的塊來證實交易在塊中。code
所以,當一個錢包說它使用SPV時,它意味着在它相信一個交易以前,它會檢查:htm
交易是「好」,將被添加到錢包。索引
不少人都問咱們,爲何咱們只支持HD賬戶(即在正常的說法賬戶1)。事務
主要緣由是因爲咱們如何從比特幣核心節點得到咱們的交易。 咱們使用一種稱爲布隆過濾的技術。 咱們不要求直接交易,而是咱們給比特幣核心節點,咱們知道會匹配全部咱們感興趣的(加上一些誤報把任何間諜失去了線索一點點)交易的過濾器。get
僅支持一個賬戶就意味着爲主地址和更改地址的地址數量不斷增長建立過濾器。 這開始爲「數百」,隨着錢包的使用,將變成「數千」。
將其擴展到支持任意數量的賬戶意味着建立匹配的過濾器:
帳戶數量x(主要地址+更改地址)
所以,咱們必須過濾以匹配更多的地址(咱們認爲),咱們幾乎能夠得到完整的塊。 這使得咱們至少像比特幣核心節點同樣慢,並且咱們上傳很是寬泛的過濾器的速度更慢。
咱們認爲這樣作太慢而無用,因此咱們將使用限制在一個帳戶中。
咱們沒法訪問使用Bitcoinj設置的未使用交易輸出(UTXO),所以咱們沒法直接查看。 只有在其後端具備完整塊存儲的實現(可直接查詢)才能使用UTXO集,這意味着要下載整個塊鏈。
Bitcoinj只會講比特幣網絡協議,不支持「給我全部的UTXO這個地址」等功能。
爲了減小須要下載的塊的數量,咱們在安裝程序中包含一個檢查點文件,其中包含比特幣難度級別變化(每一個2015年的塊)的每一個塊的標題。
這使咱們只能從錢包出生日期前的檢查點進行同步,這節省了大量時間,也是爲何咱們要求您在建立錢包期間記錄「日期戳」。 所以,若是錢包日期戳至關於塊200,050,而且在塊200,000處有檢查點,那麼咱們能夠同步50塊。
因爲檢查點文件存儲在本地,並經過咱們的安裝程序提供,它使咱們可以檢測到比特幣節點什麼時候試圖欺騙使用分叉鏈(包含假交易)而不是真正的比特幣區塊鏈。
若是MultiBit能夠檢測到,它將自動鏈接到在本地主機上運行的Bitcoin Core。 它還鏈接到其餘節點,由於咱們使用事務傳播來肯定事務什麼時候正確發送以及什麼時候可使用事務更改。 若是咱們純粹依賴單個節點(即便它是可信的),咱們也不能確信真正的外部比特幣網絡正在傳遞它。
https://multibit.org/hd0.4/how-spv-works.html
這個網站對應的產品叫multibit
,現已經再也不維護,緣由是一年前被KeepKey
收購了。