Merge pull request #132 from flashbots/timestamp-support
Add support for writing timestamps in mev-inspect
This commit is contained in:
commit
36101c36db
@ -67,6 +67,7 @@ async def _fetch_block(w3, base_provider, block_number: int, retries: int = 0) -
|
|||||||
|
|
||||||
return Block(
|
return Block(
|
||||||
block_number=block_number,
|
block_number=block_number,
|
||||||
|
block_timestamp=block_json["timestamp"],
|
||||||
miner=block_json["miner"],
|
miner=block_json["miner"],
|
||||||
base_fee_per_gas=base_fee_per_gas,
|
base_fee_per_gas=base_fee_per_gas,
|
||||||
traces=traces,
|
traces=traces,
|
||||||
@ -78,11 +79,17 @@ def _find_block(
|
|||||||
trace_db_session: orm.Session,
|
trace_db_session: orm.Session,
|
||||||
block_number: int,
|
block_number: int,
|
||||||
) -> Optional[Block]:
|
) -> Optional[Block]:
|
||||||
|
block_timestamp = _find_block_timestamp(trace_db_session, block_number)
|
||||||
traces = _find_traces(trace_db_session, block_number)
|
traces = _find_traces(trace_db_session, block_number)
|
||||||
receipts = _find_receipts(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)
|
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
|
return None
|
||||||
|
|
||||||
miner_address = _get_miner_address_from_traces(traces)
|
miner_address = _get_miner_address_from_traces(traces)
|
||||||
@ -92,6 +99,7 @@ def _find_block(
|
|||||||
|
|
||||||
return Block(
|
return Block(
|
||||||
block_number=block_number,
|
block_number=block_number,
|
||||||
|
block_timestamp=block_timestamp,
|
||||||
miner=miner_address,
|
miner=miner_address,
|
||||||
base_fee_per_gas=base_fee_per_gas,
|
base_fee_per_gas=base_fee_per_gas,
|
||||||
traces=traces,
|
traces=traces,
|
||||||
@ -99,6 +107,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(
|
def _find_traces(
|
||||||
trace_db_session: orm.Session,
|
trace_db_session: orm.Session,
|
||||||
block_number: int,
|
block_number: int,
|
||||||
|
26
mev_inspect/crud/blocks.py
Normal file
26
mev_inspect/crud/blocks.py
Normal file
@ -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()
|
@ -11,6 +11,10 @@ from mev_inspect.crud.arbitrages import (
|
|||||||
delete_arbitrages_for_block,
|
delete_arbitrages_for_block,
|
||||||
write_arbitrages,
|
write_arbitrages,
|
||||||
)
|
)
|
||||||
|
from mev_inspect.crud.blocks import (
|
||||||
|
delete_block,
|
||||||
|
write_block,
|
||||||
|
)
|
||||||
from mev_inspect.crud.traces import (
|
from mev_inspect.crud.traces import (
|
||||||
delete_classified_traces_for_block,
|
delete_classified_traces_for_block,
|
||||||
write_classified_traces,
|
write_classified_traces,
|
||||||
@ -53,6 +57,9 @@ async def inspect_block(
|
|||||||
|
|
||||||
logger.info(f"Block: {block_number} -- Total traces: {len(block.traces)}")
|
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(
|
total_transactions = len(
|
||||||
set(t.transaction_hash for t in block.traces if t.transaction_hash is not None)
|
set(t.transaction_hash for t in block.traces if t.transaction_hash is not None)
|
||||||
)
|
)
|
||||||
|
@ -38,6 +38,7 @@ class CallAction(Web3Model):
|
|||||||
|
|
||||||
class Block(Web3Model):
|
class Block(Web3Model):
|
||||||
block_number: int
|
block_number: int
|
||||||
|
block_timestamp: int
|
||||||
miner: str
|
miner: str
|
||||||
base_fee_per_gas: int
|
base_fee_per_gas: int
|
||||||
traces: List[Trace]
|
traces: List[Trace]
|
||||||
|
@ -14,7 +14,7 @@ def load_test_block(block_number: int) -> Block:
|
|||||||
|
|
||||||
with open(block_path, "r") as block_file:
|
with open(block_path, "r") as block_file:
|
||||||
block_json = json.load(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]:
|
def load_comp_markets() -> Dict[str, str]:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user