首頁 >後端開發 >Golang >區塊鏈實戰-Hyperledger Fabric(一) 10分鐘新手入門

區塊鏈實戰-Hyperledger Fabric(一) 10分鐘新手入門

michael li
michael li原創
2020-04-28 13:17:203912瀏覽

導語

大家好,我是Michael,現在在一家上海的網路公司工作,隨著政府對區塊了專案的重視,人們開始稱2020年將會是區塊鏈發展的元年,我也跟朋友聊了很多次區塊鏈,也想自己實踐一下,於是在研究了以太坊、EOS、NEO等眾多選型之後選擇了聯盟鏈,也就是我們今天的主角Hyperledger fabric。

文章架構

本系列文章將分為三個部分,透過三篇文章幫助大家入門Hyperledger Fabric開發,建立自己的聯盟鏈專案:

一、基礎介紹

二、環境建置

三、應用程式部署與啟動

基礎介紹

Hyperledger fabric——區塊鏈世界的新希望

2015 年12 月,開源世界的旗艦組織- Linux 基金會牽頭,聯合30 家初始企業成員(包括IBM、Accenture、Intel、J.P.Morgan、R3、DAH、DTCC、FUJITSU、HITACHI、SWIFT、Cisco 等),共同宣布了超級帳本(Hyperledger)聯合專案的成立。超級帳本計畫致力於為透明、公開、去中心化的企業級分散式帳本技術提供開源參考實現,並推動區塊鏈和分散式帳本相關協議、規範和標準的發展。專案官方網站為 hyperledger.org ,Hyperledger fabric 為其重要的專案之一。

很多新同學對區塊鏈很多專屬名詞可能不太了解,所以第一節跟大家先介紹一下Hyperledger fabric 中涉及到的名詞。

名詞介紹:

Anchor Peer – 錨定節點錨節點是通道中能被所有對等節點探測、並能與之進行通訊的一種對等節點。通道中的每個成員都有一個(或多個,以防單點故障)錨節點,允許屬於不同成員身份的節點來發現通道中存在的其它節點。

Block – 區塊在一個通道上,(區塊是)一組有序交易的集合。區塊往往透過密碼學手段(Hash 值)連接到前導區塊。

Zhu Jiang:區塊是一組有序的交易集合,在通道中經過加密(雜湊加密)後與前序區塊連接。

Chain – 鏈chain就是block之間以hash連結為結構的交易日誌。 peer從order service接收交易block,並根據背書策略和並發衝突標記block上的交易是否有效,然後將該block追加到peer檔案系統中的hash chain上。 Z

hu Jiang:帳本的鍊是交易區塊經過「雜湊連接」結構化的交易日誌。對等節點從排序服務收到交易區塊,基於背書策略和並發衝突來標註區塊的交易為有效或無效狀態,並將區塊追加到對等節點檔案系統的哈希鏈中。

Chaincode – 鏈碼鏈碼是一個運行在帳本上的軟體,它可以對資產進行編碼,其中的交易指令(或稱為業務邏輯)也可以用來修改資產。

Channel – 通道通道是建立在「Fabric」網路上的私人區塊鏈,實現了資料的隔離和保密。通道特定的帳本在通道中是與所有對等節點共享的,且交易方必須通過該通道的正確驗證才能與帳本進行互動。通道是由一個「配置區塊」來定義的。

Commitment – 提交一個通道中的每個對等節點都會驗證交易的有序區塊,然後將區塊提交(寫或追加)至該通道上帳本的各個副本。對等節點也會標記每個區塊中的每筆交易的狀態是有效或無效。

Concurrency Control Version Check – 並發控製版本檢查(CCVC)CCVC是保持通道中各對等節點間狀態同步的一種方法。對等節點並行的執行交易,在交易提交至帳本之前,對等節點會檢查交易在執行期間讀到的資料是否已修改。如果讀取的資料在執行和提交之間被改變,就會引發CCVC衝突,該交易就會在帳本中被標記為無效,而且值不會更新到狀態資料庫中。

Configuration Block – 設定區塊包含為系統鏈(排序服務)或通道定義成員和策略的設定資料。對某個通道或整個網路的配置修改(例如,成員離開或加入)都將導致產生一個新的配置區塊並追加到適當的鏈上。這個配置區塊會包含創始區塊的內容加上增量。

Consensus – 共識共識是貫穿整個交易流程的廣義術語,其用於產生一個對於排序的同意書和確認構成區塊的交易集的正確性。

Current State – 目前狀態ledger的current state表示其chain交易log中所有key的最新值。 peer會將處理過的block中的每個交易對應的修改value提交到ledger的current state,由於current state表示channel所知的所有最新的k-v,所以current state也被稱為World State。 Chaincode執行交易proposal就是針對的current state。

Dynamic Membership – 動態成員Fabric支援動態新增-移除members、peers和ordering服務節點,而不會影響整個網路的操作性。當業務關係調整或因各種原因需新增-移除實體時,Dynamic Membership至關重要。

Endorsement – 背書Endorsement 是指一個peer執行一個交易並回傳YES-NO給生成交易proposal的client app 的過程。 chaincode具有對應的endorsement policies,其中指定了endorsing peer。

Endorsement policy – 背書策略Endorsement policy定義了依賴特定chaincode執行交易的channel上的peer和回應結果(endorsements)的必要組合條件(即傳回Yes或No的條件)。

