初識(shí)Hyperledger Fabric

Hyperledger 頂級(jí)項(xiàng)目

  • Hyperledger Sawtooth:一個(gè)創(chuàng)建塔拳、部署和運(yùn)行分布式賬本的模塊化平臺(tái)跑揉。包含一個(gè)新奇的共識(shí)算法——經(jīng)歷時(shí)間證明(Proof of Elapsed Time黍衙,簡(jiǎn)稱(chēng)PoET)凌净,面向大型分布式驗(yàn)證器群寻狂,消耗最少的資源邓萨。
  • Hyperledger Iroha:為了將分布式賬本技術(shù)簡(jiǎn)單容易地與基礎(chǔ)架構(gòu)項(xiàng)目集成而設(shè)計(jì)的一個(gè)區(qū)塊鏈框架項(xiàng)目蠕嫁。
  • Hyperledger Indy:特別為去中心化的身份而建立的一種分布式賬本锨天。它提供了基于區(qū)塊鏈或者其它分布式賬本互操作來(lái)創(chuàng)建和使用獨(dú)立數(shù)字身份的工具、代碼庫(kù)和可以重用的組件剃毒。
  • Hyperledger Burrow:一個(gè)支持許可的智能合約機(jī)病袄,burrow提供了一個(gè)模塊化的區(qū)塊鏈客戶(hù)端,帶一個(gè)經(jīng)許可的智能合約解釋器赘阀,它部分建立在以太坊虛擬機(jī)(EVM)規(guī)范的基礎(chǔ)上益缠。
  • Hyperledger Fabric:一個(gè)帶有準(zhǔn)入機(jī)制的企業(yè)級(jí)聯(lián)盟鏈項(xiàng)目,它的前身是IBM貢獻(xiàn)的OpenBlockchain基公。
  • Hyperledger Explorer:由Intel幅慌、DTCC、IBM推出的使用nodejs制作的面向web的UI轰豆,可以方便的看到區(qū)塊胰伍、節(jié)點(diǎn)等統(tǒng)計(jì)信息,很方便地進(jìn)行數(shù)據(jù)的展示酸休。
  • Hyperledger Cello:由IBM推出的區(qū)塊鏈操作系統(tǒng)骂租,使用Python和JavaScript開(kāi)發(fā),支持多種底層基礎(chǔ)設(shè)施斑司,高性能渗饮,可擴(kuò)展,可插拔宿刮。
  • Hyperledger Caliper:由華為推出的互站,使用nodejs開(kāi)發(fā),可以評(píng)估fabric糙置、sawtooth等性能云茸。
  • Hyperledger Usra:由Fujitsu、Sovrin谤饭、Intel等推出标捺,使用rust開(kāi)發(fā),包含兩個(gè)子項(xiàng)目:Base Crypto和Z-Mix揉抵。
  • Hyperledger Grid:由Cargil亡容、Intel、Bitwise Io推出冤今,使用Python開(kāi)發(fā)闺兢,專(zhuān)注于供應(yīng)鏈領(lǐng)域,可以方便的開(kāi)發(fā)出供應(yīng)鏈領(lǐng)域的區(qū)塊鏈應(yīng)用。

Fabric 名詞解釋

  • Membership Services:成員服務(wù)屋谭,用來(lái)在許可的區(qū)塊鏈網(wǎng)絡(luò)上認(rèn)證脚囊、授權(quán)和管理身份。
  • Ordering Service:排序或者共識(shí)服務(wù)桐磁,確認(rèn)交易悔耘,并將交易排序放入block。
  • Ledger:賬本我擂,交易狀態(tài)的持久化衬以。
  • Node:節(jié)點(diǎn),一個(gè)網(wǎng)絡(luò)實(shí)體用來(lái)維護(hù)Ledger校摩,執(zhí)行合約的容器看峻。
  • SDK:用來(lái)和區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行交互。

Fabric 架構(gòu)

fabric 架構(gòu)圖.png

Fabric 交易流程

