2016-10-03 68 views
0

目前我正在使用Hyperledger chaincode并试图获取有关调用/查询chaincode的当前用户的至少任何信息。出于某种原因,链接代码示例asset_management.go导致错误“ERRO 031出现错误:无效的管理员证书。空。”。我将security.enabled和security.privacy设置为true,并且会员服务正在运行。我已经注册了“管理员”。Hyperledger chaincode没有得到当前用户元数据

下面是它发生在哪里

// 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.") 
} 

你有什么想法如何使chaincode返回任何数据stub.GetCallerMetadata()的代码行?

回答

0

“元数据”应当被在deploy命令提供的“部署”为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编码的字符串“分配器”。该字符串将被保存在分类帐中,只有具有此角色的用户才能在智能合同中执行“分配”功能。

“asset_management”示例期望您将在元数据字段中提供证书。为了获得证书,您可以使用相关问题中描述的步骤9:How is running the asset_management.go different from running a simple chaincode like chaincode_example02.go

+0

谢谢谢尔盖。看起来这是我需要的。 – Andriian