HyperLedger Fabric SDK Go显示无法将nil转换为csr.KeyRequest类型

时间:2019-07-19 03:16:55

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

一种基于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:无法转换零,键入csr.KeyRequest ../../vendor/github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/util/csp.go:132:37:无法使用req.KeyRequest(类型* csr.KeyRequest)作为getBCCSPKeyOpts参数中的csr.KeyRequest类型

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

更多信息:

转到1.12版

在GoPkg.Toml上

[[override]]    名称=“ github.com/hyperledger/fabric”     分支=“主人”

[[override]]    名称=“ github.com/hyperledger/fabric-sdk-go”    分支=“主人”

我尝试了fabric-sdk-go的各种组合和不同分支,尽管它可以更早地运行,但仍显示出相同的效果。

5 个答案:

答案 0 :(得分:5)

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

当我运行go build时,只需导入一个外部依赖项(github.com/hyperledger/fabric-sdk-go),我得到了以下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
)

效果很好。

答案 1 :(得分:1)

我已经找到了该问题的根本原因,就像在fab-sdk-go上进行频繁的增量修复/开发一样,我在代码中定义了fab-sdk-go的主版本,并且可以从Gopkg中获取.toml文件。

我像按日期手动应用fab-sdk-go的各种版本一样,弄清楚哪个是最好的fab-sdk-go版本,这意味着该版本不会像上面那样出现任何编译问题。

并且在应用以下版本时:

FAB-SDK-Go [FABG-815]在一行上犯了多个错误:56ebf9adac580e7e3251685fe4fe6e793df838dc,https://github.com/hyperledger/fabric-sdk-go/commit/56ebf9adac580e7e3251685fe4fe6e793df838dc

它没有给出任何错误,并且可以解决。

即使我为fab-sdk-go申请了alpha1,alpha2,aplha3之类的发行版,但这些都再次引起了编译问题。

答案 2 :(得分:1)

此问题的原因是github.com/cloudflare/cfssl/csr版本1.3.4中的重大更改。

只需使用以下命令安装1.3.3,最新版本的fabric-sdk-go就可以正常工作。

go get github.com/cloudflare/cfssl@1.3.3

答案 3 :(得分:0)

清洁环境

清洁go.mod都需要

下载最新版本

 go get github.com/hyperledger/fabric-sdk-go@master

下载依赖项

go mod tidy

答案 4 :(得分:0)

由于KeyRequest没有实例,因此无法将其转换为nil。您只有变量kr可以保存KeyRequest结构的值,即字符串A和intS。您可以尝试编辑csp.go,例如“ if kr.A ==“” &&(kr.S!= 2048 | | kr.S!= 3072 || kr.S!= 4096)“。