區塊鏈是很多技術的混雜,一定不要混在一塊,而跟具體區塊鏈技術相關的要素主要有三點:第一點,共識演算法。第二點是賬戶模型,第三點是智慧合約。
有人開玩笑說解決的是 “今天中午吃什麼” 的問題?這是一個很貼切的描述。所謂的分散式共識演算法——我有這麼多分散式的節點,彼此之間需要網路通訊對某個狀態達成共識,但彼此之間又不信任。這跟我們在網際網路應用做分散式系統有很大的區別。傳統的分散式系統節點都部署在自己的機房裡,不需要考慮拜占庭錯誤,你需要考慮的只有丟包、超時、機器 crash 這些問題,用 Paxos 和 Raft 一類的演算法就可以了。共識演算法
但是如果做區塊鏈的應用,就要處理拜占庭錯誤,面對潛在的欺詐和篡改的情況。這裡選擇不同的共識演算法,會對你的區塊鏈應用有比較大的影響。有的區塊鏈應用可能就是要做公有鏈,面向公開網路;有的區塊鏈應用做的是聯盟鏈,有限節點,追求高效能、高吞吐量,它們選用的共識演算法一定是不同的。以下是演算法的對比。 一類是在比特幣驗證了很多年的 PoW,工作量證明, PoW 已經被證明非常適合這種全開放網路的公有鏈,對於拜佔廷錯誤的容忍率比較高,一般我們認為有 51% 的節點聯合起來進行欺詐,才能對整個區塊鏈產生有效供給。但相應的,PoW 非常消耗算力,吞吐量和確認時間也都不太理想。 還有一大類是以太坊採用的 PoS,權益證明,以及 DPoS 等擴充套件。權益證明是基於不同節點的股權數,有點像真實的股東大會投票一樣,在股東里面隨機選舉節點進行記賬。這類演算法也比較適合公有鏈,相比 PoW 在容量和計算資源上都是有最佳化的。 還有一類是拜佔廷容錯協議 BFT,比較有名的像 PBFT。這類演算法是基於狀態機同步的演算法 (state machine replication),不需要代幣。當客戶端傳送請求給一個節點,每一個節點互相廣播其他所有節點傳送訊息,彼此之間進行交易的確認。一般來說它的延時比較低,吞吐量也更高,但是相對來說對網路壓力也比較高,更加適合有限網路節點。另外 BFT 類演算法對拜占庭錯誤的容忍度也相對較低,像 PBFT 有 f 個節點發生拜占庭錯誤時,整個網路要大於 3f+1 個節點才能保證正確性。 2016 年業界在共識演算法上面也做了很多探索,現在大家基本達成的共識是:如果你的區塊鏈應用場景是公有鏈,可以使用 PoW、 PoS 這類演算法,如果你的區塊鏈應用場景是許可鏈聯盟鏈,可以採用 BFT 類演算法。
區塊鏈技術的賬戶模型有兩個流派,第一個流派以比特幣為代表的 UTSO 模型,第二個是以太坊為代表的簡單賬戶模型。 先說一下簡單賬戶模型,很簡單,我轉帳支付就是錢加減、付錢。 UTSO,在每一個構建交易的時候,有輸入和輸出。比特幣我有一千塊錢,給Lily 轉一百塊錢的時候,我不是扣掉一百塊錢,我是構造這麼一個交易,輸入一百塊錢,輸出一百塊錢。你的每一次交易資料會記錄在這個賬本里面,這樣日後做一些資料分析更加容易。因為最早是比特幣提出的,對於雙發問題比較奏效。簡單賬戶模型它比較有效,就是簡單的轉帳,可以支援一些比較高階的,如果你基於 UTSO 做可能會更麻煩一些。賬戶模型
區塊鏈技術的第三個要素是對智慧合約的支援,很多人做了一兩年,發現我們原來只需要一個分散式賬本,只需要一個記賬的。如果你只做一個不可篡改的記賬,但是很多公司,很多組織看中它的智慧合約的能力。選擇技術,在技術雷達裡面出現了兩個,這是我們做過一些共同試驗的解決方案。智慧合約