1

其中一个基于 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 的各种组合和不同分支,它仍然显示相同,尽管它之前工作得很好。

4

5 回答 5

5

自 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
)

它运作良好。

于 2019-07-31T06:11:26.373 回答
4

我找到了该问题的根本原因,就像 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

它没有给出任何错误,并且成功了。

甚至我也申请了 alpha1、alpha2、aplha3 之类的版本以及 fab-sdk-go,但这些版本又出现了编译问题。

编辑

再次出现此问题,请执行以下操作来解决此问题:

apis git:(master) ✗ go get github.com/cloudflare/cfssl@1.3.3 go: 下载 github.com/cloudflare/cfssl v0.0.0-20190409034051-768cd563887f

去获取:降级 github.com/cloudflare/cfssl v1.4.1 => v0.0.0-20190409034051-768cd563887f

去获取:降级 github.com/hyperledger/fabric-sdk-go v1.0.0 => v1.0.0-beta2

apis git:(master) ✗ go mod tidy
go: 下载 github.com/hyperledger/fabric-sdk-go v1.0.0-beta2

apis git:(master) ✗ 去获取 github.com/hyperledger/fabric-sdk-go@master

去:下载github.com/hyperledger/fabric-sdk-go v1.0.1-0.20210201220314-86344dc25e5d

去获取:升级 github.com/cloudflare/cfssl v0.0.0-20190409034051-768cd563887f => v1.4.1

去获取:升级的 github.com/hyperledger/fabric-sdk-go v1.0.0-beta2 => v1.0.1-0.20210201220314-86344dc25e5d

于 2019-07-20T02:32:39.083 回答
1

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

只需使用以下命令安装 1.3.3 和最新版本的fabric-sdk-go作品,没有任何问题。

go get github.com/cloudflare/cfssl@1.3.3
于 2019-10-25T14:26:31.573 回答
1

清洁环境

干净的 go.mod 都需要

下载最新版本

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

下载依赖

go mod tidy
于 2019-08-08T06:31:00.847 回答
0

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

于 2019-08-15T11:04:19.407 回答