首页 文章

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

提问于
浏览
0

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

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

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

现在谈到我的问题 . 我想结合两个例子(只是为了好玩,边做边学:)) . 我想将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

    我终于找到了错误 .

    我的网络有1个CA(根CA,名为ca)和2个“sub”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)
    

    有用 . 现在用户可以调用事务 .

相关问题