Определите, когда смарт-контракт снова будет развернут в сети.

Я хотел бы автоматизировать ответ смарт-контракта из скрипта. Есть ли способ определить, когда контракт был снова развернут в сети для отправки ответа?

ОБНОВЛЕНО: если решение использует события, как можно определить из сценария запущенного децентрализованного приложения, когда контракт отправляет событие, если вы не вызываете какую-либо функцию?

Сценарий: Dapp работает. Контракт развертывается снова и отправляет событие в сценарий. Скрипт должен получить событие без вызова какой-либо функции.

Другими словами, как можно заставить скрипт «слушать» до получения события.

читать о событиях
Я знаю, что события можно вызывать, когда вы выполняете функцию в развернутом контракте для получения информации, но в этом случае я не знаю, как можно использовать событие для определения момента обновления контракта.
что вы имеете в виду под обновленным? контракты неизменны
события не "вызываются", они "излучаются"
Да, я неправильно объяснил, извините. Я хотел сказать, когда контракт снова развертывается (не обновляется), и чтобы получить значение испускаемого события, я подумал, что вам нужно вызвать функцию в контракте. Я изменю это объяснение в вопросе.

Ответы (3)

Есть несколько способов сделать это:

События

Как сказал @Nulik в комментариях выше, вы можете настроить работника для чтения всех событий, исходящих из контракта, и выполнения ваших действий с этими событиями. Это не работает, если из контракта не выдается событие, чтобы проверить, что вы пытаетесь сделать.

Вызов контракта

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

Просмотр адреса

Окончательным решением может быть простая настройка наблюдателя для отслеживания адреса самого контракта и его проверки на наличие входящих транзакций. Если есть конкретная функция, которую вы ищете, вы знаете, что каждая транзакция, входящая с данными для вызова этой функции, будет тем, что вы ищете (при вызове функции первые 4 байта данных — это метод ИДЕНТИФИКАТОР). Отсюда вы можете анализировать данные для того, что вы ищете.

Код контракта не может быть обновлен.

Состояние контракта можно обновить, отправив транзакции в функции контракта. Контракты могут и должны генерировать события для каждого важного изменения состояния, чтобы заинтересованные клиенты могли узнать то, что им нужно, прослушивая журналы событий.

На стороне клиента программные клиенты «просматривают» журналы событий с обратными вызовами. Как только эти прослушиватели настроены, обратные вызовы срабатывают всякий раз, когда в полученных блоках наблюдаются соответствующие события.

Этот объяснитель произвел на меня хорошее впечатление. https://coursetro.com/posts/code/100/Solidity-Events-Tutorial---Использование-Web3.js-to-Listen-for-Smart-Contract-Events

Совет. При просмотре примеров/документов следите за тем, чтобы не возникло путаницы между 0.x Web3 API и бета-версией 1.0. Бета-версия 1.0 немного меняет исходные методы.

Надеюсь, поможет.

После развертывания контракта его нельзя обновить. Контракты неизменны. Каждый контракт имеет уникальный адрес счета. Если вы вообще хотите обновить какую-либо функцию уже развернутого контракта, вам нужно снова развернуть контракт.