Hyperledger Fabric 核心概念

file

一、說明

區(qū)塊鏈?zhǔn)且粋€透明的器一,基于不可變模式的去中心化系統(tǒng)课锌,核心就是一個分布式賬本,記錄網(wǎng)絡(luò)上發(fā)生的所有交易祈秕。

區(qū)塊鏈網(wǎng)絡(luò)主要有三種類型:公共區(qū)塊鏈渺贤、聯(lián)盟區(qū)塊鏈,以及私有區(qū)塊鏈请毛;我們熟知的比特幣志鞍、以太坊這些數(shù)字貨幣其實就是屬于公共區(qū)塊鏈平臺;

而今天要介紹的 Fabric 則是屬于聯(lián)盟鏈類型的获印;Fabric是一個企業(yè)級的分布式賬本技術(shù)平臺述雾,也是目前應(yīng)用最廣泛的區(qū)塊鏈項目。

本文將梳理區(qū)塊鏈技術(shù)平臺 Fabric 的核心概念與關(guān)鍵功能兼丰。

?

二玻孟、特點

Fabric與其他區(qū)塊鏈平臺對比有以下幾個特點:

  • 開源:它是Linux基金會旗下的一個重量級區(qū)塊鏈平臺。

  • 身份管理:fabric和其他區(qū)塊鏈系統(tǒng)的不同之處在于它是私有的鳍征,有準(zhǔn)入資格授權(quán)的黍翎,并非一個公開的允許不明身份參與者進(jìn)入網(wǎng)絡(luò)的系統(tǒng);它提供了一個成員身份服務(wù)艳丛,用于管理網(wǎng)絡(luò)上的所有參與者和權(quán)限匣掸。

  • 隱私和保密:有一個通道的概念提供了交易隱私和機(jī)密性,一個Fabric的網(wǎng)絡(luò)可以創(chuàng)建多個通道氮双,任何未正式授權(quán)的網(wǎng)絡(luò)成員都沒辦法看到或者訪問通道上的任何數(shù)據(jù)碰酝;可以理解為就是支持多租戶,通道與通道之間的數(shù)據(jù)都是隔離的戴差。

  • 鏈碼功能:智能合約在Fabric 中稱之為鏈碼送爸,用于對賬本的訪問,例如寫入交易信息,查詢數(shù)據(jù)等等袭厂。

  • 模塊化設(shè)計:Fabric實現(xiàn)了模塊化架構(gòu)墨吓,例如身份、排序纹磺、鏈碼等服務(wù)和功能帖烘,都是可選的可插拔的非常靈活。

?

三橄杨、系統(tǒng)功能

Fabric的一個功能架構(gòu)圖:


file
  • 身份管理功能是通過PKI體系和CA模塊來實現(xiàn)成員秘症、權(quán)限還有證書的管理。
  • 分布式賬本就是區(qū)塊鏈網(wǎng)絡(luò)的核心功能讥珍,記錄著所有的交易信息历极。
  • 排序服務(wù),類似一個裁判的角色衷佃,因為不同的交易順序?qū)ψ罱K的交易結(jié)果是有很大的影響的趟卸,所以這個排序服務(wù)主要是為了讓所有的節(jié)點達(dá)成統(tǒng)一的共識,最終實現(xiàn)數(shù)據(jù)的一致性氏义。
  • 網(wǎng)絡(luò)通信方面锄列,節(jié)點與節(jié)點之間的點對點通信是基于grpc協(xié)議,然后再通過gossip算法來實現(xiàn)去中心化的廣播邻邮,意思就是不需要中心節(jié)點,通過任意一個節(jié)點以一傳十克婶,十傳百的方式來把消息散播到全網(wǎng)筒严。
  • 背書驗證指的是背書策略,背書策略有很多種情萤,例如我指定策略為大多數(shù)節(jié)點同意鸭蛙,意思就是一筆交易必需超過半數(shù)的節(jié)點都認(rèn)證通過了,才能完成筋岛,這樣就能有效的防御一些惡意的交易娶视。
  • 鏈碼服務(wù)是一個獨立的應(yīng)用程序,運(yùn)行在隔離的Docker容器中睁宰,在鏈碼部署的時候會自動生成鏈碼的Docker鏡像肪获。

?

四、組件邏輯關(guān)系

file
  1. 圖中的淺藍(lán)色方塊 N 代表整個區(qū)塊鏈網(wǎng)絡(luò)柒傻;
  2. 網(wǎng)絡(luò)底部的 C通道 相當(dāng)于是一個子鏈孝赫,一個區(qū)塊鏈網(wǎng)絡(luò)可以創(chuàng)建多個通道,通道與通道之間是數(shù)據(jù)隔離的红符,可以理解為是一個多租戶系統(tǒng)青柄;
  3. 一個通道上面可以部署多個 Peer 節(jié) 點為圖中藍(lán)色方塊 P1P2劫映,區(qū)塊鏈網(wǎng)絡(luò)主要由 Peer 節(jié) 點組成;
  4. 每個 Peer 節(jié) 點上都有一份 賬本 的全量副本為紅色的 L1刹前,然后 智能合約 是部署在每個節(jié)點上的為黃色 S1,一個節(jié)點可以部署多個 智能合約雌桑;
  5. 最后區(qū)塊鏈網(wǎng)絡(luò)外面的白色方塊A指的是訪問區(qū)塊鏈的 應(yīng)用喇喉,應(yīng)用是通過通道來與節(jié)點上的賬本進(jìn)行交易的。

?

五校坑、賬本

