1.8.0-unstable
He seguido la guía web3.py para filtrar.
A través de la API de la instancia del contrato:
event_filter = mycontract.events.myEvent.createFilter(fromBlock='latest', {'filter':{'arg1':10}})
Pero me sale un error para esta línea:
myContract.events.LogJob.createFilter(fromBlock='latest', {'filter': {'arg1':10}})
Mi objetivo principal es filtrar eventos en función de sus argumentos.
Error que estoy teniendo:
myContract.events.LogJob.createFilter(fromBlock='latest', {'filter': {'arg1':10}})
^
SyntaxError: positional argument follows keyword argument
[P] ¿Cómo podría solucionar este error?
Actualización: he seguido la respuesta de @Mikko Ohtamaa. Ahora no recibo ningún error, pero el filtro devuelve []
incluso si proporciono la palabra clave correcta del evento (diccionario del nombre del argumento y su valor).
Por favor vea un ejemplo:
blockReadFrom = 1899201;
myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom)
print(myFilter.get_all_entries())
Devoluciones, aquí puede ver que hay un evento emitido con 'storageID': 0
debajo 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())
Devoluciones:
[]
Y el punto interesante de que la siguiente línea devuelve una salida válida aunque { 'arg1': 999
or 'arg111': 999
etc.} no existe.
myFilter = eBlocBroker.events.LogJob.createFilter(fromBlock=blockReadFrom, argument_filters={'arg1': 999})
Nota:
Para obtener más información, siga este número cerrado: https://github.com/ethereum/web3.py/issues/943#event-1723643072
Creo que debería ser:
myContract.events.LogJob.createFilter(fromBlock='latest', argument_filters={'arg1':10})
Puede ver la firma de la función real aquí:
https://web3py.readthedocs.io/en/latest/contracts.html?highlight=createfilter
Presente un problema relacionado con la página de documentación de web3.py, ya que no refleja el código base actual.
alper
arg1
ser la palabra clave que se define en el evento? Ahora no da ningún error, pero regresa[]
incluso si proporciono la palabra clave correcta del evento (diccionario del nombre del argumento y su valor). Por favor vea mi respuesta actualizada @Mikko Ohtamaaalper