web3.py createFilter: filter => SyntaxError: Positionsargument folgt Schlüsselwortargument

  • Web3.py-Version 4.2.1
  • geth-Version: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': 0under 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': 999or 'arg111': 999etc.} 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

Antworten (1)

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.

Sollte arg1das 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 an
Für weitere Informationen folgen Sie bitte diesem geschlossenen Problem: github.com/ethereum/web3.py/issues/943#event-1723643072