我具有以下目录结构的链码
$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
实现其余的链码,包括带有MyChaincode
,Init
等的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/