實現 Web 3.0 需要什麼樣的技術?Parity 亞洲區技術總監賈瑤琪認爲,實現區塊鏈的可擴展性與互操作性是 Web 3.0 落地的必由之路。

原文標題:《【萬向區塊鏈蜂巢學院第 13 期】賈瑤琪:Web3.0 落地的必由之路—區塊鏈的可擴展性和互操作性》
演講:賈瑤琪,Parity 亞洲區技術總監、區塊鏈和信息安全技術專家

本文爲萬向區塊鏈蜂巢學院第十三期,Parity 亞洲區技術總監、區塊鏈和信息安全技術專家賈瑤琪博士的演講內容(整理自現場速記)。賈博士在演講中介紹了 Web3.0 的定義和應用,並分享了實現 Web3.0 的技術和手段。

此外,我們也爲對攻克和推動 Web3.0、跨鏈 / 平行鏈等技術發展感興趣的創業團隊,提供了多種福利。2 月 12 日,萬向區塊鏈實驗室、新鏈空間、Parity、Web3.0 基金會正式宣佈聯合推出「Web3.0 Bootcamp」。Web3.0 Bootcamp 是一個以區塊鏈創新爲主的創業訓練營和孵化營,旨在通過資源對接和技術支持,幫助優秀的區塊鏈項目快速成長和發展。Web3.0 Bootcamp 將在全球範圍內挑選 12 支團隊,進行爲期 6 個月的扶持和幫助,團隊招募現已啓動,將於 2020 年 3 月 15 日截止。


賈瑤琪:區塊鏈可擴展性與互操作性是 Web 3.0 落地必由之路活動現場

大家好!我是賈瑤琪,Parity 亞洲區工程總監,主要負責技術研發和 Substrate 開發者生態建設。今天我將和大家分享區塊鏈裏難度比較大但很有意思的兩個話題,一個是可擴展性,另一個是互操作性。今天講的內容更偏技術一些,我會舉一些例子幫助大家去理解裏面的技術細節。

Web3.0 定義和應用

賈瑤琪:區塊鏈可擴展性與互操作性是 Web 3.0 落地必由之路

Web3.0 是目前一個比較熱門的概念,許多從事區塊鏈行業的人也會認爲自己開發的應用是面向 Web3.0 的。究竟什麼是 Web3.0 呢?Web3.0 有很多不同的定義,上圖採納了其中的一個。Web1.0 時代,網頁是隻讀的,用戶只能蒐集信息,瀏覽信息。Web2.0 時代是社交網絡的時代,像臉書、推特、人人、新浪、微信,以及最新的快手、抖音等等。作爲用戶的我們不僅可以瀏覽,還可以自己創建內容並上傳到網上。Web3.0 更往前一步,除了可以發佈內容,未來可以去做更多去中介化的事情。這樣就不得不提到其中需要的一些方法,包括一些理念。

Web2.0 時代數據被大公司控制,像谷歌、臉書以及亞馬遜。當你使用他們的服務的時候,協議中寫明可以免責使用你的數據。雖然谷歌早期的 slogan 是 don’t do evil, 但是有時候卻把自己的數據提供給第三方。在 Web 3.0 的時代,我們不需要他們保證 don’t do evil,而是通過代碼使他們 can’t do evil。

Web3.0 時代,爲了實現願景,需要什麼樣的技術呢?區塊鏈是一個基礎。區塊鏈可以提供的特性,一是不可篡改,二是公開透明,三是點對點的網絡。

再具體到一些細節如 Web3.0 技術棧,簡單的可以劃分爲這幾層,最上層是客戶端,比如去中心化的瀏覽器。在這之下包含了一些協議支持的開發工具,對應 API 和特定編程語言。臉書的 Libra 有自己的編程語言 Move,以太坊也有自己的編程語言 Solidity。再下一層是 Layer2 的協議,比如說 Governance、State channels 等。一個區塊鏈應用不能隨意獲取互聯網上的信息,比如說想看天氣預報,區塊鏈不能直接提供這樣的數據,這裏我們就需要 Layer2 協議棧中預言機協議,通過協議本身預言機機制獲取互聯網上的信息放在區塊鏈上。Layer1 協議,就是廣爲人知的區塊鏈底層協議,比特幣、以太坊等各種各樣的公鏈,聯盟鏈都採用了類似的底層協議,它提供了支撐整個 Web3.0 願景的基礎。再往下是網絡層,如 P2P 網絡傳輸。

