區塊鏈研究實驗室|Hyperledger Fabric v2.1安裝指南

買賣虛擬貨幣

本次教程我們將在Linux機器上安裝Hyperledger Fabric v2.1。在開始安裝之前,我們要安裝好一些條件環境。

安裝Git:使用下面的命令安裝最新版本的Git。

sudoapt-getinstallgit

安裝cURL:使用以下命令安裝最新版本的cURL。

sudoapt-getinstallcurl

安裝wget:使用以下命令安裝最新版本的wget。下載Fabric二進位制檔案將需要它。

sudoapt-getinstallwget

安裝Docker和Docker Compose:使用以下命令安裝最新版本的docker。然後將當前使用者新增到docker組中。

sudoapt-get-yinstalldocker-composesudousermod-aGdocker${USER}===>logoutandloginareneededafteraddingdockergroup,

checkeverythingisokwiththecommandbelowid-nG

安裝Go:使用下面的命令安裝並解壓縮1.14.x版本的Go。然後我們將go資料夾放到/usr/local目錄下。

wgethttps://golang.org/dl/go1.14.2.linux-amd64.tar.gzsudotar-xvfgo1.14.2.linux-amd64.tar.gzsudochown-Rroot:root./gosudomvgo/usr/local

我們需要將go path新增到$path變數中,但是新增的內容在使用者登入時總是被擦除。為了避免每次登入時執行該命令,我們開啟.profile檔案,該檔案位於$HOME/.profile,將匯出命令寫入.profile檔案的末尾。

sudogedit$HOME/.profileexportPATH=$PATH:/usr/local/go/bin

安裝Node.js和NPM:使用以下命令下載並安裝Node.js和NPM。我們可以安裝版本8(支援8.9.4和更高版本)或版本10(支援10.15.3和更高版本)。

curl-sLhttps://deb.nodesource.com/setup_8.x|sudobash-sudoapt-getinstallnodejs

安裝Python:使用以下命令安裝2.7版的Python。另外,將使用node.js安裝來安裝相應的版本。

sudoapt-getinstallpython

就是這樣,我們終於安裝了所有需要的東西,我們將繼續安裝Fabric示例,二進位制檔案和docker映像。

安裝fabric,Binaries和Docker映像

現在我們將使用以下命令安裝Fabric示例,Binaries和docker映像。

curl-sSLhttp://bit.ly/2ysbOFE|bash-s

要安裝特定的發行版,我們可以將版本識別符號傳遞給curl命令,例如以下幾行。

curl-sSLhttp://bit.ly/2ysbOFE|bash-s--<fabric_version><fabric-ca_version><thirdparty_version>curl-sSLhttp://bit.ly/2ysbOFE|bash-s--1.4.11.4.10.4.15

fabric-samples/bin資料夾儲存了設定網路並將其放入克隆的repo所需的所有特定於平臺的二進位制檔案,在curl命令之後如下圖所示。

我們可以使用以下命令檢查映象。

dockerimages

測試Hyperledger Fabric網路

因為我們已經成功地安裝了所需的一切,所以我們可以使用指令碼部署和測試Hyperledger Fabric網路。

啟動網路:我們轉到fabric-samples / test-network目錄,並使用指令碼啟動網路。

cdfabric-samples/test-network./network.shup=>weneedrootauthorizationif$USERisnotinDockergroup:sudo./network.shup

在這裡,我們可能會面臨以下警告:“本地結構二進位制檔案和docker映像不同步。這可能會引起問題”,並且出現錯誤“ Fabric Docker映像版本1.4.6與測試網路支援的版本不匹配”。如下圖所示。

為了解決這個問題,我們首先透過執行以下命令,刪除docker映像並僅提取映像,而無需克隆儲存庫和下載二進位制檔案。如果一切正常,我們將必須看到所有如下的hyperledger docker映象。

dockerrmi$(dockerimages|grephyperledger)curl-sSLhttps://bit.ly/2ysbOFE|bash-s---s-b-

建立一個通道:我們可以使用createChannel子命令在Org1和Org2之間建立一個通道,將其同級加入該通道。

./network.shcreateChannel

如果我們不使用-c標誌,它將使用預設名稱mychannel建立頻道,因此我們可以使用-c標誌更改頻道名稱。

./network.shcreateChannel-c<channel_name>

如果命令成功,我們可以在下面看到訊息。

部署鏈碼:我們可以使用deployCC子命令來部署鏈碼。

sudo./network.shdeployCC-ljavascript

