Ereignisse werden zu langsam geladen

Ich habe im Moment eine dapp auf rinkeby laufen, Sie können es jetzt auf cryptogol.io ausprobieren , aber ich habe ein Problem beim Lesen von Ereignissen aus der Blockchain. Zum Beispiel habe ich gestern die Ereignisse happensgemacht, damit jeder mit der Seite interagieren kann. Hier ist der Code zum Abhören des Ereignisses (es wird jedes Mal ausgeführt, wenn jemand die Seite unter www.cryptogol.io/market.html öffnet :

listenForEvents: function() {
  console.log("escuchando")
    App.contracts.KickerADN.deployed().then(function(instance) {
        instance.AdnCreated({}, {
            fromBlock: 0,
            toBlock: 'latest'
        }).watch(function(error, event) {
            App.loadBody(event.args._adn.toNumber());
        });
    });
}

Wenn Sie die Seite öffnen, kann es länger als 1 Minute dauern, bis das Ereignis geladen ist. Die Funktion wird normal aufgerufen, aber das Ereignis erhält sie nicht rechtzeitig. Irgendeine Idee?

Sie rufen alle Ereignisse aus Block 0 ab, das ist eine anspruchsvolle Aufgabe. Sie können versuchen, bei Bedarf zu laden, mit dem neuesten zu beginnen und rückwärts zu gehen. Und bewahren Sie einen Cache mit zuvor geladenen Ereignissen auf, damit Sie nicht alles aus der Blockchain neu laden müssen.

Antworten (2)

Das Ereignis des tnx-Aufrufs wurde nur ausgelöst, als der tnx bestätigt wurde, alias als tnx in einen versiegelten Block aufgenommen wurde, also dauert es einige Zeit.

Danke... Aber der tnx wurde gestern bestätigt, ich weiß, es kann einige Zeit dauern, aber mehr als eine Minute, um etwas zu laden, das bereits bestätigt wurde, ist nicht sehr gut, oder?
Nein, jedes Mal, wenn Sie die Funktion aufrufen, wird ein neues tnx erstellt; nicht die alte
Das ist für Funktionen, die in die Blockchain schreiben, aber ich versuche nur, aus der Blockchain zu lesen ...
Dann können Sie die Quittungen/Protokolle von tnx abrufen, um die Ereignisse daraus zu extrahieren

Wie wäre es mit Change-Design? Es lädt alle Blöcke. AdnCreated ist ein Ereigniszugriff und das erste Argument ist eine Suchbedingung für ein indiziertes Ereignis. Dadurch wird die Anzahl der Scanziele reduziert. 2. Arg ist Skipper. fromBlockermöglicht es Ihnen, einige Blöcke zu überspringen. Wenn Sie also Ihren Vertrag in einen ignorierbaren veralteten Zustand versetzen, würde Checkpointing Ihr Protokoll schneller abfragen. Und das Setzen eines Cache-Servers ist auch eine Möglichkeit. Einige Benutzer würden jedoch sagen, dass es sich um eine zentralisierte Einheit handelt, tatsächlich tötet dieser Server die Fondssicherheit nicht.