隔離見證是什麼?

隔離見證是什麼

隔離見證,即 Segregated Witness(簡稱SegWit),由Pieter Wuille(比特幣核心開發人員、Blockstream聯合創始人)在2015年12月首次提出。見證(Witness),在比特幣裡指的是對交易合法性的驗證。舉個例子,Alice發起一筆交易,給Bob支付1個BTC,該筆交易信息由三部分組成: a.元數據:交易信息格式的版本號;交易鎖定時間等 b.付款人:Alice用於付款的BTC來源,一般來源於某歷史區塊上某筆交易的輸出(詳 見UTXO);證明Alice擁有該筆交易的輸出,即見證(Witness)數據 c.收款人:Bob的收款地址和金額

可見,見證數據包含在交易信息裡頭。

隔離(Segregated),指的就是把見證數據從交易信息裡抽離出來,單獨存放。

隔離見證是什麼?

隔離見證的來源

為什麼要把見證數據隔離出來呢,或者說這樣做有什麼好處呢?這就涉及到比特幣裡的另一個概念--擴容。擴容,指的是增加比特幣每秒的交易量。比特幣每10分鐘左右挖出一個大小小於1MB的區塊,每筆交易平均250字節,即每個區塊最多放進4000筆交易,這樣算下來,比特幣每秒處理的交易數不超過7個。對比其它交易平臺,PayPal每秒數百筆、Visa每秒數千筆、支付寶能達到每秒數萬筆,可見比特幣是一個非常低效的交易系統。如果使用人數增多,則會造成比特幣的擁堵。

隔離見證是什麼?

如何解決擁堵呢?

有兩種方式,一是簡單的增加每個區塊的大小,比如將區塊大小增加到8M;另一種就是隔離見證+閃電網絡啦。

擴容方案之一:增加區塊大小

如果將區塊大小增至8M,簡單思考一下,比特幣每秒處理的交易數似乎也增加到原來的8倍,即56筆每秒。如果每個區塊1個GB,比特幣每秒將處理7000筆交易,擁堵問題不就解決了嗎?中本聰可沒那麼傻,之所以將區塊大小設定為1M,是有重要原因的。比特幣白皮書的標題為:一種點對點的電子現金系統,相比於傳統貨幣系統,比特幣的核心價值在於實現了一種去中心而且安全的貨幣。如果區塊的大小過大,則會危害到比特幣的安全模型,作為一種貨幣應用,這顯然是不能令人接受的。

為什麼這麼說呢?

POW機制的安全基礎,是假設一個人的算力無法超過全網算力的50%。如果增大區塊,可能一個人的算力超過全網的1/3,就危害到了比特幣的安全。舉個例子,為了達到每秒7000筆的交易速度,我們把區塊的大小增加到1GB: a.假設1GB的區塊從產生到廣播到全網節點需要10分鐘; b.有一個叫Byzantium的節點,擁有的算力超過全網1/3; c.當Byzantium節點挖出一個新區塊時,假設該時間點為0秒,那麼Byzantium節點 獲取新區塊的時間點為0秒;根據假設a,全網最後一個獲取新區塊的節點的獲取時間 為600秒,如果獲取速度是線性的,全網其它節點獲取新區塊的平均時間是300秒。 d.因為在新區塊上挖坑的算力才是有效算力;根據c,全網其它節點的有效算力只剩下 一半,也就是說,全網其它節點的有效算力小於1/3; e.根據b和d,這種情況下,Byzantium節點算力超過全網其它節點算力,如果Byzantium 節點在自己挖出的區塊上繼續挖礦且不公佈廣播,則Byzantium節點上沒公佈的區塊 長度,會大於全網區塊長度;一旦Byzantium節點公佈這些區塊,則全網其它節點挖 出的區塊全部作廢。

