Manera confiable de escuchar eventos en la interfaz

Hago una aplicación web que necesita los eventos de mi contrato para inicializar su estado. Estaba usando el proveedor websocket de infura, pero parece retrasarse mucho y cerrar las conexiones inesperadamente durante la última semana. getPastEventsmétodo no funciona bien.

Me gustaría que mi aplicación sea accesible desde teléfonos inteligentes (al menos para el modo de solo lectura). Por lo tanto, no puedo confiar solo en que el nodo o la billetera se ejecuten en la misma computadora.

¿Hay alguna manera de obtener todos los eventos de algún contrato de manera confiable? Por ejemplo, ¿cómo logra etherdelta esto? ¿Ejecutan un servidor, con su propio nodo privado, que genera datos estáticos en cada bloque?

Respuestas (1)

Puede usar la vigilancia de eventos en cada llamada de transacción y luego obtener el evento de los recibos de Tx.

Código de muestra

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()
        }
    });

También puede consultar este documento: https://github.com/ethereum/wiki/wiki/JavaScript-API#contract-events

¡Es una buena idea! Pero realmente necesito cargar los eventos pasados. Sería demasiado costoso almacenar toda la información necesaria en el contrato.
Puede obtener eventos anteriores de cualquier transacción específica de sus recibos/registros y no se llama escuchar eventos como su título; solo lea los datos de blockchain.