目錄
Cosmos 是什麼?
區塊鏈結構簡介
比特幣棧層結構
以太坊棧層結構
基於比特幣與以太坊構建應用程序
Cosmos 區塊鏈結構
Cosmos 共識層
Cosmos 網路層
Cosmos 應用層
結論
密碼學貨幣產業從未停下腳步。
一切都始於2010年比特幣的問世。比特幣剛問世時,所有人都認為它是數字貨幣的聖杯。曾經被認為不可能的事情現在變成了現實:第一個點對點(peer-to-peer,P2P)支付網路出現了。
即便在今天,對事物的信任仍然是最難以琢磨並且最珍貴的資產。比特幣通過創建第一個「免信任型」系統,繞過了這一問題。但這僅僅是一個開始。
從那之後,比特幣就成為了催生更廣泛密碼學創新的催化劑,這些創新也導致了一系列新型去中心化系統與金融基礎設施的出現:以太坊(Ethereum)、閃電網路(Lighting Network)、EOS、Tezos、Maker…… 這個名單還在不斷延長。
但是有一個項目與眾不同:Cosmos。
在區塊鏈領域,Cosmos 是一個「新生兒」。雖然它的理念已經出現有一段時間了,但其開發團隊一直在背後慢慢地開發以確保 Cosmos 設計及實現的正確性。這也使得 Cosmos 最近才公開推出。
因此,有很多人看過 Cosmos 項目之後卻不理解它也就不足為奇了。簡單瀏覽 Cosmos 相關資料並不會讓他們能夠直觀地了解 Cosmos,反而會讓他們有更多疑問:
什麼是 Cosmos?
Cosmos 的工作原理是什麼?
與比特幣、以太坊相比 Cosmos 有什麼不同?
Cosmos 的特點是什麼?
我已經知道 Cosmos 團隊快兩年了。老實說,當我第一次聽說他們在做什麼的時候,我和其他人一樣對它的概念一無所知。
但當我更深入地了解 Cosmos 之後,我開始非常欣賞它。我這麼說不僅是為了引人注目,是真正地發自內心。
我對 Cosmos 非常著迷,所以我們決定將 TruStory 應用構建為一個 Cosmos 區塊鏈應用。(插播:我將在之後的文章中更詳細地闡述我們為什麼會做出這個決定)
儘管如此,關於 Cosmos 仍然有很多困惑。所以我決定專門為此寫一篇文章。我想讓讀者對 Cosmos 是什麼以及它在區塊鏈世界中的定位有一個更深層次的理解。
你準備好開始了么?理清思緒,帶上你的思考帽,系好安全帶。我們要開車啦!
Cosmos 是什麼?
Cosmos 是這樣定義自己的:
「一個由多條獨立平行區塊鏈組成的去中心化網路,每條平行區塊鏈均採用 BFT 共識演算法(例如:Tendermint 共識)。」
哇,好拗口啊!讓我們把這個定義拆分成幾個容易理解的部分。
「獨立平行區塊鏈的去中心化網路」
我在這裡假設讀者已經對區塊鏈非常了解了!不過,我還是快速回顧一下:
簡單來說,區塊鏈是一個分布在許多計算機上的資料庫,每台計算機上的資料庫都保持相同的狀態。換句話說,每台計算機上的資料庫所包含的數據都完全相同。這些計算機共同組成了所謂的「區塊鏈網路」。
比特幣和以太坊都是區塊鏈,而 Cosmos 是由許多這樣並行運行的區塊鏈組成的區塊鏈網路。
如果你不能完全理解剛才說的,那麼在進一步了解 Cosmos 工作原理之前,你最好再多讀一些關於區塊鏈的基礎知識。(編者註:中譯本見文末超鏈接《區塊鏈是什麼鬼》)
「每條區塊鏈都採用 BFT 共識演算法」
BFT 是 「Byzantine Fault-Tolerant(拜占庭容錯)」的縮寫。一條拜占庭容錯的區塊鏈能夠在網路中部分節點宕機 以及/或者 作惡(即所謂「拜占庭式節點」)的情況下,保證網路依舊具備「安全性」與「活性」等性質。安全性與活性能夠確保區塊鏈網路中每個節點維護相同的狀態。
插播:如果你想要更深入地了解什麼是安全性(Safety)與活性(Liveness),請閱讀我的這篇有關分散式共識的文章。(編者註:中譯本見文末超鏈接《分散式共識的工作原理,Part-2》)
因此,一種 「BFT 共識演算法」 乃是定義了計算機間通信與協調、使得區塊鏈具有拜占庭容錯能力的演算法。Cosmos 網路中的所有區塊鏈都採用某種 BFT 共識演算法。
比特幣和以太坊的共識演算法不是典型的 BFT 演算法。所以它們不符合 Cosmos 網路中區塊鏈的定義。(值得注意的是,雖然它們不是拜占庭容錯的,但仍然可以讓比特幣和以太坊等區塊鏈加入 Cosmos 網路,僅僅需要一些額外的步驟。如果你覺得費解,不用擔心——我們將稍後對此進行更深入的研究。)
插播:如果你還是不清楚什麼是 BFT,我在這篇文章中寫得蠻清楚了。(編者註:中譯本見文末超鏈接《分散式共識的工作原理,Part-3》)
「Tendermint 共識演算法」
Tendermint 是由 Cosmos 開發者提出並構建的一種 BFT 共識演算法。Cosmos 網路中的區塊鏈可以使用 Tendermint 共識或任何其他 BFT 共識演算法。稍後我們將在本文了解更多關於 Tendermint 的內容。
簡單來說,Cosmos 網路是一個由多條並行運行的獨立拜占庭容錯區塊鏈組成的生態系統。這些區塊鏈是 獨立運行的,並且能夠與其他區塊鏈進行 互操作。
現在你可能會想,「為什麼區塊鏈之間要進行互操作呢?」
好問題!我們很快就會講到。但首先我們要回顧一下區塊鏈的結構。
區塊鏈結構簡介
在深入研究 Cosmos 生態系統中區塊鏈是如何工作和互操作的之前,讓我們先回顧一下區塊鏈結構的基礎知識。
正如我們前面所討論的,區塊鏈是一個多機複製資料庫,並且在每台計算機上維護相同的數據。這種類型的分散式系統也被稱為「複製狀態機」。
複製狀態機是一種多機複製的確定性狀態機,但因為網路中每台計算機都維護著相同的狀態,因此在功能上看起來就像一台單機。
聽起來很熟悉,對吧?回顧上文區塊鏈的定義,這裡的定義僅僅是將「資料庫」替換為「狀態機」、「數據」替換為「狀態」,相信你能明白我的意思。
「確定性」 可以簡單地理解為,給定一個確定的輸入,狀態機將始終產生相同的輸出。在區塊鏈系統中,「確定性」意味著如果你從一個給定狀態開始執行相同的事務序列,你總是會得到相同的最終狀態。
複製狀態機從某個狀態啟動。每筆有效事務都將導致系統狀態轉變到下一個狀態(這與資料庫中條目更新相同:如果你更新某個條目,資料庫將遷移到包含該更新後數據條目的新狀態)。
複製狀態機在概念上有三個棧層:
1)應用層
應用層負責定義狀態變遷,並在事務發生後更新狀態機狀態。
2)網路層
網路層負責將在某一個狀態機上執行的事務傳播到網路中其他所有狀態機上。
3)共識層
共識層由演算法組成,負責確保在事務執行後每一台狀態機都存儲相同的狀態(即,某一狀態機無法偽造不存在的事務)。
3a)抗女巫攻擊層
試圖在去中心化公網運行的複製狀態機還需要第四層(「抗女巫攻擊層」),確保任何一台狀態機都不能破壞網路。如果沒有這一層,狀態機可以通過創建許多假身份來篡改狀態,從而獲得與其投入不成比例的影響或收益(即,發起女巫攻擊)。
總之,應用層負責定義狀態與管理狀態遷移。網路與共識層負責保持每台機器上狀態一致(即,確保網路中每個資料庫數據一致)。抗女巫攻擊層(顯然)負責避免女巫攻擊。
現在,讓我們看看在比特幣區塊鏈和以太坊區塊鏈中是如何定義與實現這些棧層的。
比特幣棧層結構
1)應用層
比特幣的主要應用是 P2P 交易。比特幣使用 Script(一種堆棧式非圖靈完備的語言)來定義與執行交易。當發送方通過交易發送比特幣時,發送方將使用腳本來編碼指定誰才能掌控這筆資金。Script 包含一組操作碼或者說命令,發送方可以使用這些操作碼來指定要花費一筆比特幣所需滿足的條件。
2)網路層
當發送方向接收方發送比特幣時,該轉賬交易必須被廣播到網路中,才能使礦工將其打包進區塊中。比特幣使用一種「Gossip 協議」來確保每個節點都會將其接收的所有新區塊或交易發送至鄰居節點(peer)。Gossip 協議是確保消息在全部節點間傳播的 P2P 協議。比特幣網路中所有節點都會將其新接收的有效交易立即發送給其鄰居節點,從而使得待打包交易能夠在幾秒鐘內通過點對點網路傳播到大多數節點。
3)共識層
在交易被轉播到網路中後,還需要將其添加到區塊鏈中才能完成轉賬(即讓網路中的計算機都來執行這個事務)。驗證交易並將其打包到區塊中的過程稱為「中本聰共識(Nakamoto Consensus)」。中本聰共識的運行原理可以在其他論壇或文章找到。如果你想深入了解,這篇文章是一個很好的入門文章。
3a)抗女巫攻擊層
中本聰共識依賴於「工作量證明(Proof-of-Work)」來防止女巫攻擊。基本上,產生一個新區塊所需的算力使得比特幣共識協議自身能夠抵抗女巫攻擊。由於礦工需要大量的算力來產生下一個區塊,使得他們無法在不增加大量算力(與資金)投入的情況下「偽造」多個身份。
以太坊棧層結構
1)應用層
與比特幣不同,以太坊的設計初衷是構建一個能夠運行去中心化應用的平台。以太坊包含一種高級語言(即,Solidity),使得開發者能夠通過編寫智能合約定義去中心化應用的具體功能。EVM(以太坊虛擬機,Ethereum Virtual Machine)是以太坊應用層的核心。EVM 使用 EVM 編譯器將智能合約代碼編譯成位元組碼,用戶可以通過交易的形式,將該位元組碼上傳到區塊鏈之後,EVM 就可以執行這些位元組碼,從而改變去中心化應用的狀態(即,更新以太坊節點存儲的該智能合約相關狀態)。由於以太坊網路中所有節點均運行 EVM,這也保證所有節點的狀態一致。
2)網路層
與比特幣相似,以太坊也使用 Gossip 協議,使得節點能夠與其鄰居節點通信。
3)共識層
為了達成共識,以太坊使用了與中本聰共識相似的「Ethash」,但 Ethash 與中本聰共識有一些關鍵區別。如果你需要了解以太坊共識演算法的工作原理,請閱讀我之前的一篇文章。(編者註:中譯本見文末超鏈接《以太坊的工作原理》)
3a)抗女巫攻擊層
與比特幣一樣,Ethash 依賴於工作量證明(目前為止,譯者註:未來以太坊 2.0 將切換到 PoS 共識機制)來抵禦女巫攻擊。
基於比特幣與以太坊構建應用程序
我希望以上內容讓你對區塊鏈結構有了一定了解。當我們討論 「比特幣」 或 「以太坊」時,這些名字指的是相關的所有棧層。因為比特幣和以太坊是由這些棧層組成的整體。
你無法將以太坊智能合約與其底層 Ethhash 共識層分開,也因此單獨討論這兩個主題都沒有意義。比特幣也是如此,不使用中本聰共識與工作量證明你就無法進行比特幣交易。
另一方面,Cosmos 採用了一種稍微不同的模式:它將應用層與共識層和網路層分開。
因為 Cosmos 的目標是建立一個區塊鏈網路,所以這樣設計是有意義的。在這個區塊鏈網路中,每條區塊鏈是獨立的,並且有它自己的需要和要求(即,它自己的應用)。在這種情況下,想要提出一種一刀切的、適合所有區塊鏈的應用層,是行不通的。讓我們用幾個例子來研究一下原因。
比特幣局限性的一個例子
假設我們準備構建一個貨幣應用程序。在這種情況下,像 Bitcoin Scrypt 這種簡單的基於堆棧的腳本語言是最佳選擇。比特幣腳本語言不僅可以很好地實現從一個地址到另一個地址的價值轉移,並且非常簡單、不是圖靈完備的。
因此,它不太容易受到各種類型安全漏洞的影響,而這些安全漏洞可能會嚴重影響圖靈完備的編程語言。這正是我們在處理貨幣與價值存儲時想要的。但是這種簡單也有其局限性。
使用 Scrypt 做任何更複雜的事情(例如:去中心化預測市場)都非常困難。比特幣腳本語言不僅受其可執行代碼複雜性限制,對於開發者來說也十分不友好。更糟糕的是,比特幣區塊鏈交易的處理速度很慢(大約每秒 7 筆交易)。因此,直接在比特幣區塊鏈上構建需要高交易吞吐量的應用是不現實的。
以太坊局限性的一個例子
與比特幣相反,以太坊的 EVM 與智能合約語言(Solidity)是為了支持更靈活的應用程序而設計的。Solidity 是一種圖靈完備的編程語言,因此理論上它可以執行任意演算法複雜度的代碼。
在實際應用中,由於 Solidity 易出錯並易受到安全攻擊,所以使用 Solidity 開發任意複雜度的程序是相當困難的。這種特性與處理價值轉移的應用程序背道而馳,在後者這個場景種,安全性是最重要的。
此外,智能合約也非常難以升級,從而使得迭代開發非常困難。合約一旦部署上鏈,你所能做的就只有祈禱它能夠平穩運行!與比特幣一樣,以太坊交易處理速率也非常低(大約每秒能夠處理 15 筆交易),因此在以太坊區塊鏈上構建需要高交易吞吐量的應用也是不現實的。
Cosmos 的提出就是為了滿足這種實際業務需要,儘管它為此做了一些較大的犧牲。接下來我們將深入研究具體的細節。但在那之前,我們還必須理解 Cosmos 中區塊鏈的三個棧層是什麼樣的。
Cosmos 區塊鏈結構
首先,我們將從共識層開始了解 Cosmos,以便更好地理解在 Cosmos 上開發應用程序與使用比特幣或以太坊有何不同。
Cosmos 共識層
Cosmos 網路中區塊鏈使用 Tendermint 共識演算法。Tendermint 是一個 2014 年誕生的開源項目,「旨在解決比特幣工作量證明(Proof-of-Work, PoW)共識演算法的速度、可擴展性與環境問題」。
Tendermint 共識演算法是一個 「無視應用層(application-agnostic)的共識引擎」。從本質上講,這意味著任何區塊鏈都可以使用 Tendermint 共識演算法,它是拜占庭容錯的,並且使用 PoS 演算法來抵禦女巫攻擊。
又是一大堆術語!我們好好說道說道。
Tendermint 共識是如何運作的?
回顧一下,共識演算法的存在是為了保證事務執行後,狀態機中保存的狀態一致;而 Tendermint 共識演算法定義了一種「能讓所有節點對下個區塊達成共識」的規則。
讓我們看看相關因素及規則是如何運作的吧!
驗證者
負責達成狀態一致的節點稱為「驗證者」。任何願意協助整個網路達成共識的參與節點都能成為驗證者;作為回報,驗證者會獲得交易手續費和區塊獎勵。Tendermint 整合這些驗證者的投票結果,確定下一個區塊的正確狀態。
通過質押對抗女巫攻擊
每個驗證者的票都有自己的投票權重,投票權重通常是在創世塊產生時確定,或是在開始運行後根據應用層開發者所設計的某些邏輯來決定。一般來說,由驗證者鎖在系統中的代幣量(作為質押品)決定投票權重的大小,這種質押物也被稱為「保證金」。
Consensus 共識
按照規則,驗證者要按輪次(round)對每一個區塊達成共識。每一輪都包含三個基本步驟:提議階段(Propose)、預投票階段(Prevote)、預提交階段(Precommit),以及兩個後續步驟:提交階段(Commit)、新高度階段(NewHeight)。從抽象角度來看,驗證者按照以下協議規則共同決定下一高度要使用什麼區塊:
首先是提議階段,由指定的驗證者提出一個區塊——每一輪中的提議者都是從有序的列表中按照投票權重的比例,確定性地選擇出來的。
接著進入預投票階段——每一位驗證者廣播他們各自的預投票。
當該輪次中某一區塊收到超過 2/3 的預投票,我們就稱其為 「polka」。一旦出現 「polka」,就進入下一個階段。
進入預提交階段,由每一個驗證者廣播他們的預提交的投票。
如果某一特定區塊收到超過 2/3 的預投票,就進入提交階段,這個階段會將區塊加入區塊鏈,並增加區塊高度。每當有新的區塊加入區塊鏈,所在區塊鏈的區塊高度就 +1。
如果失敗,則要麼返回預投票階段,要麼回到預提交階段。
要注意的是,在任何高度上,都有可能需要一輪以上的投票才能提交一個區塊。因為可能出現以下情況:
被指定的「提議者」在應該提出區塊時掉線
提議者所提出的區塊違反一些預先定義的規則
Tendermint 依靠超時機制確保區塊鏈出塊不會遇到延宕。如果在超時前,提議區塊沒有收到超過 2/3 的預投票,則由新的提議者再次進行提出區塊流程。
協議細節詳見此處。
總的來說,Tendermint 選擇了與比特幣的中本聰共識、以太坊 Ethash 不同的路線, 讓我們做一些重點對比:
確定性與概率性
與中本聰共識和 Ethash 這類概率性共識不同, Tendermint 是確定共識——這意味著 Tendermint 每個區塊都是最終確定的,而不像比特幣的區塊只是處於「很可能」被確定的狀態。
我們回顧一下中本聰共識,區塊總是處於「未確定」狀態——只有確定某個區塊在「最長鏈」上,才能有把握認為該塊正在被最終確定,這也是為什麼比特幣交易需要等「6 個區塊確認」。
而在 Tendermint 中,驗證者成功投票及提交後,區塊就立即被確認了。
固定驗證者 vs. 可變驗證者
中本聰共識及 Ethash 允許礦工隨時選擇加入或退出,並不需要其他礦工提前知曉。相反地,Tendermint 共識要求維護一個事先知曉且固定的驗證者集合,驗證者身份是靠他們的公鑰來辨認的。
領導 vs. 無領導
中本聰共識及 Ethash 沒有指定領導者來提議下一個區塊(i.e. 任何礦工都有可能挖到下一個區塊)。另一方面,Tendermint 選擇領導者,或稱為提議者,負責提出下一個區塊。
明確的 vs. 模糊的超時機制
中本聰共識和 Ethash 沒有使用超時機制來確保礦工一定能出塊,而 Tendermint 有明確的超時機制保證區塊鏈的出塊過程不會遭遇延宕。
100 個驗證者 vs. 1000 個驗證者
Tendermint 遵循傳統的一致性共識演算法,每個驗證者之間都要進行通信。考慮到通信開銷,Tendermint 無法像比特幣或以太坊那樣可以無限增加驗證者。Tendermint 共識安排了 100 個驗證者。
因此 Tendermint 的缺點之一就是,它要求事先知曉所有驗證者,而且不允許驗證者隨時加入或退出;這與比特幣或以太坊不同。
除此之外,Tendermint 還要求整個系統維持統一時鐘;雖然在實踐中 Tendermint 已經證明通過整合每個節點的時間戳就能維護統一時鐘,但大家都知道同步時間是個非常複雜的理論問題。
Tendermint 的驗證者少於比特幣,而且要求事先知道驗證者集合,因此可能會有人提出 Tendermint 共識協議「不夠去中心化」的質疑。
但是,去中心化是見仁見智的。Okay,先不抖機靈,我想說的是去中心化是為了達到某種目標的手段,而不是目標本身;我不喜歡在了解去中心化的目標前就妄下評論。
我認為在許多案例(甚至是大部分情況)下,只要破壞系統的代價夠大,並且有針對攻擊者的防禦及懲罰機制,則 Tendermint 要求固定且事先知曉驗證者集合的保守方法是可行的。
如果我們回顧預測市場的例子,我會說去中心化預測市場應用,根本不需要像健全貨幣或是價值存儲應用一樣具備這麼高級別的去中心化程度,有 10 、20 或 100 個驗證者足矣。
以 TruStory 為例,我們使用 Cosmos SDK 構建後端應用邏輯,將應用的狀態和邏輯存在區塊鏈上,而前端某種程度上是私有的——Cosmos SDK 允許我們建立用來賞善罰惡的激勵系統、透明化展示數據層、允許用戶分享網路的所有權及治理權,還可以共同決議未來的事務、踢出惡意使用者,並按照個人喜好針對用戶層或基礎層設計網路。對於開發者來說,他們也能基於後端區塊鏈邏輯構建自己的開發工具及服務。因此有 10 個或 100 個執行並驗證交易的驗證者,就能夠保障使用者和開發者對於透明性、所有權、責任歸屬的需求。
如果你能明白 Tendermint 以「選擇固定且事先知曉的驗證者集合」作為犧牲,所帶來的利益,你會對這些原本不可能實現的神奇特性充滿讚歎:
安全性及活躍度
Tendermint 的協議保證安全性及活躍度。假設超過 2/3 的驗證者投票權重沒有掌握在拜占庭驗證者手中(也就超過 2/3 驗證者是遵守協議的),換句話說少於 1/3的投票是惡意的 ,則協議就能保證網路的安全性及活躍度(i.e. 驗證者永遠不會在相同的塊高度提出衝突區塊,區塊鏈永遠會正常出塊)。
高性能
Tendermint 共識的出塊時間可以低至 1 秒,達到每秒處理數千筆交易的速度,讓 Tendermint 更適合需要頻繁交易的應用。
即時確認
在區塊鏈世界中,最終確定性(Finality)意味著一旦區塊被提交上鏈,我們就能確定直至該區塊之前的整個區塊鏈的狀態。
如我們前面提到的,中本聰共識有其概率性,所以沒有辦法保證最終確定性。你只能基於大多數礦工可能還在該分叉中挖礦的概率,保證你的交易所在的分叉鏈是共識鏈。
但是,Tendermint 要求驗證者對每個區塊進行投票及最終確認。所以我們可以說,在少於 1/3 惡意驗證者的情況下,交易能夠被「即時確認」——當區塊被創建出來,使用者就知道他們的交易已經被確認了。
責任制
Tendermint 使用 PoS 作為抗女巫攻擊機制——要求驗證者質押代幣(i.e. 他們的「保證金」),以確保節點不會通過創建多個虛假賬戶來欺騙系統。
PoS 比 PoW(PoW 的證明來自礦工解出下個區塊哈希所耗費的算力)更節能,但是它固有的「無利害關係」缺陷導致驗證者能輕易作弊。
Tendermint 通過罰沒保證金來處罰違反協議規則(e.g. 替衝突區塊投票,及廣播未驗明的投票)的驗證者,避免發生無利害關係問題。說得更具體點,協議存在「鎖定規則」,規範了每個驗證者在投票給特定區塊時能做的行為。舉例來說,一旦驗證者預提交投票後,它就被「鎖定」在該區塊;只有在下一輪中要讓一個不同的區塊成為 polka 時,該驗證者才能解鎖並預提交另一個區塊。如果違反鎖定規則,驗證者會被罰沒保證金。
更簡單的輕客戶端
輕客戶端比全節點「更輕巧」,因為它們不存儲區塊鏈的所有狀態,只存儲區塊頭。除非是負責驗證和出塊的挖礦節點,或驗證者節點,不然大部分節點其實不需要存儲區塊鏈全狀態。
輕客戶端下載從創世區塊開始到當前區塊的區塊頭,而不去下載和存儲整條鏈。相比於全節點,輕客戶端只需要存儲少量數據,因為區塊頭就足以驗證某些特定交易的有效性。
最酷的事情在於,基於 Tendermint 的區塊鏈的輕客戶端甚至無需同步所有區塊頭,只要周期性的下載區塊頭就行。
就像我們前面討論的,Tendermint 與比特幣、以太坊不同,其所有區塊都要經過投票及最終確認;因為每個區塊都經過最終確認,所以輕客戶端只要注意驗證者集合的變化——只要知道最新的驗證者集合,輕客戶端就能下載最新的區塊頭,並驗證這些區塊都有大於 2/3 的驗證者投票。
Cosmos 網路層
如我們上面所說的,Tendermint 的共識依靠驗證者在每一輪進行投票來完成。因此,節點間必須能溝通及傳遞訊息,確保網路中所有參與者都能看到相同數據。
與比特幣和以太坊一樣,Tendermint 使用 gossip 協議快速傳播最新的區塊鏈狀態。
網路中的節點不一定要成為驗證者才能在網路共識過程中發揮作用。舉例來說,節點可以是輕節點或是全節點,而不是驗證者;這類節點也被稱為 「非驗證者節點」。
驗證者及非驗證者節點都要肩負傳遞數據的責任(例如提案數據、區塊數據和投票數據),以確保所有節點都能收到系統正在產生的信息和交易。
Cosmos 應用層
目前,我們已經了解 Tendermint 網路層及共識層的核心組成部分;網路層負責網路中所有計算機之間交易的傳遞,Tendermint 共識演算法確保狀態機的一致性(即所有節點中的區塊鏈都是一致的)。
但我們傳遞和驗證的到底是什麼交易?這裡就引出了應用層。
Cosmos 應用層負責:
定義和提交需要被記錄進區塊鏈的交易
在交易通過共識層提交後,持續更新區塊鏈狀態
使用 Cosmos SDK 構建應用程序
Cosmos SDK 提供一套構建應用層的框架,就像是區塊鏈界的 Ruby-on-Rails (Ruby-on-Rails 是一種讓開發者輕鬆通過默認設置構建網頁端應用的框架),Cosmos SDK 也為開發者提供了一種基於 Tendermint 內核構建安全的區塊鏈應用的框架。
要記住,區塊鏈就是一個在所有節點將狀態做相同備份的狀態機,而 Cosmos SDK 讓你可以構建能在多個節點間進行複製的實際狀態機。SDK 讓你自定義應用的狀態、事務類型,及狀態-轉變函數所需的功能和工具。
Cosmos 應用如何運行(抽象視角)
Cosmos SDK 提供一種「multistore」機制來定義及維護應用層狀態機的狀態。Multistore 將應用層的狀態劃分到不同組件,通過各自的「模塊」進行管理。
Cosmos SDK 的強大之處就是它獨特的模塊化設計,每個模塊定義及維護一個狀態子集,這些狀態子集構成完整的區塊鏈。舉例來說:
銀行模塊:允許你在應用中持有代幣,及進行代幣轉賬
許可權模塊:允許你創建及管理賬戶和簽名
質押與罰沒模塊:允許你通過編碼構建 PoS 共識機制
每個模塊都是個小狀態機,可以相互聚合生成總體狀態機。
應用開發者按照每個模塊和修改狀態的慣用邏輯來定義子集,除了 Cosmos SDK 提供的模塊,開發者還能調用第三方模塊。
這種用於構建區塊鏈應用的插件模塊非常強大,因為它賦予開發者使用 SDK 或外部模塊的靈活性。
應用層如何與共識層交互?
發生在應用層的交易通過區塊鏈應用交互界面(ABCI, Application Blockchain Interface)與 Tendermint 共識及網路層通信。
ABCI 是 Socket 通信協議,連接 Tendermint 核心(共識 + 網路)與應用。它可以兼容任何編程語言,也就是說使用 Cosmos SDK 構建的區塊鏈應用理論上能以任何語言編寫,而不僅僅是 Tendermint 底層共識和網路層所用的編程語言。
注意:當前版本的 Cosmos 主要支持 Golang,後續會加入更多語言。
總而言之,Cosmos SDK 允許開發者基於 Tendermint 內核構建去中心化應用,這個應用理論上能用任何語言開發,並通過 ABCI 連接 Tendermint 共識引擎。
將應用層(Cosnos SDK、ABCI)與網路層、共識層(Tendermint 內核)剝離,能讓開發者在開發各種類型應用的時候有更大的靈活性,再加上 Cosmos SDK 允許這些應用以任何語言開發(e.g. Golang),讓區塊鏈 App 開發過程更像平常的應用開發的樣子。
這與在以太坊上開發應用形成鮮明對比,因為後者要求開發者學習新語言 Solidity ,還要克服 Solidity 的諸多限制和缺陷,而且 Golang 比 Solidity 具備更多的開發工具,開發體驗好上 10 倍。
除此之外,全部的以太坊 App 都基於單一網路進行操作,這麼做的優勢是這些 App 能夠共享以太坊的標準,以及相應而生的規模效應;缺點是所有這些 App 都共享以太坊共識層,會受到新加入的應用體量大小的影響。 此外,整個網路必須作為一個巨大的單元來管理,會被治理理念和意識形態分歧所束縛,使得擴展難以進行。
Cosmos 區塊鏈應用不會受到這些限制,每個應用都有獨立的網路、自己的共識層及治理層。
開發者有很大的自主性來決定它們的共識層許可權,還能選擇基於代幣質押數量推舉公開的驗證者集合,或是通過預授權設置私密驗證者集合。這種自由選擇驗證者集合的規則,意味著區塊鏈對於自己的鏈有更大的自主性。
當然,這樣的好處伴隨某些犧牲:Cosmos 網路中的每個區塊鏈應用都必須導入自己的驗證者、社群,及經濟體系;無法像以太坊一般,直接蹭用所有驗證者、強大的社群,及已有的經濟體系。
結論
在這第一篇文章里,我們對比了 Cosmos 網路中的區塊鏈架構與比特幣、以太坊的不同。這種架構賦予區塊鏈應用對於自己的鏈更大的自主性。
在第二部分,我們要深入討論 Cosmos 中相互獨立的區塊鏈如何進行交互;更重要的是回答「為什麼區塊鏈需要互相進行交互」。
原文鏈接:
https://www.preethikasireddy.com/posts/how-does-cosmos-work-part1
作者: Preethi Kasireddy
翻譯&校對: stormpang, IAN LIU & 阿劍
冷萃財經原創,作者:Awing,轉載請註明出處:https://www.lccjd.top/2019/06/21/cosmos-%e5%8c%ba%e5%9d%97%e9%93%be%e7%9a%84%e5%b7%a5%e4%bd%9c%e5%8e%9f%e7%90%86%ef%bc%8cpart-1%ef%bc%9a%e6%af%94%e8%be%83-cosmos-%e4%b8%8e%e6%af%94%e7%89%b9%e5%b8%81%e3%80%81%e4%bb%a5%e5%a4%aa/?variant=zh-tw
文章評論