web3.py createFilter: filter => SyntaxError: позиционный аргумент следует за аргументом ключевого слова

  • Версия Web3.py 4.2.1
  • версия geth: 1.8.0-unstable

Я следил за web3. py guide для фильтрации.

  

Через экземпляр контракта 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 в 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

3 голоса | спросил alper 3 J000000Tuesday18 2018, 03:25:07

1 ответ


2

Я думаю, что это должно быть:

  myContract.events.LogJob.createFilter(fromBlock='latest', argument_filters={'arg1':10})

Здесь вы можете увидеть действительную сигнатуру функции:

https://web3py.readthedocs.io/en/latest /contracts.html?highlight=createfilter

Пожалуйста, сообщите о проблеме, связанной с страницей документации по web3.py, поскольку она не отражает текущую базу кода.

ответил Mikko Ohtamaa 3 J000000Tuesday18 2018, 11:40:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132