容器启动之后,需要围绕peer节点进行以下操作:
先进入容器
docker exec -it cli bash
peer channel create --help
-o, --orderer string: orderer节点的地址
-c, --channelID: 通道的名字,创建通道文件的时候通过configtxgen指定过
-f, --file string: 指定生成的通道所使用的文件
–tls: 和orderer通信时是否对数据加密,不写或false为不加密,true为加密
–cafile string: orderer的证书,orderer证书的节点目录为/msp/tlscacerts/xxxx.pem , 这个路径必须是绝对路径
在容器中不断地去找cafile的目录,大致过程如下:
#使用一变量接收路径
tlsfile=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/github.com/msp/tlscacerts/tlsca.github.com-cert.pem
peer channel create -o orderer.github.com:7050 --tls true --cafile $tlsfile -c githubchannel -f ./channel-artifacts/channel.tx
orderer.github.com:7050 为orderer节点文件docker-compose-base.yaml中声明的变量
$tlsfile 接收变量的值
-c 通道ID ,之前生成通道文件时configtxgen指定的ID为githubchannel
这时文件夹中会多出来一个githubchannel.block通道文件.
创建通道过程中的问题:
# 错误1
Error: got unexpected status: BAD_REQUEST -- error authorizing update: error validating ReadSet: readset expected key [Group] /Channel/Application at version 0, but got version 1
# 第一种情况: 通道已经创建出来了, 再次创建
# 第二种情况: 第一次启动了一个网络, 关闭(容器也销毁了), 但是再次启动网络, 创建通道时出现错误,这个是因为第一次启动网络生成的数据保存在了挂载是数据卷目录, 这些目录没有被删除,
# 解决: 可以使用docker volume prune -> 删除所有没有被使用的数据卷
# 错误2
error validating DeltaSet: policy for [Group] /Channel/Application not satisfied: Failed to reach implicit threshold of 1 sub-policies, required 1 remaining
# 原因:
# 这个问题的原因是用configtxgen生成创始块的时候,配置文件configtx.yaml指定了错误的msp目录。 导致生成的区块中包含的证书其它用户的证书。
# 比如修改了 crypto-config.yaml -> 生成了新的证书
# 解决:
# 必须要重新生成:创始区块和通道文件 -> configtxgen
peer channel --help
join: 加入通道
list: 查看当前节点加入的通道peer channel join [flags]
-b, --blockpath string: 加入的通道,这里即githubchannel.block
peer channel join -b githubchannel.block #加入
peer channel list #查看
在客户端文件docker-compose-cli.yaml中第89行,由于channel-artifacts文件夹被挂载到了容器内部的,所以在容器也可以看到相关文件,锚节点的更新文件就放在这里.
peer channel update -o orderer.github.com:7050 --tls --cafile $tlsfile -c githubchannel -f ./channel-artifacts/goAnchor.tx
peer chaincode install [flags]
-l, --lang string: 链码语言
-n, --name string: 链码的名字
-p, --path string: 链码路径 go链码:相对路径$GOPATH/src; node.js/java链码: 绝对路径
-v, --version string: 链码版本
~/hyperledger-fabric/fabric-samples/chaincode/chaincode_example02/go$ cp chaincode_example02.go ~/testfabric/chaincode/
因为客户端文件docker-compose-cli.yaml中chaincode文件夹挂载在了容器中,在容器内部可以看到这个go文件
peer chaincode install -n githubcc -v 1.0 -p github.com/chaincode
-p后的路径是gopath/src后的路径
如果得到下面
2019-03-10 14:46:11.041 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-03-10 14:46:11.041 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-03-10 14:46:11.870 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" >
peer chaincode package -n githubcc -v 1.0 -p github.com/chaincode chaincode.out
得到chaincode.out打包文件,之后可以直接使用进行链码的安装
安装代码为: peer chaincode install 文件名