可見,區塊設計過大,會威脅到比特幣的安全。換句話說,比特幣區塊的大小是有上限的,《On Scaling Decentralized Blockchain》這篇論文指出,在目前的互聯網環境下,如果十分鐘產生一個區塊,區塊的大小最好不能超過4MB。這樣看來,增加區塊大小這種擴容方案,效果就十分有限了。

隔離見證是什麼?

擴容方案之二:隔離見證+閃電網絡

隔離見證為什麼能擴容呢?先來看看比特幣區塊的數據結構:

每筆交易平均250字節,見證部分的數據約為150字節,其餘部分100字節。如果將見證數據隔離出來,原來1MB空間的區塊可以放下10000筆交易(原來為4000筆),交易速度約提升2.5倍。隔離出來的見證數據放到了區塊末尾,大小為1.5到2MB,所以隔離見證的整個區塊大小為2.5到3MB左右。

可見,隔離見證也是通過增加區塊大小來達到擴容的效果。這和上一節講到的直接增加區塊大小相比,有什麼新的意義呢?

主要有三方面的意義: a.解決了交易延展性(Transaction Malleability)問題; b.為閃電網絡鋪路 c.其它優化

a.交易延展性,指的是一筆交易發起後,交易數據中的見證部分可以被篡改,而且篡改後的交易仍然有效。具體的說,見證的實現依靠一種簽名算法,比如橢圓曲線數字簽名算法(ECDSA),這種算法下簽名(r,s)和簽名(r,-s(mod n))都是有效的,所以可以把一種有效見證數據篡改成另一種有效見證數據,該筆交易仍然是有效的。每筆交易有個交易ID,交易ID是對整個交易數據的Hash值,為該筆交易的唯一標識。通過對見證數據的篡改,可以改變Hash值,從而改變該筆交易的唯一標識。

隔離見證通過把見證數據隔離移出,生成交易ID時Hash的數據不包括見證數據,因此也就無法改變交易ID值。

b.從第3節可知,通過增加區塊大小無法從根本上解決比特幣的擴容問題。閃電網絡通過在比特幣基礎上,構建第二層網絡,將交易轉移到鏈下的方式,來減輕公鏈負擔,以實現擴容的效果。目前看來,在公鏈基礎上構建協議層網絡,是解決公鏈擁堵問題最合適也是最有前景的方案,有關技術細節在此就不做展開了。感興趣的同學,可以關注閃電網絡、Litex等協議層項目。

隔離見證所帶來的改變,為閃電網絡的實現提供了一些便利,主要有3點: a.交易延展性的解決,讓交易無法被幹擾,閃電網絡白皮書中提到的“人質狀態” (hostage situation),得以避免; b.在通道的生命週期上,隔離見證讓閃電網絡的通道永久開啟更方便實現; c.雖然從理論上系統是安全的,但用戶還是要查看區塊鏈中的交易是否廣播撤回,防止 交易方的欺詐行為,隔離見證使得這項活動可以外包出去,只要給服務器傳送少量信息, 就能代替你完成這一過程。

c.此外,隔離見證給比特幣帶來了一些細節優化,比如增加了腳本版本(Script Version),使得腳本語言可以以一種向後兼容的方式來發展;簽名算法複雜度有了較大優化等等。

隔離見證是什麼?

關於分叉

隔離見證通過巧妙的設計,引入更少破壞性的改變,使得老的非隔離見證系統仍然能夠驗證新的區塊。對於老的節點,一個隔離見證的輸出看起來像一個任何人都能花費的輸出,該輸出可以被一個空的簽名見證,所以一個交易裡面沒有簽名(簽名被隔離)也可以通過老節點的驗證。這種能向後兼容的變化,被稱作軟分叉。總的來說,隔離見證的主要功勞在於解決了交易延展性問題,而且為協議層網絡提供了一個友好的接口,這是非常重要的。這項更新使得,最有前景的、通過鏈下從根本上解決比特幣擁堵問題的方案,得以更快更好的實現。

隔離見證是什麼?


分享到:


相關文章: