概述
balance-transfer项目是fabric-sdk-node的简单使用例子
依赖安装以及系统要求
系统
[root@fabric-cli ~]# uname -a
Linux fabric-cli 3.10.0-693.21.1.el7.x86_64 #1 SMP Wed Mar 7 19:03:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@fabric-cli ~]# cat /etc/re
redhat-release resolv.conf
[root@fabric-cli ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
安装node docker docker-compose git
yum install docker git python-pip -y
pip install --upgrade pip -y
pip install docker-compose -y
[root@fabric-cli balance-transfer]# node -v
v8.11.1
[root@fabric-cli balance-transfer]# docker-compose -v
docker-compose version 1.21.0, build 5920eb0
[root@fabric-cli balance-transfer]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: <unknown>
Go version: go1.8.3
Git commit: 774336d/1.13.1
Built: Wed Mar 7 17:06:16 2018
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: <unknown>
Go version: go1.8.3
Git commit: 774336d/1.13.1
Built: Wed Mar 7 17:06:16 2018
OS/Arch: linux/amd64
Experimental: false
所需镜像
[root@fabric-cli first-network]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hyperledger/fabric-ca x86_64-1.1.0 72617b4fa9b4 6 weeks ago 299 MB
hyperledger/fabric-ca latest 72617b4fa9b4 6 weeks ago 299 MB
docker.io/hyperledger/fabric-tools x86_64-1.1.0 b7bfddf508bc 6 weeks ago 1.46 GB
hyperledger/fabric-tools latest b7bfddf508bc 6 weeks ago 1.46 GB
docker.io/hyperledger/fabric-orderer x86_64-1.1.0 ce0c810df36a 6 weeks ago 180 MB
hyperledger/fabric-orderer latest ce0c810df36a 6 weeks ago 180 MB
docker.io/hyperledger/fabric-peer x86_64-1.1.0 b023f9be0771 6 weeks ago 187 MB
hyperledger/fabric-peer latest b023f9be0771 6 weeks ago 187 MB
docker.io/hyperledger/fabric-javaenv x86_64-1.1.0 82098abb1a17 6 weeks ago 1.52 GB
hyperledger/fabric-javaenv latest 82098abb1a17 6 weeks ago 1.52 GB
docker.io/hyperledger/fabric-ccenv x86_64-1.1.0 c8b4909d8d46 6 weeks ago 1.39 GB
hyperledger/fabric-ccenv latest c8b4909d8d46 6 weeks ago 1.39 GB
docker.io/hyperledger/fabric-zookeeper x86_64-0.4.6 92cbb952b6f8 2 months ago 1.39 GB
hyperledger/fabric-zookeeper latest 92cbb952b6f8 2 months ago 1.39 GB
docker.io/hyperledger/fabric-kafka x86_64-0.4.6 554c591b86a8 2 months ago 1.4 GB
hyperledger/fabric-kafka latest 554c591b86a8 2 months ago 1.4 GB
hyperledger/fabric-couchdb latest 7e73c828fc5b 2 months ago 1.56 GB
docker.io/hyperledger/fabric-couchdb x86_64-0.4.6 7e73c828fc5b 2 months ago 1.56 GB
docker.io/hyperledger/fabric-baseos x86_64-0.4.6 220e5cf3fb7f 2 months ago 151 MB
获取代码
[root@fabric-cli ~]# git clone https://github.com/hyperledger/fabric-samples.git
正克隆到 'fabric-samples'...
remote: Counting objects: 1464, done.
remote: Total 1464 (delta 0), reused 0 (delta 0), pack-reused 1463
接收对象中: 100% (1464/1464), 533.28 KiB | 404.00 KiB/s, done.
处理 delta 中: 100% (683/683), done.
[root@fabric-cli fabric-samples]# git checkout v1.1.0
Note: checking out 'v1.1.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD 目前位于 1252c7a... [FAB-8920] Pin fabric-samples to node.js "~1.1.0"
[root@fabric-cli fabric-samples]# git checkout v1.1.0
HEAD 目前位于 1252c7a... [FAB-8920] Pin fabric-samples to node.js "~1.1.0"
[root@fabric-cli ~]# cd fabric-samples/balance-transfer/
[root@fabric-cli balance-transfer]# pwd
/root/fabric-samples/balance-transfer
环境准备完毕,现在就可以启动balance-transfer
有两种启动方式:
第一种
//打开终端1
docker-compose -f artifacts/docker-compose.yaml up //启动fabric网络
//出现以下日志
peer0.org2.example.com | 2018-04-28 18:23:58.808 UTC [flogging] setModuleLevel -> DEBU 1b8 Module 'peer/gossip/mcs' logger enabled for log level 'WARNING'
peer0.org2.example.com | 2018-04-28 18:23:58.808 UTC [flogging] setModuleLevel -> DEBU 1b9 Module 'peer/gossip/sa' logger enabled for log level 'WARNING'
peer0.org1.example.com | 2018-04-28 18:23:58.803 UTC [flogging] setModuleLevel -> DEBU 1b7 Module 'grpc' logger enabled for log level 'ERROR'
peer0.org1.example.com | 2018-04-28 18:23:58.803 UTC [flogging] setModuleLevel -> DEBU 1b8 Module 'peer/gossip/mcs' logger enabled for log level 'WARNING'
peer0.org1.example.com | 2018-04-28 18:23:58.803 UTC [flogging] setModuleLevel -> DEBU 1b9 Module 'peer/gossip/sa' logger enabled for log level 'WARNING'
//打开另一个终端2
cd /root/fabric-samples/balance-transfer //
npm install //安装依赖
PORT=4000 node app //启动服务
验证
curl -s -X POST http://localhost:4000/users -H "content-type: application/x-www-form-urlencoded" -d 'username=Jim&orgName=Org1'
{"success":true,"secret":"","message":"Jim enrolled Successfully","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MjQ5NzYxODQsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Ik9yZzEiLCJpYXQiOjE1MjQ5NDAxODR9.TiK9TTzNY8Pug4rCbrTS28ntvVxgC_hDUEr7JchbbiY"}
[root@fabric-cli ~]# curl -s -X POST \
> http://localhost:4000/channels \
> -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MjQ5NzYxODQsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Ik9yZzEiLCJpYXQiOjE1MjQ5NDAxODR9.TiK9TTzNY8Pug4rCbrTS28ntvVxgC_hDUEr7JchbbiY" \
> -H "content-type: application/json" \
> -d '{
> "channelName":"mychannel",
> "channelConfigPath":"../artifacts/channel/mychannel.tx"
> }'
{"success":true,"message":"Channel 'mychannel' created Successfully"}
具体测试请参考官方balance-transfer
第二种
cd fabric-samples/balance-transfer
./runApp.sh
测试
cd fabric-samples/balance-transfer
[root@fabric-cli balance-transfer]# yum install jq -y
## To use golang chaincode execute the following command
./testAPIs.sh -l golang
## OR use node.js chaincode
./testAPIs.sh -l node
[root@fabric-cli balance-transfer]# ./testAPIs.sh -l node
POST request Enroll on Org1 ...
{"success":true,"secret":"","message":"Jim enrolled Successfully","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MjQ5NzY1NTYsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Ik9yZzEiLCJpYXQiOjE1MjQ5NDA1NTZ9.jBiC1Sv1KM0BK2-zqdN_TUJGHx8co5YH4TSpETCskfw"}
ORG1 token is eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MjQ5NzY1NTYsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Ik9yZzEiLCJpYXQiOjE1MjQ5NDA1NTZ9.jBiC1Sv1KM0BK2-zqdN_TUJGHx8co5YH4TSpETCskfw
POST request Enroll on Org2 ...
{"success":true,"secret":"","message":"Barry enrolled Successfully","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MjQ5NzY1NTgsInVzZXJuYW1lIjoiQmFycnkiLCJvcmdOYW1lIjoiT3JnMiIsImlhdCI6MTUyNDk0MDU1OH0.UJer5MZ_GqajnQOTp0Jw_yB8k5HbTfKn5d5mU-OudFM"}
ORG2 token is eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MjQ5NzY1NTgsInVzZXJuYW1lIjoiQmFycnkiLCJvcmdOYW1lIjoiT3JnMiIsImlhdCI6MTUyNDk0MDU1OH0.UJer5MZ_GqajnQOTp0Jw_yB8k5HbTfKn5d5mU-OudFM
POST request Create channel ...
{"success":true,"message":"Channel 'mychannel' created Successfully"}
POST request Join channel on Org1
{"success":true,"message":"Successfully joined peers in organization Org1 to the channel:mychannel"}
POST request Join channel on Org2
{"success":true,"message":"Successfully joined peers in organization Org2 to the channel:mychannel"}
POST Install chaincode on Org1
{"success":true,"message":"Successfully install chaincode"}
POST Install chaincode on Org2
{"success":true,"message":"Successfully install chaincode"}
POST instantiate chaincode on peer1 of Org1
END
参考:
balance-transfer