Fabcar測試
Fabric 附帶了許多應用示例,其中 FabCar 是一個完整的端到端應用程序。完整的區塊鏈應用程序有兩部分代碼:在 Fabric 網絡內部署和執行的 Chaincode 部分,客戶端應用程序是外部世界與 Fabric 網絡上部署的鏈代碼交互的地方。
一、node和npm下載安裝
在Fabric的官方文檔中指出了node版本和npm的版本,我們安裝的時候只需要按照他們給出的版本,不要太高也不要太低
個人建議,一般選擇安裝官方給出的邊緣版本就行了。
- 卸載舊版本
#apt-get 卸載
sudo apt-get remove --purge npm
sudo apt-get remove --purge nodejs
sudo apt-get remove --purge nodejs-legacy
sudo apt-get autoremove
#手動刪除 npm 相關目錄
rm -r /usr/local/bin/npm
rm -r /usr/local/lib/node-moudels
find / -name npm
rm -r /tmp/npm*
- 下載安裝新版本
proxychains4 wget https://nodejs.org/download/release/v8.9.4/node-v8.9.4-linux-x64.tar.gz
tar -zxcf node-v8.9.4-linux-x64.tar.gz
#移到通用安裝目錄下
sudo mv node-v8.9.4-linux-x64 /opt
#創建軟鏈接
sudo ln -s /opt/node-v8.9.4-linux-x64/bin/node /usr/local/bin/node
sudo ln -s /opt/node-v8.9.4-linux-x64/bin/npm /usr/local/bin/npm
node -v
npm -v
二、測試樣例下載
利用git下載,千萬記得切換分支。相關命令如下
git clone https://github.com/hyperledger/fabric-samples.git
git branch -a
git checkout -b 1.1 origin/release-1.1
最終結果
我們後邊的操作就在該目錄下邊進行了。
三、網絡運行與鏈碼調用
1、網絡運行
運行前進入fabric-samples
目錄下的fabcar
目錄其目錄結構如下:
wang@wang:~/go/src/github.com/hyperledger/fabric-samples/fabcar$ ls
enrollAdmin.js node_modules query.js startFabric.sh
invoke.js package.json registerUser.js
startFabric.sh
爲啓動Fabcar網絡並安裝鏈碼的腳本;query.js
爲查詢腳本;invoke.js
爲增加、修改、刪除的腳本;
其他後邊會講到。
啓動網絡
./startFabric.sh
最終結果。
安裝SDK模塊讓程序運行
npm install
2、query調用和修改
query中的操作一般不太需要身份權限,可以直接訪問。
運行node query.js
可得到查詢所有車輛的信息,如下圖
分析代碼,js代碼。我們發現js代碼主要用於和鏈碼進行交互操作,這時候,我們分析代碼找到chaincode的代碼位置
打開go語言寫的chaincode,node的也行吧!兩個方法都是一樣的。我們發現裏邊主要有以下方法:
- initLedger:初始化賬本;
- queryCar:查詢指定車輛信息;(一個參數)
- createCar:新增車輛;(五個參數)
- queryAllCars:查詢所有車輛;
- changeCarOwner:更改汽車主人。(兩個參數)
具體方法在相關目錄下去看看。
我們修改按照鏈碼的方法和參數修改query.js
下的request參數如下:
const request = {
//targets : --- letting this default to the peers assigned to the channel
chaincodeId: 'fabcar',
//fcn: 'queryAllCars', 修改前
//args: ['']
//修改後
fcn: "queryCar",
args: ['CAR1']
};
然後重新查詢,結果如下:
3、invoke調用和修改
invoke
中的操作都是要有權限的人才能進行的,結合鏈碼我們知道其中主要包括增加、修改。
修改代碼爲下面的,表示增加CAR10:
var request = {
//targets: let default to the peer assigned to the client
chaincodeId: 'fabcar',
fcn: 'createCar',
args: ['CAR10', 'Chevy', 'Volt', 'Red', 'Nick'],
chainId: 'mychannel',
txId: tx_id
};
保存重新運行,並進行查詢CAR10的信息,結果如下:
繼續修改invoke代碼爲下面的,表示修改車輛的主人:
var request = {
//targets: let default to the peer assigned to the client
chaincodeId: 'fabcar',
fcn: 'changeCarOwner',
args: ['CAR10', 'Barry'],
chainId: 'mychannel',
txId: tx_id
};
繼續進行,invoke操作和querry操作,結果如下:
我們發現,此時賬本的CAR10的owner已經修改。
四、結論
-
完成了基於Fabric,Fabcar相關的命令行操作!
-
瞭解Fabric的運行原理對後期的合約部署和增刪查找,以及基於系統的開發具有重要意義。
-
出錯了最好去看源代碼,網絡上有的操作真的是……
-
大膽搜索!