如何將簡單支付驗證SPV技術應用在實際生活中
火球財經
懂區塊鏈 更懂你
正文共:3329字
預計閱讀時間3分鐘
支付確認速度慢就慢點吧,大美女臉上長顆痣,那是白璧微瑕。
你去樓下超市買牛肉乾,掃碼付款後,老闆點頭微笑,雙手把牛肉乾捧給你,因為他手機響起一聲溫柔:支付寶到賬15元。
但如果沒聽到這句話,即使看到你手機上付款成功的頁面,老闆也會板起臉來一手按下牛肉乾,一手拚命掐手機,這是幹嘛?
他在驗證這筆支付是否已被確認。
老闆心裡沒底,直到支付寶開口,才敢向你點頭。這是中心化支付系統的確認邏輯:以中心記錄為準。
可如果用去中心化的貨幣支付,你錢包顯示已付款,老闆如何確認已到賬呢?你要知道,他面對的可是一個被不可信節點包圍的世界。
如果他確認不了,你就吃不到牛肉乾。而且,老闆可不想把確認過程弄複雜,比如下載幾百G交易記錄。
所以,在去中心化的貨幣系統里,每次確認支付前都攔著兩排鐵絲網:
一是安全:如何應對惡意節點騙人?
二是便利:便利店老闆不會容忍不便利的事。
看似無解,但中本聰淡淡地說:SPV能。
一、什麼是SPV?
SPV(Simplified Payment Verification,簡單支付驗證):一種即使沒有完整交易記錄,也能便捷、安全地驗證支付的方法。
不用下載全部區塊(幾百G),只需下載全部區塊頭(約40M),就能輕鬆驗證所有支付。真的么?說得像電視購物廣告一樣。
但現在看來是真的,因為比特幣已正常跑了8年多。
區塊頭是區塊的身份信息,內含一個特殊哈希值——默克爾樹根(Merkle Tree Root)。
記賬員(礦工)在記錄時算出每個交易的哈希(紅框):
礦工把區塊內所有交易(約1-2千筆)的哈希值一字排開,讓他們兩兩牽手,每對交易哈希牽手後再算出新哈希(如下圖紅框HA與HB兩個哈希值疊加算出HAB)。礦工驗證、記錄和整理交易的過程稱為「打包」。
默克爾樹
往上疊加哈希值,直到頂點就完成打包過程。疊完就是默克爾樹,樹的頂點就是默克爾樹根。真實的默克爾樹寬很多,因為2,000多筆交易實在沒辦法橫在你手機屏幕前,所以這裡只用16筆交易舉例,你能懂。
默克爾樹根的神奇之處有兩個:第一,作為樹根,它居然可以長到腦門上;第二:僅僅一個哈希值,就蘊含該區塊內所有交易驗證信息。
請注意:是交易驗證信息,而不是交易信息。查詢具體交易信息,你得下載全節點區塊數據;但驗證一筆交易是否被記錄,下載區塊頭數據已足夠,因為有簡單支付驗證(SPV)方法。
那SPV如何驗證交易是否存在呢?
二、SPV的過程
首先明確兩個前提:
第一,每筆交易都有標準格式:輸出地址、輸入地址和交易金額等,所以交易一旦發生,該交易哈希值瞬間產生(假設為HK,圖3綠框)。
第二,如果交易被礦工打包過,擁有全部交易數據的節點(稱為「全節點」:full node)必然有整棵默克爾樹。
所以:
第一步:老闆的錢包軟體把哈希值(Hk)交給臨近的全數據節點去驗證。
第二步:全節點反饋老闆錢包下圖4個藍塊的哈希值。
簡單支付驗證(SPV)的過程
第三步:老闆錢包經過4步哈希計算:
1、Hash(HK,HL)
2、Hash(HIJ,HKL)
3、Hash(HIJKL,HMNOP)
4、Hash(HABCDEFGH,HIJKLMNOP)
即:沿圖3虛線框路徑,老闆的錢包最終得出哈希值HABCDEFGHIJKLMNOP。
最後一步:將HABCDEFGHIJKLMNOP與自己錢包里下載好的默克爾樹根對比,若一致就能確認這筆交易存在。
即使有2048筆交易,最多也只需做11次哈希計算,因為log2(2048)=11。看到公式先別抽搐,這不是高數,而是高中數學,是「2的11次方等於2048」的逆運算表達式。
總之你記得,即使一個區塊中交易再多,也沒什麼了不起的,十來下就能搞定驗證,不信你算算log2(65536)=16。也就是說:就算一個包里有6.5萬筆交易,16次哈希就搞定驗證了。
你還記得么?每次哈希計算只要0.01秒哦,所以很便捷,驗證過程最多耽誤0.2秒。
另外,SPV方法能看到有多少區塊確認過此交易,如果被超過6個區塊確認,則可視為絕對可靠。
所以,電視購物廣告的神奇居然是真的:僅用一個哈希值,就能快速、準確驗證該區塊內的所有交易。
One more thing:區塊頭數據量極小:每個區塊頭僅80個位元組,每年增加4M存儲空間,積累100年也就400M:不過半部小電影。
便利性很贊,但安全問題如何解決。
三、如果出現惡意節點怎麼辦?
這是一個你眼熟的老問題,我們好像每篇文章都能遇到,於是我必須挖空心思變換措辭,因為文章看膩了你就不會繼續學下去。
僅僅80個位元組的默克爾樹根,能快速驗證支付就算了,為什麼還能把惡意節點的攻擊全部擋在外面?
答案簡單到膩:算力上的不可能。
默克爾樹根類似數字簽名:公開、但無法偽造。準確地說,偽造需要極大的算力,你可以把「極大」二字理解為人類現有總算力的一萬億倍,量子計算機登場也然並卵。
可是:
如果全網真的被一個強大的惡意算力控制,那將變得很脆弱。這是比特幣理論上最明顯的軟肋,中本聰在白皮書里坦言:
While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker"s fabricated transactions for as long as the attacker can continue to overpower the network.
網路節點能自行確認交易,攻擊者如果保持算力優勢,SPV方法會被攻擊者的虛假交易欺騙。
你一定能想像中本聰寫這句話的時候表情是憂鬱的,如果去中心化系統被惡意節點侵佔,SPV會像傻子一樣不堪一騙,但他給出一個解決方案:
One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user"s software to download the full block and alerted transactions to confirm the inconsistency.
可行的策略就是,一旦節點發現非法區塊,就立刻警報,收到警報的用戶立刻開始下載完整交易信息和被警告有問題的交易,以判定信息的不一致。
想想吧,一旦發現惡意節點,你的手機錢包會馬上從其他正常節點下載數據,自保防騙,這是幫助比特幣維持生命的應激反應,就像我們遇到危險、驚嚇或其他刺激會肌肉充血一樣,正是這樣的設計幫助我們的基因綿延至今。
比特幣以此立命,至今安生。
結語
比特幣有個缺陷:確認速度慢——10分鐘左右產生1個區塊,6個區塊確認後才能確保交易安全。
如果你肚子餓、卻用比特幣買牛肉乾,那解決不了問題,因為交易確認需要一小時,如果遇到交易擁堵,七八天都未必能確認。
解決方案是提高手續費,就像滴滴在高峰期提價叫車一樣,手續費是驅動礦工幫你記賬的動力。但在每筆交易手續費已達等值百元人民幣的今天,拿比特幣去超市買一包15塊錢的牛肉乾只能顯得你很牛。
比特幣遠不完美,也每天遭受非議,但這絲毫不影響它在人們心中的地位和它的價格一起向上爬。因為它用一串前人從未想過的理念,在人類歷史上首次用技術手段保證價值在互聯網上自由流動,SPV功不可沒。
如果沒有SPV,去中心化網路不可能普及。畢竟有多少人喜歡沒事背個全節點完整數據包出門溜達呢?
所以,確認速度慢就慢點吧,大美女臉上長顆痣,那是白璧微瑕。
END
※區塊鏈正在重建公眾對非營利組織的信任
※Mytoken—去中心化的深度價值投資工具
TAG:火球財經 |