Cashbox研發工程師講解SPV錢包開發重難點(一)

大家好,我是底層組的Alvin。在公眾號上一期的介紹中提到,Cashbox下一步將新增一個bitcoin完全去中心化的SPV錢包。我在專案主要負責的任務就是bitcoin去中心化錢包的開發。下面我將從技術背景和實現方式兩方面介紹bitcoin的SPV錢包。

什麼是SPV

首先先介紹SPV的概念。可能對於不熟悉區塊的鏈的開發者來說,並不熟悉什麼是SPV。SPV的全稱是簡單支付認證。想要完整的瞭解SPV的概念,需要先了解BTC的P2P結構。

比特幣的網路結構,是一個P2P網路,也就是一個點對點對等網路。每個比特幣服務,都稱為一個比特幣節點。完整的比特幣節點包含路由,區塊鏈資料庫,挖礦,錢包服務四種功能的集合。完全擁有這四種功能的節點又稱為全節點。比特幣主要依靠這種全節點來維持執行。每個節點都參與全網路的路由功能,同時也可能包含其他功能。每個節點都參與 驗證並傳播交易及區塊資訊,發現並維持與對等節點的連線。

一些節點保有一份完整的、最新的區塊鏈複製,這樣的節點被稱為“全節點”。全 節點能夠獨立自主地校驗所有交易,而不需藉由任何外部參照。和全節點相對的,就是SPV節點。SPV節點最大的特點就是不需要儲存完整的區塊鏈資料庫,只需要儲存區塊鏈資料頭。根據比特幣區塊頭的設計,SPV儲存的資料大小,只有完整區塊鏈資料大小的1/1000。目前為止,一份比特幣主網的區塊資料大小已經超過300G,而才用SPV技術的節點,只需要使用幾百m大小的資料即可。

由此可見,在儲存大小受限的裝置上SPV將是一個更好的選擇。隨著區塊鏈的普及,會有大量的使用者使用手機來執行區塊鏈錢包,在手機上執行超過300g大小的全節點顯然不是使用者的最佳選擇。而SPV技術的使用,使得在手機上使用完全去中心化的bitcoin錢包成為可能。我們把這種執行SPV節點的應用,稱為輕錢包。

去中心化

介紹完SPV的概念之後,我們來講講完全去中心化。去中心化,一直是作為區塊鏈的核心思想存在的。在實現Cashbox去中心話錢包的過程中,我們也研究過其他的開源技術錢包,發現一個最主要的特點:不夠去中心化。現在區塊鏈的使用者賬戶資料模型主要分為兩大類,一類是以太坊為代表的賬戶模型,還有一類是以比特幣為代表的UTXO模型。賬戶模型大致相當於銀行賬戶,UTXO模型則又稱為Unspent Transaction Output,是未花費的輸出,可以簡單理解為還沒有用掉的收款。由於UTXO模型的複雜性,導致我們拿到一個使用者地址之後,想要驗證使用者的UTXO是一件非常困難的事情。所以大多數錢包有一個自己的後端。這個後端主要的功能就是要解決UTXO驗證困難的問題。後端對應一份完整的區塊鏈資料,這樣後端可以對交易進行索引方便查詢UTXO。另一方面,這個完整的後端對應的是一個比特幣全節點,廣播交易的功能也交給了後端。從這個意義上來看,傳統錢包不夠去中心化,也不符合SPV的概念。是把一個去中心化的比特幣,做成了中心化的服務,這個模型中有太多功能需要依賴自建的後端。

我們使用的SPV去中心化錢包,錢包端儲存的是2百兆左右的區塊資料頭。我們在去中心化錢包的內部,啟動的是比特幣的P2P網路,利用比特幣網路協議直接接入比特幣網路去獲取需要的資訊。不需要完整的後端支援。大多數傳統錢包,都需要把交易有關的資訊傳遞給後端,才可以實現篩分UTXO和廣播交易的功能,而我們的錢包,因為SPV節點的存在,直接和和錢包繼承,在使用者的手機內部即可實現,不需要和我們進行資料互動。這個概念是是非常符合去中心化思想的。而且在使用錢包的過程中,因為不需要和我們的後端有什麼連結,使用者完全不擔心洩露自己的隱私。使用者最重要的私鑰也存在自己的手機中,即便需要廣播交易也只是直接接入比特幣P2P網路。真正符合區塊鏈完全去中心化思想。

本期主要講解概念,咱們下期不見不散。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读