此文章所用 fabric为1.4.3 ubuntu1~16.04.10 go 1.11.5
一: 创建multipeer目录
cd $GOPATH/src/github.com/hyperledger/fabric
mkdir multipeer
cd multipeer
二:获取生成工具
下载fabric平台特定二进制文件
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.4.3/hyperledger-fabric-linux-amd64-1.4.3tar.gz
解压:tar -zxvf hyperledger-fabric-linux-amd64-1.4.3.tar.gz
解压会发现一个bin和config文件 我们需要用到bin文件 , 将bin 文件放入multipeer 目录下
为bin 文件修改权限 :chmod -R 777 ./bin
三:准备生成证书和区块配置文件
准备 crypto-config.yaml和configtx.yaml 两个配置文件
四:生成公私钥和证书
./bin/cryptogen generate --config=./crypto-config.yaml
目录下会出现crypto-config文件夹
crypto-config会出现ordererOrganizations和peerOrganizations两文件夹
五:生成创世区块
mkdir channel-artifacts
./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
此命令中 ‘TwoOrgsOrdererGenesis’ 是configtx.yaml 文件中 Profiles参数下的 需要根据 个人 configtx.yaml里的配置来定义
在 channel-artifacts 文件夹中生产genesis.block 文件
六:生成应用通道交易配置文件:
指定使用 configtx.yaml
配置文件中的 TwoOrgsChannel
模板, 来生成新建通道的配置交易文件, TwoOrgsChannel
模板指定了 Org1 和 Org2 都属于后面新建的应用通道
./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannel
此命令中与上一步一样,‘TwoOrgsChannel’ 是configtx.yaml 文件中 Profiles参数下的 需要根据 个人 configtx.yaml里的配置来定义
七:准备docker配置文件
准备 docker-compose-orderer.yaml 和 docker-compose-peer.yaml 两个 文件
八:启动Fabric网络
并默认驱动程序创建网络
docker-compose -f docker-compose-orderer.yaml up -d
使用 docker ps -a 可以看到正在运行的 docker 有个 hyperledger/fabric-orderer 就说明 orderer 服务启动成功
docker-compose -f docker-compose-peer.yaml up -d
启动peer服务的时候可以看到 docker 中其中了 hyperledger/fabric-peer和hyperledger/fabric-tools 两个镜像
网络启动顺序:首先启动 Orderer 服务节点,然后启动 Peer 节点
参数说明:
九:启动cli容器
docker exec -it cli bash
十:创建channel
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/mychannel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
返回 Received block :0 说明创建成功。
<1. Peer加入Channel
peer channel join -b mychannel.block
可以通过 : peer channel list 查看是否添加成功
<2 . 保存mychannel.block
先推出容器: exit
docker cp xxxxxxxx:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel.block /home/zzw-fabric/gopath/src/github.com/hyperledger/fabric/multipeer
注:此处的xxxx 为本机的docker dockr cp 的命令意思是,把自己在docker 容器里生产的 mychannel.block文件 保存早 服务器你刚建立的项目的位置,第一个路径是docker 容器里的路径,第二个路径是你本机的项目路径。
十一:安装部署只能合约
<1 事先将合约放入 你的 chaincode/go目录下
<2 安装智能合约
peer chaincode install -n mycc -p github.com/hyperledger/fabric/multipeer/chaincode/go -v 1.11.5
注解: -p 是你docker环境里 链码的位置,路径从 github.com/ 开头 ,回车后,系统会自动加上 opt/gopath/src的路径 -v 链码的版本, -n :自己定义的链码名称
<3 查看是否安装成功:
peer chaincode -C mychannel list --installed 看自己的链码是否安装成功,如下表示成功安装
<3 实例化智能合约
peer chaincode instantiate -o orderer.example.com:7050 --tls --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 mychannel -n mycc -v 1.11.5 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')"
<4 触发合约
peer chaincode invoke -o orderer.example.com:7050 --tls true --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 mychannel -n basicInfo --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt -c '{"Args":["save","110115","{\"name\":\"zhangsan\",\"identity\":\"110114\",\"mobile\":\"18910012222\"}"]}'