需要复制crypto-config.yaml到目录
cryptogen generate --config=./crypto-config.yaml
在当前目录下自动生成crypto-config目录,里边存放了所有的证书与密钥,为MSP 提供服务 Name:组织名称 Domain:组织域名 Specs: -Hostname:自定义节点名称 Template:使用模板定义节点名称 peer($Count +1) -Count:节点数量 Users:用户名称 user$Count - Count:用户数量
需要复制configtx.yaml到目录
mkdir channel-artifacts
configtxgen -profile TwoOrgsOrdererGenesis -channelID sys-channel-name -outputBlock ./channel-artifacts/genesis.block
-profile
:后边接通道配置名称,从configtx.yaml文件的profiles配置段中寻找相关通道配置名称载入。-channelID
:后边接通道名称,这里定义的是系统通道的名称,建议全小写并且没有特殊字符;-outputBlock
:后边接创世区块输出的文件路径,路径中目录如果不存在,需提前创建; cd $HOME/fabric-samples/first-network mkdir -p channel-artifacts
该文件总共有六个配置段:
Organizations:定义了各组织机构的名称、MSPID、MSP目录、读写策略等; Capabilities:能力定义,设定了不同版本的节点所能做的事情; Application:定义了要写入创世区块或配置交易的应用参数。 Orderer:定义了通道的共识模式与区块的相关信息; Channel:定义了通道中相关API的调用权限; Profiles:定义configtxgen工具的相关配置入口;
Name:在网络中的名称 ID:MSP中的唯一ID MSPDir:msp的相关目录 Policies:读写策略 AnchorPeers:锚节点配置
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
-profile
:后边接通道配置名称,从configtx.yaml文件的profiles配置段中寻找相关通道配置名称载入。-outputAnchorPeersUpdate
:后边接组织锚节点配置文件输出的文件路径;-channelID
:后边接通道名称,这里定义的是业务通道的名称,建议全小写并且没有特殊字符;-asOrg
:后边接所属组织的MSPID,要与configtx.yaml文件中Organizations配置段的定义一致;
复制scripts文件夹到目录
需要复制docker-compose-cli.yaml和base文件夹到目录
并删除这几个文件里的:$IMAGE_TAG
。
在peer-base.yaml文件里,第16行,${COMPOSE_PROJECT_NAME}是docker网络命名,这里自己填写
例如改为test-first-network
docker-compose -f docker-compose-cli.yaml up -d
删掉docker-compose-base.yaml文件,第52行 peer0.org1.example.com:/var/hyperledger/production删除
查看docker镜像
docker images
查看docker运行的镜像
docker ps -a
查看docker网络列表
docker network ls
查看docker网络信息
docker network inspect testfirstnetwork_byfn
查看 peer0的docker日志
docker logs peer0.org1.example.com
进入cli docker容器
docker exec -it cli bash
查看有哪些数据卷
docker volume ls
docker exec cli peer channel create -o orderer.example.com:7050 -c mychannel --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem -f ./channel-artifacts/channel.tx
-o:与某个排序节点连接; -c:通道名称; -f:使用通道配置文件; --tls:是否开启TLS加密传输协议; --cafile:服务端的证书文件;
#"peer0.org1"
docker exec cli peer channel join -b mychannel.block
#"peer1.org1"
docker exec -e "CORE_PEER_ADDRESS=peer1.org1.example.com:7051" cli peer channel join -b mychannel.block
#"peer0.org2"
docker exec -e "CORE_PEER_ADDRESS=peer0.org2.example.com:7051" -e "CORE_PEER_LOCALMSPID=Org2MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp" cli peer channel join -b mychannel.block
../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp
#"peer1.org12
docker exec -e "CORE_PEER_ADDRESS=peer1.org2.example.com:7051" /
-e "CORE_PEER_LOCALMSPID=Org2MSP" /
-e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp" cli peer channel join -b mychannel.block
peer
#"peer0.org1"
docker exec cli peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx --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
#"peer0.org2"
docker exec -e "CORE_PEER_ADDRESS=peer0.org2.example.com:7051" -e "CORE_PEER_LOCALMSPID=Org2MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp" -e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" cli peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --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
docker exec cli peer chaincode install -n mycc -v 1.0 -l golang -p "github.com/chaincode/chaincode_example02/go/"
-n:链码的名字 -v:链码的版本号 -l:编写语言 -p:链码路径
docker exec cli peer chaincode instantiate -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 mycc -l golang -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
-o:与某个排序节点连接; -l:链码编程语言,使用golang; --tls:是否开启TLS加密传输协议; -v:链码版本号,默认1.0; --cafile:服务端的证书文件; -c:传输给链码的参数; -C:通道名称; -P:背书策略; -n:链码名称;
docker exec cli peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
go env
go env -w GOPROXY=https://goproxy.io,direct
go get github.com/gin-gonic/gin