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

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

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

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

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