fetch_all_events

Documentation for eth_defi.event.fetch_all_events function.

fetch_all_events(web3, event, address=None, argument_filters=None, from_block=1, to_block=None)[source]

Get events using eth_getLogs API.

This is a stateless method, as oppose to JSON-RPC filter objects. It can be safely called against nodes which do not provide eth_newFilter API, like Infura.

We are not doing any throttling or API error recovery: If you ask for too many events once this function and your Ethereum node are likely to blow up.

Example how to get all ERC-20 transfers to a target address:

IERC20 = get_contract(web3, "IERC20.json")
Transfer = IERC20.events.Transfer
all_transfers_to_user = list(fetch_all_events(web3, Transfer, argument_filters={"to": owner}))
Parameters
  • web3 (web3.main.Web3) – Web3 instance

  • event (Type[web3.contract.contract.ContractEvent]) – Event class grabbed from a Contract proxy class, like IERC20.events.Transfer.

  • address (Optional[eth_typing.evm.HexAddress]) – The smart contract address of the event emitter. Set to none to capture events from all the smart contracts.

  • argument_filters (Optional[dict]) – Filters based on the event structure, e.g. to field IERC20.events.Transfer

  • from_block (Optional[eth_typing.evm.BlockNumber]) – Limit block range. Set to 1 to get all the events, ever.

  • to_block (Optional[eth_typing.evm.BlockNumber]) – Limit block range

Return type

Iterable[web3.datastructures.AttributeDict]