Cache

Note: This is in Beta release. This functionality is in constant development and many features are in planning stages. Use the cache plugin to store provider data in a sqlite database.**

ape cache init --network <ecosystem-name>:<network-name>

If you want to set up your network connection for caching use this guide.

ape cache init --network ethereum:mainnet

This creates a SQLite database file in the hidden ape folder.

Get data from the provider

Use ape console:

ape console --network ethereum:mainnet:infura

Run a few queries:

In [1]: chain.blocks.query("*", stop_block=20)
In [2]: chain.blocks[-2].transactions

On a deployed contract, you can query events:

  • Below, FooHappened is the event from your contract instance that you want to query from.

contract_instance.FooHappened.query("*", start_block=-1)

where contract_instance is the return of owner.deploy(Contract)

See this guide for more information how to get a contract instance.

Exit the IPython interpreter.

You can query the cache database directly, for debugging purposes. For example, to get the blocks table data from the SQLite db we can do the following:

ape cache query --network ethereum:mainnet:infura "SELECT * FROM blocks"

Returns:

                                                 hash num_transactions  number                                        parent_hash  size   timestamp  gas_limit  gas_used base_fee   difficulty  total_difficulty
0   b'\xd4\xe5g@\xf8v\xae\xf8\xc0\x10\xb8j@\xd5\xf...                0       0  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...   540           0       5000         0     None  17179869184       17179869184
1   b'\x88\xe9mE7\xbe\xa4\xd9\xc0]\x12T\x99\x07\xb...                0       1  b'\xd4\xe5g@\xf8v\xae\xf8\xc0\x10\xb8j@\xd5\xf...   537  1438269988       5000         0     None  17171480576       34351349760
2   b'\xb4\x95\xa1\xd7\xe6f1R\xae\x92p\x8d\xa4\x84...                0       2  b'\x88\xe9mE7\xbe\xa4\xd9\xc0]\x12T\x99\x07\xb...   544  1438270017       5000         0     None  17163096064       51514445824

To get transactions or contract_events:

ape cache query --network ethereum:mainnet:infura "SELECT * FROM transactions"

or

ape cache query --network ethereum:mainnet:infura "SELECT * FROM contract_events"