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

注:?可能會(huì)碰到docker-compose報(bào)錯(cuò):
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'
那么通過(guò)修改配置文件:/usr/lib/python2.7/site-packages/paramiko/ssh_gss.py來(lái)解決:
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?
如果單獨(dú)去下載安裝包麻煩的話,那么直接通過(guò)wget來(lái)下載解壓,配置環(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ù)下載安裝路徑來(lái)。
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
解壓后進(jìn)入Node文件夾:
yum install gcc gcc-c++
完成后gcc -v,這時(shí)候會(huì)發(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
進(jìn)入gcc-7.3.0目錄執(zhí)行:
./contrib/download_prerequisites
mkdir 一個(gè)新的目錄
進(jìn)入該目錄 cd 目錄
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
make (請(qǐng)耐心等待,我這里大概等待了2個(gè)多小時(shí)。。。)
make install
建議重啟后再進(jìn)行之后的操作
重啟后看到gcc版本為7.3.0?

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

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

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

鏡像下載完成后如圖:?

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

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

完成后如圖:?

這個(gè)時(shí)候出現(xiàn)4個(gè)peer節(jié)點(diǎn),通過(guò)top命令可以清楚看到:?

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

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

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

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

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

另外開一個(gè)終端連接到服務(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 管理員通過(guò)fabric-tools:3f078207c01a來(lái)進(jìn)行操作。
接下來(lái)看下智能合約:?
進(jìn)入以下目錄:
cd /usr/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/commercial-paper/organization/magnetocorp/contract/lib
該目錄下三個(gè)文件,其中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

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

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

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

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