Fabric已經(jīng)發(fā)布到1.4LTS版本,各個版本對比如下:
來自:超級賬本解讀?https://hyperledger.mochain.info/
Fabric v1.1版本主要的新特性包括:?
Fabric CA的CRL?
區(qū)塊以及交易的事件推送?
增加了所有組建間的雙向TLS通信?
Node.js Chaincode鏈碼的支持?
Chaincode API新增了creator identity?
性能相對v1.0有了明顯的提升
Fabric v1.2開始有了比較大的feature開始出現(xiàn):?
Private Data Collections:這個特性不得不說在隱私保護上解決了不少項目的痛點,也減少了許多項目為了隱私保護在業(yè)務(wù)層做的復(fù)雜設(shè)計。?
Service Discovery:服務(wù)發(fā)現(xiàn)這個特性,使得客戶端擁有了更多的靈活性和可操作性,可以動態(tài)感知整個Fabric網(wǎng)絡(luò)的變化。?
Pluggable endorsement and validation:可插拔的背書及校驗機制,采用了Go Plugin機制來實現(xiàn),避免了之前需要重新編譯源代碼的操作,提升了靈活性。
Fabric v1.3中,同樣增加了十分有用的feature:
基于Identity Mixer的MSP Implementation:基于零知識證明實現(xiàn)的身份的匿名和不可鏈接,這個feature替代了v0.6版本中的T-cert。?
key-level endorsement policies:更細粒度的背書策略,細化到具體的key-value,更加靈活,不僅限于一個鏈碼程序作背書。?
新增Java Chaincode:至此,v1.3之后支持了Go、Node.js、Java 三種Chaincode,為開發(fā)者提供了更多的選擇。?
Peer channel-based event services:Channel級別的事件訂閱機制,早在v1.1版本中已經(jīng)亮相了,在v1.3版本中正式發(fā)布,至此,舊的Event Hub正式宣告棄用。
Fabric v1.4是一個里程碑式的版本,是首個LTS的版本(Long Term Support的版本):
可操作性和可維護性的提升:?
開放日志級別設(shè)置的接口?
開放節(jié)點健康狀態(tài)的檢查接口?
開放節(jié)點數(shù)據(jù)指標的收集接口?
改進了Node SDK的編程模型,簡化開發(fā)者的代碼復(fù)雜度,使得SDK更加易用?
Private Data的增強:?
對于后續(xù)添加的允許訪問節(jié)點能夠獲取之前的隱私數(shù)據(jù)?
添加客戶端層面的隱私數(shù)據(jù)的權(quán)限控制,不需要添加鏈碼邏輯。
這里作一個更新,新建Centos7.4的虛擬機環(huán)境。大致搭建過程如下。
實驗環(huán)境
云主機:Centos 7.4 、CPU:4C、內(nèi)存:16G,硬盤:200G。
相關(guān)前置軟件安裝
關(guān)閉Selinux,關(guān)閉防火墻等相關(guān)操作,相關(guān)操作網(wǎng)絡(luò)上隨處可查。
建議更新后再進行下列操作:
yum update
安裝git、curl、pip
yum install git
yum install curl
yum -y install epel-release
yum install python-pip
pip install --upgrade pip
安裝docker相關(guān)
yum install docker-ce
或者:yum install docker-ce.18.06.3.ce-3.el7? 指定具體版本,可以先設(shè)置好yum 源(yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo)
pip install docker-compose(可能會失敗,那就用以下的命令)
pip install docker-compose --ignore-installed requests
相關(guān)軟件環(huán)境:?
安裝完成后查看各個軟件版本,如下圖:?

注:?可能會碰到docker-compose報錯:
File "/usr/lib/python2.7/site-packages/paramiko/ssh_gss.py", line 55, in <module>
GSS_EXCEPTIONS = (gssapi.GSSException,)
AttributeError: 'module' object has no attribute 'GSSException'
那么通過修改配置文件:/usr/lib/python2.7/site-packages/paramiko/ssh_gss.py來解決:
vi /usr/lib/python2.7/site-packages/paramiko/ssh_gss.py
53.55行修改如下解決:
53:import gssapi.error
55:GSS_EXCEPTIONS = (gssapi.error.GSSException,)

安裝Golang、Node.js、npm
安裝Golang?
如果單獨去下載安裝包麻煩的話,那么直接通過wget來下載解壓,配置環(huán)境變量。
wget https://studygolang.com/dl/golang/go1.10.8.linux-amd64.tar.gz
tar -xvf go1.10.8.linux-amd64.tar.gz
配置環(huán)境變量。修改/etc/profile文件,路徑根據(jù)下載安裝路徑來。
vim /etc/profile
添加
export GOROOT=/usr/go
export GOPATH=/usr/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
安裝Node.js
wget https://npm.taobao.org/mirrors/node/v11.0.0/node-v11.0.0.tar.gz
tar -xvf node-v11.0.0.tar.gz
解壓后進入Node文件夾:
yum install gcc gcc-c++
完成后gcc -v,這時候會發(fā)現(xiàn)gcc為4.8.5 建議更新:
wget http://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz
更新完成后,解壓gcc,并安裝:
tar -xvf gcc-7.3.0.tar.gz
進入gcc-7.3.0目錄執(zhí)行:
./contrib/download_prerequisites
mkdir 一個新的目錄
進入該目錄 cd 目錄
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
make (請耐心等待,我這里大概等待了2個多小時。。。)
make install
建議重啟后再進行之后的操作
重啟后看到gcc版本為7.3.0?