Endorsement policy可指定對於某一chaincode,可以對交易背書的最小背書節點數或最小背書節點百分比。背書策略由背書節點基於應用程式和對抵禦不良行為的期望水準來組織管理。在install和instantiate Chaincode(deploy tx)時需要指定背書策略。

Fabric-caFabric-ca是預設的憑證管理元件,它會向網路成員及其使用者頒發基於PKI的憑證。 CA為每個成員頒發一個根憑證(rootCert),為每個授權使用者頒發一個註冊證書(eCert),為每個註冊證書頒發大量交易證書(tCerts)。

Genesis Block – 初始區塊Genesis Block是初始化區塊鏈網路或channel的配置區塊,也是鏈上的第一個區塊。

Gossip Protocol – Gossip協定Gossip資料傳輸協定有三個功能:

1)管理peer發現和channel成員;

2)channel上的所有peer間廣播帳本資料;

3)channel上的所有peer間同步帳本資料。

Initialize – 初始化一個初始化chaincode程式的方法。

Install – 安裝將chaincode放到peer的檔案系統的過程。 (譯註:即將ChaincodeDeploymentSpec資訊儲存到chaincodeInstallPath-chaincodeName.chainVersion檔案)

Instantiate – 實例化啟動chaincode容器的過程。 (譯註:在lccc中將ChaincodeData儲存到state中,然後deploy Chaincode並執行Init方法)Invoke – 呼叫用於呼叫chaincode內的函數。

Chaincode invoke就是一個交易proposal,然後執行模組化的流程(背書、共識、 驗證、 提交)。 invoke的結構就是一個函數和一個參數數組。

Leading Peer – 主導節點每一個Member在其訂閱的channel上可以擁有多個peer,其中一個peer會作為channel的leading peer代表該Member與ordering service通訊。 ordering service將block傳遞給leading peer,該peer再將此block分發給同一member下的其他peer。

Ledger – 帳本A ledger is a channel’s chain and current state data which is maintained by each peer on the channel.Ledger是個channel的chain和由channel中每個peer維護的world state。 (這個解釋有點怪)

Member – 成員擁有網路唯一根憑證的合法獨立實體。像peer節點和app client這樣的網路元件會連結到一個Member。

Membership Service Provider – MSPMSP是指為client和peer提供憑證的系統抽像元件。

Client用憑證來認證他們的交易;peer用憑證認證其交易背書。此介面與系統的交易處理元件密切相關,旨在使已定義的成員資格服務元件以這種方式順利插入而不會修改系統的交易處理元件的核心。

Membership Services – 成員服務成員服務在許可的區塊鏈網路上認證、授權和管理身分。

在peer和order中運行的成員服務的程式碼都會認證和授權區塊鏈操作。它是基於PKI的MSP實作。 fabric-ca元件實現了成員服務,來管理身分。特別的,它處理ECert和TCert的頒發和撤銷。 ECert是長期的身份憑證;TCert是短期的身份憑證,是匿名和不可連結的。

Ordering Service – 排序服務或共識服務將交易排序放入block的節點的集合。

ordering service獨立於peer流程之外,並以先到先得的方式為網路上所有的channel作交易排序。 ordering service支援可插拔實現,目前預設實作了SOLO和Kafka。 ordering service是整個網路的公共binding,包含與每個Member相關的加密資料。 Peer – 節點一個網路實體,維護ledger並執行Chaincode容器來對ledger執行read-write操作。 peer由Member擁有和維護。

Policy – 策略有背書策略,校驗策略,區塊提交策略,Chaincode管理策略和網路-通道管理策略。

Proposal – 提案一種針對channel中某peer的背書請求。每個proposal要不是Chaincode instantiate就是Chaincode invoke。

Query – 查詢對於current state中某個key的value的查詢請求。

Software Development Kit – SDKSDK為開發人員提供了一個結構化的函式庫環境,用於編寫和測試鏈碼應用程式。

SDK完全可以透過標準介面實現配置和擴展,像是簽署的加密演算法、日誌框架和state儲存這樣的元件都可以輕鬆實現替換。 SDK API使用gRPC進行交易處理,成員服務、節點遍歷以及事件處理都是據此與fabric通訊。目前SDK支援Node.js、Java和Python。

State Database – stateDB為了從Chaincode中高效率的讀寫,Current state 資料儲存在stateDB中,包括levelDB和couchDB。

System Chain – 系統鏈包含在系統層級定義網路的設定區塊。

系統鏈存在於ordering service中,與channel類似,具有包含以下資訊的初始配置:MSP資訊、策略和資訊配置。對整個網路的任何變化(例如新的Org加入或添加新的Ordering節點)將導致新的配置區塊被添加到系統鏈。

系統鏈可看做是一個channel或一組channel的公用binding。例如,金融機構的集合可以形成一個財團(以system chain表示),然後根據其相同或不同的業務創建channel。

Transaction – 交易Chaincode的invoke或instantiate操作。 Invoke是從ledger中請求read-write set;Instantiate是請求在peer上啟動Chaincode容器。

小結:

以上就是我們第一節為大家介紹的區塊鏈的基礎知識,這些可能比較枯燥,但是我們需要對這些名詞和內容進行初步的了解,這好比我們寫程式碼需要了解函數名稱與關鍵字一樣,只有掌握了這些才能更好的開始我們的工作。

以上是區塊鏈實戰-Hyperledger Fabric(一) 10分鐘新手入門的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn