From caf645e9233f41bf61b9139575b0c9208ffad3a0 Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Wed, 17 Nov 2021 13:28:48 -0500 Subject: [PATCH 1/5] Fetch timestamp when creating blocks --- mev_inspect/block.py | 19 +++++++++++++++++++ mev_inspect/schemas/blocks.py | 1 + 2 files changed, 20 insertions(+) diff --git a/mev_inspect/block.py b/mev_inspect/block.py index 83f61bf..17dcf0b 100644 --- a/mev_inspect/block.py +++ b/mev_inspect/block.py @@ -71,6 +71,7 @@ async def _fetch_block(w3, base_provider, block_number: int, retries: int = 0) - return Block( block_number=block_number, + block_timestamp=block_json["timestamp"], miner=block_json["miner"], base_fee_per_gas=base_fee_per_gas, traces=traces, @@ -82,6 +83,7 @@ def _find_block( trace_db_session: orm.Session, block_number: int, ) -> Optional[Block]: + block_timestamp = _find_block_timestamp(trace_db_session, block_number) traces = _find_traces(trace_db_session, block_number) receipts = _find_receipts(trace_db_session, block_number) base_fee_per_gas = _find_base_fee(trace_db_session, block_number) @@ -96,6 +98,7 @@ def _find_block( return Block( block_number=block_number, + block_timestamp=block_timestamp, miner=miner_address, base_fee_per_gas=base_fee_per_gas, traces=traces, @@ -103,6 +106,22 @@ def _find_block( ) +def _find_block_timestamp( + trace_db_session: orm.Session, + block_number: int, +) -> Optional[int]: + result = trace_db_session.execute( + "SELECT block_timestamp FROM block_timestamps WHERE block_number = :block_number", + params={"block_number": block_number}, + ).one_or_none() + + if result is None: + return None + else: + (block_timestamp,) = result + return block_timestamp + + def _find_traces( trace_db_session: orm.Session, block_number: int, diff --git a/mev_inspect/schemas/blocks.py b/mev_inspect/schemas/blocks.py index 2f8f2e6..c3dd3d7 100644 --- a/mev_inspect/schemas/blocks.py +++ b/mev_inspect/schemas/blocks.py @@ -38,6 +38,7 @@ class CallAction(Web3Model): class Block(Web3Model): block_number: int + block_timestamp: int miner: str base_fee_per_gas: int traces: List[Trace] From ad45abbe9ca4f46ef9f14d5cd06f3fb23f44e607 Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Wed, 17 Nov 2021 15:07:04 -0500 Subject: [PATCH 2/5] Add crud for blocks --- mev_inspect/crud/blocks.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 mev_inspect/crud/blocks.py diff --git a/mev_inspect/crud/blocks.py b/mev_inspect/crud/blocks.py new file mode 100644 index 0000000..3639ba8 --- /dev/null +++ b/mev_inspect/crud/blocks.py @@ -0,0 +1,26 @@ +from mev_inspect.schemas.blocks import Block + + +def delete_block( + db_session, + block_number: int, +) -> None: + db_session.execute( + "DELETE FROM blocks WHERE block_number = :block_number", + params={"block_number": block_number}, + ) + db_session.commit() + + +def write_block( + db_session, + block: Block, +) -> None: + db_session.execute( + "INSERT INTO blocks (block_number, block_timestamp) VALUES (:block_number, :block_timestamp)", + params={ + "block_number": block.block_number, + "block_timestamp": block.block_timestamp, + }, + ) + db_session.commit() From a2dc8908df66af5fdac3e0647fa5406f1cfaf67a Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Wed, 17 Nov 2021 15:11:26 -0500 Subject: [PATCH 3/5] Save block during inspection --- mev_inspect/inspect_block.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mev_inspect/inspect_block.py b/mev_inspect/inspect_block.py index c517923..de955fb 100644 --- a/mev_inspect/inspect_block.py +++ b/mev_inspect/inspect_block.py @@ -11,6 +11,10 @@ from mev_inspect.crud.arbitrages import ( delete_arbitrages_for_block, write_arbitrages, ) +from mev_inspect.crud.blocks import ( + delete_block, + write_block, +) from mev_inspect.crud.traces import ( delete_classified_traces_for_block, write_classified_traces, @@ -53,6 +57,9 @@ async def inspect_block( logger.info(f"Block: {block_number} -- Total traces: {len(block.traces)}") + delete_block(inspect_db_session, block_number) + write_block(inspect_db_session, block) + total_transactions = len( set(t.transaction_hash for t in block.traces if t.transaction_hash is not None) ) From 5aa8776b0d8a7cda8dc31d2e18b365e317bd0ebf Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Wed, 17 Nov 2021 15:14:24 -0500 Subject: [PATCH 4/5] Don't attempt to create block if timestamp is null --- mev_inspect/block.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mev_inspect/block.py b/mev_inspect/block.py index 17dcf0b..4528931 100644 --- a/mev_inspect/block.py +++ b/mev_inspect/block.py @@ -88,7 +88,12 @@ def _find_block( receipts = _find_receipts(trace_db_session, block_number) base_fee_per_gas = _find_base_fee(trace_db_session, block_number) - if traces is None or receipts is None or base_fee_per_gas is None: + if ( + block_timestamp is None + or traces is None + or receipts is None + or base_fee_per_gas is None + ): return None miner_address = _get_miner_address_from_traces(traces) From d2437055d94b62efee9fdce2275ccecd62044c78 Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Wed, 17 Nov 2021 15:19:48 -0500 Subject: [PATCH 5/5] Fix tests --- tests/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/utils.py b/tests/utils.py index 9269fab..f4c2234 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -14,7 +14,7 @@ def load_test_block(block_number: int) -> Block: with open(block_path, "r") as block_file: block_json = json.load(block_file) - return Block(**block_json) + return Block(**block_json, block_timestamp=0) def load_comp_markets() -> Dict[str, str]: