Web3.py EventFilter.get_new_entries() immer leer

Ich habe folgenden Code, um neue Ereigniseinträge zu erhalten. Die Idee ist, die neuesten Transferereignisse aus einem bestimmten Vertrag zu erhalten.

from web3 import Web3, HTTPProvider
import json

abi = json.load(open('abi.json'))
address = '0x.....................'

w3 = Web3(HTTPProvider('http://localhost:8545'))

contract = w3.eth.contract(abi=abi,address=address)

event_filter = contract.eventFilter('Transfer',{'fromBlock':0,'toBlock':'latest'})

logs = event_filter.get_new_entries()

print(logs);

Es gibt einen lokalen Ethereum-Knoten, der unter Port 8545 mit --rpc läuft.

Wenn ich das obige Skript nach dem Initiieren einer Transaktion ausführe, wird immer ein leeres Array gedruckt.

Wenn ich es auf ändere, event_filter.get_all_entries()kann ich alle Transaktionen sehen. Aber get_new_entries()funktioniert nicht. Irgendeine Idee, was das Problem sein würde?

Antworten (1)

Wenn ich es auf ändere, event_filter.get_all_entries()kann ich alle Transaktionen sehen. Aber get_new_entries()funktioniert nicht. Irgendeine Idee, was das Problem sein würde?

Wie ich aus der neuesten Dokumentation von web3.py ersehen kann :


Die Funktion LogFilter.get_all_entries()gibt alle Protokolle zurück, die dem Filter entsprechen

Protokolle werden mit dem abgerufen, web3.eth.Eth.getFilterLogs()das alle Protokolle zurückgibt, die dem angegebenen Filter entsprechen.


Von der anderen Seite haben wir die, LogFilter.get_new_entries()die seit der letzten Umfrage nur neue Einträge zurückgibt.

Protokolle werden mit dem abgerufen, web3.eth.Eth.getFilterChanges()das nur neue Einträge seit der letzten Abfrage zurückgibt.


Zusammenfassend.

Wenn Sie diese Methode noch nie aufgerufen haben, kann sie nicht entscheiden, welche Einträge neu sind, also gibt sie zurück undefined. Sie sollten zuerst anrufen LogFilter.get_all_entries()und erst nachdem Sie angerufen haben und einige Änderungen passiert sind, anrufen LogFilter.get_new_entries().

Gibt alle neuen Einträge zurück, die seit dem letzten Aufruf dieser Methode für die gegebenen aufgetreten sindfilter_id


Ereignisprotokollfilter