1. 程式人生 > >開源區塊鏈Tendermint開發詳解

開源區塊鏈Tendermint開發詳解

簡介

tendermint是一個開源的完整的區塊鏈實現,可以用於公鏈或聯盟鏈,其官方定位 是面向開發者的區塊鏈共識引擎:

11831773-57d7ab9aacebbd6b.png

tendermint

與其他區塊鏈平臺例如以太坊或者EOS相比,tendermint最大的特點是其差異化的定位: 儘管包含了區塊鏈的完整實現,但它卻是以SDK的形式將這些核心功能提供出來,供開發者 方便地定製自己的專有區塊鏈:

11831773-68d7fbc5c42387fa.png

匯智網 tendermint

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)的角色,依據抵押的權益比例輪流出塊:

11831773-2a2ba142bbd3b7ba.png

vaildator

由於避免了POW機制,tendermint可以實現很高的交易吞吐量。根據官方的說法,在 合理(理想)的應用資料結構支援下,可以達到42000交易/秒,引文參考 這裡。 不過在現實環境中,部署在全球的100個節點進行共識溝通,實際可以達到1000交易/秒。

tendermint同時是拜占庭容錯的(Byzantine Fault Tolerance),因此對於3f+1個 驗證節點組成的區塊鏈,即使有f個節點出現拜占庭錯誤,也可以保證全域性正確共識的達成。同時 在極端環境下,tendermint在交易安全與停機風險之間選擇了安全,因此當超過f個驗證節點發生 故障時,系統將停止工作。

什麼是拜占庭錯誤?簡單的說就是任何錯誤:既包括節點宕機、也包括惡意節點的欺騙和攻擊。

tendermint共識機制的另一個特點就是其共識的最終確定性:一旦共識達成就是真的達成, 而不是像比特幣或以太坊的共識是一種概率性質的確定性,還有可能在將來某個時刻失效。 因此在tendermint中不會出現區塊鏈分叉的情況。

tendermint vs. 以太坊

tendermint的定位決定了在最終交付的節點軟體分層中,應用程式佔有相當部分的分量。 讓我們通過與以太坊的對比來更好地理解這一點:

11831773-59abfa82c7d49a52.png

tendermint vs. ethereum

在上圖中,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節點/應用旳組網。