Vitalik:區塊鏈基礎層和二層網路的升級之道
在區塊鏈的設計當中,最為關鍵的權衡之一是將更多的功能構建到基礎區塊鏈層(layer 1)?還是將這些功能構建於區塊鏈基礎層之上的二層網路( layer 2)協議當中(在不改變區塊鏈本身的情況下進行建立及修改)。迄今為止,這種權衡在區塊鏈擴容爭論中體現的凌厲盡致,其中一方支援區塊擴容(和分片),而另一方則支援二層解決方案(例如Plasma以及狀態通道),此外在區塊鏈治理問題中也有體現這種權衡,是通過the DAO式的分叉或 ofollow,noindex" target="_blank">EIP 867 這類方案解決丟失及盜竊恢復問題?還是通過 可逆以太(RETH) 這類二層解決方案來解決?那麼,哪種方法最終會是更好的?那些瞭解我的人,或者把我視作 是一名骯髒的中間派 的人,他們知道,我會不可避免地用“兩者兼而有之”作為解答。然而,從長遠來看,我確實認為,隨著區塊鏈越來越成熟,區塊鏈基礎層(layer 1)必然會趨於穩定,而二層網路( layer 2)將承擔越來越多的持續創新及改變負擔。
原因有多個。首先,第一層(layer 1)解決方案要求在基礎協議層進行持續的協議更改,而基礎層協議變更就需要治理,而從長遠來看,高度“活躍”的區塊鏈治理會造成持續的政治不確定性或崩潰,導致區塊鏈趨於中心化。
舉個另一個領域的例子,請參考莫西·馬琳斯巴克(Moxie Marlinspike)為 通訊中心化和非聯合性質 所做的辯護。人們可以從這些爭論中受益。引用:
“我們早期在使用通訊時所面臨的一個爭議問題,是將它作為非聯合服務(unfederated service)來構建。我們所開發的任何協議,都不需要中心化,我們完全有可能構建基於一個基於聯合通訊協議( federated Signal Protocol)的通訊應用,但我不再相信有可能建立一個有競爭力的聯合通訊應用。”
還有:
他們的反駁是:“這是愚蠢的,如果沒有第三方定義的互操作協議,網際網路能走多遠呢?”我思考過這個問題,自從我們有了第一個生產版本的IP協議,而在過去的20年當中,我們一直試圖轉換到第二個版本的IP 協議 ,但取得的成功卻是有限的。我們在1997年迎來了1.1版本的HTTP,而其至今依舊未曾發生變動。同樣的,SMTP、IRC、DNS、XMPP這類協議都停留在上世紀90年代末的狀態。回答他的問題,網際網路走了多遠?我的答案是它走到了90年代末。
網際網路驅使我們走得很遠,但不可否認的是,一旦讓你的協議“結成聯邦”,就很難做出改變。而現在,對於應用層面而言,在生態系統不斷運轉的世界裡,靜止的東西是不太好的… 只要形成聯邦就意味著停滯,而去中心化則意味著運動,而在今天對軟體運動要求很高的環境下,聯合協議就會存在著問題。
而在此刻以及今後的短中期,似乎很清楚的是,去中心化的應用平臺、密碼貨幣支付、身份系統、信譽系統、去中心化交易所機制、拍賣、隱私解決方案、支援隱私解決方案的程式語言,以及其他大多數可在區塊鏈上完成的有趣應用,這些領域將繼續有重大和持續的創新。去中心化應用平臺通常需要交易確認時間的持續減少、支付需快速確認、低交易費、隱私以及很多其他內建特性,交易所以多種形式及規模出現,包括 鏈上的自動做市商 、 頻繁批量拍賣 、 組合拍賣 等等。
因此,將以上任何一個應用構建於區塊鏈基礎層將是一個壞主意,因為這樣會製造出大量的治理問題,平臺將不得不面對更多關於新技術改進實施及協調問題的討論。由於同樣的原因,聯合通訊應用(federated messengers)在沒有實現重中心化的情況下,很難離開地面,區塊鏈還是需要在採用積極治理和帶來危險、落後於新出現的替代方案之間,做出平衡選擇。
甚至以太坊有限的特定應用功能、預編譯,也看到了一些這樣的效應。不到一年前,以太坊採用了拜占庭硬分叉,包括使用 alt-bn128 曲線來促進環簽名、ZK-SNARK和其他應用。現在,零幣(Zcash)和其他區塊鏈正朝著 BLS-12-381 (譯者注:新的zk-SNARK橢圓曲線構造)邁進,而以太坊需再次分叉才能趕上步伐。部分原因是為了避免將來出現類似的問題,以太坊社群正尋求將EVM虛擬機器升級至 E-WASM ,這種新虛擬機器的效率會更高,其不太需要結合專用預編譯程式。
而第二種支援二層網路(layer 2)解決方案的論點在於,其不依賴於預期技術的發展速度:有時會存在不可避免的權衡,世上並沒有單一的全域性最優解決方案。這在以太坊 1.0型別的區塊鏈中不太容易看到,其中有一些模型是相當通用的(例如,以太坊的賬戶模型就是一個)。而在分片區塊鏈( sharded blockchain)身上,在以太坊平臺上不存在的一類問題出現了:如何進行跨分片交易(cross-shard transaction)?也就是說,假設區塊鏈狀態具有區域A和區域B,其中很少或沒有節點在處理A和B。系統該如何處理影響A和B的交易?
當前的答案 涉及非同步跨分片通訊,這對於轉移資產和其他一些應用而言已經足夠了,但對於很多其他應用來說卻是不夠的。同步操作(例如,解決火車和旅館問題《 train and hotel problem 》 )可附加在yanking跨分片( cross-shard yanking )上,但是,這需要經過多輪跨分片互動操作,從而它會導致顯著的延遲問題。當然,我們可以用 同步執行方案 解決這些問題,但是這裡需要幾類權衡:
- 系統不能為每個區塊的同一賬戶處理超過1筆交易;
- 交易必須預先宣告其影響的分片及地址。
- 如果交易僅在部分分片當中被接受,其並不影響其他人,那麼任何給定的交易,失敗的風險都很高(並且仍需要支付費用!)。
似乎很有可能會開發出更好的方案,但同時這些方案也將更復雜,並且很有可能具有以上方案所沒有的侷限性。已知的案例,很好地證明了完美是無法實現的。至少, 阿姆德爾定律 (Amdahl’s law )嚴格限制了一些應用及一些型別的通過並行化處理實現更多tps的互動能力。
那我們如何創造一個環境,其可被更好的方案所測試和部署?Justin Drake給出了一個答案: 二層網路執行引擎(layer 2 execution engines) 。使用者將能夠將資產傳送到一個“橋接合約”(bridge contract)當中,該合約將使用一些間接技術(例如 互動驗證 或 ZK-SNARKs )來計算狀態根,其使用的是一些替代的區塊鏈處理規則集(把它認為是二層網路方案的‘元協議’,比如建立在比特幣之上的 Mastercoin/OMNI 協議以及 Counterparty 協議) ,而且,當且僅當替代規則集生成撤回請求時,該合約才會處理撤回請求。
注意,任何人都可以在任何時候建立 二層網路 執行引擎,不同的使用者可以使用不同的執行引擎,並且可以相當快地從一個執行引擎切換到任何其他的執行引擎,或者切換回基礎層協議。基礎層區塊鏈不必一種最優的智慧合約處理引擎,它只需要成為一個具有圖靈完備執行規則的資料可用性層,那麼任何二層的橋接合約都可以建立在其頂部,並且允許基本操作在分片之間傳遞狀態(實際上,只要ETH傳輸在跨分片之間是可替代就足夠了,但要允許跨分片的呼叫,我們還需要少許的努力,所以我們不妨也支援它們,),而超過這一應用的複雜性,是我們所不需要的。
從長遠來看,第一層網路不會在所有這些改進上積極競爭,它只是提供了一個穩定的平臺,能夠讓二層創新在其頂部發生。那這是否意味著,分片就是一個壞主意?我們應該讓區塊鏈大小和狀態維持在小的狀態,甚至10年曆史的舊式電腦也可以處理每個人的交易?絕對不是這樣的,即使執行引擎是部分或完全移至第二層網路的東西,在資料排序和可用性上達成共識仍然是高度通用和必要的。你需要明白的是,在第一層網路沒有實現可擴充套件資料可用性共識(scalable data availability consensus)的情況下,第二層網路的執行引擎會是困難的,請參閱Plasma研究中遇到的 困難 ,這種困難也自然會延伸到各類通用型區塊鏈的身上。例如,如果人們希望將每秒100 MB的資料放到一個需要對可用性達成一致的區塊鏈系統當中,那麼,我們就需要在每秒100兆位元組資料的可用性問題上達成共識。
此外,第一層網路在減少延遲方面仍然有改進的地方;如果第一層網路很慢,實現極低延遲的唯一策略就是 狀態通道 ,而狀態通道通常具有很高的資本要求,並且它們很難推廣。由於狀態通道僅需要一條網路資訊,所以其在延遲方面總是優於第一層區塊鏈,但是在狀態通道無法正常工作的情況下,第一層區塊鏈仍然可實現比今天更低的延遲。
因此,在另一個極端位置,“區塊鏈基礎層可實現絕對最小化,並且不需要使用一個準圖靈完備的執行引擎或可擴充套件性來超越單個節點的容量”,這種觀點也是明顯錯誤的;對於基礎層來說,其需要一定程度的複雜性以使其足夠強大,從而能夠在基礎層上構建應用,而目前我們並沒有達到這一程度。額外的複雜性是需要的,當然我們也應該非常仔細地選擇,以確保它是最大限度的通用目的,而不是針對特定的應用或技術(由於使用者失去興趣,或更好替代品的出現,這些應用或技術將在兩年內過時)。
而在未來,甚至基礎層也將繼續進行一些升級,特別是當新技術(例如STARKs達到更高的成熟度)允許它們實現更強大的效能時(儘管開發人員今天可謹慎地使基礎層平臺,最大限度地相容這些潛在的改進)。因此,隨著時間的推移,儘管二層網路方案將繼續在創新中佔據越來越大的份額,在基層和二層網路(可擴充套件性、隱私性以及通用性)改進之間的平衡仍然是需要的。
2018.08.29日更新:Justin Drake向我指出了,為什麼一些特性最好在基礎層網路上實現:這些特性是公開的,因此不能有效或可靠地使用特定功能使用費,因此,它們最好是由發行人支付的補貼或燃燒的交易費用來支付。其中一個可能的例子,就是安全隨機數的生成。
發文時比特幣價格 ¥43359.62