賈瑤琪:區塊鏈可擴展性與互操作性是 Web 3.0 落地必由之路

有了這樣的技術棧,才使得 web3.0 之路變得更加現實。在衆多的 Layer1 協議中,Polkadot 的跨鏈協議擁有很多優勢,比如共享安全、互操作性等。Polkadot 本身是基於 Parity 開源的 Substrate 開發的。Substrate 作爲一個通用的區塊鏈開發框架,既可以用來開發 Layer1 協議如跨鏈操作,也可以用來實現 Layer2 協議如預言機。

基於以上介紹的技術棧實現的早期應用有哪些呢?上圖列出了一些典型的的 Web3.0 應用。除了大家熟悉的公鏈系統外,還有一些網絡協議層的項目,更多的位於應用層,例如去中心的金融服務如借貸。但對於非區塊鏈領域的用戶,有沒有真正的主流應用呢?目前其實沒有。是什麼導致現在沒有主流的應用呢?在這裏舉幾個例子進行解釋。

賈瑤琪:區塊鏈可擴展性與互操作性是 Web 3.0 落地必由之路

案例一,以太小怪獸。這是一兩年前在以太坊上特別流行的遊戲應用。它的方法跟電子怪獸一樣,你去購買這樣一個怪獸去跟其它的怪獸進行打鬥,如果贏的話可以升級。遊戲在初期很火爆,但是後來發現這個遊戲太花錢了。如果把一個小怪獸升到四級要花 15 美金的交易費,一直支撐他打怪獸或者進行訓練。

案例二,以太貓。一兩年前比較火爆,大家可以購買各種各樣的加密貓,兩個加密貓可以再生成一個新的加密貓。最火爆的時候,有的加密貓價值十萬美金。但是也有問題。玩兒的人越多,手續費增加越高,因爲以太坊的吞吐量只有這麼多,如果大家想玩,需要用更高的手續費買到這樣一個加密貓,同時出生費也相應增加。現在加密貓應用已經淡出人們的視線。

總結出來的一個結論是,目前對於區塊鏈行業,由於低吞吐量帶來的高手續費,給開發 DApp 帶來很多功能限制。

可擴展性

無論是學術界還是產業界都致力於解決區塊鏈低吞吐量的問題。其中一個方法是增加區塊大小。如果把區塊大小增加,吞吐量會有一個提升。但是由於帶寬限制,這不是個提升吞吐量的高效(100 倍)解決方案。

方案二,通過鏈下交易。鏈下處理所有交易,將結算部分上鍊。因爲可以使用中心化的服務器處理交易,那麼可以輕鬆實現每秒上千 / 萬筆交易。通過這樣的方式可以有效提高吞吐量。但是也有劣勢,因爲不是所有交易都在鏈上完成,那麼中心化的服務器本身會不會進行一些作弊?透明度是個問題。

方案三,我們不再採用鏈式的數據結構,而是採用圖結構,不同的節點可以生產不同的區塊進行廣播。當一個節點想打包區塊的時候,可以基於過去的區塊,建立一個有向無環圖,再打包分發給其它節點。好處是可以包含多種交易,同時提高吞吐量。在圖結構裏面可能很多交易是有衝突的,對於最終要執行的智能合約是有分歧的,這就是圖結構所遇到的難題。

方案四,代理人機制。參與共識協議的節點越少,跑起來越快,吞吐量越高。只有少量的超級節點參與共識協議可以達到一個高吞吐量,但是容易被大家垢病的是少量的代理節點能否代表整個社區。如果節點越少,這些節點不太喜歡某一些交易或者某一些應用,其實可以拒絕這個應用提交的交易。這就回到了中心化的弊端。

還有,就是分片以及多鏈。這個解決方案代表了一個趨勢,在不損失很多去中心化特性的同時,可以達到比較好的吞吐量。大家看到最新的以太坊 2.0 和新的分片項目,還有一些跨鏈項目,大家會發現這中間的區別已經變得很模糊,很多時候可以把一個分片看成一個同構的鏈。在處理多鏈跨鏈交易的原子性協議和分片協議裏面提到的原子性協議區別不大,有的採用同樣的技術。只不過多鏈技術以及分片技術,有的時候會有一箇中繼鏈或者中繼分片來協調不同的分片或者不同的鏈。但是歸根到底,技術本身其實有很多相似的地方,這裏統一起來進行講解。