fabric交易流程.png
  1. 應(yīng)用向單個(gè)或多個(gè)節(jié)點(diǎn)(Peer)發(fā)送對(duì)交易的背書(shū)提案(Proposal)衙吩,提案包括本次交易要調(diào)用的合約標(biāo)識(shí)互妓、合約方法和參數(shù)信息以及客戶(hù)端簽名等 ;
  2. 背書(shū)(Endorsing)節(jié)點(diǎn)驗(yàn)證簽名并確定提交者是否有權(quán)執(zhí)行操作分井,同時(shí)根據(jù)背書(shū)策略模擬執(zhí)行智能合約车猬;
  3. 背書(shū)節(jié)點(diǎn)將結(jié)果及其各自的CA證書(shū)簽名返還給應(yīng)用程序客戶(hù)端;
  4. 應(yīng)用程序客戶(hù)端收到背書(shū)(Endorsing)節(jié)點(diǎn)返回的信息后尺锚,判斷提案結(jié)果是否一致珠闰,以及是否參照指定的背書(shū)策略執(zhí)行,如果沒(méi)有足夠的背書(shū)瘫辩,則中止處理伏嗜;否則,應(yīng)用程序客戶(hù)端把數(shù)據(jù)打包到一起組成一個(gè)交易并簽名伐厌,發(fā)送給Ordering-Service承绸;
  5. Ordering-Service對(duì)接收到的交易進(jìn)行共識(shí)排序,然后按照區(qū)塊生成策略挣轨,將一批交易打包到一起军熏,生成新的區(qū)塊,發(fā)送給記賬(Committting)節(jié)點(diǎn)卷扮;
  6. 記賬(Committting)節(jié)點(diǎn)收到區(qū)塊后荡澎,會(huì)對(duì)區(qū)塊中的每筆交易進(jìn)行校驗(yàn),檢查交易依賴(lài)的輸入輸出是否符合當(dāng)前區(qū)塊鏈的狀態(tài)晤锹,完成后將區(qū)塊追加到本地的區(qū)塊鏈摩幔,修改WorldState;
  7. 記賬節(jié)點(diǎn)通知應(yīng)用程序客戶(hù)端鞭铆。

Peer節(jié)點(diǎn)

fabric peer.png

Fabric是聯(lián)盟鏈或衡,Peer代表一系列組織,Peers是整個(gè)區(qū)塊鏈網(wǎng)絡(luò)的基礎(chǔ),因?yàn)樗琴~本和智能合約的載體封断。通過(guò)智能合約斯辰,賬本通過(guò)不可篡改的方式記錄了交易的全過(guò)程。

對(duì)于不能的公司來(lái)說(shuō)坡疼,是有不同的業(yè)務(wù)的椒涯,不同的業(yè)務(wù)又與不同的公司相關(guān)聯(lián),需要?jiǎng)?chuàng)建多個(gè)聯(lián)盟鏈回梧,因此就需要?jiǎng)?chuàng)建多個(gè)channel,channel是多個(gè)特定成員之間以機(jī)密交易為目的建立的私網(wǎng)祖搓,一個(gè)peer可以加入多個(gè)channel狱意,每個(gè)channel維護(hù)自己的賬本,賬本和賬本之間是隔離的拯欧,每個(gè)channel可以維護(hù)一個(gè)或多個(gè)賬本详囤。所以為了滿(mǎn)足復(fù)雜的交易需求,每個(gè)peer上可以安裝不同的智能合約镐作,當(dāng)peer交易完成時(shí)藏姐,會(huì)發(fā)送事件通知Client。peer上還有一個(gè)Local MSP(成員服務(wù)提供器)服務(wù)该贾,提供身份認(rèn)證和加密簽名等功能羔杨。

Leader Peer和Anchor Peer

  • Leader Peer
    • 連接ordering service并拉取新的區(qū)塊
    • 分配交易給組織中的其它c(diǎn)ommitting peers
    • 一個(gè)組織可以有一個(gè)或多個(gè)leader peer
    • 成為leader peer的方式(Election):
      • Static:由系統(tǒng)管理員手動(dòng)配置一個(gè)peer成為leader,可以定義一個(gè)或多個(gè)gossip:useLeaderElection:false orgLeader:true
      • Dynamic:peers執(zhí)行一個(gè)leader選舉程序杨蛋,useLeaderEection:true orgLeader:false election:leaderAliveThreshold:10s兜材,被選中的peer必須向其它peers發(fā)送活著的信息,來(lái)證明是活著的節(jié)點(diǎn)逞力,否則重新選舉曙寡。
  • Anchor Peer:gossip協(xié)議利用Anchor Peer使得不同組織中的peers相互認(rèn)識(shí)

Block

block.png
  • 區(qū)塊頭
    • 區(qū)塊數(shù)字
    • 當(dāng)前區(qū)塊哈希,由當(dāng)前區(qū)塊數(shù)據(jù)的所有交易生成
    • 前一個(gè)區(qū)塊哈希
  • 區(qū)塊數(shù)據(jù)
  • 區(qū)塊元數(shù)據(jù)寇荧,包括區(qū)塊寫(xiě)入的時(shí)間举庶、寫(xiě)入的人、簽名

