區塊鏈無法擴展:至少現在不能,但有希望(二)區塊鏈
區塊鏈要想構建Dapp生態,要想走向主流人群,優先要解決擴展性問題。但區塊鏈是去中心化的系統,任何節點都可以自由加入,要在多樣化的節點快速達成共識,是非常困難的事情。那么,區塊鏈的真的無法擴展了嗎?本文作者PreethiKasireddy認為,雖然現在不能,但未來有希望。
每個比特幣交易包含:
輸入
發送者之前的交易詳情 發送者的私鑰(即scriptSig)以便驗證發送者是否有足夠的余額(基于之前的交易歷史)來完成這筆交易
輸出
需要發送的金額 接收者的公開地址(即ScriptPubKey)
在這些元素中,數字簽名(scriptSig)體積最大,占用交易60–70%的空間大小。然而,簽名只有在驗證階段才需要。
隔離見證(通常被稱為Segwit)是一種隔離(即“segregate”)交易簽名(即“witnesses”)與其他交易數據的解決方案。把簽名從輸入中剝離,移動到交易末尾的一個結構中。
此外,使用SegWit,簽名被移動到交易數據中的一個新的“witness”字段中,這使得我們可以改變區塊大小的計算方式。區塊大小限制不再通過字節數來衡量。取而代之的是,根據它們對節點資源的需求,區塊和交易被賦予一種稱為“權重”的新的度量方式。
特別的,隔離見證(簽名)的每個字節的權重為1,區塊中其他字節的權重為4,每個區塊允許的最大權重是4百萬,和目前的最大區塊大小相比,包含SegWit交易的區塊可以容納更多的數據。這將有效地把1MB大小限制增大到接近4MB,可以增加~70%的交易。
SegWit也可以解決擴展性之外的其他問題,比如交易的延展性和增強的安全性(由于和擴展性無關,我在這里就不繼續深入了)
方案 #2:2MB區塊大小(僅針對比特幣)
比特幣社區中一方(用戶)強烈支持SegWit,而另外一方(礦工)則更希望通過硬分叉把區塊大小限制從1MB增加到2MB(注意:要修改1MB的區塊大小限制必須進行硬分叉)。
基本想法很簡單:通過增加區塊大小,更多的交易可以被打包進區塊,網絡就可以在每秒處理更多的交易。
增加區塊大小的計劃已經成為比特幣社區長期激烈爭論的話題,從2015年初開始就已經獲得了日益增長的關注,因為從那時起區塊大小就已經開始逼近目前1MB的硬限制了。
方案 #3: 鏈下狀態通道
狀態通道本質上是一種把區塊鏈的鏈上交互傳導到鏈下的機制。這是通過一種密碼學安全的方式完成的,不會增加每個參與者的風險,同時可以極大改善消耗和速度。我個人相信狀態通道將會成為區塊鏈技術擴展到更高層應用過程中的關鍵組成部分。
狀態通過工作流程如下:
1. 區塊鏈的部分狀態通過多重簽名或者某種智能合約進行鎖定,更新狀態的唯一方式是一組特定參與者全部同意。
2. 參與者們通過構建或者簽名交易在他們內部更改狀態,但不提交到區塊鏈上。每一次新的更改覆蓋之前的更改。
3. 在之后的某個點上,參與者們把狀態提交回區塊鏈上,關閉狀態通道并解鎖狀態。
第1和第3步包含區塊鏈操作,會被發布到網絡上,支付費用并等待確認。然而,第2步完全不需要區塊鏈參與。
狀態通道可以包含無限次數的更新,并可以永遠保持開放狀態。從這個意義上講,區塊鏈純粹作為一個結算層來處理一系列交互產生的最終交易以便完成最終結算,從而大大減輕了底層區塊鏈的負擔。
(在這個過程中的任意一個點上,任何參與者都可以向合約發送一筆交易來關閉通道并啟動結算流程。這啟動了一個時間窗口允許參與者們提交交易,序列號最高的交易會被處理。如果某個參與者離開或者試圖欺詐,另一個參與者可以在任何時間把最新的交易發布到區塊鏈上以形成最終狀態,前提是所有參與者都完全同意該狀態。)
使用狀態通道不僅可以增加交易容量,還提供了另外兩個非常重要的好處:提升速度、降低費用。因為大部分交易都是在鏈下發生的,兩方之間的更新不需要被網絡處理和驗證,因而支付可以被瞬間處理。
其次,支付費用也會降低。因為只有一小部分鏈上交易用于結算狀態通道,大部分交易是在鏈下完成的,無需付費。
這套機制有很多不同的實現方式。例如,閃電網絡是一種通過智能合約實現用戶網絡即時和可擴展支付的去中心化網絡。剛開始閃電網絡是為比特幣創建的,但是似乎現在他們也考慮了跨鏈交易。
雷電網絡是以太坊上的閃電網絡。雷電網絡也是利用鏈下狀態網絡在以太坊上支持可擴展的即時交易。
方案 #4: 分片
區塊鏈世界中的分片和傳統軟件系統中的數據庫分片類似。在傳統數據庫中,分片是數據庫中數據的一個橫向分割,每個分片存儲在一個單獨的數據庫服務器實體上。這樣可以把負載分散到不同的服務器上。
類似的,通過區塊鏈分片,區塊鏈的總狀態被分散到不同的分片中,狀態的各個部分被存儲到網絡中的不同節點上。
(一個簡單的分片)
(區塊鏈分片的頂層框圖)
網絡上發生的交易會被轉發到不同的節點,取決于它們能影響哪些分片。每個分片只處理狀態的一小部分,分片之間是并行處理的。為了能在分片之間進行通信,還需要一些消息傳遞機制。
實現消息傳遞有各種各樣的方式。在以太坊中采用的是一種“收據”模型:當執行某個分片中的交易時,可以改變它所在的分片的狀態,同時產生“收據”,這些收據被存儲在某種分布式共享內存中,并且之后可以被其他分片查看(但不能修改)。
以太坊的收據模型
以太坊的收據模型
總體來說,區塊鏈分片要求我們創建一個網絡,其中每個節點只處理所有交易中的一小部分,并且要仍然維持高安全性...至少可以說這是一個艱巨的挑戰。
為什么?
首先,區塊鏈協議假設網絡中的所有節點互相不信任彼此。其次,盡管交易是在不同計算機上處理的,最終需要在一個公共狀態上達成一致。
由于節點之間不信任彼此,在分片A上處理交易的節點僅僅通知分片B上處理交易的節點發生了一筆交易是不夠的,還必須通過某種方式向它們證明。
另外,由于分片的目的不是讓每個節點驗證每筆交易,我們需要找出一種機制來以安全的方式決定哪個節點驗證哪個分片,并且不讓那些在系統中擁有大量算力的攻擊者有可乘之機來干擾網絡。
分片實現困難的另一個原因是區塊鏈上執行的交易可能會依賴之前狀態的任意部分,這會對并行計算形成挑戰。此外,使用并行化,需要一種傻瓜式的證明方法來減輕競態條件或者類似的東西。
關于如何在以太坊上實現分片還有很多技術上引人入勝的東西 - 特別的,如何利用“加密貨幣經濟激勵”來驅動系統中的節點不發生欺詐(在這種情況下,保證該節點向其他節點傳遞有效信息) - 這是我希望在后面的文章中進行探討的內容。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。