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的运行原理对后期的合约部署和增删查找,以及基于系统的开发具有重要意义。

  • 出错了最好去看源代码,网络上有的操作真的是……

  • 大胆搜索!

五、参考链接

官方文档

发布了12 篇原创文章 · 获赞 3 · 访问量 6018

猜你喜欢

转载自blog.csdn.net/qq_40185499/article/details/103838527
今日推荐