Events
web3.py createFilter: filter => SyntaxError: 位置參數跟隨關鍵字參數
- Web3.py 版本 4.2.1
- geth版本:
1.8.0-unstable
我已按照web3.py 指南進行過濾。
通過合約實例api:
event_filter = mycontract.events.myEvent.createFilter(fromBlock='latest', {'filter':{'arg1':10}})
但我收到這條線的錯誤:
myContract.events.LogJob.createFilter(fromBlock='latest', {'filter': {'arg1':10}})
我的主要目標是根據參數過濾事件。
我遇到的錯誤:
myContract.events.LogJob.createFilter(fromBlock='latest', {'filter': {'arg1':10}}) ^ SyntaxError: positional argument follows keyword argument
**$$ Q $$**我該如何解決這個錯誤?
**更新:**我關注了@Mikko Ohtamaa 的回答。現在我沒有收到任何錯誤,但
[]
即使我提供了正確的事件關鍵字(參數名稱及其值的字典),過濾器也會返回。請看一個例子:
blockReadFrom = 1899201; myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom) print(myFilter.get_all_entries())
返回,在這裡您可以看到發出了
'storageID': 0
under的事件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())
回報:
[]
有趣的是,即使 {
'arg1': 999
或'arg111': 999
etc.} 不存在,以下行也會返回有效輸出。
myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom, argument_filters={'arg1': 999})
筆記:
有關更多資訊,請關注此已關閉問題:https ://github.com/ethereum/web3.py/issues/943#event-1723643072
我認為應該是:
myContract.events.LogJob.createFilter(fromBlock='latest', argument_filters={'arg1':10})
您可以在此處查看實際的函式簽名:
https://web3py.readthedocs.io/en/latest/contracts.html?highlight=createfilter
請送出有關 web3.py 文件頁面的問題,因為它不反映目前的程式碼庫。