deployCC子命令將在peer0.org1.example.com和peer0.org2.example.com上安裝fabcar鏈碼,然後將鏈碼部署在使用channel標誌指定的通道上。由於我們使用預設名稱mychannel建立了一個頻道,因此無需進行任何修改。

預設情況下,該指令碼會安裝fabcar鏈碼的Go版本。如上所見,我使用語言標誌-l來安裝鏈式程式碼的javascript版本。可以在fabric-samples目錄的chaincode資料夾中找到用不同語言編寫的所有Fabcar鏈碼。

使用Hyperledger Fabric 2.0,鏈程式碼的生命週期已更改,並且deployCC子命令提供了鏈程式碼,可以針對該新生命週期正確安裝,部署和呼叫。

自從呼叫initLedger函式以來,chaincode將cars的初始列表放在分類帳中。如您在下面的程式碼中看到的,fabcar鏈碼和cars JSON陣列中的initLedger函式已被填充。然後每一個都使用一個putState方法放入分類帳。

asyncinitLedger(ctx){console.info('=============START:InitializeLedger===========');constcars=[{color:'blue',make:'Toyota',model:'Prius',owner:'Tomoko',},{color:'red',make:'Ford',model:'Mustang',owner:'Brad',},{color:'green',make:'Hyundai',model:'Tucson',owner:'JinSoo',},{color:'yellow',make:'Volkswagen',model:'Passat',owner:'Max',},{color:'black',make:'Tesla',model:'S',owner:'Adriana',},{color:'purple',make:'Peugeot',model:'205',owner:'Michel',},{color:'white',make:'Chery',model:'S22L',owner:'Aarav',},{color:'violet',make:'Fiat',model:'Punto',owner:'Pari',},{color:'indigo',make:'Tata',model:'Nano',owner:'Valeria',},{color:'brown',make:'Holden',model:'Barina',owner:'Shotaro',},];for(leti=0;i<cars.length;i++){cars[i].docType='car';awaitctx.stub.putState('CAR'+i,Buffer.from(JSON.stringify(cars[i])));console.info('Added<-->',cars[i]);}console.info('=============END:InitializeLedger===========');}

如果鏈碼已正確安裝、部署和呼叫,則您應在日誌中看到與上面相同的以下汽車列表:

與網路互動:現在,我們將使用對等CLI,該CLI使我們可以從CLI呼叫已部署的智慧合約,更新通道或安裝和部署新的智慧合約。在這裡,我們只專注於與我們的網路進行互動。要新增已安裝“安裝示例”,“二進位制檔案”和“ Docker映像”部分的二進位制檔案,請使用以下命令。

exportPATH=${PWD}/../bin:${PWD}:$PATHexportFABRIC_CFG_PATH=$PWD/../config/exportCORE_PEER_TLS_ENABLED=trueexportCORE_PEER_LOCALMSPID="Org1MSP"exportCORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crtexportCORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/mspexportCORE_PEER_ADDRESS=localhost:7051

之後,我們可以從CLI查詢分類帳。以下命令用於查詢。它接受我們要查詢的函式名稱作為第一個引數,因此如果要查詢的方法需要它,可以新增引數作為引數。透過queryCar函式獲得編號為CAR9的汽車資訊。

peerchaincodequery-Cmychannel-nfabcar-c'{"Args":["queryCar","CAR9"]}'

由於我們要更改資產,因此我們呼叫鏈碼。當網路成員想要轉移或更改分類賬上的資產時,將呼叫鏈碼。使用以下命令,我們透過呼叫changeCarOwner函式來更改編號為CAR9的汽車的所有者。

peerchaincodeinvoke-olocalhost:7050--ordererTLSHostnameOverrideorderer.example.com--tlstrue--cafile${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem-Cmychannel-nfabcar--peerAddresseslocalhost:7051--tlsRootCertFiles${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt--peerAddresseslocalhost:9051--tlsRootCertFiles${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt-c'{"function":"changeCarOwner","Args":["CAR9","Dave"]}'

如果命令已成功執行,則會看到Chaincode invoke successful. result: status:200message.

更改資產後,我們將像對Org1 peer一樣新增二進位制檔案,以在其他peer上對其進行檢查,並執行以下命令來定義變數。

exportCORE_PEER_TLS_ENABLED=trueexportCORE_PEER_LOCALMSPID="Org2MSP"exportCORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crtexportCORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/mspexportCORE_PEER_ADDRESS=localhost:9051

之後我們可以從CLI中以Org2 peer身份查詢分類帳。以下命令用於查詢,我們將看到CAR9的所有者已更改。

使用以下命令結束使用網路後,我們必須關閉網路。

./network.shdown

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;