Wie kann ich Protokolle/Ereignisse lesen, die in der Vergangenheit ausgelöst wurden?

Ich habe einen Smart Contract mit einem Event.

    event NewContractCreated(address _callerAddress, address _newContractAddress);

Ich weiß, wie ich aktiv auf neue Ereignisse lausche:

var newContractEvent = myContract.NewContractCreated();
newContractEvent.watch(function(error, result){
      if (!error){
        console.log("Success");
        console.log("New Contract Address: " + result.args._newContractAddress);
        console.log("Creator: " + result.args._callerAddress);
      }
  });

Das funktioniert gut für mich. Aber meine Frage ist: Wie lausche und ziehe ich genau die gleichen Daten für Ereignisse, die passiert sind, bevor ich mit dem Zuschauen begonnen habe?

Ich habe genau dasselbe versucht, aber mit getstatt watch... es hat halb funktioniert. Es druckte die oberste Zeile "Success", aber nicht die restlichen Protokollzeilen.

Antworten (3)

Sie sollten in der Lage sein, den zu beobachtenden Zeitraum (in Block Nr.) anzugeben. Laut der Dokumentation hier

fromBlock: Number|String – Die Nummer des frühesten Blocks (der neueste kann so angegeben werden, dass er den aktuellsten und anhängigsten Mining-Block bedeutet). Standardmäßig spätestens.

toBlock: Number|String – Die Nummer des neuesten Blocks (der neueste kann so angegeben werden, dass er den neuesten und derzeit ausstehenden Mining-Block bedeutet). Standardmäßig spätestens.

In deinem Fall sollte das funktionieren:

var newContractEvent = myContract.NewContractCreated();
newContractEvent.watch({fromBlock: 0, toBlock: 'latest'}, function(error, result){
      if (!error){
        console.log("Success");
        console.log("New Contract Address: " + result.args._newContractAddress);
        console.log("Creator: " + result.args._callerAddress);
      }
  });

Versuchen

var newContractEvent = myContract.NewContractCreated({}, {fromBlock: 12345, toBlock: 'latest'});
newContractEvent.watch(function(error, result) {
    if (!error){
        console.log("Success");
        console.log("New Contract Address: " + result.args._newContractAddress);
        console.log("Creator: " + result.args._callerAddress);
        JSON.stringify(result);
    }
});

Weitere Informationen zur Verwendung der indizierten Parameter Ihrer Veranstaltung als Filterelemente finden Sie unter Wie rufe ich die Voted-Ereignisse von The DAO ab?

Mein Vorschlag wäre

  • Erstellen Sie einen Filter mit den Optionen {fromBlock:.., toBlock:.., address:.Contract_addr.}
  • Verwenden Sie dann filter.get(), um Ereignisse aus der Vergangenheit zu erhalten
  • Erwägen Sie das Zwischenspeichern vergangener Ereignisse, wenn Sie MetaMask oder einen Remote-Knoten verwenden