如何解决如何使用Hyperledger Fabric Network SDK查询Chaincode Metada
是否可以使用NodeJS或Go构造网络SDK获取链码元数据?
类似于peer lifecycle chaincode queryinstalled
命令的内容:
{
"installed_chaincodes": [
{
"package_id": "testcc_1:75afd7c4c165c56e8b8f3bd4c53cea8b420f4d94a3d53093aa0ec0229f5c738a","label": "testcc_1","references": {
"mychannel": {
"chaincodes": [
{
"name": "testcc","version": "1"
}
]
}
}
}
]
}
如果不是,那么客户端如何确保他们正在调用哪个版本的链码?
解决方法
每个SDK都实现了cli中几乎所有可用的方法。
在go-sdk
的情况下,您可以实施类似的操作。
import (
"fmt"
"strings"
"github.com/hyperledger/fabric-sdk-go/pkg/client/resmgmt"
"github.com/hyperledger/fabric-sdk-go/pkg/common/errors/retry"
fabAPI "github.com/hyperledger/fabric-sdk-go/pkg/common/providers/fab"
lcpackager "github.com/hyperledger/fabric-sdk-go/pkg/fab/ccpackager/lifecycle"
"github.com/pkg/errors"
)
// QueryInstalledCC : query installed CC
func QueryInstalledCC(setup *OrgSetup,ccName,ccVersion,packageID string) (string,string,map[string][]resmgmt.CCReference,error) {
label,_,_ := PackageCC(ccName,ccVersion)
resp,err := setup.Resmgmt.LifecycleQueryInstalledCC(resmgmt.WithTargetEndpoints(peer1),resmgmt.WithRetry(retry.DefaultResMgmtOpts))
if err != nil {
fmt.Printf("\n Error occurred in queryInstalledCC func and error is %s",err)
}
if !strings.EqualFold(packageID,resp[0].PackageID) {
fmt.Print("Unable to match packageID in QueryInstalledCC")
return "","",nil,nil
}
if !strings.EqualFold(label,resp[0].Label) {
fmt.Print("Unable to match labels in QueryInstalledCC")
return "",nil
}
ref := resp[0].References
return resp[0].Label,resp[0].PackageID,ref,nil
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。