Итак, я пытаюсь проверить свой собственный цепной код, изменив 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, потому что я просто хочу проверить свой цепной код, а не вмешиваться в жизненный цикл создания.