【问题标题】:Fabric-sdk-go How to create the client context using msp CAclientFabric-sdk-go 如何使用 msp CAclient 创建客户端上下文
【发布时间】:2019-10-12 14:16:06
【问题描述】:

我正在尝试通过导入来使用 hyperledger go sdk 模块

https://godoc.org/github.com/hyperledger/fabric-sdk-go/pkg/client/msp.

我想使用hyperledger fabric go-sdk创建CA客户端实例,我需要导入哪个模块以及如何做,有人可以建议吗?

我正在使用下面的 cmd 来生成结构服务器 CA 客户端配置文件。

./bin/fabric-ca-client enroll admin:adminpws localhost:7054

以下是使用上述 cmd 生成的 fabric-ca-client.yaml 文件创建 fabric sdk 上下文的代码。如果我做错了什么,请告诉我。

package main

import (
"fmt"
"net"
"os"
"path/filepath"
"strings"

clientmsp "github.com/hyperledger/fabric-sdk-go/pkg/client/msp"
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/core"
mspid "github.com/hyperledger/fabric-sdk-go/pkg/common/providers/msp"
"github.com/hyperledger/fabric-sdk-go/pkg/core/config"
"github.com/hyperledger/fabric-sdk-go/pkg/core/cryptosuite"
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
"github.com/hyperledger/fabric-sdk-go/pkg/msp"
"github.com/hyperledger/fabric-sdk-go/pkg/msp/test/mockmsp"
 )

var (DefaultHome = os.ExpandEnv("$PWD/CONFIG"))
var caServerURL string
var caServer = &mockmsp.MockFabricCAServer{}
const (
caServerURLListen = "http://localhost:7054"
configFile        = "fabric-ca-server-config.yaml"
)

type nwConfig struct {
CertificateAuthorities map[string]msp.CAConfig
 }

type clientFixture struct {
cryptoSuiteConfig core.CryptoSuiteConfig
identityConfig    mspid.IdentityConfig
}

func main() {

// Initiate the sdk using the config file
client := clientFixture{}
sdk := client.setup()
//create the CA instance
c, err := clientmsp.New(sdk.Context())
if err != nil {
    fmt.Println("failed to create msp client", err)
    return
}
fmt.Println("New client instance created", c)
}

func (f *clientFixture) setup() *fabsdk.FabricSDK {
var lis net.Listener
var err error
if !caServer.Running() {
    lis, err = net.Listen("tcp", strings.TrimPrefix(caServerURLListen, 
  "http://"))
    if err != nil {
        panic(fmt.Sprintf("Error starting CA Server %s", err))
    }

    caServerURL = "http://" + lis.Addr().String()
}

configPath := filepath.Join(DefaultHome, configFile)
backend, err := config.FromFile(configPath)()
if err != nil {
    fmt.Println(err)
}
configProvider := func() ([]core.ConfigBackend, error) {
    return backend, nil
}

// Instantiate the SDK
sdk, err := fabsdk.New(configProvider)
if err != nil {
    fmt.Println(err)
}

configBackend, err := sdk.Config()
if err != nil {
    panic(fmt.Sprintf("Failed to get config: %s", err))
}

f.cryptoSuiteConfig = cryptosuite.ConfigFromBackend(configBackend)
f.identityConfig, _ = msp.ConfigFromBackend(configBackend)
if err != nil {
    fmt.Println(err)
}
ctxProvider := sdk.Context()
ctx, err := ctxProvider()
if err != nil {
    fmt.Println(err)
}

// Start Http Server if it's not running
if !caServer.Running() {
    caServer.Start(lis, ctx.CryptoSuite())
}
return sdk
}

【问题讨论】:

    标签: hyperledger-fabric hyperledger


    【解决方案1】:

    导入 mspclient

    mspclient "github.com/hyperledger/fabric-sdk-go/pkg/client/msp"
              "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
    
        mspClient, err := mspclient.New(
            *fabsdk.FabricSDK.Context(),
            mspclient.WithOrg(OrgName),
        )
        if err != nil {
            return mspClient, errors.WithMessage(err, "failed to create MSP client")
        }
    

    之后您可以使用以下服务

        err = mspClient.Enroll("Admin@org1",
            msp.WithSecret("Admin@org1"),
            msp.WithProfile("tls"),
        )
        if err != nil {
            return errors.WithMessage(err, "failed to register identity")
        }
    

    【讨论】:

    • 感谢重播,*fabsdk.FabricSDK.Context(),这是客户端提供者的权利,要创建客户端提供者,我们需要使用fabric-ca-client-config.yaml来创建FabricSDK.Context() 我是对的还是我需要使用不同的配置文件。请我在这里感到困惑。
    • 我已经更新了我的答案 fabsdk,你需要导入那个包
    • 谢谢,在我启动 mspclient.New( *fabsdk.FabricSDK.Context(), mspclient.WithOrg(OrgName), ) 之前是否需要加载任何配置文件
    • 嗨@fama 我感谢您对超级账本结构的兴趣以及您的辛勤工作令人印象深刻。查看本教程以获取 gosdk chainhero.io/2018/03/tutorial-build-blockchain-app-2
    • 谢谢@narendranth,我检查了chainhero demo,在demo中,crypto-config已经生成,他们使用config.yaml文件来生成configtx。但我想要的是将 Fabric-sdk-go 与 farbic CA 连接并使用 Fabric sdk api 注册和注册管理员,用户创建密钥对。我在这里观察,CA Server 生成的fabric-ca-server-config 文件与每个人使用的演示示例crypto-config.yaml 文件和configtx.yaml 文件不同。我被困在使用正确的配置文件来创建结构 sdk 上下文以与结构 CA 连接。
    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2017-07-04
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多