CentOS7环境下搭建Hyperledger超级账本

、安装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网络进行配置,主要配置步骤如下:

  • 准备网络内各项配置。包括网络成员的组织结构和身份证书(可使用crypyogen工具完成);生成系统通道的初始化区块文件(创世区块配置文件),新建应用通道的配置更新交易文件以及可能需要的锚节点配置更新文件(使用configtxgen工具完成)
  • 使用系统通道的初始化配置区块文件启动排序节点,排序节点启动后自动按照指定配置创建系统通道。
  • 不同的组织按照配置角色分别启动 peer 节点。这个时候系统中不存在应用通道,peer节点并没有加入到网络中。
  • 使用新建应用通道的配置更新交易文件,向系统通道发送交易,创建新的应用通道。
  • 让对应的 Peer 节点加入所创建的应用通道中,此时Peer节点加入网络,可以进行交易了。
  • 用户通过客户端向网络中安装链码,链码容器启动成功后用户即可对链码进行调用,将交易发送到网络中。

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
注意:根据项目的版本切换到对应版本下的scripts文件下载。

    (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

猜你喜欢

转载自blog.csdn.net/u013828353/article/details/80901833