连入CLI了,乱七八糟的链码什么的都已经映射到CLI容器中了。现在这个CLI是以某Peer的身份运行的,他包含了TLS的证书、MSP等必要的文件和目录。
1. 确定Chaincode的存放目录
这个就是跟着CLI容器的配置,直接映射到容器中的目录的,具体要用哪个语言写的chaincode其实都无所谓。
2. Create Channel
先判断一下是否开启了服务器端验证:CORE_PEER_TLS_ENABLED,如果开了, 那就得把TLS证书传进去。这个证书应该是放在example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem。
然后执行命令:
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt
这个channel.tx就是在创建channel时得到的transaction
这样我们就得到了一个以channel name命名的block,用于下面的peer加入channel
3. Peer Join Channel
然后就是把每个Peer,加入到Channel中去。
peer channel join -b $CHANNEL_NAME.block >&log.txt
拿起我们的channel.block。这个block是channel的创世区块,当然,peer要想能加入到这个channel,block中需要有这个peer的配置。至于在网络建立之后,如何再加入新的peer,后面再说。
神奇的是,Fabric中peer是有可能join失败的,所以他默认是要尝试5次。
4. 更新Anchor Peer
Anchor Peer有什么用呢,简单来说就是用来跑Gossip协议的。Fabric的Gossip协议是运行在Organization之间的,Organization内部的Peer并不会直接跟其它的Organization进行交互,而是通过Anchor Peer。
其实这个就跟Create Channel差不多啦,把之前创建好的OrgXMSPanchors.tx加进来。
peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt
5. Install Chaincode
其实现在网络就已经构建完成了,下面就是在各锚节点上Install Chaincode了。
peer chaincode install -n fabcar -v ${VERSION} -l ${LANGUAGE} -p ${CC_SRC_PATH} >&log.txt
这几个参数都比较简单了,就是把chaincode的所在目录传进去,就OK了。
6. Instantiate Chaincode
这一步就是部署我们的Chaincode。
peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n fabcar -l ${LANGUAGE} -v 1.0 -c '{"Args":["initLedger"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')" >&log.txt
需要注意的就是 -c 这个地方是要指定我们要调用的方法和参数,-P就是这个chaincode的对应背书策略
7. Query
发起查询来验证chaincode的执行结果,Query是不会写入transaction的,所以不会被记录。
peer chaincode query -C $CHANNEL_NAME -n fabcar -c '{"Args":["queryCar","CAR1"]}' >&log.txt
-c也是执行的chaincode方法名和参数
下一步我们设计大规模节点,来测试Fabric的事务并发性能