您的位置:首页 > 其它

超级账本发现之旅二:开始第一个程序

2017-08-25 00:00 267 查看
本文将通过超级账本 Fabric 网络展示如何使用区块链网络。最通用的一个层面, 就是区块链网络上的应用 会允许用户来查询账本(ledger),获取账本中包含的特定的记录, 或者更新这个账本, 例如对这个账本增加记录信息。
    在这个例子中, 通过使用Node.js SDK 来和区块链交互, 其中包含下面三个步骤:

启动一个测试用的超级账本Fabric 区块链网络。 我们需要在区块链网络中有一些基本的组件, 以便能完成查询和更新账本的操作。 这些组件包括:
(1)一个peer 节点
(2)一个证书验证节点——这是整个网络的支柱和基础
(3)一个CLI 容器,用来执行一些带有权限的命令

学习例子中的智能合约以及参数。 例子中的智能合约包含一些函数, 以不同的方式来和账本进行交互。 例如, 我们可以全局的读取数据, 也可以查询更加细粒度层面的数据。

开发这个应用, 使得这个应用能够执行查询和更新操作。 会通过提供两个示例应用, 一个用来查询账本, 另一个用来更新账本。 应用程序会通过SDK API来和区块链网络进行交互, 并最终调用这些函数。

在读完本篇之后, 你会对应用程序如何借助Fabric SDK(本例中使用Node.js SDK), 通过编程的方式联合只能合约, 来和区块链网络中的账本进行交互。

下面, 开始超级账本之旅吧。

启动区块链网络

我们假定您已完成搭建环境的所有任务, 整个超级账本的环境是完全正常的。正常的超级账本环境界面如下:



登陆系统之后, 打开命令行, 输入:cd fabric-samples/fabcar
lsfabcar 目录如下:



这是整个fabric-samples的目录结构, 需要了解这个目录结构, 是因为fabcar会执行其他目录中的命令:



现在,通过执行 
startFabric.sh
 这个脚本来启动区块链网络./startFabric.sh注意, 在这个脚本中,会执行一系列的操作, 主要有:

启动一个peer 节点, ordering 节点,证书验证节点, 以及 CLI 容器

创建一个channel, 并把peer 节点加入到channel中

安装智能合约 (也就是 chaincode) 到 peer的文件系统中, 并初始化channel上的 chaincode; 

调用
initLedger
 函数, 把10辆不同的汽车数据填充到这个channel的账本中。

下面开始逐行分析这个脚本。
#!/bin/bash
# Exit on first error, set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式。-e表示,若指令传回值不等于0,则立即退出shell。

set -e
# 设置时间
starttime=$(date +%s)

#准备证书目录
if [ ! -d ~/.hfc-key-store/ ]; then
mkdir ~/.hfc-key-store/
fi
#这是把证书信息复制到对应目录,这一步是建立CA的关键
cp $PWD/creds/* ~/.hfc-key-store/
# 进入basic-network目录, 开启区块链网络, 创建渠道,并把节点加入进去
./start.sh

先来看看这个start.sh里面都做了哪些工作。

set -ev
#先停掉之前启动的网络
docker-compose -f docker-compose.yml down
#在这一行里,传入ca、orderer、peer0 以及一个couchdb存储的容器, 启动网络
docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb

通过Docker,启动了区块链的网络, 目前网络的拓扑结构大致如下:



下一步, 就是要通过CLI 来安装和启动chaincode#启动cli 容器
docker-compose -f ./docker-compose.yml up -d cli
#创建channel, 指定在peer0上创建mychannel 渠道,并传入目标的orderer节点
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


#将peer0加入mychannel
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



现在区块链网络搭建完成, 返回之前的命令行:#通过Cli , 安装智能合约
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode install -n fabcar -v 1.0 -p github.com/fabcar

#通过cli, 初始化智能合约
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n fabcar -v 1.0 -c '
{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

#通过Cli, 执行一次invoke 调用, 在区块链网络中添加10辆汽车信息
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n fabcar -c '执行完invoke操作之后的命令行输出:



从命令行中可以看出, 10辆汽车信息已经存放到区块链中了。

区块链应用分析

首先,在命令行中输入:#docker ps可以看到目前有多少个docker 实例:



对于这些docker image 的具体信息以及用法, 后续的文章会给以分析。

应用分析

应用和Fabric 网络交互示意图:






如前所述,  这个例子中包含一个活跃的chaincode 容器, 以及一个预装了10辆汽车信息的账本。另外, 这个例子里面还有一个样例 Javascript 代码:
    -query.js
可以用来查询账本中的汽车信息。
    在进一步查看应用如何工作之前,首先需要安装一个SDK node 模块, 以便让我们的样例应用可以工作。 在fabcar 目录, 输入如下命令:
    #sudo npm install

安装成功之后, 在命令行里面输入:

#sudo node query.js

在控制台就会输出这十辆车的信息:



看, 第一辆车,CAR0, 是Toyota 的Prius, owner 是Tomoko, 如果看到这一行, 说明已经可以执行查询了哦~!
    今天先分析到这里,至于这个查询是如何执行的, chaincode 存放在什么位置, 下一期推送吧!



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