Hyperledger Fabric如何通过CLI以用户角色调用已部署链码用于测试
操作方法
你当前默认以管理员身份提交交易,是因为cli容器的CORE_PEER_MSPCONFIGPATH环境变量默认指向了管理员的MSP证书路径,按以下两种方法可切换为普通用户身份调用链码:
前置确认
先确认你已经登记好的Org2普通用户的MSP文件路径,正常你挂载的目录下路径应为类似/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org2/peer1/msp/user/[普通用户名],确认该路径下存在完整的MSP目录结构:包含admincerts、cacerts、keystore、signcerts四个子目录。
方案1:临时修改环境变量(适合多次调用同一用户身份的场景)
进入cli_org2容器后,先执行如下命令覆盖环境变量:
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org2/peer1/msp/user/[替换为你的普通用户名]
后续直接执行你原有的peer chaincode invoke调用命令即可,TLS相关参数无需修改,TLS证书只用于节点通信身份校验,和交易提交者的业务身份无关。
方案2:调用命令直接指定MSP路径(适合单次测试不同用户身份的场景)
直接在原有调用命令中新增--mspConfigPath参数指定普通用户的MSP路径即可,示例如下:
peer chaincode invoke --mspConfigPath /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org2/peer1/msp/user/[替换为你的普通用户名] -C mychannel -n basic -c '{"Args":["InsertData", "asset1","1300"]}' -o orderer1.org0.com:7050 --tls true --cafile Org0/tls/cacerts/localhost-8054.pem --peerAddresses peer1.org1.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org1/peer1/tls/cacerts/localhost-8054.pem --peerAddresses peer1.org2.com:7056 --tlsRootCertFiles /chaincode/certs/Org2/tls/cacerts/localhost-8054.pem --clientauth --certfile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org1/peer1/tls/signcerts/cert.pem --keyfile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/org1/peer1/tls/keystore/server.key
校验方法
调用完成后可通过链码内置的GetCreator接口获取提交者身份信息,或者查询对应资产的创建者属性,即可确认交易是否为普通用户身份发起。
常见问题排查
如果调用时返回MSP相关错误,先检查普通用户的MSP目录是否缺失证书、私钥文件,确认该用户已在Org2 CA完成注册登记,证书未过期且属于Org2的MSP范围。
内容的提问来源于stack exchange,提问作者Arnaldo
相关产品推荐
相关产品推荐

