Hyperledger fabric:无法在 chainecode_example02 中调用链代码?

Hyperledger fabric: unable to Invoke chaincode in the chainecode_example02 for?

我有自己的网络并尝试使用 chaincode_example02 链码来测试它,遵循第一个网络示例。当涉及到我的shellscipt中的chaincodeInvoke时,控制台显示

Sending invoke transaction on peer0.bank peer0.caseManager...
--tlsRootCertFiles
 --peerAddresses peer0.bank.snts.com:7051 --tlsRootCertFiles
--tlsRootCertFiles
 --peerAddresses peer0.bank.snts.com:7051 --tlsRootCertFiles --peerAddresses peer0.caseManager.snts.com:7051 --tlsRootCertFiles
+ peer chaincode invoke -o orderer.snts.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/snts.com/orderers/orderer.snts.com/msp/tlscacerts/tlsca.snts.com-cert.pem -C sntschannel -n mycc --peerAddresses peer0.bank.snts.com:7051 --tlsRootCertFiles --peerAddresses peer0.caseManager.snts.com:7051 --tlsRootCertFiles -c '{"Args":["invoke","a","b","10"]}'
+ res=1
+ set +x
2019-01-01 16:38:40.670 UTC [chaincodeCmd] validatePeerConnectionParameters -> WARN 001 received more TLS root cert files (2) than peer addresses (1)
Error: error validating peer connection parameters: number of peer addresses (1) does not match the number of TLS root cert files (2)
!!!!!!!!!!!!!!! Invoke execution on peer0.bank peer0.caseManager failed  !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========

bank 有 2 个 peer,caseManager 有 3 个。什么会导致这个问题?在第一个网络示例中,两个组织都有 2 个对等体,并且运行良好。有人可以帮忙吗?谢谢。

在您的请求中,您使用了 --tlsRootCertFiles 标志但没有为其指定任何路径?你是在外部设置这个吗?如果没有,请尝试像

这样指定它

--tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

问题在于获取 TLSINFO 的方式。 下面的命令用于我们提到 TLSCert 文件的 utils.sh 文件。您需要根据您的要求修改它。

TLSINFO=$(eval echo "--tlsRootCertFiles $PEER_Org_CA")

您需要修改全局变量,使其通用。

需要改,在文件utils.shsetOrderererGlobals()方法中:

setGlobals() {
  PEER=
  ORG=


  ### ADD THESES LINES !!! ###
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org$ORG.supplychainnet.ch/peers/peer$PEER.org$ORG.supplychainnet.ch/tls/ca.crt

  CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org$ORG.supplychainnet.ch/users/Admin\@org$ORG.supplychainnet.ch/msp
  ### ADD THESES LINES !!! ###

if [ $ORG -eq 1 ]; then
    CORE_PEER_LOCALMSPID="Org1MSP"

   ### COMMENT THESES LINES !!! ###
    #CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA
    #CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.supplychainnet.ch/users/Admin\@org1.supplychainnet.ch/msp
   ### COMMENT THESES LINES !!! ###

    if [ $PEER -eq 0 ]; then
      CORE_PEER_ADDRESS=peer0.org1.supplychainnet.ch:7051
    else
      CORE_PEER_ADDRESS=peer1.org1.supplychainnet.ch:8051
    fi
  else
    echo "================== ERROR !!! ORG Unknown =================="
  fi


因此,每个对等点的环境路径将自动更新为数字 $PEER 和 $ORG,而不是检索文件顶部定义的全局 PEERx_ORGy_CA 路径。

在 --tlsRootCertFiles

中为各自的对等方传递 ca.crt 文件路径

试一试,效果很好

docker exec -it cli bash

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 testchannel -n mycc --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:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2 .example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a", "b","20"]}'