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

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


由于使用了超级账本cid软件包,因此我使用供应商,并且链码旁边有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实现其余的链码,包括带有MyChaincodeInit等的Invoke结构。相关的导入与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/...文件夹,但不幸的是,实际上并没有正确包含它们的传递依赖项。

当您将其与chaincode install / package命令还试图提供帮助以及尝试进行供应商相结合时,事情变得很丑陋。

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

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

10-11 15:20