Querying Data#

Ape has advanced features for querying large amounts of on-chain data. Ape provides this support through a number of standardized methods for working with data, routed through our query management system, which incorporates data from many sources in your set of installed plugins.

Getting Block Data#

Use ape console to connect to a network:

ape console --network ethereum:mainnet:infura

Run block queries:

# Query the first 20 blocks with all fields
df = chain.blocks.query("*", stop_block=20)

# Get specific fields from blocks
df = chain.blocks.query("number,timestamp,gas_used", start_block=16_000_000, stop_block=16_000_100)

# Access individual blocks
latest_block = chain.blocks[-1]
previous_block = chain.blocks[-2]

# Access transactions in a block
transactions = previous_block.transactions

Getting Account Transaction Data#

Each account within Ape fetches and stores transactional data that you can query. To work with an account’s transaction history:

from ape import accounts, chain

# Query by ENS name
total_value = chain.history["example.eth"].query("value").sum()  # All value sent by this address

# Query by account object
acct = accounts.load("harambe")
tx = acct.history[-1]  # Last transaction `harambe` made

# Sum total fees paid
fees_paid = acct.history.query("total_fees_paid").sum()  # Sum of ether paid for fees

Getting Contract Event Data#

On a deployed contract, you can query event history:

# Query all fields from a specific event
df = contract_instance.FooHappened.query("*")

# Query specific event fields
df = contract_instance.Transfer.query("from_,to,value", start_block=-1000)

# Filter high-value transfers (example with ERC-20 token)
high_value_transfers = contract_instance.Transfer.query("from_,to,value").query("value > 1000000")

# Query by block range
events = contract_instance.FooHappened.query("*", start_block=15_000_000, stop_block=15_100_000)

Where contract_instance is the return value of owner.deploy(MyContract) or Contract("0x...")

See this guide for more information on how to deploy or load contracts.