準(zhǔn)備工作
- 官方幫助文檔:https://hyperledger-fabric.readthedocs.io/en/release-1.2/
- 安裝 cURL(https://curl.haxx.se/download.html),
curl --version
查詢版本 - 安裝docker怒竿,
docker --version
查詢版本 - 安裝docker-compose,
docker-compose --version
查詢版本 - 安裝 go 語言環(huán)境揖膜,
go version
查詢版本 - 安裝node.js,
node -v
查詢版本 - Python 版本要求為 2.7,
python --version
查詢版本
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.4.1 1.4.1 0.4.15
# fabric-peer :存儲賬本
# fabric-orderer :排序結(jié)點(diǎn),沒有礦工,不用挖礦,相當(dāng)于礦工
# fabric-ccenv :go的運(yùn)行環(huán)境,智能合約(鏈碼)支持go語言編程
# fabric-tools :工具節(jié)點(diǎn),作為客戶端使用
# fabric-ca :注冊賬號
# fabric-couchdb : 數(shù)據(jù)庫,key-value
# fabric-kafka :排序服務(wù)器
# fabric-zookeeper :kafka工作的時(shí)候需要zookeeper 協(xié)助
設(shè)置fabric中的可執(zhí)行程序全局訪問
/home/itcast
ls -a
vi .bashrc
最后一行寫:export PATH=/home/itcast/hyperledger-fabric/fabric-samples/bin:$PATH
. .bashrc //生效
測試網(wǎng)絡(luò)演示
cd /home/itcast/hyperledger-fabric/fabric-samples/first-network
./byfn.sh generate
./byfn.sh up
./byfn.sh down
一:Hyperledger Fabric基本概念
1.Hyperledger簡介
Hyperledger項(xiàng)目,Linux基金會托管,IBM牽頭做的,Hyperledger里有很多模塊,其中最大的,最重要最核心的模塊Fabric,其他模塊都是為Fabric服務(wù)的.
2.Hyperledger Fabric是什么
Hyperledger Fabric是一個(gè)框架,私有網(wǎng)絡(luò)(不發(fā)幣),里面有一個(gè)賬本,賬本的操作需要使用智能合約,Hyperledger Fabric是參與者管理交易的系統(tǒng).比如:淘寶買東西,也是交易,但是有中心服務(wù)器,Fabric可以替換,并且去掉中心服務(wù)器.不會出錯,效率更高了.Fabric支持溯源.
3.特點(diǎn)
Hyperledger Fabric與其他區(qū)塊鏈系統(tǒng)不同的地方是私有和許可庄撮。
(1)私有:Fabric中所有的數(shù)據(jù)都是受保護(hù)的,私有的,私有網(wǎng)絡(luò),想看數(shù)據(jù),必須加入到小的網(wǎng)絡(luò)中去,Hyperledger Fabric支持隱私, 提供了創(chuàng)建通道的功能,允許一組參與者中部分成員創(chuàng)建單獨(dú)的交易賬本。
(2)許可:通過正規(guī)的渠道申請,得到賬號,賬號是數(shù)字證書(CA證書),能夠保證網(wǎng)絡(luò)中數(shù)據(jù)安全性.任意一筆交易都需要簽名,非對稱加密,私鑰簽名,別人用公鑰驗(yàn)證,Hyperledger Fabric網(wǎng)絡(luò)的成員通過可信賴的,會員服務(wù)提供商(MSP)注冊,獲取簽發(fā)證書哩簿,有了證書,還要有秘鑰對,而不是開放式的無權(quán)限系統(tǒng)。
二:Hyperledger Fabric邏輯架構(gòu)
(一).成員服務(wù):身份管理
(二).共識服務(wù)
- 賬本管理
- 交易管理
(三).鏈碼服務(wù):智能合約
1.用戶身份:
- orderer節(jié)點(diǎn) : 排序節(jié)點(diǎn), fabric不用挖礦,order結(jié)點(diǎn)相當(dāng)于礦工的角色,對數(shù)據(jù)排序, 打包變成區(qū)塊,order節(jié)點(diǎn)將打包的區(qū)塊發(fā)送給peer節(jié)點(diǎn),peer節(jié)點(diǎn)收到區(qū)塊之后, 將數(shù)據(jù)寫入賬本中,打包的塊大小, 頻率可以通過環(huán)境配置進(jìn)行配置.
為什么要排序? 解決雙花問題,排序算法有兩種:- solo: 測試用的, 確實(shí)很慢,隊(duì)列,串行,很慢
- kafka : 分布式的排序服務(wù)器,效率高,企業(yè)級
-
peer節(jié)點(diǎn) : 賬本只在peer節(jié)點(diǎn)上, 存儲數(shù)據(jù),在整個(gè)分布式區(qū)塊鏈網(wǎng)絡(luò)中, 分布著很多peer節(jié)點(diǎn),每個(gè)peer節(jié)點(diǎn)中的數(shù)據(jù)相同,對一個(gè)節(jié)點(diǎn)進(jìn)行操作, 數(shù)據(jù)會被同步到網(wǎng)絡(luò)的其他節(jié)點(diǎn)上
peer節(jié)點(diǎn)從職責(zé)上可以劃分:- 背書節(jié)點(diǎn)
- 提交節(jié)點(diǎn)
- 主節(jié)點(diǎn)
- 錨節(jié)點(diǎn)
客戶端程序:訪問orderer節(jié)點(diǎn), peer節(jié)點(diǎn),有普通用戶和管理員用戶
2-1.賬本管理:賬本在peer節(jié)點(diǎn)上, 由兩部分組成
- 區(qū)塊鏈:所有的交易記錄
- 世界狀態(tài): 就是一鍵值對,數(shù)據(jù)庫, 存儲區(qū)塊鏈最新,最后一條記錄,默認(rèn)的數(shù)據(jù)庫: levelDB, 不想使用leveldb, 可以使用couchdb
2-2.交易管理
- 部署交易:編寫鏈碼, 業(yè)務(wù)邏輯, 智能合約,將鏈碼安裝到peer節(jié)點(diǎn)上
- 調(diào)用交易:對鏈碼中的業(yè)務(wù)邏輯進(jìn)程調(diào)用,鏈碼中有對應(yīng)的接口
3.智能合約: 鏈碼,需要部署到有賬本的peer結(jié)點(diǎn)上,智能合約的編寫支持的語言 go, node.js
三:Peer(結(jié)點(diǎn))酝静、Ledger(賬本)和 ChainCode(鏈碼,智能合約)關(guān)系
1.Ledger賬本:在peer節(jié)點(diǎn)上,默認(rèn)就有
2.ChainCode智能合約:程序猿編寫完智能合約, 然后安裝到peer節(jié)點(diǎn),默認(rèn)是沒有,客戶端調(diào)用鏈碼(智能合約), 鏈碼修改賬本
在一個(gè)peer節(jié)點(diǎn)上可以同時(shí)有多個(gè)賬本,賬本和賬本之間數(shù)據(jù)不可見, 相互隔離,一個(gè)賬本可以對應(yīng)一個(gè)合約, 也可以是多個(gè)
四:通道(channel)
用來隔離數(shù)據(jù)的, 用戶在不同的通道中, 使用的數(shù)據(jù)是不同的, 而且數(shù)據(jù)不共享, 理解為群
通道是由共識服務(wù)(ordering)提供的一種通訊機(jī)制,將peer和orderer連接在一起羡玛,形成一個(gè)個(gè)具有保密性的通訊鏈路(虛擬)别智,實(shí)現(xiàn)了業(yè)務(wù)隔離的要求
五:組織(channel)
fabric中的組織是通過職能劃分的
在Fabric中一個(gè)組織里邊都有什么?
- 有 (1 - N )個(gè)用戶
- 存儲賬本的peer節(jié)點(diǎn)
圖:
p1- p8: peer節(jié)點(diǎn)
a1-a4: 客戶端
C: 通道
org1 - org4: 組織
1.組織1中有2個(gè)peer節(jié)點(diǎn),在同一個(gè)組織中peer結(jié)點(diǎn)的職責(zé)相同, 沒有部署在同一個(gè)地方,同一個(gè)組織的節(jié)點(diǎn)上安裝的智能合約相同,不同組織的節(jié)點(diǎn),安裝的智能合約不同,每個(gè)組織內(nèi)用一個(gè)專門的客戶端, 用來訪問當(dāng)前組織內(nèi)的節(jié)點(diǎn)
2.組織1中要存儲數(shù)據(jù),修改賬本數(shù)據(jù),需要客戶端a1,a1作用連接peer1或者peer2
3.多個(gè)組織加入到同一個(gè)通道, 那么這些組織中節(jié)點(diǎn)上的賬本數(shù)據(jù)相同