Ⅰ 區塊鏈之聯盟鏈(三) 認識Fabric
Fabric 是超級賬本聯盟推出的核心區塊鏈框架,它適合在復雜的企業內和企業間搭建聯盟鏈。根據超級賬本聯盟的目標, Fabric 被建設為一個模塊化的、支持可插拔組件的基礎聯盟鏈框架。;
與以太坊系的Quorum不同,Fabric從一開始就只考慮企業間的應用。其獨有的channel概念,將企業根據業務目的不同以不同的子網連接起來, 每一個子網對應一個channel,而每個channel有自己獨立的區塊鏈。而Quorum很顯然是只有一個公網(所有企業節點都加入進去),企業與企業間的私有業務是通過Private Manager 完成的。
理解channel的最簡單方法就是,將它類比為一個消息服務提供的Topic,實際上Fabic最早就是基於Kafka 的分布式消息服務來實現。
在Fabric網路中,一個企業可以有一個或多個節點加入整個聯盟鏈;一個企業可以加入1個或者多個Channel(子網); 一個節點可以加入1個或者多個channel。每個channel構成一個子網,所以Fabric 是 一種由子網組成的網路。
那麼Fabric是怎麼實現智能合約的執行和完成業務上鏈(將事務結果記錄在區塊鏈里)的呢?
與其它框架不同, Fabric 將整個過程分成了三個階段:
業務背書階段 : 客戶的請求發送的背書節點,通過智能合約完成業務的計算(但不更新狀態),並完成背書;將背書結果返回個客戶端。
業務的排序階段 : 客戶端將背書結果通過Channel被發送到排序節點(orderer),在排序節點完成事務的排序,並打包到block里,最後下發給所有連接到channel的節點。
業務驗證並寫入賬本階段 : 通過Gossip 網路,所有Channel的節點都會接收到新的block,節點會驗證block中的每一個事務,確定是否有效:有效地將會跟新world state,無效的將會標志為「無效」,不會更新World state,但整個block會被完整的加入到帳本中(包括無效的事務)。
根據以上的描述,Fabric 節點實際可以分為 ,普通節點和Order節點:
Peer, 普通節點, 完成背書(包括只能合約的執行)和驗證.
orderer, 排序節點,完成排序。
加入orderer節點的Fabric網路可以被描述如下:
每一個Channel,都定義了所有屬於channel的節點,但是並不需要所有節點都連接到Orderer 節點(節點間可以通過gossip 協議通訊來傳播私有數據或事務).
在區塊鏈中,共識是區塊鏈的基礎。與公有鏈不同,聯盟鏈的共識要求所有加入賬本的事務是確定的、最終的,也就是不可以有分叉,區塊與區塊間的順序是一定的,只存在唯一條鏈。在Fabric 中,這個客觀需求正是由排序實現的,所有的事務將被提交給orderer節點獲得確定的順序,並最終打包成block進入帳本。 Fabric 從1.4.1開始支持基於Raft實現排序服務, 可以認為基於Raft實現共識。
基於RAFT的排序服務相對於早期的Kafka 具有更好的分布性,配置更加簡單,是聯盟鏈里常用的一個常用的達成共識的演算法,Quorum就 默認使用RAFT作為共識層。簡單的說,RAFT是一個leader和follower的模式, 所有加入RAFT網路的節點,任意時候都有一個leader, 只有這個leader有權決定事務的順序,並打包成Block,其它節點只能作為follower提交事務和同步block。
基於FAFT網路,每個企業可以有一個或多個節點參與到Orderer中去。在Frabric中企業間的網路連接可以變化成如下形式:
區塊鏈的使用用戶在乙太網中被稱作EOA(External of Account), EOA的載體是錢包。我們沿用這個概念,來看看Fabric是如何實現用戶和發起事務的。Fabric中EOA是一個CA中心發布的certificate(x.509),一個Certificate代表一個Identity(這與以太坊還是有很大區別的, 以太坊中一個EOA其實是一個hash地址),EOA能夠參與的channel以及被授權的操作是有channel的MSP( Membership Service Provider)決定的(如下圖)。
註:certificate 是一種密碼學上驗證身份的通用做法; certificate包含了個人的信息,公鑰以及發布這個certificate的CA的簽名。驗證方只需要擁有這個CA的證書(包含CA的公鑰),就可以驗證這個簽名是否正確,certificate的內容是否有篡改。簡單的說,通過CA和Certificate,我們可以獲得一個可驗證的的身份和信任鏈。
如上圖,fabric中通要使用Wallet作為EOA的載體,一個Wallet中可以包含多個Identity(x.509 certificate)。 Identity 通過 CA提供的信任鏈來驗證正確性。
驗證了身份之後, Fabric 通過MSP在區塊鏈網路中解決該身份是否代表組織的成員和在組織內具有什麼角色。例如,channel首先會驗證當前用戶Identity是否是有效地身份,然後通過MSP查看其所處的企業和具有的角色,最終確定該用戶是否有權執行操作。
可以說,Fabric的訪問控制是通過MSP來完成的。在每一個需要訪問控制的地方都需要定義一個MSP。 例如,每個channel都定義一個MSP,這個MSP規定了在channel范圍內資源的訪問許可權。 MSP 是Fabric里一個晦澀難懂的概念,也是其賦予企業間安全訪問的基礎。
前文提到, Fabric 將業務處理和上網分成了三個部分, 背書,排序,驗證後加入賬本。
其中背書是Fabric執行智能合約的階段。以太坊中,智能合約是在EVM中執行的,有多種語言支持。 在Fabric,智能合約被稱為chaincode: 一個chaincode 可以理解為是智能合約的容器,可以包含一個或多個智能合約, 不用於EVM, chaincode是在 JVM 或NodeJS中執行。
客戶應用程序通過智能合約來訪問賬本,每一個可訪問的智能合約都被安裝在客戶端可以訪問的節點上,並被定義在channel里。(有隻能合約的節點被稱為背書節點,沒有隻能合約的節點被稱未提交節點,提交節點只維護賬本)
客戶應用提交一個交易請求, 請求到達背書節點, 背書節點首先會驗證客戶的簽名,確保客戶的身份有權執行本次交易,接著執行交易提及的智能合約(chaincode),並生成一個背書響應(或者叫做交易提案,tran-proposal)。這個背書響應中通常包含World state 的讀集合,寫集合, 以及節點對本次交易的簽名。這里與以太坊系聯盟鏈最主要的不同是: 背書階段只模擬交易,並不真正更新交易結果。 而真正更新交易在第三階段完成。背書節點最後將生成的背書響應fanhui給客戶端, 智能合約部分的執行就結束了。
通常一個交易的執行需要多方的簽名,所以客戶端需要將一個交易發送給多個背書節點,這些背書節點的選擇需要滿足背書策略的要求。
下圖是一個包含有客戶、背書節點,提交節點的網路示意圖。
根據Fabric官方的參考文檔,客戶交易的正果過程可使用下圖描述。
如上圖,從1到3,為背書階段,4為排序階段,4.1,4,2, 5為驗證提交階段。 參考 Frabic的節點 概念,可以了解更多在交易細節的概念。
總的來看, Fabric 更專注於企業間,通過上文,可以讓大家對Fabric的基本構成與概念有一個總的了解。 Fabric本身並不神秘,都是使用的現有的企業間的技術。要更好的了解,建議參考閱讀分布式消息系統和企業的安全基礎設施(CA相關)的支持。與以太坊系聯盟鏈實現比較, Fabric 的子網更概念對於復雜企業間應用適應更強,但是其復雜的安全考量,使得運營成本很高,另外,Fabric 使用Certificate做為用戶身份,有很大的局限性,在新的2.0里,Fabric對於此處將有所改變。
下一篇,我們將來看看Sawtooth , 由Inter 提供的區塊鏈框架。
區塊鏈之聯盟鏈(一) 認識以太坊
區塊鏈之聯盟鏈(二) 認識Quotum
區塊鏈之聯盟鏈(三) 認識Fabric
區塊鏈之聯盟鏈(四) 認識Sawtooth
Ⅱ 哈希圖會取代區塊鏈
2018年2月份哈希圖團隊就在Reddit上po出了一種新的實現共識演算法平台,旨在為世界提供一種更有效、快速的價值互聯網底層支撐。
從比特幣出現到現在,區塊鏈這個名詞已經深入人心,似乎我們已經被深深植入一種想法,那就是 價值互聯網 必將通過區塊鏈來實現。而仔細一看,區塊鏈似乎就是一個簡單的鏈表,只不過是更宏觀一些的區塊相連。區塊之內打包的各種公開的交易事務。於是我們從中總結出了人人都能談的區塊鏈的特點:
而區塊鏈的用途承載了我們很多美好的想像,賦予更多節點以價值,包括內容,個人數據等形形色色的各類資產。
誠然,區塊鏈已經在部分領域實現了這個功能。但是,在具體使用過程中,我們漸漸遇到了很多性能問題,先是以太坊上養貓就堵塞了整個以太坊網路。而比特幣就更不用說了,即使全世界成千上萬個分布式節點,各大礦場投入了巨資構建的礦場來支撐這個網路,仍然受限於每10分鍾才出一個區塊的演算法限制。
因為性能瓶頸,其他演算法也迅速出現,企圖解決這個問題。比如通過PoS演算法,DPoS演算法,試圖繞過PoW這種簡單粗暴的解決方案,來提升網路每秒能夠處理的交易事務次數(TPS)。
而最近掀起的EOS節點競選,全世界范圍內各個財大氣粗的團隊,參與競選全球 21個超級節點 ,用於投票產生下一個區塊。本質上仍然屬於DPoS演算法的應用,只不過這個超級節點能夠獲得大量的EOS代幣|Token(主網上線後可稱之為Coin)獎勵,按照當前價格折算,就是上億的收入。資本逐利,無可厚非。但是仔細想一想,官方的說法,這是為了提升TPS而設計的一種折中的方法。意思就是,決定區塊產生的不再是公平的,而是一種代議制,在去中心化和中心化之間找到的一個微妙的平衡,當然這個系統內,除了超級節點,備胎節點也是必須的。本文不贅述EOS。
而這些,不禁讓人深深思索一個新的問題,當年中本聰的設想,一人一個CPU,一個投票權的願景似乎已經漸行漸遠了。
提到區塊鏈,我們常說共識演算法,其實全稱是一致性共識演算法。其中,拆出兩個關鍵詞來:
共識似乎離普通用戶很近,白話說即為,我們大多數人認同它的價值,它就有價值。而一致性卻離得很遠,下一個區塊怎麼產生,節點之間如何同步數據與我何干?
這里,我也只淺淺列出用在區塊鏈世界的幾種牛批的共識演算法,包含:
下面進入本文的主題。
無論是什麼共識演算法,核心目的相同,那就是:在無可信中心節點可以依仗時,社區用戶能夠關於事務的產生,區塊打包達成一致。
此處上一個對比圖,將會一目瞭然,然後我也會再文字贅述一遍,和大家分享我自己對此的一點點淺淺的思考,如有任何差錯,歡迎隨時指正。
可見,左邊是區塊鏈,右邊是哈希圖。
仔細看,區塊鏈實際上是一個公平但是殘酷的機制。每一個參與挖礦的節點,都是在玩一個概率游戲。比如老大哥比特幣,使用純正的PoW演算法,每個人通過密碼學問題,暴力求解那個答案,我們稱之為哈希碰撞。在10分鍾內,產生的交易事務其實不止那個最終被加入最長的鏈上的區塊的那些事務。而是同時有很多其他區塊。每一筆事務會通過廣播機制,向周圍的其他節點廣播以求得到足夠的確認,並最終加入區塊鏈。問題來了,節點保存著當前最新的備份,且只認最長的那個鏈,但是我們知道,廣播意味著一樣長的多個鏈會產生,於是節點就需要同時保存多個備用區塊,然後靜靜等待下一步傳來的區塊,再比較選誰鏈更長,就把誰真的加入大家都認同的那個鏈,而失敗的區塊,就黯然退場,加入下一輪的事務。
挖到那個沒加入到鏈上的節點,只能暗暗擦乾眼淚,繼續前行。
以太坊呢,就稍稍溫情一些,會有一點點獎勵給這類被稱之為叔塊的東西。
看到左邊的區塊鏈結構嗎?生長過程中,是個樹,長成了以後,就會被修剪的只剩下一個白白長長的樹干。這就是我們說的,只認最長的鏈的法則殘酷之處。
哈希圖
對比看右邊的哈希圖結構,是不是要復雜很多?簡單說,就是一個都不能少。
挖到的區塊全都加入到系統。每個分支都將被用到,最終縫合到整個系統。
稍稍想想,就能知道左邊的沒有右邊的事務處理速度快。因為左邊總是要自我閹割一部分打包在區塊內的事務。而右邊不用。
那麼,為什麼右邊可行?而區塊鏈卻選擇的是更慢的演算法呢?
答案很簡單,區塊鏈的廣播方法,在全網達成共識很慢。那麼哈希圖是怎麼做到的呢?
下面將談一談哈希圖的兩個核心機制中的其中一個,官方稱呼為Gossip about gossip協議。
粗淺翻譯為:關於八卦的八卦協議。
先來說一說Gossip協議(八卦協議)。
Gossip協議解決的問題就是在分布式環境下信息高效分發的問題。這個問題的解決決定著系統的一致性程度。
以辦公室八卦為例,八卦一般是從一次對話開始,只要一個人八卦一下,有限的時間內辦公室的人都會知道。與病毒傳播類似。因此Gossip別名就是「病毒感染演算法」,「謠言傳播演算法」。
Gossip的核心就是當前節點隨機選擇一些節點把那個告訴它們你知道的所有事情。好比說,你聽到了一個八卦消息,你會忍不住想和朋友分享,於是你從你認識的人中,隨機挑了一部分人,把這個消息告訴了他們。他們也一樣,每個人聽到這個消息,也會忍不住想和他們的朋友分享。像病毒傳播一樣,迅速傳遍了整個人際網路。
因此理解八卦協議,可以帶入一種日常生活我們總是會參與到的八卦場景。
而關於八卦的八卦協議,這里不再多說,只是可以對照一下,作為一個傳遞八卦消息的人,你再被其他人八卦,是不是有一種意想不到的被人驗證的感覺?後面會再寫文詳述。
總之,通過Gossip協議,哈希圖能夠做到在秒級別實現共識(牛批吧)。因此,就能夠採用這種絕不放棄任何區塊的圖狀方式,進而提升事務打包確認的速度。不是一般的快。
有人認為哈希圖要顛覆區塊鏈的,但是哈希圖的人認為,它們會共存。-- 且當八卦,不必在意
接著引出一個新的問題給大家,我們真的關心底層技術的實現方式嗎?
支付寶好用,微信好用,我們關心它們是怎麼實現的嗎?我想絕大部分朋友是不在意的。
那麼對應到區塊鏈或者哈希圖,我們其實並不會太在意到底哪個演算法更好,而是更關心,我這個轉賬多久能夠被確認,別人給我轉的錢多久能收到。
誠然,我們不必太在意底層,但是支撐起一個良好體驗的產品,必然是從底層汲取能量。
或許,哈希圖將帶來一種嶄新的體驗。
到現在,我相信一組新詞不斷出現在大家的信息捕捉器里:
我的粗淺理解是,不帶代幣的互聯網產品都是古典的,而帶有代幣的大多數號稱價值互聯網的產品也只是耍猴,博眼球,賣空氣,更不要提國外還時不時捧出的12歲CEO,發行以太坊代幣,我歸結為賣傻兒子系列。
不管是什麼互聯網,我們的核心訴求始終都是,要好用,簡單說就是快且安全高效。
而價值呢,更多的願景仍然是希望將個人產生的價值部分乃至全部還歸於個人。
但是,任重道遠。在古典互聯網安家的90後們尚且未能全部擁抱區塊鏈,更別說80後,70後等等大部隊了。
我們終將死去,價值互聯網會在新一代的原住民中生存。
而本篇,希望帶來了一點點價值,那就很好了。
2018.4.21 -- YQ
鄭重聲明
本文里還未提到哈希圖的缺點,導致給人一種推廣軟文的感覺。本文只是純粹科普一下不同的公開記賬本實現方式,並非誘導大家投資,我個人不參加一級市場的私募,風險承擔不起,也不鼓吹大家參與。個中風險,自己衡量,自己把握。