您好,登錄后才能下訂單哦!
基礎(chǔ)介紹
Hyperledger fabric——區(qū)塊鏈?zhǔn)澜绲男孪M?/strong>
2015 年 12 月,開(kāi)源世界的旗艦組織 —— Linux 基金會(huì)牽頭,聯(lián)合 30 家初始企業(yè)成員(包括 IBM、Accenture、Intel、J.P.Morgan、R3、DAH、DTCC、FUJITSU、HITACHI、SWIFT、Cisco 等),共同宣布了超級(jí)賬本(Hyperledger)聯(lián)合項(xiàng)目的成立。超級(jí)賬本項(xiàng)目致力為透明、公開(kāi)、去中心化的企業(yè)級(jí)分布式賬本技術(shù)提供開(kāi)源參考實(shí)現(xiàn),并推動(dòng)區(qū)塊鏈和分布式賬本相關(guān)協(xié)議、規(guī)范和標(biāo)準(zhǔn)的發(fā)展。項(xiàng)目官方網(wǎng)站為 hyperledger.org ,Hyperledger fabric 是其重要的項(xiàng)目之一。
很多新同學(xué)對(duì)區(qū)塊鏈很多專(zhuān)屬名詞可能不是太了解,所以第一節(jié)跟大家先介紹一下Hyperledger fabric 中涉及到的名詞。
名詞介紹:
Anchor Peer – 錨節(jié)點(diǎn)錨節(jié)點(diǎn)是通道中能被所有對(duì)等節(jié)點(diǎn)探測(cè)、并能與之進(jìn)行通信的一種對(duì)等節(jié)點(diǎn)。通道中的每個(gè)成員都有一個(gè)(或多個(gè),以防單點(diǎn)故障)錨節(jié)點(diǎn),允許屬于不同成員身份的節(jié)點(diǎn)來(lái)發(fā)現(xiàn)通道中存在的其它節(jié)點(diǎn)。
Block – 區(qū)塊在一個(gè)通道上,(區(qū)塊是)一組有序交易的集合。區(qū)塊往往通過(guò)密碼學(xué)手段(Hash 值)連接到前導(dǎo)區(qū)塊。
Zhu Jiang:區(qū)塊是一組有序的交易集合,在通道中經(jīng)過(guò)加密(哈希加密)后與前序區(qū)塊連接。
Chain – 鏈chain就是block之間以hash連接為結(jié)構(gòu)的交易日志。peer從order service接收交易block,并根據(jù)背書(shū)策略和并發(fā)沖突標(biāo)記block上的交易是否有效,然后將該block追加到peer文件系統(tǒng)中的hash chain上。Z
hu Jiang:賬本的鏈?zhǔn)且粋€(gè)交易區(qū)塊經(jīng)過(guò)“哈希連接”結(jié)構(gòu)化的交易日志。對(duì)等節(jié)點(diǎn)從排序服務(wù)收到交易區(qū)塊,基于背書(shū)策略和并發(fā)沖突來(lái)標(biāo)注區(qū)塊的交易為有效或者無(wú)效狀態(tài),并且將區(qū)塊追加到對(duì)等節(jié)點(diǎn)文件系統(tǒng)的哈希鏈中。
Chaincode – 鏈碼鏈碼是一個(gè)運(yùn)行在賬本上的軟件,它可以對(duì)資產(chǎn)進(jìn)行編碼,其中的交易指令(或者叫業(yè)務(wù)邏輯)也可以用來(lái)修改資產(chǎn)。
Channel – 通道通道是構(gòu)建在“Fabric”網(wǎng)絡(luò)上的私有區(qū)塊鏈,實(shí)現(xiàn)了數(shù)據(jù)的隔離和保密。通道特定的賬本在通道中是與所有對(duì)等節(jié)點(diǎn)共享的,并且交易方必須通過(guò)該通道的正確驗(yàn)證才能與賬本進(jìn)行交互。通道是由一個(gè)“配置塊”來(lái)定義的。
Commitment – 提交一個(gè)通道中的每個(gè)對(duì)等節(jié)點(diǎn)都會(huì)驗(yàn)證交易的有序區(qū)塊,然后將區(qū)塊提交(寫(xiě)或追加)至該通道上賬本的各個(gè)副本。對(duì)等節(jié)點(diǎn)也會(huì)標(biāo)記每個(gè)區(qū)塊中的每筆交易的狀態(tài)是有效或者無(wú)效。
Concurrency Control Version Check – 并發(fā)控制版本檢查(CCVC)CCVC是保持通道中各對(duì)等節(jié)點(diǎn)間狀態(tài)同步的一種方法。對(duì)等節(jié)點(diǎn)并行的執(zhí)行交易,在交易提交至賬本之前,對(duì)等節(jié)點(diǎn)會(huì)檢查交易在執(zhí)行期間讀到的數(shù)據(jù)是否被修改。如果讀取的數(shù)據(jù)在執(zhí)行和提交之間被改變,就會(huì)引發(fā)CCVC沖突,該交易就會(huì)在賬本中被標(biāo)記為無(wú)效,而且值不會(huì)更新到狀態(tài)數(shù)據(jù)庫(kù)中。
Configuration Block – 配置區(qū)塊包含為系統(tǒng)鏈(排序服務(wù))或通道定義成員和策略的配置數(shù)據(jù)。對(duì)某個(gè)通道或整個(gè)網(wǎng)絡(luò)的配置修改(比如,成員離開(kāi)或加入)都將導(dǎo)致生成一個(gè)新的配置區(qū)塊并追加到適當(dāng)?shù)逆溕?。這個(gè)配置區(qū)塊會(huì)包含創(chuàng)始區(qū)塊的內(nèi)容加上增量。
Consensus – 共識(shí)共識(shí)是貫穿整個(gè)交易流程的廣義術(shù)語(yǔ),其用于產(chǎn)生一個(gè)對(duì)于排序的同意書(shū)和確認(rèn)構(gòu)成區(qū)塊的交易集的正確性。
Current State – 當(dāng)前狀態(tài)ledger的current state表示其chain交易log中所有key的最新值。peer會(huì)將處理過(guò)的block中的每個(gè)交易對(duì)應(yīng)的修改value提交到ledger的current state,由于current state表示channel所知的所有最新的k-v,所以current state也被稱(chēng)為World State。Chaincode執(zhí)行交易proposal就是針對(duì)的current state。
Dynamic Membership – 動(dòng)態(tài)成員Fabric支持動(dòng)態(tài)添加-移除members、peers和ordering服務(wù)節(jié)點(diǎn),而不會(huì)影響整個(gè)網(wǎng)絡(luò)的操作性。當(dāng)業(yè)務(wù)關(guān)系調(diào)整或因各種原因需添加-移除實(shí)體時(shí),Dynamic Membership至關(guān)重要。
Endorsement – 背書(shū)Endorsement 是指一個(gè)peer執(zhí)行一個(gè)交易并返回YES-NO給生成交易proposal的client app 的過(guò)程。chaincode具有相應(yīng)的endorsement policies,其中指定了endorsing peer。
Endorsement policy – 背書(shū)策略Endorsement policy定義了依賴(lài)于特定chaincode執(zhí)行交易的channel上的peer和響應(yīng)結(jié)果(endorsements)的必要組合條件(即返回Yes或No的條件)。
Endorsement policy可指定對(duì)于某一chaincode,可以對(duì)交易背書(shū)的最小背書(shū)節(jié)點(diǎn)數(shù)或者最小背書(shū)節(jié)點(diǎn)百分比。背書(shū)策略由背書(shū)節(jié)點(diǎn)基于應(yīng)用程序和對(duì)抵御不良行為的期望水平來(lái)組織管理。在install和instantiate Chaincode(deploy tx)時(shí)需要指定背書(shū)策略。
Fabric-caFabric-ca是默認(rèn)的證書(shū)管理組件,它向網(wǎng)絡(luò)成員及其用戶(hù)頒發(fā)基于PKI的證書(shū)。CA為每個(gè)成員頒發(fā)一個(gè)根證書(shū)(rootCert),為每個(gè)授權(quán)用戶(hù)頒發(fā)一個(gè)注冊(cè)證書(shū)(eCert),為每個(gè)注冊(cè)證書(shū)頒發(fā)大量交易證書(shū)(tCerts)。
Genesis Block – 初始區(qū)塊Genesis Block是初始化區(qū)塊鏈網(wǎng)絡(luò)或channel的配置區(qū)塊,也是鏈上的第一個(gè)區(qū)塊。
Gossip Protocol – Gossip協(xié)議Gossip數(shù)據(jù)傳輸協(xié)議有三項(xiàng)功能:
1)管理peer發(fā)現(xiàn)和channel成員;
2)channel上的所有peer間廣播賬本數(shù)據(jù);
3)channel上的所有peer間同步賬本數(shù)據(jù)。
Initialize – 初始化一個(gè)初始化chaincode程序的方法。
Install – 安裝將chaincode放到peer的文件系統(tǒng)的過(guò)程。(譯注:即將ChaincodeDeploymentSpec信息存到chaincodeInstallPath-chaincodeName.chainVersion文件中)
Instantiate – 實(shí)例化啟動(dòng)chaincode容器的過(guò)程。(譯注:在lccc中將ChaincodeData保存到state中,然后deploy Chaincode并執(zhí)行Init方法)Invoke – 調(diào)用用于調(diào)用chaincode內(nèi)的函數(shù)。
Chaincode invoke就是一個(gè)交易proposal,然后執(zhí)行模塊化的流程(背書(shū)、共識(shí)、 驗(yàn)證、 提交)。invoke的結(jié)構(gòu)就是一個(gè)函數(shù)和一個(gè)參數(shù)數(shù)組。
Leading Peer – 主導(dǎo)節(jié)點(diǎn)每一個(gè)Member在其訂閱的channel上可以擁有多個(gè)peer,其中一個(gè)peer會(huì)作為channel的leading peer代表該Member與ordering service通信。ordering service將block傳遞給leading peer,該peer再將此block分發(fā)給同一member下的其他peer。
Ledger – 賬本A ledger is a channel’s chain and current state data which is maintained by each peer on the channel.Ledger是個(gè)channel的chain和由channel中每個(gè)peer維護(hù)的world state。(這個(gè)解釋有點(diǎn)怪)
Member – 成員擁有網(wǎng)絡(luò)唯一根證書(shū)的合法獨(dú)立實(shí)體。像peer節(jié)點(diǎn)和app client這樣的網(wǎng)絡(luò)組件會(huì)鏈接到一個(gè)Member。
Membership Service Provider – MSPMSP是指為client和peer提供證書(shū)的系統(tǒng)抽象組件。
Client用證書(shū)來(lái)認(rèn)證他們的交易;peer用證書(shū)認(rèn)證其交易背書(shū)。該接口與系統(tǒng)的交易處理組件密切相關(guān),旨在使已定義的成員身份服務(wù)組件以這種方式順利插入而不會(huì)修改系統(tǒng)的交易處理組件的核心。
Membership Services – 成員服務(wù)成員服務(wù)在許可的區(qū)塊鏈網(wǎng)絡(luò)上認(rèn)證、授權(quán)和管理身份。
在peer和order中運(yùn)行的成員服務(wù)的代碼都會(huì)認(rèn)證和授權(quán)區(qū)塊鏈操作。它是基于PKI的MSP實(shí)現(xiàn)。fabric-ca組件實(shí)現(xiàn)了成員服務(wù),來(lái)管理身份。特別的,它處理ECert和TCert的頒發(fā)和撤銷(xiāo)。ECert是長(zhǎng)期的身份憑證;TCert是短期的身份憑證,是匿名和不可鏈接的。
Ordering Service – 排序服務(wù)或共識(shí)服務(wù)將交易排序放入block的節(jié)點(diǎn)的集合。
ordering service獨(dú)立于peer流程之外,并以先到先得的方式為網(wǎng)絡(luò)上所有的channel作交易排序。ordering service支持可插拔實(shí)現(xiàn),目前默認(rèn)實(shí)現(xiàn)了SOLO和Kafka。ordering service是整個(gè)網(wǎng)絡(luò)的公用binding,包含與每個(gè)Member相關(guān)的加密材料。Peer – 節(jié)點(diǎn)一個(gè)網(wǎng)絡(luò)實(shí)體,維護(hù)ledger并運(yùn)行Chaincode容器來(lái)對(duì)ledger執(zhí)行read-write操作。peer由Member擁有和維護(hù)。
Policy – 策略有背書(shū)策略,校驗(yàn)策略,區(qū)塊提交策略,Chaincode管理策略和網(wǎng)絡(luò)-通道管理策略。
Proposal – 提案一種針對(duì)channel中某peer的背書(shū)請(qǐng)求。每個(gè)proposal要么是Chaincode instantiate要么是Chaincode invoke。
Query – 查詢(xún)對(duì)于current state中某個(gè)key的value的查詢(xún)請(qǐng)求。
Software Development Kit – SDKSDK為開(kāi)發(fā)人員提供了一個(gè)結(jié)構(gòu)化的庫(kù)環(huán)境,用于編寫(xiě)和測(cè)試鏈碼應(yīng)用程序。
SDK完全可以通過(guò)標(biāo)準(zhǔn)接口實(shí)現(xiàn)配置和擴(kuò)展,像簽名的加密算法、日志框架和state存儲(chǔ)這樣的組件都可以輕松地實(shí)現(xiàn)替換。SDK API使用gRPC進(jìn)行交易處理,成員服務(wù)、節(jié)點(diǎn)遍歷以及事件處理都是據(jù)此與fabric通信。目前SDK支持Node.js、Java和Python。
State Database – stateDB為了從Chaincode中高效的讀寫(xiě),Current state 數(shù)據(jù)存儲(chǔ)在stateDB中,包括levelDB和couchDB。
System Chain – 系統(tǒng)鏈包含在系統(tǒng)級(jí)定義網(wǎng)絡(luò)的配置區(qū)塊。
系統(tǒng)鏈存在于ordering service中,與channel類(lèi)似,具有包含以下信息的初始配置:MSP信息、策略和信息配置。對(duì)整個(gè)網(wǎng)絡(luò)的任何變化(例如新的Org加入或者添加新的Ordering節(jié)點(diǎn))將導(dǎo)致新的配置區(qū)塊被添加到系統(tǒng)鏈。
系統(tǒng)鏈可看做是一個(gè)channel或一組channel的公用binding。例如,金融機(jī)構(gòu)的集合可以形成一個(gè)財(cái)團(tuán)(以system chain表示),然后根據(jù)其相同或不同的業(yè)務(wù)創(chuàng)建channel。
Transaction – 交易Chaincode的invoke或instantiate操作。Invoke是從ledger中請(qǐng)求read-write set;Instantiate是請(qǐng)求在peer上啟動(dòng)Chaincode容器。
小結(jié):
以上就是我們第一節(jié)為大家介紹的區(qū)塊鏈的基礎(chǔ)知識(shí),這些可能比較枯燥,但是我們需要對(duì)這些名詞和內(nèi)容進(jìn)行初步的了解,這好比我們寫(xiě)代碼需要了解函數(shù)名與關(guān)鍵詞一樣,只有掌握了這些才能更好的開(kāi)始我們的工作。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。