У меня есть цепной код со следующей структурой каталогов
$GOPATH/myproject/chaincode/mycc/go
├── mycc.go
├── chaincode
│ └── chaincode.go
└── vendor
├── github.com
├── ...
Из-за моего использования пакета 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
Очевидно, что импорт во внутреннем пакете кодов цепей разрешен неправильно, а каталог поставщика дважды указывается в пути.