【发布时间】:2019-11-16 11:30:17
【问题描述】:
我有具有以下目录结构的链代码
$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 实现了链码的其余部分,包括带有Init、Invoke 等的MyChaincode 结构。相关导入与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
很明显,内部链码包中的导入似乎被错误地解析了,供应商目录在路径中出现了两次。
【问题讨论】:
-
您是否使用了
peer chaincode package ...和/或peer chaincode install ...命令? -
我正在使用
peer chaincode install。值得注意的是,当我将链码的所有代码放在主包中时,没有问题。我只是为了可测试性而将其拆分。 -
好的 ... 对等 cli 尝试在打包内容时提供帮助...但请参阅下面关于将
vendor文件夹移动到项目顶层的答案。
标签: hyperledger-fabric hyperledger-chaincode chaincode vendoring