Transaction

transaction.png
  • Header:交易頭揩抡,包含ChainCode的名字户侥、版本等信息
  • Signature:客戶(hù)端用戶(hù)(發(fā)請(qǐng)求者)的簽名
  • Proposal:客戶(hù)端給背書(shū)節(jié)點(diǎn)發(fā)送的請(qǐng)求
  • Response:智能合約執(zhí)行的結(jié)構(gòu)
  • Endorsements:每個(gè)背書(shū)節(jié)點(diǎn)返回的結(jié)果

World State

WorldState 以key-value的形式,維護(hù)著當(dāng)前賬本的當(dāng)前信息捅膘。

WorldState.png

智能合約和鏈碼

智能合約(Smart Contract)是區(qū)塊鏈的核心添祸,定義了各個(gè)不同組織間的業(yè)務(wù)規(guī)范,創(chuàng)建交易并記錄在賬本里寻仗。多個(gè)智能合約可以打包到一個(gè)鏈碼中刃泌。只有鏈碼(Chaincode)部署之后,智能合約才能被應(yīng)用使用。

智能合約和賬本

智能合約和賬本.png

鏈碼的生命周期

鏈碼生命周期.png
  1. 打包 peer chaincode package
    • 鏈碼部署規(guī)則(CDS)耙替,包含鏈碼的源碼亚侠、名稱(chēng)、版本
    • 初始化policy俗扇,可以指定由誰(shuí)來(lái)實(shí)例化
    • 簽名硝烂,指定鏈碼的所有者 peer chaincode signpackage
  2. 安裝 peer chaincode install
    • 安裝到peer節(jié)點(diǎn)
    • 一個(gè)peer可以安裝多個(gè)鏈碼
    • 必須把鏈碼安裝到這個(gè)channel所有的背書(shū)節(jié)點(diǎn)上
  3. 實(shí)例化 peer chaincode instantiate
    • 在一個(gè)channel上創(chuàng)建并初始化一個(gè)鏈碼
    • 設(shè)置背書(shū)策略(endorsement policy)
  4. 運(yùn)行 peer chaincode query||peer chaincode invoke
    • 客戶(hù)端提交交易
    • 智能合約處理交易,更新賬本并返回響應(yīng)
    • 客戶(hù)端接收響應(yīng)
  5. 更新 peer chaincode upgrade
    • 鏈碼可以在任何時(shí)候通過(guò)修改版本進(jìn)行更新
    • 在更新之前铜幽,必須把新版本安裝到所有的背書(shū)節(jié)點(diǎn)上
    • 類(lèi)似于實(shí)例化過(guò)程滞谢,每次只影響一個(gè)channel

系統(tǒng)鏈碼

不同于一般的鏈碼運(yùn)行在一個(gè)獨(dú)立的容器,系統(tǒng)鏈碼運(yùn)行在peer進(jìn)程上除抛,實(shí)現(xiàn)了一些系統(tǒng)行為狮杨。

  • 生命周期系統(tǒng)鏈碼(LSCC):用來(lái)處理應(yīng)用鏈碼的生命周期請(qǐng)求
  • 配置系統(tǒng)鏈碼(CSCC):在peer端處理channel的配置
  • 查詢(xún)系統(tǒng)鏈碼(QSCC):提供了獲取區(qū)塊和交易的賬本查詢(xún)API

Gossip Protocol

Fabric為了優(yōu)化網(wǎng)絡(luò)性能,提高安全性和可擴(kuò)展性到忽,將每個(gè)交易分到Endorsing Peer橄教、Ording-ServiceCommittting Peer三個(gè)部分,這就需要一種安全的喘漏,可信的和可擴(kuò)展的數(shù)據(jù)傳輸協(xié)議——Gossip Protocol护蝶。Gossip傳輸協(xié)議以隨機(jī)的方式將信息散播到網(wǎng)絡(luò)中,主要執(zhí)行三個(gè)功能:

  • 維護(hù)和管理channel的peers成員翩迈,發(fā)現(xiàn)新的peer不斷探測(cè)新peer的狀態(tài)并更新channel的membership
  • 給channel上所有的peers傳播賬本數(shù)據(jù)
  • 對(duì)于新的peers持灰,允許peer-to-peer傳輸數(shù)據(jù)來(lái)更新賬本

