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 交易流程
- 應(yīng)用向單個(gè)或多個(gè)節(jié)點(diǎn)(Peer)發(fā)送對(duì)交易的背書(shū)提案(Proposal)衙吩,提案包括本次交易要調(diào)用的合約標(biāo)識(shí)互妓、合約方法和參數(shù)信息以及客戶(hù)端簽名等 ;
- 背書(shū)(Endorsing)節(jié)點(diǎn)驗(yàn)證簽名并確定提交者是否有權(quán)執(zhí)行操作分井,同時(shí)根據(jù)背書(shū)策略模擬執(zhí)行智能合約车猬;
- 背書(shū)節(jié)點(diǎn)將結(jié)果及其各自的CA證書(shū)簽名返還給應(yīng)用程序客戶(hù)端;
- 應(yīng)用程序客戶(hù)端收到背書(shū)(Endorsing)節(jié)點(diǎn)返回的信息后尺锚,判斷提案結(jié)果是否一致珠闰,以及是否參照指定的背書(shū)策略執(zhí)行,如果沒(méi)有足夠的背書(shū)瘫辩,則中止處理伏嗜;否則,應(yīng)用程序客戶(hù)端把數(shù)據(jù)打包到一起組成一個(gè)交易并簽名伐厌,發(fā)送給Ordering-Service承绸;
- Ordering-Service對(duì)接收到的交易進(jìn)行共識(shí)排序,然后按照區(qū)塊生成策略挣轨,將一批交易打包到一起军熏,生成新的區(qū)塊,發(fā)送給記賬(Committting)節(jié)點(diǎn)卷扮;
- 記賬(Committting)節(jié)點(diǎn)收到區(qū)塊后荡澎,會(huì)對(duì)區(qū)塊中的每筆交易進(jìn)行校驗(yàn),檢查交易依賴(lài)的輸入輸出是否符合當(dāng)前區(qū)塊鏈的狀態(tài)晤锹,完成后將區(qū)塊追加到本地的區(qū)塊鏈摩幔,修改WorldState;
- 記賬節(jié)點(diǎn)通知應(yīng)用程序客戶(hù)端鞭铆。
Peer節(jié)點(diǎn)
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)逞力,否則重新選舉曙寡。
- Static:由系統(tǒng)管理員手動(dòng)配置一個(gè)peer成為leader,可以定義一個(gè)或多個(gè)
- Anchor Peer:gossip協(xié)議利用Anchor Peer使得不同組織中的peers相互認(rèn)識(shí)
Block
- 區(qū)塊頭
- 區(qū)塊數(shù)字
- 當(dāng)前區(qū)塊哈希,由當(dāng)前區(qū)塊數(shù)據(jù)的所有交易生成
- 前一個(gè)區(qū)塊哈希
- 區(qū)塊數(shù)據(jù)
- 區(qū)塊元數(shù)據(jù)寇荧,包括區(qū)塊寫(xiě)入的時(shí)間举庶、寫(xiě)入的人、簽名
Transaction
- 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)前信息捅膘。
智能合約和鏈碼
智能合約(Smart Contract)是區(qū)塊鏈的核心添祸,定義了各個(gè)不同組織間的業(yè)務(wù)規(guī)范,創(chuàng)建交易并記錄在賬本里寻仗。多個(gè)智能合約可以打包到一個(gè)鏈碼中刃泌。只有鏈碼(Chaincode)部署之后,智能合約才能被應(yīng)用使用。
智能合約和賬本
鏈碼的生命周期
- 打包
peer chaincode package
- 鏈碼部署規(guī)則(CDS)耙替,包含鏈碼的源碼亚侠、名稱(chēng)、版本
- 初始化policy俗扇,可以指定由誰(shuí)來(lái)實(shí)例化
- 簽名硝烂,指定鏈碼的所有者
peer chaincode signpackage
- 安裝
peer chaincode install
- 安裝到peer節(jié)點(diǎn)
- 一個(gè)peer可以安裝多個(gè)鏈碼
- 必須把鏈碼安裝到這個(gè)channel所有的背書(shū)節(jié)點(diǎn)上
- 實(shí)例化
peer chaincode instantiate
- 在一個(gè)channel上創(chuàng)建并初始化一個(gè)鏈碼
- 設(shè)置背書(shū)策略(endorsement policy)
- 運(yùn)行
peer chaincode query
||peer chaincode invoke
- 客戶(hù)端提交交易
- 智能合約處理交易,更新賬本并返回響應(yīng)
- 客戶(hù)端接收響應(yīng)
- 更新
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-Service和Committting 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ù)的交易流程
- 客戶(hù)端向背書(shū)節(jié)點(diǎn)(Endorsing Peer)提交一個(gè)帶私有數(shù)據(jù)的請(qǐng)求
- 背書(shū)節(jié)點(diǎn)模擬交易執(zhí)行吧慢,并把私有數(shù)據(jù)存儲(chǔ)在臨時(shí)數(shù)據(jù)庫(kù)中涛漂,同時(shí)通過(guò)gossip協(xié)議,把私有數(shù)據(jù)向其它有權(quán)限的peers傳播
- 當(dāng)傳播到指定數(shù)量時(shí)检诗,背書(shū)節(jié)點(diǎn)對(duì)響應(yīng)簽名并返回給客戶(hù)端匈仗,響應(yīng)不包含私有數(shù)據(jù),只是私有數(shù)據(jù)的keys和values的哈希
- 客戶(hù)端把響應(yīng)再提交給排序服務(wù)(Ordering-Service)
- Ordering-Service把交易信息傳遞給記賬節(jié)點(diǎn)(Committing Peer)
- 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中
- Committing Peers通知客戶(hù)端