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的运行原理对后期的合约部署和增删查找,以及基于系统的开发具有重要意义。
-
出错了最好去看源代码,网络上有的操作真的是……
-
大胆搜索!