Hyperledger面料。无法使用Fabric Node SDK调用事务

时间:2018-03-13 08:52:27

标签: hyperledger-fabric hyperledger

我尝试了两个不同的教程:

  1. 这个在本地部署docker镜像: https://github.com/hyperledger/fabric-samples 我尝试了fabcar样品。一切正常。我可以注册管理员,注册用户并使用此用户身份调用事务。好的。

  2. 第二个在bluemix上部署fabric composer playground: https://ibm-blockchain.github.io/setup/ 我能够进入作曲家游乐场并部署商业网络示例。我也可以使用composer-cli上传和部署我在本地设计的自己的业务网络。我通过具有管理员权限的Rest服务器公开了网络,以便测试事务。一切正常。

  3. 现在谈到我的问题。我想结合两个例子(只是为了好玩,边做边学:))。我想将fabcar示例网络部署到bluemix上的kubernetes环境,并使用结构节点sdk与网络交互,如示例1所示。所以我在示例2的scripts / yaml文件中进行了以下更改:

    • 调整链代码安装程序
    <_>在create_all.sh中。第41行(对等体1)和第45行(对等体2)。我更改了env变量CHAINCODE_NAME和CHAINCODE_VERSION

    的值
    echo "=> CREATE_ALL: Running Install Chaincode on Org1 Peer1" CHAINCODE_NAME="fabcar" CHAINCODE_VERSION="1.0" MSP_CONFIGPATH="/shared/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp"  PEER_MSPID="Org1MSP" PEER_ADDRESS="blockchain-org1peer1:30110" create/chaincode_install.sh
    

    在chaincode_install.yaml.base第16行,我改变了链码的路径。我分叉https://github.com/hyperledger/fabric并将示例1中的fabcar.go链代码添加到新的存储库https://github.com/bigbelette/fabric

    command: ["sh", "-c", "git clone https://github.com/bigbelette/fabric $GOPATH/src/github.com/bigbelette/fabric/ && peer chaincode install -n ${CHAINCODE_NAME} -v ${CHAINCODE_VERSION} -p github.com/bigbelette/fabric/examples/chaincode/go/fabcar/"]
    
    • 调整链代码实例化程序:
    <_>在create_all.sh中。第49行。我更改了env变量CHAINCODE_NAME和CHAINCODE_VERSION的值:

    CHANNEL_NAME="channel1" CHAINCODE_NAME="fabcar" CHAINCODE_VERSION="1.0" MSP_CONFIGPATH="/shared/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp"  PEER_MSPID="Org1MSP" PEER_ADDRESS="blockchain-org1peer1:30110" create/chaincode_instantiate.sh
    

    在chaincode_instantiate.yaml.base中,我将参数列表设为空:

    command: ["sh", "-c", "peer chaincode instantiate -o blockchain-orderer:31010 -C ${CHANNEL_NAME} -n ${CHAINCODE_NAME} -v ${CHAINCODE_VERSION} -c '{\"Args\":[\"\"]}'"]
    

    群集上的部署可以正常运行而不会出现错误。在fabcar示例节点js文件enrollAdmin,regiserUser,query和invoke中,我更改了通道名称(从mychannel到channel1)以及IP和端口以匹配在线kubernetes服务:

    enter image description here

    enrollAdmin.js和registerUser.js工作正常,因此我可以获取证书并将其存储在密钥库中。但是当我尝试调用事务时,我收到以下错误:

    enter image description here

    似乎给我证书的CA并没有得到同行的认可。但是我的网络中只有一个CA!?或者它是MSP定义中的问题(我仍然不太了解)。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我终于找到了错误。

我的网络有1个CA(根CA,名为ca)和2&#34; sub&#34; CA(ca1和ca2)。我是由根CA直接注册管理员和用户,因为我没有在Fabric_CA_Client类的参数中提到ca的名称:

fabric_ca_client = new Fabric_CA_Client('http://184.173.5.108:30054', tlsOption, crypto_suite)

如果没有名称,则使用的CA将是默认CA(在我的情况下为根CA)。但是根CA不会识别根CA的用户证书签名。仅接受来自最后一个分层CA级别的签名。所以解决方案是引用CA的名称:

fabric_ca_client = new Fabric_CA_Client('http://184.173.5.108:30054', tlsOptions , 'CA1', crypto_suite)

有效。现在用户可以调用事务。