Я создал сеть Hyperledger Fabric, установил и создал экземпляр моего цепного кода. Однако когда я проверил свой цепной код, я обнаружил что-то не то, что ожидал.
Например, мой цепной код имеет API, который создает пользователя (с PutState
), но если данное имя пользователя уже существует (проверьте с помощью GetQueryResult
), он отказывается, возвращая ошибку.
Когда я тестировал мой цепной код с помощью сценария оболочки, он хорошо работает с кодом ниже:
# create user successfully
docker exec -it cli peer chaincode invoke ...
sleep 3
# attempt to create user with the same username which should fail and it does fail
docker exec -it cli peer chaincode invoke ...
, но без sleep 3
он не перестает работать и успешно записывается в книгу. Когда я проверяю данные, записанные в состоянии DB, я вижу последние данные, которые не должны были быть записаны.
Я думаю, это произошло потому, что в момент обработки второго запроса первая книга (или блок?) Еще не была передана проверяющему узлу.
Как мне избежать этого поведения? или это то, что цепной код не должен обрабатывать?