hyperledger-fabric - Vendored Chaincode 具有错误的依赖关系

标签 hyperledger-fabric hyperledger-chaincode chaincode vendoring

我有具有以下目录结构的链码

$GOPATH/myproject/chaincode/mycc/go
├── mycc.go
├── chaincode
│   └── chaincode.go
└── vendor
    ├── github.com
    ├── ...

因为我使用了 hyperledgers cid 包,所以我使用 vendoring 并且在链代码旁边有 vendor 目录。现在对于可测试性,mycc.go 只包含 main 函数:

package main

import (
    "myproject/chaincode/mycc/go/chaincode"
    "github.com/hyperledger/fabric/core/chaincode/shim"
)

func main() {
    err := shim.Start(new(chaincode.MyChaincode))
    if err != nil {
        logger.Error(err.Error())
    }
}

chaincode.go 实现链码的其余部分,包括带有 InitInvokeMyChaincode 结构等。相关导入与mycc.go中的相同:

"github.com/hyperledger/fabric/core/chaincode/shim"

在链代码的实例化过程中,某些依赖项似乎混淆了,因为我收到错误消息:

*chaincode.MyChaincode does not implement "chaincode/mycc/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim".Chaincode (wrong type for Init method)
    have Init("chaincode/mycc/go/vendor/myproject/chaincode/mycc/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim".ChaincodeStubInterface) "chaincode/approvalcc/go/vendor/ma/chaincode/approvalcc/go/vendor/github.com/hyperledger/fabric/protos/peer".Response
    want Init("chaincode/mycc/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim".ChaincodeStubInterface) "chaincode/mycc/go/vendor/github.com/hyperledger/fabric/protos/peer".Response

很明显,内部链代码包中的导入似乎被错误解析,供应商目录在路径中出现了两次。

最佳答案

构建链代码的 fabric-ccenv 容器试图“提供帮助”,但在容器内的 GOPATH 中包含 shim。它还最终包括 shim/ext/... 文件夹,但不幸的是实际上并没有正确地包括它们的传递依赖项。

当您将其与链代码安装/打包命令的方式结合起来也试图提供帮助以及您对供应商的尝试时,事情变得很糟糕。

我实际上只是推送了一个针对 1.4.2 的修复程序来解决 fabric-ccenv 问题。

关于hyperledger-fabric - Vendored Chaincode 具有错误的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56909688/

相关文章:

hyperledger-fabric - 如何在不使用 IBP vscode 扩展的情况下将链代码打包为 cds 格式

go - 不能在字段值中使用 (type []map[string]interface {}) 作为 type []string

docker - Hyperledger Composer部署到多个组织身份错误

rest - golang 的 Shim 接口(interface)中的补丁函数

blockchain - 每个 Assets 都应该在 Fabric 中有自己的链码吗?

go - 如何修复链码中的 "syntax error: unexpected shim, expecting comma or )"?

java - 无法在 super 账本结构中调用链码

hyperledger-fabric - 是否可以更新或更改部署在 Hyperledger 网络中的智能合约(链码)

hyperledger-fabric - "gRPC failure=Status{code=UNAVAILABLE, description=io exception"调用时 'channel.sendTransactionProposal'

go - shim.GetStateByPartialCompositeKey迭代器在此代码中如何工作?