安裝Node.js
進入Node.js文件夾(這里可能有一個文件夾名的問題,建議修改node7.3.0文件夾名直接為node)
./configure
make (耐心等待)
make install
建議重啟后再進行之后的操作
安裝npm
npm install npm -g
完成上述操作后,查看各軟件版本:

安裝Fabric
首先下載Fabric源碼,我們在go/src目錄下新建文件夾。
mkdir -p github.com/hyperledger
進入該文件夾執(zhí)行:
git clone https://github.com/hyperledger/fabric.git (耐心等待)
完成后進入 fabric/scripts文件夾,可以看到bootstrap.sh腳本,cat該腳本可以看到fabric版本為1.4.0:

執(zhí)行bootstrap.sh腳本,自動進行fabric相關(guān)鏡像的下載,耐心等待
./bootstrap.sh

鏡像下載完成后如圖:?

通過Fabric-samples提供的BYFN(build your first network)構(gòu)建網(wǎng)絡(luò)。
./byfn.sh -m generate -c jackychannel(自定義名字)
過程很快,完成后如圖:?

啟動網(wǎng)絡(luò):
./byfn.sh -m up -c jackychannel
啟動后如圖:?

完成后如圖:?

這個時候出現(xiàn)4個peer節(jié)點,通過top命令可以清楚看到:?

注:?關(guān)閉命令:./byfn.sh -m down
啟動網(wǎng)絡(luò)服務(wù)后會啟動排序服務(wù)節(jié)點、4個Peer節(jié)點,以及1個命令行容器cli。
搭建完成后功能測試
上述步驟完成后,可是去看下一些基本的操作和命令。
/usr/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/channel-artifacts目錄中,可稱為創(chuàng)世區(qū)塊目錄(目錄根據(jù)每個人的配置)
可以看到下列文件:

Org1MSPanchors.tx、Org2MSPanchors.tx,兩個錨節(jié)點配置。?
channel.tx,生成通道配置文件。?
genesis.block,創(chuàng)世區(qū)塊文件。
/usr/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/crypto-config目錄中,可稱為證書目錄(目錄根據(jù)每個人的配置)
該目錄存放生成排序服務(wù)節(jié)點和Peer節(jié)點的MSP證書文件,如圖:?

使用docker命令查看運行中的鏡像:
docker ps
結(jié)果如圖:?

進入cli來進行一些簡單的操作:
docker exec -it cli bash
切換到容器內(nèi)做一個簡單的查詢:
peer chaincode query -C jackychannel(剛設(shè)置啟動的名稱) -n mycc -c '{"Args":["query","a"]}'
結(jié)果會看到90余額。
票據(jù)應(yīng)用測試
在Fabric官網(wǎng)文檔中有一個商業(yè)票據(jù)的例子,這里簡單進行了測試。(停止Fabric網(wǎng)絡(luò)服務(wù)后再進行以下操作。)
兩個組織:MagnetoCorp、DigiBank,?
票據(jù)網(wǎng)絡(luò):PaperNet。
進入該目錄啟動基本網(wǎng)絡(luò):
/usr/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/basic-network
./start.sh
啟動完成后查看:docker ps 會出現(xiàn)4個運行中容器。
使用:docker network inspect net_basic命令查看docker網(wǎng)絡(luò):?

進入以下目錄,啟動:
cd commercial-paper/organization/magnetocorp/configuration/cli/
./monitordocker.sh net_basic
出現(xiàn)下圖:?

另外開一個終端連接到服務(wù)器,在之前目錄下,創(chuàng)建MagnetoCorp公司特定的docker容器。
cd commercial-paper/organization/magnetocorp/configuration/cli/
docker-compose -f docker-compose.yml up -d cliMagnetoCorp
再輸入:docker ps 可以看到fabric-tools:3f078207c01a已加入網(wǎng)絡(luò)中:?

MagnetoCorp 管理員通過fabric-tools:3f078207c01a來進行操作。
接下來看下智能合約:?
進入以下目錄:
cd /usr/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/commercial-paper/organization/magnetocorp/contract/lib
該目錄下三個文件,其中papercontract.js為商業(yè)票據(jù)的智能合約??梢詂at看下具體內(nèi)容,這里暫不展開。
執(zhí)行如下部署合約代碼:
docker exec cliMagnetoCorp peer chaincode install -n papercontract -v 0 -p /opt/gopath/src/github.com/contract -l node

實例化智能合約:
docker exec cliMagnetoCorp peer chaincode instantiate -n papercontract -v 0 -l node -c '{"Args":["org.papernet.commercialpaper:instantiate"]}' -C mychannel -P "AND ('Org1MSP.member')"
輸入如下:?

之前打開的終端中會有輸出,也就是logsout容器的中的日志輸出內(nèi)容,具體如下:?

再次docker ps就可以看到:dev-peer0.org1.example.com-papercontract-0,說明此容器是peer0.org1.example.com節(jié)點啟動的,且正在運行的papercontract鏈碼版本為0。?

(由于突發(fā)事件,未完待續(xù)。。。)
參考文章:?
1.http://www.itdecent.cn/p/cb032c42c909?
2.https://blog.csdn.net/ASN_forever/article/details/87859346