分片就是將交易分而治之,從而提高吞吐量。舉個例子,有一千道問題,同時有一百個人解決問題。現在可以分組,一百個人分成十個小組,將一千道問題分給十個小組,每個小組十個人處理一百道問題,根據絕大多數人的答案形成一個共識,那麼我們其實可以保證每個小組正確的解決一百道問題,這樣整個解決時間就從一千減小到一百。未來如果有更多的聽衆,例如一千個,我們可以把一千人分成一百個小組,一百小組解決一千個問題,一個小組只解決十個問題,最終只用解決十個問題的時間把一千個問題都解決了。然而可能會出現一些攻擊情形,假如如果有十個攻擊者,他們合謀分到第一個小組,達成共識的時候不遵循一些原則,例如把一分錢掰成一萬塊人民幣來進行雙花攻擊。如果攻擊者能控制一個分片,產生的攻擊在一些協議裏面其它分片是不能進行阻止的。

如何避免這樣的攻擊呢?

首先,要設立很高的門檻,讓攻擊者不容易加入到網絡中,防止女巫攻擊。一個方法就是工作量證明,需要使用特定的礦機做足夠時間的計算,才能作爲節點提交區塊。第二個方法,權益證明。

一旦有了一百個聽衆(或節點),進行隨機分組可以保證聽衆分到不同的小組。我們需要根據一個什麼樣的隨機數進行分組呢?一種方法是用上一個工作量證明的結果作爲隨機數將大家分到不同的小組。另外一個方法,在權益證明中,使用隨機數生成協議 (如 VRF),讓大家分到不同的分片裏面。

如果已經有了比較合理的分組,且每個分組能保證正常節點佔絕大多數,那麼之後就是如何將上面提到的一千個問題分給不同組。爲了保證不同的分片或者整個系統的數據一致性及有效性,我們需要一個方法來防止同一個交易被不同分片處理多次或者同一個數據被改變多次。常用解決方案是用兩段式提交協議保證數據一致性。

剛剛講到網絡分片,節點可以安全的分到不同的分片或者鏈裏面,之後的交易也可以分到不同的分片裏,然後來進行交易處理,同時保證數據的有效性及一致性。如果做狀態分片例如 ETH2.0,每個分片有自己的數據存儲,不同的分片存儲不同的數據,這樣會有單個分片數據丟失的風險。

比較直觀的解決方法,首先就是通過一些權益獎勵,鼓勵節點長期在線,而且要做大量交易驗證和共識協議來保證不會受到懲罰。如果長期掉線會被移出分片,而且抵押的權益會被系統拿走。當我們有了健壯的分片系統,那麼我們可以整合多個分片或者鏈的吞吐量,從而極大地提升整個系統的吞吐量。

有了分片和多鏈的方法之後,我們更多想的是對於單鏈有哪些方法可以進一步提高它的吞吐量呢?更快的解決方法就是通過更改共識協議。目前比特幣或者以太坊使用中本聰共識協議,節點通過工作量證明,每過一段時間生成一個區塊,並將區塊廣播給其它節點,其它節點看到這個區塊的時候,會選擇擁有最長鏈的區塊來進行確認。中本聰共識協議的優點是去中心化和異步。即使有上萬個節點在網絡裏面,而且有不同的網絡延遲,中本聰共識協議還是可以很好的在全網達成共識。當然缺點就是吞吐量太低。

拜佔廷共識協議 (BFT),是學術界產業界常用的共識協議。簡單來講,比如現在我要去買一張票,我要保證現場一百個人中的絕大多數都知道我要買票,大家都同意我買票。我的做法是廣播給所有人,我要去買票的信息。其他人收到這樣一個消息之後,同意這個信息,再把這個信息廣播出去。當每個人收到 2/3 節點的確認信息之後,再廣播一個自己收到絕大都數人確認的確認信息。當每個人收到 2/3 節點的最終確認信息之後,就確定了全網已經同意並確認買票的這個消息。

拜占庭共識協議的優勢是速度快,如果去實現這樣一個 BFT 控制協議很容易達到超過 1000TPS,而且有絕對的最終性,一旦協議跑完,交易馬上可以確認最終性。

缺點是傳統拜占庭共識協議只能用於不到一百個節點,超過一百個節點,信息交換量太過龐大使得網絡擁塞不能提升吞吐量。與此同時,它不是完全異步的。每個階段都有一個等待時間,例如中間可以等十秒,如果沒到就進行下一個階段。如果長時間協議沒有向前推進,就會進行視圖轉換,切換指揮者重新運行協議。

