Fabric1.4基礎(chǔ)搭建+票據(jù)示例

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容