Zuverlässige Art, Ereignisse im Frontend abzuhören

Ich mache eine Webanwendung, die die Ereignisse aus meinem Vertrag benötigt, um ihren Zustand zu initialisieren. Ich habe den Infura-Websocket-Anbieter verwendet, aber er scheint stark zu verzögern und die Verbindungen während der letzten Woche unerwartet zu schließen. getPastEventsMethode funktioniert nicht gut.

Ich möchte, dass meine Anwendung von Smartphones aus zugänglich ist (zumindest im Nur-Lese-Modus). Ich kann mich also nicht nur auf den Knoten oder die Brieftasche verlassen, die auf demselben Computer ausgeführt werden.

Gibt es eine Möglichkeit, alle Ereignisse aus einem Vertrag zuverlässig abzurufen? Wie erreicht beispielsweise etherdelta dies? Sie betreiben einen Server mit einem eigenen privaten Knoten, der in jedem Block statische Daten generiert?

Antworten (1)

Sie können die Ereignisüberwachung bei jedem Transaktionsaufruf verwenden und dann das Ereignis von Tx-Quittungen abrufen.

Beispielcode

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

Sie können auch auf dieses Dokument verweisen: https://github.com/ethereum/wiki/wiki/JavaScript-API#contract-events

Das ist eine gute Idee! Aber ich muss wirklich die vergangenen Ereignisse laden. Es wäre zu kostspielig, alle erforderlichen Informationen im Vertrag zu hinterlegen.
Sie können vergangene Ereignisse einer bestimmten Transaktion aus ihren Quittungen/Protokollen abrufen, und es heißt nicht, Ereignisse abzuhören, wie Ihr Titel; Lesen Sie einfach Daten aus der Blockchain.