fabric-samples/bin資料夾儲存了設定網路並將其放入克隆的repo所需的所有特定於平臺的二進位制檔案,在curl命令之後如下圖所示。
我們可以使用以下命令檢查映象。
docker images
測試Hyperledger Fabric網路
因為我們已經成功地安裝了所需的一切,所以我們可以使用指令碼部署和測試Hyperledger Fabric網路。
啟動網路:我們轉到fabric-samples / test-network目錄,並使用指令碼啟動網路。
cd fabric-samples/test-network
./network.sh up
=> we need root authorization if $USER is not in Docker group:
sudo ./network.sh up
在這裡,我們可能會面臨以下警告:“本地結構二進位制檔案和docker映像不同步。這可能會引起問題”,並且出現錯誤“ Fabric Docker映像版本1.4.6與測試網路支援的版本不匹配”。如下圖所示。
為了解決這個問題,我們首先透過執行以下命令,刪除docker映像並僅提取映像,而無需克隆儲存庫和下載二進位制檔案。如果一切正常,我們將必須看到所有如下的hyperledger docker映象。
docker rmi $(docker images | grep hyperledger)
curl -sSL https://bit.ly/2ysbOFE | bash -s -- -s -b-
建立一個通道:我們可以使用createChannel子命令在Org1和Org2之間建立一個通道,將其同級加入該通道。
./network.sh createChannel
如果我們不使用-c標誌,它將使用預設名稱mychannel建立頻道,因此我們可以使用-c標誌更改頻道名稱。
./network.sh createChannel -c <channel_name>
如果命令成功,我們可以在下面看到訊息。
部署鏈碼:我們可以使用deployCC子命令來部署鏈碼。
sudo ./network.sh deployCC -l javascript
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方法放入分類帳。
async initLedger(ctx) {
console.info('============= START : Initialize Ledger ===========');
const cars = [
{
color: 'blue',
make: 'Toyota',
model: 'Prius',
owner: 'Tomoko',
},
{
color: 'red',
make: 'Ford',
model: 'Mustang',
owner: 'Brad',
},
{
color: 'green',
make: 'Hyundai',
model: 'Tucson',
owner: 'Jin Soo',
},
{
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 (let i = 0; i < cars.length; i++) {
cars[i].docType = 'car';
await ctx.stub.putState('CAR' + i, Buffer.from(JSON.stringify(cars[i])));
console.info('Added <--> ', cars[i]);
}
console.info('============= END : Initialize Ledger ===========');
}
如果鏈碼已正確安裝、部署和呼叫,則您應在日誌中看到與上面相同的以下汽車列表:
與網路互動:現在,我們將使用對等CLI,該CLI使我們可以從CLI呼叫已部署的智慧合約,更新通道或安裝和部署新的智慧合約。在這裡,我們只專注於與我們的網路進行互動。要新增已安裝“安裝示例”,“二進位制檔案”和“ Docker映像”部分的二進位制檔案,請使用以下命令。
export PATH=${PWD}/../bin:${PWD}:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/admin@chaindaily/msp
export CORE_PEER_ADDRESS=localhost:7051
之後,我們可以從CLI查詢分類帳。以下命令用於查詢。它接受我們要查詢的函式名稱作為第一個引數,因此如果要查詢的方法需要它,可以新增引數作為引數。透過queryCar函式獲得編號為CAR9的汽車資訊。
peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryCar", "CAR9"]}'
由於我們要更改資產,因此我們呼叫鏈碼。當網路成員想要轉移或更改分類賬上的資產時,將呼叫鏈碼。使用以下命令,我們透過呼叫changeCarOwner函式來更改編號為CAR9的汽車的所有者。
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride
orderer.example.com --tls true --cafile ${PWD}/organizations/
ordererOrganizations/example.com/orderers/orderer.example.com/
msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar
--peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/
organizations/peerOrganizations/org1.example.com/peers/
peer0.org1.example.com/tls/ca.crt --peerAddresses localhost: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上對其進行檢查,並執行以下命令來定義變數。
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/admin@chaindaily/msp
export CORE_PEER_ADDRESS=localhost:9051
之後我們可以從CLI中以Org2 peer身份查詢分類帳。以下命令用於查詢,我們將看到CAR9的所有者已更改。
使用以下命令結束使用網路後,我們必須關閉網路。
./network.sh down