docker exec -it cli1 bash
-o 指定排序节点、-c 通道名、-f 通道文件所在目录 -tls 是否使用证书 -cafile CA路径
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem
退出docker环境,复制通道文件:
sudo docker cp cli1:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel.block ./
sudo docker cp ./mychannel.block cli2:/opt/gopath/src/github.com/hyperledger/fabric/peer
开启另一个终端,进入Cli2容器
sudo docker exec -it cli2 bash
组织二加入通道
peer channel join -b mychannel.block
同理,在组织一终端执行相同命令加入通道
sudo docker exec -it cli1 bash
peer channel join -b mychannel.block
更新各自的锚节点:
在组织一的终端,更新组织一的:注意要在不同的终端,不要弄混
peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.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
更新组织二的:
peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.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
在fabric-samples/chaincode/sacc/目录下复制链码文件:因为还未编写链码,所以先复制测试网络的链码文件
cp sacc.go ~/fabric2.2/twonodes/chaincode/go/
回到组织一的twonodes目录,进入到cli1的容器内:
sudo docker exec -it cli1 bash
进入链码文件:
cd /opt/gopath/src/github.com/hyperledger/fabric-cluster/chaincode/go
准备打包链码:
环境准备:
1.换代理源
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=auto
2.创建go mod
go mod init
3.创建依赖
go mod vendor
回到工作目录:
cd /opt/gopath/src/github.com/hyperledger/fabric/peer
链码打包:
peer lifecycle chaincode package sacc.tar.gz \
--path github.com/hyperledger/fabric-cluster/chaincode/go/ \
--label sacc_1
退出容器组织1,复制到本地:
sudo docker cp cli1:/opt/gopath/src/github.com/hyperledger/fabric/peer/sacc.tar.gz ./
复制到组织二中:
sudo docker cp sacc.tar.gz cli2:/opt/gopath/src/github.com/hyperledger/fabric/peer
回到cli1的docker容器中:
sudo docker exec -it cli1 bash
安装链码:
注意:两个容器都需要安装,所以在cli1执行后,也要在cli2中执行
peer lifecycle chaincode install sacc.tar.gz
红框部分为packageID,在组织批准中需要用到
如果忘了,也有查询命令:
peer lifecycle chaincode queryinstalled
组织批准:(注意packageID是否一致)【Org1和Org2两个终端均要执行】
peer lifecycle chaincode approveformyorg --channelID mychannel --name sacc --version 1.0 --init-required --package-id sacc_1:9ffa6d574bee9027d9ae02ad3c8a6fb3c7d0f65e86dcf887e6e33f7216571af8 --sequence 1 --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
任意一个终端查询是否approve成功:
peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name sacc --version 1.0 --init-required --sequence 1 --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 --output json
peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID mychannel --name sacc --version 1.0 --init-required --sequence 1 --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 --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 --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
peer chaincode invoke -o orderer.example.com:7050 --isInit --ordererTLSHostnameOverride orderer.example.com --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 sacc --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 --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["a","bb"]}'
cli2上查询:
peer chaincode query -C mychannel -n sacc -c '{"Args":["query","a"]}'
cli2上数据覆盖:
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 sacc --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 --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["set","a","cc"]}'
cli1查询
peer chaincode query -C mychannel -n sacc -c '{"Args":["query","a"]}'
配置ip,通讯问题,有时候不配置IP,节点感知不到其他节点
vi /etc/hosts
其他记录:
Orderer节点启动挂掉
查看docker日志等相关命令
docker logs 容器名
docker ps -a -q
docker rm [容器id] #删除docker
docker rmi 'docker images -q' #删除所有本地docker
docker system prune --volumes #清楚docker缓存