Polkadot 整合和改進了中本聰共識協議和拜占庭共識協議。它採用了一個混合式的算法, GRANDPA 協議和 BABE 協議。BABE 協議是負責區塊生成,GRANDPA 協議是提供最終性的。BABE 協議和傳統的比特幣、以太坊的協議一樣。每過幾秒鐘選擇一個節點進行出塊,節點出塊以後,進行一個廣播,再過幾秒選第二個節點進行一個出塊,不同的節點也是根據最長鏈原則選擇區塊進行確認。

GRANDPA 算法,它是根據 BFT 進行改進的版本,是非異步的共識協議。BABE 協議生成的區塊,GRANDPA 協議最終會做一個敲定。BABE 協議生成不同長度的鏈,GRANDPA 協議會選擇這裏麪包含最多投票的有效鏈進行確認。以往的區塊鏈裏面,如果進行共識協議,通常是一個塊一個塊進行敲定,但是 Polkadot 是根據不同的鏈進行敲定。比如每過一段時間,生成十個區塊或者二十個區塊,那麼運行 GRANDPA 協議,將二十個區塊直接一次性的確認。這樣 GRANDPA 可以在有限的時間裏確認更多的區塊。

通過以上講解,我們可以看到想要吞吐量高的區塊鏈解決方案,同時擁有比較好的去中心化特性,最好的方法就是選擇高吞吐量的單鏈解決方案加上安全高效的分片或者跨鏈解決方案。

互操作性

除了從可擴展性的角度出發,我們也需要從實際角度出發思考,爲什麼需要互操作性,或者爲什麼需要跨鏈。傳統來講,區塊鏈可以解決信任的問題,如果可拓展性可以被解決,那麼性能的問題也將被解決。互操作性其實是在上面兩個問題被解決的情況下,可以解決更廣泛的信任問題。

目前不同的應用場景有不同的聯盟鏈和公有鏈。有了這些鏈之後,我們需要用互通性才能將有用的數據溝通起來。這裏會涉及到跨鏈或者互操作性的不同方法。未來會看到一個界限極其模糊的區塊鏈系統,就是私有鏈、聯盟鏈、公鏈通過某種方式來進行互聯。

區塊鏈領域的互操作性,爲什麼在傳統的互聯網應用裏不明確提這樣的要求呢?因爲現在的互聯網基礎設施已經把這些功能都提供好了,例如各種各樣的 SDK 和 API。你如果做一個應用想調用微信上面的數據,那麼可以通過微信上面的 SDK 和接口把數據拿下來。如果想做支付,支付寶也有對應的支付通道,寫代碼的時候可以把 API 調用一下就可以做支付了。目前在區塊鏈上無法做到的原因,是由於各種區塊鏈不同的共識協和區塊結構導致了我們的數據目前還是屬於孤島狀態。爲了讓不同的孤島上面的數據進行溝通,我們必須通過互操作性以及跨鏈的系統將不同的區塊鏈連通起來。

互操作性以及跨鏈協議有哪些具體的方式呢?第一種方式就是公證人模式,不同鏈之間有一個公證人。相對比較去中心化的第二種方式就是側鏈模式。通過側鏈的方式,在鏈 B 上面可以驗證鏈 A 上哪些交易被寫到區塊裏,那麼鏈 B 就可以驗證 A 上面的操作並在 B 上面進行對應操作例如轉賬。第三種方式是哈希時間鎖,這是相對一個比較複雜的協議,它是一個集去中心化以及透明交易的資產轉換爲一體的跨鏈操作。簡單來講,如果我做比特幣兌換以太坊的交易,我在比特幣這邊放一個鎖,同時對方也要在以太坊放一個鎖。我把密鑰給他,同樣的密鑰我可以獲得對應的以太坊,同時他可以根據密鑰獲得對應的比特幣。還有一個時間鎖,保證雙方只能在限定時間內去解鎖以太坊和比特幣,否則協議會自動終止,雙方都沒有獲得對方的資產。