Gossip Messaging

  • 在線(xiàn)的peers會(huì)不斷的向周?chē)シ拧癮live”信息來(lái)證明是活著的
  • peers通過(guò)收集這些“alive”信息來(lái)維護(hù)channel的成員信息
  • 當(dāng)leader從ordering service拿到新的區(qū)塊交易信息,會(huì)傳播其它的peer帽馋,每個(gè)peer拿到新的交易信息搅方,存到賬本,并自動(dòng)不斷的散發(fā)給其它peer
  • 每個(gè)peer會(huì)和周?chē)膒eers詢(xún)問(wèn)狀態(tài)是否匹配绽族,假如驗(yàn)證不同姨涡,則從channel上的其它peers上拉取最新的區(qū)塊,來(lái)修復(fù)自己的狀態(tài)
  • 一個(gè)channel上的peers不能和其它c(diǎn)hannel的peers發(fā)送和共享信息

私有數(shù)據(jù)

  • 機(jī)密數(shù)據(jù)存貯在每個(gè)授權(quán)peer的私有數(shù)據(jù)庫(kù)
  • 私有數(shù)據(jù)收集策略來(lái)定義授權(quán)peers
  • Ordering service不會(huì)看到私有數(shù)據(jù)
  • 私有數(shù)據(jù)通過(guò)gossip協(xié)議peer-to-peer發(fā)送

帶私有數(shù)據(jù)的交易流程

私有數(shù)據(jù)交易流程.png
  1. 客戶(hù)端向背書(shū)節(jié)點(diǎn)(Endorsing Peer)提交一個(gè)帶私有數(shù)據(jù)的請(qǐng)求
  2. 背書(shū)節(jié)點(diǎn)模擬交易執(zhí)行吧慢,并把私有數(shù)據(jù)存儲(chǔ)在臨時(shí)數(shù)據(jù)庫(kù)中涛漂,同時(shí)通過(guò)gossip協(xié)議,把私有數(shù)據(jù)向其它有權(quán)限的peers傳播
  3. 當(dāng)傳播到指定數(shù)量時(shí)检诗,背書(shū)節(jié)點(diǎn)對(duì)響應(yīng)簽名并返回給客戶(hù)端匈仗,響應(yīng)不包含私有數(shù)據(jù),只是私有數(shù)據(jù)的keys和values的哈希
  4. 客戶(hù)端把響應(yīng)再提交給排序服務(wù)(Ordering-Service)
  5. Ordering-Service把交易信息傳遞給記賬節(jié)點(diǎn)(Committing Peer)
  6. Committing Peer對(duì)帶有私有數(shù)據(jù)哈希的交易和臨時(shí)數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)進(jìn)行驗(yàn)證比較逢慌,驗(yàn)證無(wú)誤后悠轩,將私有數(shù)據(jù)存儲(chǔ)到真實(shí)的私有數(shù)據(jù)庫(kù)中,提交交易和區(qū)塊到Worldstate中
  7. Committing Peers通知客戶(hù)端
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末攻泼,一起剝皮案震驚了整個(gè)濱河市火架,隨后出現(xiàn)的幾起案子鉴象,更是在濱河造成了極大的恐慌,老刑警劉巖何鸡,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纺弊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡骡男,警方通過(guò)查閱死者的電腦和手機(jī)淆游,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)隔盛,“玉大人犹菱,你說(shuō)我怎么就攤上這事∷笨唬” “怎么了已亥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)来屠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)震鹉,這世上最難降的妖魔是什么俱笛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮传趾,結(jié)果婚禮上迎膜,老公的妹妹穿的比我還像新娘。我一直安慰自己浆兰,他們只是感情好磕仅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著簸呈,像睡著了一般榕订。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜕便,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天劫恒,我揣著相機(jī)與錄音,去河邊找鬼轿腺。 笑死两嘴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的族壳。 我是一名探鬼主播憔辫,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仿荆!你這毒婦竟也來(lái)了贰您?” 一聲冷哼從身側(cè)響起坏平,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枉圃,沒(méi)想到半個(gè)月后功茴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孽亲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年坎穿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片返劲。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玲昧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出篮绿,到底是詐尸還是另有隱情孵延,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布亲配,位于F島的核電站尘应,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吼虎。R本人自食惡果不足惜犬钢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望思灰。 院中可真熱鬧玷犹,春花似錦、人聲如沸洒疚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)油湖。三九已至巍扛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乏德,已是汗流浹背电湘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹅经,地道東北人寂呛。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瘾晃,于是被迫代替她去往敵國(guó)和親贷痪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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