本文轉載於公眾號:QTech
此文是Polkadot系列文章開篇之作,透過介紹Polkadot的角色、架構和交易流程來讓大家對Polkadot有個初步的認識。其中涉及到的技術點、比如混合共識、有效性驗證、XCMP協議等等,再由後面Polkadot系列文章進行詳細剖析,敬請期待。
文末福利:跨鏈公開課實戰演練來了!
Polkadot
提到Polkadot,大家首先想到的可能就是這是個很火的跨鏈專案,網上也把它和Cosmos稱為跨鏈”雙雄“。但其實如果把Polkadot僅僅定位為一個跨鏈專案,那說明對Polkadot的瞭解還不夠。
Polkadot更準確的解釋應該是個可擴充套件的異構多鏈區塊鏈,跨鏈只是它系統的一個功能而已。Polkadot的複雜度遠遠大於目前常見的跨鏈專案,其不僅僅考慮了跨鏈所具備的基本功能,還保證了跨鏈交易的有效性。
除此之外,還透過共享安全性技術保證了平行鏈的安全性,這點是目前大多數同類專案所沒有具備的功能。
四類角色
為了更好解釋Polkadot的整體架構,我們先來解釋下Polkadot中的四種角色:收集人、驗證人、提名人和釣魚人,他們的具體關係如圖1所示:
圖1
◆收集人
平行鏈的全節點,負責進行平行鏈中交易的收集和區塊的打包,注意這裡打包區塊只是候選區塊,並不代表確認後的區塊,平行鏈的區塊確認由中繼鏈負責。
◆驗證人
中繼鏈的全節點,中繼鏈會在驗證人池中透過隨機分組把驗證人指定給不同的平行鏈。驗證人會接受來自收集人打包的區塊並進行有效性驗證,然後結合共識演算法對收集人提交的區塊進行確認。
◆提名人
Polkadot中數字貨幣DOT的持有人,它會選擇自己所信任的驗證人進行DOT質押,然後分享驗證人的收益。至於為什麼需要提名人這樣的角色,就需要了解Polkadot的經濟模型了,這裡就不做過多講解。
◆釣魚人
它的作用主要是對系統進行監管,透過舉報非法交易來賺取獎金。雖然驗證人透過隨機分配來服務於不同的平行鏈,從某種角度上看,提高了驗證人聯合做惡的成本,但還需要釣魚人這樣的角色來監管驗證人的行為。
整體架構
圖2
有了上面對Polkadot四類角色的定義解釋,下面我們進行整體架構的介紹:
如圖2所示,Polkadot是一種樹狀網路結構,中繼鏈可以看作是樹根,然後外接一定數量的平行鏈。由於中繼鏈能接入的平行鏈數量是有限的,那麼中繼鏈還可以接入子中繼鏈以樹的形式進行規模擴充套件。同時,子中繼鏈還可以以同樣的方式進行擴充套件。
綠色標記的平行鏈中,收集人會進行交易的收集和廣播。對於打包出來的區塊,收集人除了廣播給其它收集人和釣魚人,還會把區塊提交給自己的驗證人。每個平行鏈還會有個出入佇列,如果區塊中有跨鏈交易,收集人會把跨鏈交易放入出佇列中,然後由收集人或者驗證人將跨鏈交易路由到目的平行鏈。
最後,除了可以接入平行鏈,中繼鏈還可以透過橋接連結入一些異構鏈或者說不能直連的區塊鏈,比如上圖中的以太坊。橋接鏈是具備橋接功能的平行鏈。
一筆交易之旅
對於初次接觸Polkadot的人來說,僅從上面的架構圖可能還是弄不清楚它的工作流程,為了讓大家對Polkadot有更加深入的瞭解,下面介紹Polkadot中一筆交易的“生命之旅”,也就是平行鏈中的一個交易是如何打包的,是如何在中繼鏈中被確認的,然後跨鏈交易是什麼時候被傳遞到目的平行鏈的等等。
注意,這裡不涉及橋接鏈的情況。
為了不混淆區塊打包和確認的概念,這裡稍微解釋這兩者的區別。
區塊打包只是將多筆交易收集起來然後打包成一個區塊,此時這個區塊還不具備最終性,有一定概率被丟棄。
區塊確認就是指區塊被最終確認而不會被推翻丟棄。這種將區塊的打包和確認分開來的共識演算法一般稱為混合共識,Polkadot就是此類共識演算法。
具體的技術細節這裡就不細說了,留給後面的文章進行詳細講解。◆平行鏈階段
首先,平行鏈中的收集人收集到足夠交易後,會將交易打包成一個區塊然後提交到驗證人(此時區塊還沒被確認)。收集人提交到驗證人的資料其實不僅僅是區塊,而是一個POV資料。POV包括區塊、有效性證明資料和跨鏈資料。有效性證明資料主要是提供給驗證人進行區塊有效性驗證的,因為收集人打包的區塊中可能包含無效的交易。
驗證人接受到POV資料後,會把它同步給同一組的驗證人,與此同時會根據有效性證明資料和區塊進行有效性的驗證。驗證透過後,驗證人會根據糾刪碼技術將POV分塊和簽名並廣播給其它驗證人進行備份。
這裡備份的目的主要是確保區塊被中繼鏈確認後,儘管惡意收集人丟棄區塊,平行鏈也可以從驗證人那恢復區塊。
◆中繼鏈階段
驗證人將POV塊簽名廣播後,會生成Candidate Receipt並把它廣播給其餘中繼鏈的驗證人。Candidate Receipt包含了平行鏈區塊的關鍵資訊,比如區塊雜湊、父區塊雜湊等。其餘驗證人收集到足夠數量驗籤透過的POV塊後,會把Candidate Receipt放到出塊列表中。中繼鏈共識階段會選出一個Leader,Leader負責出塊,此時的區塊(中繼鏈的區塊)就包含了前面的Candidate Receipt。
在區塊確認階段,其它驗證人首先需要收集足夠的POV塊來還原POV資料,然後驗證Candidate Receipt的有效性。此時,如果驗證人收集不到足夠數量的POV塊,會要求平行鏈驗證人提供POV。如果平行鏈驗證人無法提供POV,那麼該區塊將會無效,相關的平行鏈驗證人也會被懲罰。
◆跨鏈交易傳遞
平行鏈階段中,收集人打包區塊的同時,也會將跨鏈交易放到平行鏈的出佇列中。跨鏈交易透過XCMP協議進行傳輸,根據收集人和驗證人的網路連線情況,具體的傳輸方法有三種:
來源鏈收集人直接傳送給目的鏈收集人;
來源鏈驗證人傳送給目的鏈收集人;
來源鏈收集人傳送給來源鏈驗證人,來源鏈驗證人傳遞給目的鏈驗證人,目的鏈驗證人再傳遞給目的鏈收集人。
跨鏈交易傳遞到目的鏈後,會把跨鏈交易放到平行鏈入佇列中。透過以上步驟,就完成了跨鏈交易在鏈間的傳遞功能。
總結
雖然Polkadot架構比較複雜,各種新名詞也很多,比如POV區塊、XCMP協議、Candidate Receipt等等,連平行鏈的區塊都得由中繼鏈確認,中間還包括有效性驗證、POV資料分塊、簽名和備份等等步驟,但是這些複雜設計也讓整個系統具有更好的可擴充套件性和安全性。