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
[В] Как исправить эту ошибку?
Обновление: я следил за ответом @Mikko Ohtamaa. Теперь я не получаю никакой ошибки, но фильтр возвращает значение, []
даже если я указываю правильное ключевое слово события (словарь имени аргумента и его значения).
Пожалуйста, посмотрите пример:
blockReadFrom = 1899201;
myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom)
print(myFilter.get_all_entries())
Возвращает, здесь вы можете видеть, что есть сгенерированное событие с 'storageID': 0
под 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
т. д.} не существует.
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, так как она не отражает текущую кодовую базу.
альпер
arg1
быть ключевое слово, определенное под событием? Теперь он не выдает никакой ошибки, но возвращает,[]
даже если я указываю правильное ключевое слово события (словарь имени аргумента и его значения). Пожалуйста, смотрите мой обновленный ответ @Mikko Ohtamaaальпер