我正在学习如何使用Hyperledger架构和Chaincode。基本上,我遵循此link在Hyperledger架构中创建Java链代码,但无法在cli / channel中调用链代码。
我使用了Hyperledger面料官方指南中的BYFN.sh
来建立面料网络,并按照博客制作了Gradle和Java Chaincode。
在我尝试用
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 $CHANNEL_NAME -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":["createWallet","tom","100"]}'
我收到此错误:
错误:获取代言人客户端调用时出错:代言人客户端无法连接到peer0.org2.example.com:7051:创建新连接失败:连接错误:desc =“传输:拨号时出错:拨打tcp 172.21.0.4:7051 :连接:连接被拒绝”
如果有人可以指出一个方向并告诉我什么可能是错误的,这将非常有帮助。我试图用Google搜索它,但是找不到任何有用的信息。
更新:
原来是端口号问题。我进入对等方的容器之一,结果发现端口号是9051,而不是7051。因此,我在chaincode invoke命令中更改了端口号,一切正常。
最佳答案
您在命令中为peer0.0rg1.example.com和peer0.0rg2.example.com指定了相同的端口号。如果您使用byfn拓扑创建了网络,则peer0.org2会侦听端口9051。此外,在询问此类问题时,最好提供您的配置,即docker-compose.yaml文件。在理解问题时这非常有用。
您的compose.yaml文件中可能没有将Org2的端口号映射到其他端口号。
您可以尝试以下任何一种方法-
查看docker yaml文件中定义的端口号,并在命令中使用该端口号调用链代码。每个伙伴都应该有所不同。
修改yaml文件,以便7051重定向到新的端口号,例如9051。
像下面
环境:
CORE_PEER_ID = peer0.org2.example.com
CORE_PEER_ADDRESS = peer0.org2.example.com:7051
CORE_PEER_GOSSIP_EXTERNALENDPOINT = peer0.org2.example.com:7051
CORE_PEER_GOSSIP_BOOTSTRAP = peer1.org2.example.com:7051
CORE_PEER_LOCALMSPID = Org2MSP
数量:
/ var / run /:/ host / var / run /
../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls
peer0.org2.example.com:/var/hyperledger/production
端口:
9051:7051
9053:7053`。
查看端口号7051映射到9051的末尾。