Fabcar測試

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

最終結果
q
我們後邊的操作就在該目錄下邊進行了。

三、網絡運行與鏈碼調用

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的運行原理對後期的合約部署和增刪查找,以及基於系統的開發具有重要意義。

  • 出錯了最好去看源代碼,網絡上有的操作真的是……

  • 大膽搜索!

五、參考鏈接

官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章