tendermint區塊鏈開發詳解
簡介
tendermint是一個開源的完整的區塊鏈實現,可以用於公鏈或聯盟鏈,其官方定位 是面向開發者的區塊鏈共識引擎:
與其他區塊鏈平臺例如以太坊或者EOS相比,tendermint最大的特點是其差異化的定位: 儘管包含了區塊鏈的完整實現,但它卻是以SDK的形式將這些核心功能提供出來,供開發者 方便地定製自己的專有區塊鏈:
tendermint的SDK中包含了構造一個區塊鏈節點旳絕大部分元件,例如加密演算法、共識演算法、 區塊鏈儲存、RPC介面、P2P通訊等等,開發人員只需要根據其應用開發介面 (Application Blockchain Communication Interface)的要求實現自己 的應用即可。
ABCI是開發語言無關的,開發人員可以使用自己喜歡的任何語言來開發基於tendermint的 專用區塊鏈。不過由於tendermint本身是採用go語言開發的,因此用go開發ABCI應用的一個額外好處 就是,你可以把tendermint完整的嵌入自己的應用,乾淨利落地交付一個單一的可執行檔案。
tendermint的共識演算法
在技術方面,tendermint引以為傲的是其共識演算法 —— 世界上第一個可以應用於公鏈的拜占庭 容錯演算法。tendermint曾於2016年國際區塊鏈周獲得最具創新獎,並在Hyperledger的雨燕(Burrow) 等諸多產品中被採納為共識引擎。你可以點選 這裡 檢視其應用案例。
tendermint採用的共識機制屬於一種權益證明( Proof Of Stake)演算法,一組驗證人 (Validator)代替了礦工(Miner)的角色,依據抵押的權益比例輪流出塊:
由於避免了POW機制,tendermint可以實現很高的交易吞吐量。根據官方的說法,在 合理(理想)的應用資料結構支援下,可以達到42000交易/秒,引文參考 這裡。 不過在現實環境中,部署在全球的100個節點進行共識溝通,實際可以達到1000交易/秒。
tendermint同時是拜占庭容錯的(Byzantine Fault Tolerance),因此對於3f+1個 驗證節點組成的區塊鏈,即使有f個節點出現拜占庭錯誤,也可以保證全域性正確共識的達成。同時 在極端環境下,tendermint在交易安全與停機風險之間選擇了安全,因此當超過f個驗證節點發生 故障時,系統將停止工作。
什麼是拜占庭錯誤?簡單的說就是任何錯誤:既包括節點宕機、也包括惡意節點的欺騙和攻擊。
tendermint共識機制的另一個特點就是其共識的最終確定性:一旦共識達成就是真的達成, 而不是像比特幣或以太坊的共識是一種概率性質的確定性,還有可能在將來某個時刻失效。 因此在tendermint中不會出現區塊鏈分叉的情況。
tendermint vs. 以太坊
tendermint的定位決定了在最終交付的節點軟體分層中,應用程式佔有相當部分的分量。 讓我們通過與以太坊的對比來更好地理解這一點:
在上圖中,tendermint結構中的abci應用和以太坊結構中的智慧合約,都是由使用者程式碼實現的。 顯然,ABCI應用大致與EVM+合約的組合相匹配。
在以太坊中,節點是一個整體,開發者提供的智慧合約則執行在受限的虛擬機器環境中;而在 tendermint中,並不存在虛擬機器這一層,應用程式是一個標準的作業系統程序,不受任何 的限制與約束 —— 聽起來這很危險,但當你考慮下使用tendermint的目的是構建專有的區塊鏈 時,這種靈活性反而更有優勢了。
事實上,tendermint留下的應用層空間如此之大,以至於你完全可以在ABCI應用中實現一個 EVM,然後提供solidity合約開發能力,這就是超級賬本的 Burrow 做的事情。
課程概述
本課程適合希望開發自己的專有區塊鏈的go語言工程師,課程內容如下:
第一章 課程簡介
簡單介紹tendermint的定位、特點以及對於開發者而言tendermint與以太坊的區別。
第二章 初識tendermint
tendermint本身是一個完整的區塊鏈實現,本章介紹tendermint的主要組成部分,包括 節點軟體的使用、最小ABCI應用編寫以及RPC API開發介面。
第三章 應用開發模型
tendermint是一個標準的狀態機複製模型的實現,因此基於tendermint的應用就是一個 標準的分散式狀態機。本章通過一個分散式計數器的開發來學習基於ABCI介面的應用開發。
第四章 去中心化身份識別機制
本章介紹如何基於非對稱加密技術實現去中心化的身份識別。課程的內容包括非對稱金鑰 的生成、身份驗證原理與實現、雜湊地址計算等。
第五章 案例:代幣發行
代幣是區塊鏈的一種典型應用。在這一章裡我們通過發行代幣來進一步深入學習基於tendermint 的狀態機應用的設計與實現。
第六章 代幣案例:使用默克爾樹
merkle樹是區塊鏈中經常使用的一種資料結構,在這一章我們將學習其原理、用途與使用方法, 並使用它增強代幣案例的功能。
第七章 代幣案例:使用多版本狀態庫
在區塊鏈的每個高度都對應著應用狀態的特定歷史快照。本章介紹如何使用tendermint的 多版本狀態庫iavl來實現應用狀態的管理。
第八章 多節點組網
本章介紹如何進行多個tendermint節點/應用旳組網。