1.8.0-unstable
Ich habe die web3.py-Anleitung zum Filtern befolgt.
Über die Vertragsinstanz-API:
event_filter = mycontract.events.myEvent.createFilter(fromBlock='latest', {'filter':{'arg1':10}})
Aber ich bekomme einen Fehler für diese Zeile:
myContract.events.LogJob.createFilter(fromBlock='latest', {'filter': {'arg1':10}})
Mein Hauptziel ist das Filtern von Ereignissen basierend auf ihren Argumenten.
Fehler, den ich habe:
myContract.events.LogJob.createFilter(fromBlock='latest', {'filter': {'arg1':10}})
^
SyntaxError: positional argument follows keyword argument
[F] Wie kann ich diesen Fehler beheben?
Update: Ich bin der Antwort von @Mikko Ohtamaa gefolgt. Jetzt erhalte ich keinen Fehler, aber der Filter gibt zurück, []
obwohl ich das richtige Schlüsselwort des Ereignisses (Wörterbuch des Argumentnamens und seines Werts) angegeben habe.
Bitte sehen Sie sich ein Beispiel an:
blockReadFrom = 1899201;
myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom)
print(myFilter.get_all_entries())
Gibt zurück, hier können Sie sehen, dass ein Ereignis mit 'storageID': 0
under ausgegeben wird AttributeDict
:
[AttributeDict({'address': '0x128c9F368F12C24Cc2a4f88dCDCf3daA13C9667e', 'transactionHash': HexBytes('0x8f7c50fe276057ea90985be6d14dc7abb79ee0430c66bd161861b582b7db0c97'), 'args': AttributeDict({'desc': 'Science', 'jobKey': 'QmRsaBEGcqxQcJbBxCi1LN9iz5bDAGDWR6Hx7ZvWqgqmdR', 'index': 21, 'storageID': 0, 'clusterAddress': '0x75A4c787c5c18C587B284a904165Ff06a269B48C'}), 'transactionIndex': 0, 'event': 'LogJob', 'blockHash': HexBytes('0x9782cb281aa72defe54e0f84055a03a0b1bf6c6f21bd3d276a1252098f83c15f'), 'logIndex': 0, 'blockNumber': 1899201})]
blockReadFrom = 1899201;
myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom, argument_filters={'storageID':0})
print(myFilter.get_all_entries())
Kehrt zurück:
[]
Und interessanter Punkt, dass die folgende Zeile eine gültige Ausgabe zurückgibt, obwohl { 'arg1': 999
or 'arg111': 999
etc.} nicht existiert.
myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom, argument_filters={'arg1': 999})
Notiz:
Für weitere Informationen folgen Sie bitte diesem geschlossenen Problem: https://github.com/ethereum/web3.py/issues/943#event-1723643072
Ich denke, es sollte sein:
myContract.events.LogJob.createFilter(fromBlock='latest', argument_filters={'arg1':10})
Sie können die tatsächliche Funktionssignatur hier sehen:
https://web3py.readthedocs.io/en/latest/contracts.html?highlight=createfilter
Bitte melden Sie ein Problem bezüglich der web3.py-Dokumentationsseite, da sie nicht die aktuelle Codebasis widerspiegelt.
Alper
arg1
das Schlüsselwort sein, das unter dem Ereignis definiert ist? Jetzt gibt es keinen Fehler, aber es gibt[]
sogar das richtige Schlüsselwort des Ereignisses zurück (Wörterbuch des Argumentnamens und seines Werts). Bitte sehen Sie sich meine aktualisierte Antwort @Mikko Ohtamaa anAlper