我尝试了两个不同的教程:
-
这个在本地部署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服务:
enrollAdmin.js和registerUser.js工作正常,所以我可以获得证书并将其存储在密钥库中 . 但是当我尝试调用事务时,我收到以下错误:
看来给我证书的CA并没有得到同行的认可 . 但是我的网络中只有一个CA!?或者它是MSP定义中的问题(我仍然不太了解) .
谢谢你的帮助 .
1 回答
我终于找到了错误 .
我的网络有1个CA(根CA,名为ca)和2个“sub”CA(ca1和ca2) . 我是由根CA直接注册管理员和用户,因为我没有在Fabric_CA_Client类的参数中提到ca的名称:
如果没有名称,则使用的CA将是默认CA(在我的情况下为根CA) . 但是根CA不会识别根CA的用户证书签名 . 仅接受来自最后一个分层CA级别的签名 . 所以解决方案是引用CA的名称:
有用 . 现在用户可以调用事务 .