目前我正在使用Hyperledger链码并尝试至少获取有关调用/查询链码的当前用户的任何信息。由于某种原因,链码示例asset_management.go导致错误“ERRO 031出错:管理证书无效。空。”我将security.enabled和security.privacy设置为true并运行Membership服务。我已经注册了“admin”。
以下是代码中出现的行
// Set the admin
// The metadata will contain the certificate of the administrator
adminCert, err := stub.GetCallerMetadata()
if err != nil {
myLogger.Debug("Failed getting metadata")
return nil, errors.New("Failed getting metadata.")
}
if len(adminCert) == 0 {
myLogger.Debug("Invalid admin certificate. Empty.")
return nil, errors.New("Invalid admin certificate. Empty.")
}
您是否有任何想法如何使链代码返回stub.GetCallerMetadata()的任何数据?
答案 0 :(得分:0)
"元数据"应该在您的deploy命令中提供,例如" deploy" for asset_management_with_roles:
curl -XPOST -d ‘{“jsonrpc": "2.0", "method": "deploy", "params": {"type": 1,"chaincodeID": {"path": "github.com/hyperledger/fabric/examples/chaincode/go/asset_management_with_roles","language": "GOLANG"}, "ctorMsg": { "args": ["init"] }, "metadata":[97, 115, 115, 105, 103, 110, 101, 114] ,"secureContext": "assigner"} ,"id": 0}' http://localhost:7050/chaincode
在此命令"元数据"包含utf-8编码的字符串“assigner”。此字符串将保存在分类帐中,只有具有此角色的用户才能在智能合约中执行“分配”功能。
" asset_management"示例期望您将在元数据字段中提供证书。要获得证书,您可以使用相关问题中描述的步骤9:How is running the asset_management.go different from running a simple chaincode like chaincode_example02.go