3

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

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

由于我使用了超级账本cid包,我使用了 vendoring 并将vendor目录放在链代码旁边。现在对于 testablitiy,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其余部分,包括带有,等的MyChaincode结构体。相关的导入与 中的相同:InitInvokemycc.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

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

4

2 回答 2

1

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

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

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

于 2019-07-07T10:41:31.337 回答
1

您的 init 方法似乎未正确初始化,因此请检查链代码是否已正确安装或实例化。您可以通过查看实例化的链码 docker 容器来检查。

于 2019-07-07T09:57:09.777 回答