本文由【區(qū)塊鏈研習社】專欄優(yōu)質內容計劃支持。
? ? ? 區(qū)塊鏈進階01 SPV
Simplified Payment Verification,即SPV
定義
是一種無須維護完整的區(qū)塊鏈信息,只需要保存所有的區(qū)塊頭部信息即可進行支付驗證的技術。
優(yōu)勢:
該技術可以大大節(jié)省區(qū)塊鏈支付驗證用戶的存儲空間,減輕用戶存儲負擔,降低區(qū)塊鏈未來交易量劇增而給用戶帶來的壓力。以比特幣系統(tǒng)為例,節(jié)點只需保存所有區(qū)塊頭信息,即可進行交易支付驗證。節(jié)點雖然不能獨立驗證交易,但能夠從區(qū)塊鏈其他節(jié)點獲取交易驗證的必要信息,從而完成交易支付驗證,同時還可以得到整個區(qū)塊鏈網(wǎng)絡對交易的確認數(shù)。
要理解SPV的概念,首先需要理解如下兩類概念的區(qū)別:
一是SPV與輕錢包的區(qū)別
輕錢包指的是節(jié)點本地只保存與其自身相關的交易數(shù)據(jù)(尤其是可支配交易數(shù)據(jù)),但并不保存完整區(qū)塊鏈信息的技術。
SPV的目標是驗證某個支付是否真實存在,并得到了多少個確認。比如李笑來收到來自薛蠻子的一個通知,薛蠻子聲稱已經(jīng)從其賬戶中匯款一定數(shù)額的錢給了李笑來。
那么如何快速驗證該支付的真實性,是SPV的工作目標。
輕錢包的目標不僅是支付驗證,而且是用于管理節(jié)點自身的資產(chǎn)收入、支付等信息。比如李笑來使用輕錢包或瘦客戶端管理自身在區(qū)塊鏈的收入信息、支出信息,在本地只保存與李笑來自身相關的交易數(shù)據(jù),尤其是可支配交易數(shù)據(jù)。
輕錢包與SPV的最大區(qū)別是:
輕錢包節(jié)點仍需下載每個新區(qū)塊的全部數(shù)據(jù)并進行解析,獲取并本地存儲與自身相關的交易數(shù)據(jù),只是無須在本地保存全部數(shù)據(jù)而已。
而SPV節(jié)點不需要下載新區(qū)塊的全部數(shù)據(jù),只需要保存區(qū)塊頭部信息即可。雖然輕錢包或瘦客戶端中部分借鑒了SPV的理念,但和SPV是完全不同的。
二是區(qū)塊鏈支付驗證與區(qū)塊鏈交易驗證的區(qū)別
SPV指的是區(qū)塊鏈支付驗證,而不是區(qū)塊鏈交易驗證。這兩種驗證方式存在很大的區(qū)別。
區(qū)塊鏈交易驗證的過程比較復雜,包括賬戶余額驗證、雙重支付判斷等,通常由保存區(qū)塊鏈完整信息的區(qū)塊鏈驗證節(jié)點來完成。而支付驗證的過程比較簡單,只是判斷該筆支付交易是否已經(jīng)得到了區(qū)塊鏈節(jié)點共識驗證,并得到了多少的確認數(shù)即可。
還是以比特幣系統(tǒng)為例,用戶李笑來收到來自薛蠻子的通知,薛蠻子聲稱已經(jīng)從其賬戶中匯款一定數(shù)額的錢給李笑來。
李笑來進行交易驗證的過程如下:首先,李笑來遍歷完整的區(qū)塊鏈賬本,在區(qū)塊鏈賬本的交易中保存了薛蠻子的歷史交易信息(包括薛蠻子的匯款賬戶、薛蠻子的簽名、歷史收款人的地址以及匯款金額信息等),查詢薛蠻子的賬戶,就可以判斷薛蠻子提供的賬戶是否有足夠的余額,如果余額不足則交易驗證失敗。
其次,李笑來要根據(jù)區(qū)塊鏈賬本判斷薛蠻子是否已經(jīng)支出了這個賬戶上的錢給別人,即是否存在雙重支付問題,如果存在則交易驗證失敗;
最后,判斷薛蠻子是否擁有其提供賬戶的支配權,如果判斷失敗則交易驗證失敗。而如果李笑來只是進行支付驗證,則過程簡單得多:通過SPV,李笑來可以進行支付快速驗證,即檢查此項支付交易是否已經(jīng)被收錄存儲于區(qū)塊鏈中,并得到了多少個確認數(shù),就可以判斷支付驗證的合法性。
有朋友私聊我要如何進階的高級小韭菜,個人推薦陳菜根等大咖帶來的《6小時,解碼區(qū)塊鏈》,看了些陳菜根的關于區(qū)塊鏈的文章見解獨到,各位自行決定