賬本是 Hyperledger Fabric 中的一個重要概念拣技,它存儲了有關(guān)業(yè)務(wù)對象的重要事實信息,其中既包括對象屬性的當(dāng)前值耍目,也包括產(chǎn)生這些當(dāng)前值的交易的歷史膏斤。

賬本由一個區(qū)塊鏈(鏈)構(gòu)成,并將不可變的邪驮、有序的記錄存放在區(qū)塊中莫辨;同時包含一個狀態(tài)數(shù)據(jù)庫來記錄當(dāng)前的Fabric狀態(tài)。每個 通道 中各有 一個賬本毅访。各個節(jié)點對于它所屬的每個通道沮榜,都會保存一份該通道的 賬本副本

如下圖所示喻粹,Hyperledger Fabric 中的賬本由“世界狀態(tài)“和”區(qū)塊鏈“這兩部分組成:

file

世界狀態(tài):世界狀態(tài)是以數(shù)據(jù)庫的形式實現(xiàn)蟆融,默認(rèn)使用的是LevelDB,這是一個KeyValue數(shù)據(jù)庫守呜;里面記錄的是業(yè)務(wù)對象的最新值型酥;智能合約主要與賬本中的世界狀態(tài)進(jìn)行交互。

區(qū)塊鏈:以文件形式實現(xiàn)的查乒,記錄交易日志明細(xì)弥喉,相當(dāng)于是一個交易的臺賬表。

例如有一個銀行賬戶侣颂,發(fā)生一次存款和三次取款操作档桃,則最終區(qū)塊鏈里面會記錄四條記錄的日志,而世界狀態(tài)則只記錄一條記錄憔晒,就是當(dāng)前賬戶最新的余額藻肄。

?

六、智能合約

智能合約 是一個運(yùn)行在賬本上的應(yīng)用程序拒担,它可以對資產(chǎn)進(jìn)行編碼嘹屯,其中的交易指令(或者叫業(yè)務(wù)邏輯)也可以用來修改資產(chǎn)。

Fabric2.0 以后引入了新的生命周期來管理合約:

file
  1. 首先第一步開發(fā)合約:需要依賴原生的合約 sdk从撼,支持包括 Java州弟、js 和 Golang 三種開發(fā)語言钧栖。
  2. 開完合約后,管理員可以使用 package 子命令來打包合約婆翔,并生成打包文件拯杠。打包命令默認(rèn)程序是 golang 語言,可以使用 -l 參數(shù)來指定其他語言啃奴。
  3. 一次打包可以多次安裝潭陪,然后接著使用 install 命令在指定的 peer 節(jié)點上安裝合約。
  4. 安裝成功后最蕾,接著使用 approveformyorg 命令代表所在機(jī)構(gòu)審批合約依溯,并且指定背書策略。
  5. 最后使用 commit 命令向指定的通道提交合約定義瘟则,執(zhí)行完這一步智能合約就部署成功黎炉,正式生效了。
  6. 接下來我們就可以編寫應(yīng)用程序來與區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行交易了醋拧,F(xiàn)abric 封裝了一套網(wǎng)關(guān) SDK 給應(yīng)用程序使用慷嗜,通過一系列的簡單 API 就實現(xiàn)和區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行交互。

關(guān)于 Java 智能合約的開發(fā)可以看我之前的文章《Hyperledger Fabric 2.x 自定義智能合約

?

七丹壕、交易流程

file
  1. 首先區(qū)塊鏈應(yīng)用發(fā)起一筆交易洪添;
  2. 然后 背書節(jié)點 對交易進(jìn)行簽名驗證,返回驗證結(jié)果雀费;
  3. 客戶端將背書結(jié)果封裝發(fā)給 Peer 節(jié)點干奢,然后再提交給 Order 節(jié)點進(jìn)行數(shù)據(jù)同步;
  4. Order 節(jié)點按順序把交易信息同步給其他的 Peer 節(jié)點進(jìn)行驗證和提交盏袄;
  5. 最后賬本更新忿峻,完成整個交易。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辕羽,一起剝皮案震驚了整個濱河市逛尚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刁愿,老刑警劉巖绰寞,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異铣口,居然都是意外死亡滤钱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門脑题,熙熙樓的掌柜王于貴愁眉苦臉地迎上來件缸,“玉大人,你說我怎么就攤上這事叔遂∷叮” “怎么了争剿?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長痊末。 經(jīng)常有香客問我蚕苇,道長,這世上最難降的妖魔是什么凿叠? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任捆蜀,我火速辦了婚禮,結(jié)果婚禮上幔嫂,老公的妹妹穿的比我還像新娘。我一直安慰自己誊薄,他們只是感情好履恩,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呢蔫,像睡著了一般切心。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上片吊,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天绽昏,我揣著相機(jī)與錄音,去河邊找鬼俏脊。 笑死全谤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爷贫。 我是一名探鬼主播认然,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼漫萄!你這毒婦竟也來了卷员?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腾务,失蹤者是張志新(化名)和其女友劉穎毕骡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岩瘦,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡未巫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了启昧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橱赠。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖箫津,靈堂內(nèi)的尸體忽然破棺而出狭姨,到底是詐尸還是另有隱情宰啦,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布饼拍,位于F島的核電站赡模,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏师抄。R本人自食惡果不足惜漓柑,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叨吮。 院中可真熱鬧辆布,春花似錦、人聲如沸茶鉴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娩缰。三九已至熙含,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間割粮,已是汗流浹背盾碗。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留舀瓢,地道東北人廷雅。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像京髓,于是被迫代替她去往敵國和親榜轿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容