Fabric-samples 1.4商业票据教程详细过程(Commercial paper tutorial)

本文已在公众号Fabric技术分享原创首发。
转载请标明出处:
https://blog.csdn.net/qq_27818541/article/details/86725708
本文出自:【BigManing的博客】

前言
node >= 8.9.0
docker >= 18.06
fabric组件版本   1.4

作者系统   Ubuntu 16.04

官方为了更好的展示应用开发的编程模型 新引进了一个事例。例子是用node编写的 ,里面引入了一些新的NPM官方包,使得开发者更加便捷的编写应用。这里记录下整个过程,来了解下新的编程模型。

一、下载fabric-samples

mkdir -p $GOPATH/src/github.com/hyperledger/
cd $GOPATH/src/github.com/hyperledger/

git clone https://github.com/hyperledger/fabric-samples.git
#基于1.4 来操作
git checkout release-1.4
二、启动网络
 cd fabric-samples/basic-network
 ./start.sh

执行效果


..........

#    创建通道
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel create -o orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx
2019-01-28 12:16:12.237 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2019-01-28 12:16:12.299 UTC [cli.common] readBlock -> INFO 002 Received block: 0
#    把peer加入到channel中
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel join -b mychannel.block
2019-01-28 12:16:12.439 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2019-01-28 12:16:12.619 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel

docker ps查看网络组件

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS
                               NAMES
ba58407bf096        hyperledger/fabric-peer      "peer node start"        5 minutes ago       Up 5 minutes        0.0.0.0:7051->7051
/tcp, 0.0.0.0:7053->7053/tcp   peer0.org1.example.com
f7939f8f6d6a        hyperledger/fabric-ca        "sh -c 'fabric-ca-se…"   5 minutes ago       Up 5 minutes        0.0.0.0:7054->7054
/tcp                           ca.example.com
81e1265e79d9        hyperledger/fabric-orderer   "orderer"                5 minutes ago       Up 5 minutes        0.0.0.0:7050->7050
/tcp                           orderer.example.com
c753d3d1c468        hyperledger/fabric-couchdb   "tini -- /docker-ent…"   5 minutes ago       Up 5 minutes        4369/tcp, 9100/tcp
, 0.0.0.0:5984->5984/tcp       couchdb
三、启动监控容器

这里使用logspout来监控docker日志的输出,它能把不同docker输出集中到一处。
执行下面命令

cd ../commercial-paper/organization/magnetocorp/configuration/cli/
./monitordocker.sh net_basic

执行后的效果

Starting monitoring on all containers on the network net_basic
373d4ef718bc92aefe9c9af409df59b582701ab21b744680887290162558d779
# 阻塞在这里  

这个命令会阻塞在这里,这个窗口将显示docker容器的输出,所以后续的操作需要启动另一个终端窗口。

monitordocker.sh核心逻辑如下

# 每次执行  清除旧的容器
docker kill logspout 2> /dev/null 1>&2 || true
docker rm logspout 2> /dev/null 1>&2 || true

# 启动 logspout 容器
docker run -d --name="logspout" \
	--volume=/var/run/docker.sock:/var/run/docker.sock \
	--publish=127.0.0.1:${PORT}:80 \
	# 监听 哪个网络里的容器
	--network  ${DOCKER_NETWORK} \
	gliderlabs/logspout
sleep 3

#  执行这个命令 会阻塞等待输出
curl http://127.0.0.1:${PORT}/logs

四、启动MagnetoCorp组织的cli
cd commercial-paper/organization/magnetocorp/configuration/cli/
docker-compose -f docker-compose.yml up -d cliMagnetoCorp

创建这个cli是为了模拟MagnetoCorp组织进行合约操作

五、合约
1、合约预览

主要合约逻辑是在commercial-paper/organization/magnetocorp/contract/lib/papercontract.js

新特点:

  1. 从1.4开始新增了fabric-contract-api NPM包,包含Contract, Context两个新概念以及高级API接口 详情请点击链接查看
    2. 以前实现合约需要实现 init invoke (定义路由实现)
  2. 集成Contract后只要定义合约方法即可,内部自动实现路由。
2、合约安装
docker exec cliMagnetoCorp peer chaincode install -n papercontract -v 0 -p /opt/gopath/src/github.com/contract -l node

这里是模拟cliMagnetoCorp这个组织来操作合约,局限于当前basic-network单组织的网络,taget使用peer0,管理员也是org1的admin。官方后期会完善 多组织的basic-network

3、合约初始化
docker exec cliMagnetoCorp peer chaincode instantiate -n papercontract -v 0 -l node -c '{"Args":["org.papernet.commercialpaper:instantiate"]}' -C mychannel -P "AND ('Org1MSP.member')"

docker ps

