代码之家  ›  专栏  ›  技术社区  ›  Philippe Labalette

Hyperledger结构。无法使用Fabric Node SDK调用事务

  •  0
  • Philippe Labalette  · 技术社区  · 8 年前

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

    1. 要在本地部署docker映像,请执行以下操作: https://github.com/hyperledger/fabric-samples 我试过fabcar样品。一切正常。我可以注册管理员、注册用户并使用此用户标识调用事务。美好的

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

    现在我的问题来了。我想结合这两个例子(只是为了好玩,边做边学:)。我想将fabcar samples网络部署到bluemix上的kubernetes环境中,并使用fabric node sdk与网络进行交互,如示例1所示。因此,我对示例2的脚本/yaml文件进行了以下更改:

    • 调整链码安装程序

    在create\u all中。第41行(对等1)和第45行(对等2)。我更改了环境变量CHAINCODE\u NAME和CHAINCODE\u 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\u安装中。亚马尔。基线16,我更改了链码的路径。我用叉子叉 https://github.com/hyperledger/fabric 并添加了fabcar。将示例1中的链码转到新存储库 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\u all中。第49行。我更改了环境变量CHAINCODE\u NAME和CHAINCODE\u 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\u中实例化。亚马尔。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

    注册管理员。js和registerUser。js工作正常,因此我可以获取证书并将其存储在密钥存储中。但当我尝试调用事务时,会出现以下错误:

    enter image description here

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

    谢谢你的帮助。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Philippe Labalette    8 年前

    我终于找到了错误。

    我的网络有1个CA(根CA,命名为CA)和2个“子”CA(ca1和ca2)。我直接通过根CA注册管理员和用户,因为我在Fabric_CA_客户端类的参数中没有提到CA的名称:

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

    如果没有名称,使用的CA将是默认CA(在我的情况下是根CA)。但是根用户证书的签名不会被对等方识别。仅接受来自上一层次CA级别的签名。因此,解决方案是引用CA的名称:

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

    它起作用了。现在,用户可以调用事务。