Vendored Chaincode имеет ложные зависимости - PullRequest
3 голосов
/ 06 июля 2019

У меня есть цепной код со следующей структурой каталогов

$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

Очевидно, что импорт во внутреннем пакете кодов цепей разрешен неправильно, а каталог поставщика дважды указывается в пути.

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Контейнер fabric-ccenv, который создает цепной код, пытается быть «полезным», но включает shim в GOPATH внутри контейнера. Кроме того, он также включает в себя папки shim/ext/..., но, к сожалению, фактически не включает их транзитивные зависимости.

Когда вы комбинируете это с тем, что команды установки / компоновки цепочки кодов также пытаются быть полезными, и с вашей попыткой продавца, все становится ужасно.

На самом деле я просто выдвинул исправление, предназначенное для 1.4.2, для решения проблемы fabric-ccenv.

1 голос
/ 07 июля 2019

Кажется, что ваш метод инициализации не инициализирован должным образом, поэтому, пожалуйста, проверьте, установлен ли цепной код правильно или инстанцирован или нет.Вы можете проверить это, просто посмотрев на созданный контейнер докера цепочки кодов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...