CONTAINER ID        IMAGE                                                                                                         COMMAND                  CREATED             STATUS              PORTS                                            NAMES
// 初始化的合约
88aacad81e24        dev-peer0.org1.example.com-papercontract-0-d96abb966a1ed760663cf0a061700a902284832716c55b4cb05eca53054fe011   "/bin/sh -c 'cd /usr…"   3 minutes ago       Up 3 minutes                                                         dev-peer0.org1.example.com-papercontract-0
// cliMagnetoCorp 组织的操作cli
27cc187a260f        hyperledger/fabric-tools                                                                                      "/bin/bash"              10 minutes ago      Up 9 minutes                                                         cliMagnetoCorp
700e8233483b        gliderlabs/logspout                                                                                           "/bin/logspout"          10 minutes ago      Up 10 minutes       127.0.0.1:8000->80/tcp                           logspout
673f35c34210        hyperledger/fabric-peer                                                                                       "peer node start"        11 minutes ago      Up 11 minutes       0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp   peer0.org1.example.com
6018fee5cc3d        hyperledger/fabric-ca                                                                                         "sh -c 'fabric-ca-se…"   11 minutes ago      Up 11 minutes       0.0.0.0:7054->7054/tcp                           ca.example.com
4126234e1fc6        hyperledger/fabric-couchdb                                                                                    "tini -- /docker-ent…"   11 minutes ago      Up 11 minutes       4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp       couchdb
3bd62c3f639c        hyperledger/fabric-orderer                                                                                    "orderer"                11 minutes ago      Up 11 minutes       0.0.0.0:7050->7050/tcp                           orderer.example.com

六、magnetocorp组织的Application

定位到commercial-paper/organization/magnetocorp/application

1、文件结构
.
├── addToWallet.js  // 添加证书、秘钥到制定wallet账户
├── issue.js  // magnetocorp组织 发布票据的 功能   引入了fabric-network新包
└── package.json 
2、 安装依赖
npm install
3、 导入钱包
node addToWallet.js
# 就是把`basic-network`里面org1的user1 账户信息导入到wallet中

查看效果

../identity/user/isabella/wallet/
└── User1@org1.example.com
    ├── c75bd6911aca808941c3557ee7c97e90f3952e379497dc55eb903f31b50abc83-priv
    ├── c75bd6911aca808941c3557ee7c97e90f3952e379497dc55eb903f31b50abc83-pub
    └── User1@org1.example.com
4、 发布商业票据
node issue.js

执行效果

Connect to Fabric gateway.
Use network channel: mychannel.
Use org.papernet.commercialpaper smart contract.
Submit commercial paper issue transaction.
2019-01-31T11:24:00.954Z - info: [TransactionEventHandler]: _strategySuccess: strategy success for transaction "df49ec6d7c32cde93a1c6a7067400eaa0155a2f6d205ec6b3250660ad4a54f6e"
Process issue transaction response.
MagnetoCorp commercial paper : 00001 successfully issued for value 5000000
Transaction complete.
Disconnect from Fabric gateway.
Issue program complete.
5、整体架构

image

七、启动DigiBank组织的cli

magnetocorp组织发布票据, DigiBank组织购买票据,我们需要启动一个属于DigiBank组织的cli

cd commercial-paper/organization/digibank/configuration/cli/
docker-compose -f docker-compose.yml up -d cliDigiBank
八、DigiBank组织的application

定位到commercial-paper/organization/digibank/application

1、文件结构
.
├── addToWallet.js // 添加证书、秘钥到制定wallet账户
├── buy.js    // 购买票据
├── package.json
└── redeem.js // 赎回票据
2、安装依赖
npm install
3、 导入钱包
node addToWallet.js
# 就是把`basic-network`里面org1的user1 账户信息导入到wallet中
4、 购买票据
node buy.js

执行效果

Connect to Fabric gateway.
Use network channel: mychannel.
Use org.papernet.commercialpaper smart contract.
Submit commercial paper buy transaction.
2019-01-31T12:01:40.246Z - info: [TransactionEventHandler]: _strategySuccess: strategy successfor transaction "baaeeee699ccf128409c83455630774885e7b8fd3661bb2aa54c20d34cb39484"
Process buy transaction response.
MagnetoCorp commercial paper : 00001 successfully purchased by DigiBank
Transaction complete.
Disconnect from Fabric gateway.
Buy program complete.
5、 赎回票据
node redeem.js

执行效果

Connect to Fabric gateway.
Use network channel: mychannel.
Use org.papernet.commercialpaper smart contract.
Submit commercial paper redeem transaction.
2019-01-31T12:01:48.293Z - info: [TransactionEventHandler]: _strategySuccess: strategy successfor transaction "2321608a020c967e986f157a3a2cf8319a26dfe8656b2e31b8ebe3cf1796f95b"
Process redeem transaction response.
MagnetoCorp commercial paper : 00001 successfully redeemed with MagnetoCorp
Transaction complete.
Disconnect from Fabric gateway.
Redeem program complete.
6、 整体架构

image

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值