Как исправить ошибку: при отправке транзакции в Hyperledger не получено никаких успешных событий?

Я читал руководство на https://developer.ibm.com/tutorials/ibm-blockchain-platform-vscode-smart-contract/, и когда я отправляю транзакцию через расширение кода VS платформы блокчейн IBM, я получаю сообщение об ошибке:

«Ошибка при отправке транзакции: не получено успешных событий».

Вызываемая функция была 'instantiate', как показано ниже:

    public async instantiate(ctx: Context): Promise<any> {
        const greeting = { text: 'Instantiate was called!' };
        await ctx.stub.putState('GREETING', Buffer.from(JSON.stringify(greeting)));
    }

Выполнение этого приведет к успешной записи в реестр даже при возникновении ошибки. После этого я смог запросить бухгалтерскую книгу и увидел правильное значение "{текст: 'Был вызван экземпляр!' } "был возвращен.

Вот трассировка ошибки, когда я запускал модульный тест для instantiate. Надеюсь, это поможет:

     Error: No successful events received
      at AllForTxStrategy.checkCompletion (node_modules/fabric-network/lib/impl/event/allfortxstrategy.js:34:12)
      at AllForTxStrategy.errorReceived (node_modules/fabric-network/lib/impl/event/abstracteventstrategy.js:67:8)
      at TransactionEventHandler._onError (node_modules/fabric-network/lib/impl/event/transactioneventhandler.js:126:17)
      at EventRegistration.eventHub.registerTxEvent [as _onErrorFn] (node_modules/fabric-network/lib/impl/event/transactioneventhandler.js:90:20)
      at EventRegistration.onError (node_modules/fabric-network/node_modules/fabric-client/lib/ChannelEventHub.js:1709:9)
      at ChannelEventHub._closeAllCallbacks (node_modules/fabric-network/node_modules/fabric-client/lib/ChannelEventHub.js:867:15)
      at ChannelEventHub._disconnect (node_modules/fabric-network/node_modules/fabric-client/lib/ChannelEventHub.js:625:8)
      at ClientDuplexStream._stream.on (node_modules/fabric-network/node_modules/fabric-client/lib/ChannelEventHub.js:539:11)
      at addChunk (_stream_readable.js:283:12)
      at readableAddChunk (_stream_readable.js:264:11)
      at ClientDuplexStream.Readable.push (_stream_readable.js:219:10)
      at Object.onReceiveMessage (node_modules/fabric-network/node_modules/grpc/src/client_interceptors.js:1292:19)
      at InterceptingListener.recvMessageWithContext (node_modules/fabric-network/node_modules/grpc/src/client_interceptors.js:607:19)
      at /Users/chana/projects/ibm-bp/node_modules/fabric-network/node_modules/grpc/src/client_interceptors.js:706:14

person Aloysius    schedule 12.04.2019    source источник
comment
Таким образом, похоже, что цепной код создал экземпляр и выполнил транзакцию создания экземпляра. У вас возникнет такая же проблема, если вы попытаетесь вызвать другие транзакции с помощью VSCode? (вы даже можете снова вызвать транзакцию создания экземпляра. Это просто обычная транзакция, которая может запускаться снова и снова, и вызывается не только при создании экземпляра контракта)   -  person david_k    schedule 12.04.2019
comment
да. Та же проблема возникает, когда я повторно пытаюсь отправить транзакцию для функции создания экземпляра. Та же проблема для других функций, которые просто очень просты. Выбор «Оценить транзакцию» для instantiate не вызывает ошибки. Хотя это означает, что он не будет записывать в бухгалтерскую книгу.   -  person Aloysius    schedule 13.04.2019


Ответы (1)


Я заметил несоответствие в выводе local fabric в VS Code после того, как отправил транзакцию:

[13.04.2019 21:41:22] [ИНФОРМАЦИЯ] fabricvscodelocalfabric_peer0.org1.example.com | 2019-04-12 12: 17: 55.210 UTC [common.deliver] deliveryBlocks -> WARN 05a Отклонение доставки для 172.19. 0.1: 34608 из-за ошибки проверки конверта: временная метка конверта 2019-04-13 11: 41: 22.439 +0000 UTC больше, чем на 15 минут по сравнению с текущим серверным временем 2019-04-12 12: 17: 55.210409997 +0000 UTC m = + 169.648611001

Это выглядело как какое-то несоответствие времени на peer0, поэтому я вошел в его bash и запустил date, чтобы увидеть неправильное время сервера (2019-04-12 12:17:55), затем я попытался исправить время сервера.

После этого я снова попробовал Submit Transaction, и он работал без ошибок!

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

person Aloysius    schedule 13.04.2019
comment
Проблема, которую вы описали, заключалась в том, что я думал, возможно, проблема. Я предполагаю, что вы используете VSCode на Windows или Mac? Тогда проблема в том, что виртуальная машина (докер на этих платформах должна иметь виртуальную машину для контейнеров linux), используемая для запуска различных контейнеров, имеет расхождение во времени с вашей хост-машиной, и это не позволяет клиенту регистрироваться для событий. События используются, чтобы определить, когда tx был зафиксирован. Это не останавливает транзакцию, если она действительна. - person david_k; 14.04.2019
comment
Да, я использую VSCode на Mac. Спасибо за разъяснение @david_k. Ценить это. - person Aloysius; 16.04.2019
comment
Привет, у меня похожая ошибка, и я хочу установить одноранговое время. Как вы его установили? Команда date приводит к ошибке. Операция запрещена. - person SKuri; 29.08.2019
comment
@SKuri Здесь мы получим дату UTC от peer0, а затем используем ее для установки даты UTC на вашем локальном компьютере. Получить дату в формате UTC для установки на другом компьютере > date -u "+%m%d%H%M%Y" Установить дату в формате UTC на локальном компьютере > date -u 090509112019 - person Aloysius; 05.12.2019