一、安装Docker
目前开源社区Docker最新版本为 18.03.1,社区分为开源版本(docker-ce)和企业版本(docker-ee)。 需要配置Docker官方源才可以安装最新版本,此处我们安装开源社区版本 docker-ce。
需要安装 Docker 及 Docker-compose,验证这两项安装成功即可。
二、安装Go语言运行环境
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go语言于2009年11月由Google正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后追加Windows系统下的实现。Go语言具有 部署简单、并发性好、良好的语言设计、执行性能好 等特点。
三、安装NVM及Node.js
nvm全称Node Version Manager ,是 Nodejs 版本管理器,它让我们能方便的对 Nodejs 的版 本进行切换。 nvm 的官方版本只支持 Linux 和 Mac。 Windows 用户,可以用 nvm-windows。
fabric暂时不支持7.x,需要安装6.9.x 或 6.x高的版本,通过 nvm 安装指定 版本的node。
现安装Node.js 6.5.9 版本。
至此 Docker、Docker-compose、Go、Node.js 基础运行环境已经全部安装完成。
四、Fabric Samples 下载并安装
运行Fabric最基础的运行环境为 Docker、Go、Node.js ,配置完基础运行环境后,在对Fabric网络进行配置,主要配置步骤如下:
1、下载Fabric Samples
Fabric Samples 的 Git 地址为:https://github.com/hyperledger/fabric-samples
目前 Fabric Samples 最新版本为 1.1 ,但是1.1 版本在安装过程中会遇到一些问题,暂时无法解决,所以现使用 1.0 版本。
在左侧版本选择处选择 1.0 版本,并下载:
wget https://github.com/hyperledger/fabric-samples/archive/release-1.0.zip
解压后,在CentOS 中的路径为:
/root/dev/hyperledger/fabric-samples-release-1.0
2、下载镜像和要执行的二进制文件 (1) 如果可以翻墙,可以打开 https://goo.gl/byy2Qj ,将内容保存init.sh文件,放置 于fabric-samples-release-1.0根目录中。
(2)如果访问不了外网,可以在fabric项目的scripts找到bootstrap.sh文件,并下载到fabric-samples-release-1.0根目录中。
下载地址: https://github.com/hyperledger/fabric/blob/release-1.0/scripts/bootstrap.sh(3)为 bootstrap.sh 授予可执行权限,并执行bootstrap.sh下载镜像(要等几分钟):
./bootstrap.sh
(4)执行完会在根目录生成bin文件夹
3、配置超级账本网络信息
进入first-network 目录,接下来所有的操作,都在此目录下进行。
cd first-network
打开 docker-compose-cli.yaml 文件,注释掉
command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME} ${DELAY}; sleep $TIMEOUT'
这句代码,如下图:
以下操作主要为网络配置操作,可以保存为sh文件,批量执行:
# 配置网络基础数据
./byfn.sh -m generate
#生成创世区块
../bin/cryptogen generate --config=./crypto-config.yaml
export FABRIC_CFG_PATH=$PWD
../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
#⽣成应⽤通道的配置信息
export CHANNEL_NAME=mychannel
../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
#⽣成锚节点配置更新⽂件
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
#操作⽹络,编辑 docker-compose-cli.yaml ,注释掉 command 命令(注释步骤之前已经完成了)
CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=600 docker-compose -f docker-compose-cli.yaml up -d
以下为Docker 操作,主要目标为 创建和加⼊通道
docker exec -it cli bash
在Docker容器中创建通道
export CHANNEL_NAME=mychannel
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
加⼊通道
peer channel join -b mychannel.block
链上代码 (链码) 安装链码(此处安装的代码并非本地的代码)
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
实例化链码
peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR('Org1MSP.member','Org2MSP.member')"
查询
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
可以看到返回结果如下:
Query Result:100
peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'
现操作A转账给B 10 块钱,这个命令将会创建新的block同时更新state DB。
peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'
查询 a 账户的金额
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
查询结果仅剩90块,如下
Query Result: 90