Vendored Chaincode 具有错误的依赖关系
Vendored Chaincode has false dependencies
我的链码具有以下目录结构
$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
实现链码的其余部分,包括 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
很明显,内部链代码包中的导入似乎被错误地解析,供应商目录在路径中出现了两次。
您的 init 方法似乎未正确初始化,因此请检查链代码是否已正确安装或实例化。您可以通过查看实例化的链码 docker 容器来检查。
构建链代码的 fabric-ccenv
容器尝试成为 "helpful" 但在容器内的 GOPATH 中包含 shim
。它还最终包括 shim/ext/...
文件夹,但不幸的是实际上并没有正确地包括它们的传递依赖项。
当您将此与链代码 install/package 命令的方式结合起来也试图提供帮助以及您尝试供应商时,事情变得很糟糕。
我实际上只是推送了一个针对 1.4.2 的修复程序来解决 fabric-ccenv
问题。
我的链码具有以下目录结构
$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
实现链码的其余部分,包括 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
很明显,内部链代码包中的导入似乎被错误地解析,供应商目录在路径中出现了两次。
您的 init 方法似乎未正确初始化,因此请检查链代码是否已正确安装或实例化。您可以通过查看实例化的链码 docker 容器来检查。
构建链代码的 fabric-ccenv
容器尝试成为 "helpful" 但在容器内的 GOPATH 中包含 shim
。它还最终包括 shim/ext/...
文件夹,但不幸的是实际上并没有正确地包括它们的传递依赖项。
当您将此与链代码 install/package 命令的方式结合起来也试图提供帮助以及您尝试供应商时,事情变得很糟糕。
我实际上只是推送了一个针对 1.4.2 的修复程序来解决 fabric-ccenv
问题。