比特幣全節點同步太慢?不用全節點也可驗證支付的 SPV 機制 | 白話區塊鏈入門180

買賣虛擬貨幣

作者|三黎
出品|白話區塊鏈(ID:hellobtc)

比特幣自誕生以來,就因浪費電力資源為人所詬病,但其強大的算力是必要過程,很難找到更好的方式來代替。

隨著它出現的年頭越來越久,在其底層技術區塊鏈上參與交易的人也越來越多,分散式賬本的內容量急劇擴張,中本聰設定的一個區塊 1 MB 的儲存量使得交易過程和交易速度有了限制。

例如,目前比特幣主鏈的區塊資料高達 200 多 G ,對普通使用者而言,儲存量實在過大。因此,下載整個賬本成了令人頭痛的一件事。能不能不下載整個賬本,只找與自己相關的部分呢?換句話說,找個過濾器,把沒用的都留在外面。

於是出現了 SPV 機制。

01 SPV 機制

SPV 全稱“ Simplified Payment Verification ”,常見翻譯為簡單支付驗證。其目的是為了驗證某筆交易是否存在,但並不能驗證交易的合法性,這需要進行兩步操作,第一步是確認交易支付是否被驗證過,第二步是計算得到了多少確認數。

中本聰在論文裡提及了這一概念:

在不執行全節點時也依然有可能對交易進行驗證,使用者只需要保留最長鏈上的所有的區塊頭資料。

簡單而言就是:

假如小黑給大白轉了一個比特幣,大白怎麼才能知道幣已經交易完成了呢?在去中心化的系統裡找證人那是不太可能的。

按照傳統的辦法就是:大白需要下載下來所有的區塊鏈賬本,然後找到小黑的賬戶,先瞅瞅它之前是不是有這樣一個比特幣,並且有沒有轉給大白的記錄。僅僅是第一步,就使得大白的儲存量要爆掉。

每個比特幣的區塊容量是 1 MB ,區塊頭只有 80 KB ,因此只需要下載區塊頭就可以節省很多空間。

區塊頭和區塊體究竟是什麼呢?" target="_blank" rel="nofollow noreferrer noopener">區塊頭和區塊體究竟是什麼呢?

把區塊頭比做人的頭部,裡面儲存著區塊的頭資訊,如雜湊值、時間戳等;而區塊體則類似於人的整個身體,儲存著這個區塊的詳細資料,如具體交易資訊。區塊頭包含在區塊體中。

也就是說一個區塊頭儘管有雜湊值,但下載了區塊頭後大白仍無法知道交易記錄在哪個區塊裡,這時候就需要拿著交易 ID 去找全節點查一下,是否有且在哪一個區塊裡。

02 SPV 的支付驗證過程

咦,那萬一礦工和小黑聯合起來騙大白怎麼辦?

這時候 SPV 機制就派上用場了。

如果礦工說小黑轉過來了,但其實並沒有。那麼為了圓謊他必須偽造更多的交易,使得這些交易能得到和自己區塊頭裡同樣的雜湊值。但由於雜湊的技術特性,改變後的資料要想和原始資料得出一樣的雜湊值,那是很難實現的。

總之, SPV 整個交易過程是這樣的:

第一步,確認交易支付是否被驗證過

首先計算待驗證支付的交易雜湊值,把區塊頭從區塊鏈網路上儲存至本地,再從區塊鏈獲取待驗證支付對應的默克爾樹雜湊認證路徑

對比獲得的雜湊值與自己的是否一致,若一致,則證明支付真實有效。

第二步,驗證得到了多少確認數。根據該區塊頭所處的位置,確定該支付已經得到的確認數量。

完成這兩步,交易支付驗證就完成了。

03 小結

SPV 機制不僅節省了儲存空間,減少了 P2P 網路頻寬的浪費,使得普通使用者在沒有下載完整資料的情況下也可以操作,而且也給查賬帶來了極大方便。

但是,由於 SPV 沒有完整的區塊資料,是無法驗證交易不存在的,這種情況很容易導致雙花的情況出現,而隨機連結節點也有可能受到網路的惡意攻擊。

免責聲明:

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

推荐阅读

;