Как отслеживать транзакцию, отправленную узлом A с другого узла B?

Я изо всех сил пытаюсь достичь следующего:

  • Узел А отправляет транзакцию.
  • Узел B начинает отслеживать эту транзакцию.
  • Когда узел B видит транзакцию в последнем блоке (т. е. не как ожидающую транзакцию), он обновляет некоторые данные на локальном сервере, а затем прекращает просмотр.
  • Если транзакция терпит неудачу (т. е. она сбрасывается или заканчивается газ), узел B отправляет сообщение об ошибке и прекращает наблюдение.
  • PS: узел B имеет доступ к хэшу транзакции и всей информации, доступной из sendTransaction( ... )обратного вызова узла A.

Кто-нибудь, пожалуйста, есть идея о том, как этого добиться? Спасибо!

Контекст:

Я пытаюсь разрешить пользователям (узел A выше) взаимодействовать с контрактом через веб-клиент. Когда они отправляют транзакцию, я хотел бы, чтобы мой сервер (узел B) начал следить за ней и, как только он увидел ее в последнем блоке, добавил запись с ней в мою базу данных. Если транзакция завершается неудачно, то запись в базу данных добавляться не должна. Я использую метеор в качестве стека.

Дополнительные мысли

Я думал о событиях для каждой транзакции в моем контракте на солидность. Затем, когда клиент отправляет транзакцию, он вызывает метод на стороне сервера, который начинает отслеживать событие. В обратном вызове события я буду проверять transactionHash, чтобы убедиться, что он совпадает. Если это так, я выполняю действия, описанные выше. Моя проблема здесь заключается в том, что происходит, когда транзакция терпит неудачу (т.е. она выбрасывает или у нее кончается газ..)? Правильное событие никогда не будет запущено, и мой сервер никогда не перестанет наблюдать...

Ответы (1)

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