本文爲萬向區塊鏈蜂巢學院第十三期,Parity亞洲區技術總監、區塊鏈和信息安全技術專家賈瑤琪博士的演講內容(整理自現場速記)。賈博士在演講中介紹了Web3.0的定義和應用,並分享了實現Web3.0的技術和手段。web
此外,咱們也爲對攻克和推進Web3.0、跨鏈/平行鏈等技術發展感興趣的創業團隊,提供了多種福利。2月12日,萬向區塊鏈實驗室、新鏈空間、Parity、Web3.0基金會正式宣佈聯合推出「Web3.0 Bootcamp」。Web3.0 Bootcamp是一個以區塊鏈創新爲主的創業訓練營和孵化營,旨在經過資源對接和技術支持,幫助優秀的區塊鏈項目快速成長和發展。Web3.0 Bootcamp將在全球範圍內挑選12支團隊,進行爲期6個月的扶持和幫助,團隊招募現已啓動,將於2020年3月15日截止。參加Web3.0 Bootcamp無需費用,點擊 https://bootcamp.parity.io/zh-cn便可報名。算法
你們好!我是賈瑤琪,Parity亞洲區工程總監,主要負責技術研發和Substrate開發者生態建設。今天我將和你們分享區塊鏈裏難度比較大但頗有意思的兩個話題,一個是可擴展性,另外一個是互操做性。今天講的內容更偏技術一些,我會舉一些例子幫助你們去理解裏面的技術細節。編程
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網絡傳輸。微信
有了這樣的技術棧,才使得web3.0之路變得更加現實。在衆多的Layer1協議中,Polkadot的跨鏈協議擁有不少優點,好比共享安全、互操做性等。Polkadot自己是基於Parity開源的Substrate開發的。Substrate做爲一個通用的區塊鏈開發框架,既能夠用來開發Layer1協議如跨鏈操做,也能夠用來實現Layer2協議如預言機。網絡
基於以上介紹的技術棧實現的早期應用有哪些呢?上圖列出了一些典型的的Web3.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。校對節點蒐集對應平行鏈上的數據,將這些數據傳遞給中繼鏈。中繼鏈會分派不一樣的驗證節點,去驗證平行鏈上的區塊是不是正確的,是否有雙花的攻擊,若是一些區塊有問題,中繼鏈會根據協議沒收對應平行鏈插槽,或者對一些節點進行懲罰。
上圖來自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上構建有意思的聯盟鏈和平行鏈。
今天的分享就到這裏,謝謝你們!