[Ethereum] ‘Contract’ object has no attribute ‘eventFilter’ web3.py

blockchaineventsfiltersgo-ethereumweb3.py

I am trying to filter Transfer events from my local ethereum node using web3 py. I have created a venv in visual studio code. My code is as follows:

def decodeLogswithfilter(t1, t2, abi1, addr):
    mycontract = geth.eth.contract(address=addr, abi=abi1)
    filter = mycontract.eventFilter(
        'Transfer', {'fromBlock': t1, 'toBlock': t2})
    eventlist = filter.get_all_entries
    print(eventlist)

decodeLogswithfilter(start, ending_block,
                         abi['result'], geth.toChecksumAddress(current_addr))

I have also tried using createFilter as well but it gives me the same error that Contract object has no attribute eventFilter.

Traceback (most recent call last):
  File "/mnt/ssd/erc721/queryBlockchain.py", line 150, in <module>
    abi['result'], geth.toChecksumAddress(current_addr))
  File "/mnt/ssd/erc721/queryBlockchain.py", line 71, in decodeLogswithfilter
    filter = mycontract.eventFilter(
AttributeError: 'Contract' object has no attribute 'eventFilter'

I have also tried upgrading my web3 package as suggested online, but the error didn't resolve.

Best Answer

Replace

filter = mycontract.eventFilter(
        'Transfer', {'fromBlock': t1, 'toBlock': t2})
eventlist = filter.get_all_entries

with

filter = mycontract.events.Transfer.createFilter(fromBlock=t1, toBlock=t2 )
filter.get_all_entries()         

assuming Transfer is the eventname in solidity, This is for web3==5.5.1 version.