首页 > 解决方案 > HyperLedger Fabric SDK Go 显示无法将 nil 转换为 csr.KeyRequest 类型

问题描述

其中一个基于 go-lang 的微服务代码需要与 Fabric 的链码连接,直到上次都运行良好,目前没有问题。

但是现在它在构建基于 go 的微服务时显示了以下问题,该微服务具有结构客户端代码以与结构链代码连接。

../vendor/github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util

../../vendor/github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util/csp.go:47:8:无法将nil转换为csr.KeyRequest类型 ../../vendor/github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util/csp.go:132:37:不能使用req.KeyRequest(类型* csr.KeyRequest) 作为类型 csr.KeyRequest 在 getBCCSPKeyOpts 的参数中

也许它是一个依赖问题,我清理了完整的供应商目录并完成了 dep ensure --update ,但它显示了同样的问题,

更多信息 :

转到版本 1.12

在 GoPkg.Toml 上

[[覆盖]] name = "github.com/hyperledger/fabric" 分支 = "master"

[[覆盖]] name = "github.com/hyperledger/fabric-sdk-go" 分支 = "master"

我尝试了 fabric-sdk-go 的各种组合和不同分支,它仍然显示相同,尽管它之前工作得很好。

标签: hyperledger-fabrichyperledger-fabric-sdk-go

解决方案


自 1.0.0-alpha5 发布以来,fabric-sdk-go 所依赖的包似乎发生了许多变化。

当我现在只导入一个外部依赖项(github.com/hyperledger/fabric-sdk-go)运行 go build 时,我得到了以下 go.mod 文件,(我go mod用于包管理)

...

require (
    github.com/cloudflare/cfssl v0.0.0-20190726000631-633726f6bcb7 // indirect
    github.com/go-kit/kit v0.9.0 // indirect
    github.com/golang/mock v1.3.1 // indirect
    github.com/golang/protobuf v1.3.2 // indirect
    github.com/google/certificate-transparency-go v1.0.21 // indirect
    github.com/hyperledger/fabric-lib-go v1.0.0 // indirect
    github.com/hyperledger/fabric-sdk-go v1.0.0-alpha5
    github.com/pkg/errors v0.8.1 // indirect
    github.com/prometheus/client_golang v1.0.0 // indirect
    github.com/spf13/viper v1.4.0 // indirect
    github.com/zmap/zlint v0.0.0-20190730215301-9971d62266e7 // indirect
    golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 // indirect
    google.golang.org/grpc v1.22.1 // indirect
)

其中包含尖端版本的软件包,似乎会产生一些如下的构建问题,包括你所拥有的。

# github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/core/operations
../../Go/pkg/mod/github.com/hyperledger/fabric-sdk-go@v1.0.0-alpha5/internal/github.com/hyperledger/fabric/core/operations/system.go:185:43: undefined: "github.com/prometheus/client_golang/prometheus".Handler
../../Go/pkg/mod/github.com/hyperledger/fabric-sdk-go@v1.0.0-alpha5/internal/github.com/hyperledger/fabric/core/operations/system.go:227:23: not enough arguments in call to s.statsd.SendLoop
        have (<-chan time.Time, string, string)
        want (context.Context, <-chan time.Time, string, string)
# github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util
../../Go/pkg/mod/github.com/hyperledger/fabric-sdk-go@v1.0.0-alpha5/internal/github.com/hyperledger/fabric-ca/util/csp.go:46:8: cannot convert nil to type csr.KeyRequest
../../Go/pkg/mod/github.com/hyperledger/fabric-sdk-go@v1.0.0-alpha5/internal/github.com/hyperledger/fabric-ca/util/csp.go:131:37: cannot use req.KeyRequest (type *csr.KeyRequest) as type csr.KeyRequest in argument to getBCCSPKeyOpts

上次构建成功时,我手动编写了 go.mod 文件以包含特定版本的依赖项。

...
require (
    github.com/cloudflare/cfssl v0.0.0-20190409034051-768cd563887f // indirect
    github.com/go-kit/kit v0.8.0 // indirect
    github.com/go-logfmt/logfmt v0.4.0 // indirect
    github.com/golang/mock v1.3.0 // indirect
    github.com/google/certificate-transparency-go v1.0.21 // indirect
    github.com/hyperledger/fabric-lib-go v1.0.0 // indirect
    github.com/hyperledger/fabric-sdk-go v1.0.0-alpha5
    github.com/pkg/errors v0.8.1 // indirect
    github.com/prometheus/client_golang v0.9.2 // indirect
    github.com/spf13/viper v1.3.2 // indirect
    google.golang.org/grpc v1.20.1 // indirect
)

它运作良好。


推荐阅读