Надежный способ прослушивания событий во внешнем интерфейсе

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

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

Есть ли способ надежно получить все события из какого-либо контракта? Например, как etherdelta достигает этого? Они запускают сервер с собственным частным узлом, который генерирует статические данные каждый блок?

Ответы (1)

Вы можете использовать отслеживание событий при каждом вызове транзакции, а затем получить событие из квитанций Tx.

Образец кода

const self = this;
this.props.deposit(this.state.amount).then((result) => {
    if (!result) {
        Message.error('XYZ')
    }

    var event = self.props.getEventXXX()
    event.watch(function (err, response) {
        if(response.event == 'XXX') {
            notification.success({
                message: 'ABC',
                description: 'XYZ!',
            });
            event.stopWatching()
        }
    });

Вы также можете обратиться к этому документу: https://github.com/ethereum/wiki/wiki/JavaScript-API#contract-events .

Это хорошая идея! Но мне действительно нужно загрузить прошлые события. Было бы дорого хранить всю необходимую информацию в контракте.
Вы можете получить прошлые события любой конкретной транзакции из ее квитанций / журналов, и это не называется прослушиванием событий в качестве вашего заголовка; просто читать данные из блокчейна.