GraphQLReorganisationMonitor

Documentation for eth_defi.event_reader.reorganisation_monitor.GraphQLReorganisationMonitor Python class.

class GraphQLReorganisationMonitor[source]

Watch blockchain for reorgs using GoEthereum /graphql API.

Attributes summary

check_depth

How many blocks we replay from the blockchain to detect any chain organisations

last_block_read

Last block served by update_chain() in the duty cycle

max_cycle_tries

How many times we try to re-read data from the blockchain in the case of reorganisation.

reorg_wait_seconds

How long we allow our node to catch up in the case there has been a change in the chain tip.

Methods summary

__init__([graphql_url, provider])

param graphql_url

add_block(record)

Add new block to header tracking.

check_block_reorg(block_number, block_hash)

Check that newly read block matches our record.

fetch_block_data(start_block, end_block)

Read the new block headers.

figure_reorganisation_and_new_blocks([max_range])

Compare the local block database against the live data from chain.

get_block_by_number(block_number)

Get block header data for a specific block number from our memory buffer.

get_block_timestamp(block_number)

Return UNIX UTC timestamp of a block.

get_block_timestamp_as_pandas(block_number)

Return UNIX UTC timestamp of a block.

get_last_block_live()

Get the chain tip using GraphQL.

get_last_block_read()

Get the number of the last block served by update_chain().

has_data()

Do we have any data available yet.

load_initial_block_headers([block_count, ...])

Get the initial block buffer filled up.

load_pandas(df)

Load block header data from Pandas data frame.

restore(block_map)

Restore the chain state from a saved data.

skip_to_block(block_number)

Skip scanning initial chain and directly start from a certain block.

to_pandas([partition_size])

Convert the data to Pandas DataFrame format for storing.

truncate(latest_good_block)

Delete data after a block number because chain reorg happened.

update_chain()

Update the internal memory buffer of block headers from the blockchain node.

__init__(graphql_url=None, provider=None, **kwargs)[source]
Parameters
get_last_block_live()[source]

Get the chain tip using GraphQL.

Return type

int

fetch_block_data(start_block, end_block)[source]

Read the new block headers.

Parameters
  • start_block – The first block where to read (inclusive)

  • end_block – The block where to read (inclusive)

Return type

Iterable[eth_defi.event_reader.block_header.BlockHeader]