Выполнение пользовательского цепного кода через byfn. sh - Hyperledger Fabri c 1.4 - PullRequest
0 голосов
/ 04 мая 2020

Итак, я пытаюсь проверить свой собственный цепной код, изменив byfn. sh, показанный в учебнике и связанных с ним скриптах.

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

Ошибка: ошибка подтверждения во время вызова. ответ: статус: 500 сообщение: «убедитесь, что цепной код my cc был успешно создан и повторите попытку: цепной код my cc not found»

Предпринятые шаги:

Это сообщение выглядит так, как будто цепочечный код не был создан. Однако я не изменил данное имя, «мой cc», и создание экземпляра дало мне сообщение об успехе. Поэтому я скопировал пример цепного кода (chaincode_example02. go) туда, где у меня был свой собственный цепной код, больше ничего не менял, и скрипт работал без сбоев. Что для меня означает, что ошибка вызвана несоответствующими аргументами, переданными во время вызова.

В скрипте utils. sh, где вызывается invoke, он вызывается для примера цепного кода как такового:

вызов однорангового цепочечного кода -o orderer.example.com:7050 --tls $ CORE_PEER_TLS_ENABLED --cafile $ ORDERER_CA - C $ CHANNEL_NAME -n my cc $ PEER_CONN_PARMS - c '{"Args ": [" invoke "," a "," b "," 10 "]} '> & log.txt

часть команды" invoke ", по-видимому, ссылается на метод, отличный от метод Invoke chaincode, который существует в приведенном примере. Предполагая, что этот аргумент ссылается на имя метода, я изменил его в соответствии с тем, что мне подходит для метода, который я хотел вызвать:

peer chaincode invoke -o orderer.example.com:7050 --tls $ CORE_PEER_TLS_ENABLED --cafile $ ORDERER_CA - C $ CHANNEL_NAME -n my cc $ PEER_CONN_PARMS - c '{"Args": ["addVInfo", "a", "b"]}'> log.txt

Однако, я все еще получаю ту же ошибку.

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

func (t *DataContract) Init(stub shim.ChaincodeStubInterface) peer.Response {
    all_data = make(map[string]Data)

    return shim.Success(nil)
}

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

Кроме того, вот метод, который я пытался вызвать:

func (t *DataContract) addVInfo(stub shim.ChaincodeStubInterface, args []string) peer.Response {
params := stub.GetStringArgs()
fmt.Println("The params passed in are:", params)

if len(params) != 3 {
    fmt.Println("Please resubmit in this particular order: addVinfo, LicensePlate, Owner")
    return shim.Error("Please resubmit in this particular order: addVinfo, LicensePlate, Owner")
}

var v = Vehicle{LicencePlate:params[1], Owner:params[2]}
vehicle_details[0] = v

return shim.Success(nil)
}

Есть большая вероятность, что мой код плохой или мое понимание команд плохое. Любая помощь приветствуется, и я буду рад добавить дополнительную информацию, если об этом попросят. Я использую Hyperledger Fabri c 1.4, потому что я просто хочу проверить свой цепной код, а не вмешиваться в жизненный цикл создания.

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