fabric-ca的使用其实很多书上都有相关例子,但是用go-sdk的例子很少,而且go-sdk的文档也很少。折腾了一大圈,还看了官方的hyperledger fabric-go-sdk中测试用例才终于搞明白了。泪流满面。实际运行过程中也是各种错误,好在所有问题都解决了,分享给大家供参考,希望大家都能少走弯路。
注明:下面代码中action.sdk就是fabricsdk
需要导入的包
"github.com/hyperledger/fabric-sdk-go/pkg/client/msp"
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
//EnrollUser enroll a user have registerd
func EnrollUser(username string, password string) (bool, error) {
ctx := sdk.Context()
mspClient, err := msp.New(ctx)
if err != nil {
fmt.Printf("Failed to create msp client: %s\n", err)
return true, err
}
_, err = mspClient.GetSigningIdentity(username)
if err == msp.ErrUserNotFound {
fmt.Println("Going to enroll user")
err = mspClient.Enroll(username, msp.WithSecret(password))
if err != nil {
fmt.Printf("Failed to enroll user: %s\n", err)
return true, err
}
fmt.Printf("Success enroll user: %s\n", username)
} else if err != nil {
fmt.Printf("Failed to get user: %s\n", err)
return false, err
}
fmt.Printf("User %s already enrolled, skip enrollment.\n", username)
return true, nil
}
//Register a new user with username , password and department.
func RegisterlUser(username, password, department string) error {
ctx := Context()
mspClient, err := msp.New(ctx)
if err != nil {
fmt.Printf("Failed to create msp client: %s\n", err)
}
request := &msp.RegistrationRequest{
Name: username,
Type: "user",
Affiliation: department,
Secret: password,
}
secret, err := mspClient.Register(request)
if err != nil {
fmt.Printf("register %s [%s]\n", username, err)
return err
}
fmt.Printf("register %s successfully,with password %s\n", username, secret)
return nil
}
再使用之前需要先初始化
sdk, err := fabsdk.New(config.FromFile(ConfigFile))
这里配置文件可以参考如下:
---
#
name: "golang-sdk-network"
version: 1.0.0
client:
organization: Org1
logging:
level: info
peer:
timeout:
connection: 3s
queryResponse: 45s
executeTxResponse: 30s
eventService:
timeout:
connection: 3s
registrationResponse: 3s
orderer:
timeout: