1. 程式人生 > >【比特幣】SPV是如何工作的

【比特幣】SPV是如何工作的

SPV是如何工作的

SPV, Bloom 過濾器和檢查點

這是一篇技術文章,獲取比特幣的工作知識。

一個完整的節點,比如比特幣核心,知道以下幾點:

  • 每一個當前正在圍繞網路廣播事務處理
  • 每一個曾經被送到交易
  • 所有未使用的交易產出(UTXO)

這需要大量的資料被下載,儲存和索引。 但是,如果不需要完整的塊鏈,則有一些快捷方式可以減少冗餘資訊的數量。

簡化付款驗證(SPV)。

SPV提供了一種方法,可以確定某個特定的事務處在塊鏈中的塊中,而不需要整個塊鏈被下載。 它這樣做如下:

  • 每個事務都有一個雜湊
  • 每個塊都有一個雜湊
  • 事務雜湊和塊雜湊可以使用Merkle樹證明來連結。

一個梅克爾樹是一種數學模型,其中塊是在頂點,所有的交易得到安置在一個樹狀結構。

一個梅克爾樹證明是所有的頂點(塊),葉(交易)之間的雜湊的列表。 梅克爾樹證明的一點是,您只需要一小部分的塊來證明交易在塊中。

因此,當一個錢包說它使用SPV時,它意味著在它相信一個交易之前,它會檢查:

  • 有一個默克爾樹樹證明交易是在一個塊
  • 該塊本身在塊鏈的主鏈中

交易是“好”,將被新增到錢包。

Bloom過濾器和單一HD帳戶支援

很多人都問我們,為什麼我們只支援HD帳戶(即在正常的說法帳戶1)。

主要原因是由於我們如何從比特幣核心節點獲得我們的交易。 我們使用一種稱為布隆過濾的技術。 我們不要求直接交易,而是我們給比特幣核心節點,我們知道會匹配所有我們感興趣的(加上一些誤報把任何間諜失去了線索一點點)交易的過濾器。

僅支援一個帳戶就意味著為主地址和更改地址的地址數量不斷增加建立過濾器。 這開始為“數百”,隨著錢包的使用,將變成“數千”。

將其擴充套件到支援任意數量的帳戶意味著建立匹配的過濾器:

賬戶數量x(主要地址+更改地址)

因此,我們必須過濾以匹配更多的地址(我們認為),我們幾乎可以獲得完整的塊。 這使得我們至少像比特幣核心節點一樣慢,而且我們上傳非常寬泛的過濾器的速度更慢。

我們認為這樣做太慢而無用,所以我們將使用限制在一個賬戶中。

我們沒有UTXO集

我們無法訪問使用Bitcoinj設定的未使用交易輸出(UTXO),因此我們無法直接檢視。 只有在其後端具有完整塊儲存的實現(可直接查詢)才能使用UTXO集,這意味著要下載整個塊鏈。

Bitcoinj只會講比特幣網路協議,不支援“給我所有的UTXO這個地址”等功能。

檢查點

為了減少需要下載的塊的數量,我們在安裝程式中包含一個檢查點檔案,其中包含比特幣難度級別變化(每個2015年的塊)的每個塊的標題。

這使我們只能從錢包出生日期前的檢查點進行同步,這節省了大量時間,也是為什麼我們要求您在建立錢包期間記錄“日期戳”。 因此,如果錢包日期戳相當於塊200,050,並且在塊200,000處有檢查點,那麼我們可以同步50塊。

由於檢查點檔案儲存在本地,並通過我們的安裝程式提供,它使我們能夠檢測到比特幣節點何時試圖欺騙使用分叉鏈(包含假交易)而不是真正的比特幣區塊鏈。

連線到本地比特幣核心節點

如果MultiBit可以檢測到,它將自動連線到在本地主機上執行的Bitcoin Core。 它還連線到其他節點,因為我們使用事務傳播來確定事務何時正確傳送以及何時可以使用事務更改。 如果我們純粹依賴單個節點(即使它是可信的),我們也不能確信真正的外部比特幣網路正在傳遞它。

原文地址

這個網站對應的產品叫multibit,現已經不再維護,原因是一年前被KeepKey收購了。

:)