剛剛提到的方法都是很好的數字資產跨鏈的解決方案,無論是從效率還是去中心化的角度。如果想做到數據以及邏輯層面上的跨鏈,我們就需要更復雜的系統,例如多鏈系統裏面的中繼鏈。具體到 Polkadot 上,系統使用中繼鏈來協調不同平行鏈的跨鏈操作。根據不同的商業環境,開發者可以使用 Substrate 開發和搭建不同的平行鏈。中繼鏈的驗證節點用於驗證平行鏈區塊的正確性從而保證每條平行鏈具有相同的的安全性,與此同時協調不同平行鏈之間的通信。一些已有的區塊鏈,例如以太坊、比特幣,暫時沒有基於 Substrate 的平行鏈版本。目前的方法是使用橋,將它們橋接到平行鏈當中,再通過中繼鏈與其它鏈進行溝通。

在這樣的框架結構中,最中心的是中繼鏈,它連接不同的平行鏈。剛剛提到橋接鏈,橋接鏈不是直接連到中繼鏈上,而是通過一個橋,先連接到平行鏈,之後通過中繼鏈跟其它鏈進行通信。

每個平行鏈都有中繼鏈的輕節點,用來接收和驗證中繼鏈的消息。同時平行鏈有自己的校對節點稱爲 collator。校對節點蒐集對應平行鏈上的數據,將這些數據傳遞給中繼鏈。中繼鏈會分派不同的驗證節點,去驗證平行鏈上的區塊是否是正確的,是否有雙花的攻擊,如果一些區塊有問題,中繼鏈會根據協議沒收對應平行鏈插槽,或者對一些節點進行懲罰。

賈瑤琪:區塊鏈可擴展性與互操作性是 Web 3.0 落地必由之路

上圖來自 Polkadot 的白皮書,將不同的角色都包含在裏面,包括不同的平行鏈以及平行鏈裏面是怎麼運作的,如處理交易、廣播交易以及最終交易寫成區塊,區塊最後要寫入到中繼鏈裏面等。

如果中繼鏈想要支撐成千上萬個平行鏈,那麼我們如何實現更高的橫向擴展呢?方法就是將二級中繼鏈作爲一個平行鏈接入到中繼鏈裏面,構建出一個更加分散的連接中繼鏈的跨鏈平臺。

目前 Parity 正在開發三個至關重要的功能。第一個是 Cumulus。平行鏈需要一個連接器連接到中繼鏈,這個連接器就是 Cumulus。現在用 Substrate 開發出來的代碼,未來只需要很少的改動,就可以使用 Cumulus 連接到中繼鏈,前提是拿到對應的插槽。

第二個是 XCMP 跨鏈信息交互協議,不同的平行鏈如果想調用或者發送消息給其它的平行鏈,就需要通過這樣一個協議去傳輸。

第三個是 SPREE。講到跨鏈,大家通常默認是資產跨鏈,資產 A 放在鏈 B 上面,做好一點可以做成去中心化的。再好一點就是現在提到的不同的鏈可以通過中繼鏈或者其它的方法將信息發送過去,對方鏈可以執行對應的交易,或者智能合約。但前提是,不同的平行鏈他們是相對比較同態的架構。同構就是不同的平行鏈執行處理交易的邏輯是大致一樣的。鏈 A 是用 EVM 處理智能合約,鏈 B 也是用 EVM 處理交易,那麼鏈 A 發送交易給鏈 B,鏈 B 是可以處理的。如果鏈 A 是 EVM,鏈 B 是 WASM,那麼鏈 B 收到 A 的交易也不知道怎麼處理。SPREE 可以支持跨鏈執行代碼的交互。就是鏈 A 將自己的執行邏輯進行打包,打包以後生成一個可執行的 runtime 通過一些渠道發送給鏈 B,鏈 B 收到後可以去執行鏈 A 的交易。即使鏈 A 和 B 的處理交易的方式不同,因爲 B 收到了 A 的代碼和數據,那麼 B 就可以處理 A 上的交易了。這三個功能都在緊鑼密鼓的進行研發。之後有了這三個協議,我們進行任何的跨鏈交易和數據的處理操作。

在過去兩年間,Substrate 已經有超過 20 萬行代碼,還有很多的社區貢獻者。在第一季度 Substrate 會從 1.0 升級到 2.0 版本,會有更好的性能以及更穩定的組件。同時,目前已經有超過 80 個團隊基於 Substrate/Polkadot 進行開發。歡迎大家共同在 Substrate/Polkadot 上構建有意思的聯盟鏈和平行鏈。

今天的分享就到這裏,謝謝大家!

來源鏈接:mp.weixin.qq.com