區(qū)塊鏈知識講解:SPV簡單支付驗證
在上一期中我們學習了比特幣網絡的內部結構,其中我們提到了SPV簡單支付驗證通過區(qū)塊頭進行交易驗證,這期我們將著重說明SPV簡單支付驗證這個概念。
一、節(jié)點的分類
比特幣網絡中的節(jié)點是不一樣的,主要包括全節(jié)點、輕節(jié)點和SPV節(jié)點。
全節(jié)點是指維持包含全部交易信息的完整區(qū)塊鏈的節(jié)點。更加準確地說,這樣的節(jié)點應當被稱為完整區(qū)塊鏈節(jié)點。
在比特幣發(fā)展的早期,所有節(jié)點都是全節(jié)點,當前的比特幣核心客戶端也是完整區(qū)塊鏈節(jié)點。但隨著區(qū)塊鏈網絡的數據的增多,出現了新型的節(jié)點。
許多比特幣客戶端被設計成運行在空間和功率受限的設備上,如智能電話、平板電腦、嵌入式系統等。對于這樣的設備,通過簡化的支付驗證(SPV)的方式,可以使它們在不必存儲完整區(qū)塊鏈的情況下進行工作。這種類型的客端被稱為輕節(jié)點和SPV節(jié)點。
二、SPV節(jié)點和輕節(jié)點的區(qū)別
輕節(jié)點指的是:節(jié)點本地只保存與其自身相關的交易數據(尤其是可支配交易數據),但并不保存完整區(qū)塊鏈信息的技術。SPV的目標是驗證某個支付是否真實存在,并得到了多少個確認。
比如:小明收到來自小紅的一個通知,小紅聲稱已經從其賬戶中匯款一定數額的錢給了小明。如何快速驗證該支付的真實性,是SPV的工作目標。
輕節(jié)點的目標不僅是支付驗證,而且是用于管理節(jié)點自身的資產收入、支付等信息。比如:小明使用輕節(jié)點管理自身在區(qū)塊鏈的收入信息、支出信息,在本地只保存與小明自身相關的交易數據,尤其是可支配交易數據。
輕錢包與SPV的最大區(qū)別是:
- 輕節(jié)點仍需下載每個新區(qū)塊的全部數據并進行解析,獲取并在本地存儲與自身相關的交易數據,只是無須在本地保存全部數據而已。
- 而SPV節(jié)點不需要下載新區(qū)塊的全部數據,只需要保存區(qū)塊頭部信息即可。
雖然輕節(jié)點部分借鑒了SPV的理念,但和SPV是完全不同的。
三、支付驗證和交易驗證的區(qū)別
SPV節(jié)點進行的是區(qū)塊鏈支付驗證,而不是區(qū)塊鏈交易驗證。這兩種驗證方式存在很大的區(qū)別。
區(qū)塊鏈交易驗證的過程比較復雜,包括賬戶余額驗證、雙重支付判斷等,通常由保存區(qū)塊鏈完整信息的區(qū)塊鏈驗證節(jié)點來完成。
而支付驗證的過程比較簡單,只是判斷該筆支付交易是否已經得到了區(qū)塊鏈節(jié)點共識驗證,并得到了多少的確認數即可。
簡單的說就是:交易驗證要檢驗這個交易是否合法,支付驗證就是驗證這筆交易是否已經存在。
四、SPV支付驗證的實現步驟
我們現在知道SPV節(jié)點是通過區(qū)塊頭進行支付驗證的,區(qū)塊頭中一般包括如下信息:前一區(qū)塊(也稱父區(qū)塊)的哈希值、區(qū)塊中交易默克爾樹的根哈希值、時間戳等,通過區(qū)塊的哈希值,可以識別出區(qū)塊鏈中的對應區(qū)塊。
區(qū)塊前后有序鏈接,每一個區(qū)塊都可以通過其區(qū)塊頭的“前一區(qū)塊的哈希值”字段引用前一區(qū)塊。這樣把每個區(qū)塊均鏈接到各自前一區(qū)塊的哈希值序列,就創(chuàng)建了一條一直可以追溯到第一個區(qū)塊(創(chuàng)世區(qū)塊)的鏈條。
前一區(qū)塊的哈希值,可以確保區(qū)塊鏈所記錄的交易次序。默克爾樹的根哈希值,則可以確保收錄到區(qū)塊中的所有交易的真實性。
當比特幣網絡需要利用SPV進行簡單支付驗證時步驟如下:
- 計算待驗證支付的交易哈希值;
- 節(jié)點從區(qū)塊鏈網絡上獲取并存儲最長鏈的所有區(qū)塊頭至本地;
- 節(jié)點從區(qū)塊鏈獲取待驗證支付對應的默克爾樹哈希認證路徑;(這里找到了該交易對應的哈希值)
- 根據哈希認證路徑,計算默克爾樹的根哈希值,將計算結果與本地區(qū)塊頭中的默克爾樹的根哈希值進行比較,定位到包含待驗證支付的區(qū)塊;(找到這個哈希值屬于哪個區(qū)塊)
- 根據該區(qū)塊頭所處的位置,驗證該區(qū)塊的區(qū)塊頭是否已經包含在已知最長鏈中,確定該支付已經得到的確認數量,如果包含則證明支付真實有效。(證明本交易得到了6次確認)
簡單的講,其實SPV就做了兩件事:
- 找到要驗證的這筆交易在哪個區(qū)塊;
- 確定這個交易是否被6次確認過了。
如果驗證的這筆交易已經被6次確認過了,代表這筆交易已經被最長鏈承認了,則這筆交易是真實存在的。
五、總結
SPV對普通用戶一個很友好的支付驗證方式,可以幫助節(jié)省更多的硬件控件。但是凡事都有兩面性,這種方式有利也有弊。
SPV因為沒有保存全部區(qū)塊的節(jié)點信息,需要和其他節(jié)點配合才能進行驗證,所以SPV節(jié)點存在被誘導連入了一個虛假的網絡中的情況,存在被惡意攻擊的可能。
在絕大多數的實際情況中,具有良好連接的SPV節(jié)點是足夠安全的,它在資源需求、實用性和安全性之間維持恰當的平衡。當然,如果要保證萬無一失的安全性,最可靠的方法還是運行完整區(qū)塊鏈的節(jié)點。
版權聲明:數字簽名:Press.one
作者:liheng,區(qū)塊鏈探索者、互聯網產品經理,超級個體修煉中,只創(chuàng)作對用戶有價值的內容
本文由 @liheng 原創(chuàng)發(fā)布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
- 目前還沒評論,等你發(fā)揮!