From f4bba7c885a489af83852acae25fdbaa36af2311 Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Mon, 23 Aug 2021 13:19:36 -0400 Subject: [PATCH] Run grouped by transaction --- mev_inspect/miner_payments.py | 38 ++++++++++++++++++----------------- mev_inspect/traces.py | 8 ++++++++ 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/mev_inspect/miner_payments.py b/mev_inspect/miner_payments.py index c6141c4..ee39d0b 100644 --- a/mev_inspect/miner_payments.py +++ b/mev_inspect/miner_payments.py @@ -1,32 +1,34 @@ -from typing import Dict, List +from typing import List from mev_inspect.schemas.classified_traces import ClassifiedTrace from mev_inspect.schemas.miner_payments import MinerPayment +from mev_inspect.traces import get_traces_by_transaction_hash from mev_inspect.transfers import ( - get_eth_transfers, filter_transfers, + get_eth_transfers, ) def get_miner_payments( miner_address: str, traces: List[ClassifiedTrace] ) -> List[MinerPayment]: - eth_transfers = get_eth_transfers(traces) - miner_eth_transfers = filter_transfers( - eth_transfers, to_address=miner_address.lower() - ) + miner_payments = [] - eth_by_transaction: Dict[str, int] = {} - for transfer in miner_eth_transfers: - existing_amount = eth_by_transaction.get(transfer.transaction_hash, 0) - eth_by_transaction[transfer.transaction_hash] = ( - existing_amount + transfer.amount + for transaction_hash, transaciton_traces in get_traces_by_transaction_hash(traces): + eth_transfers = get_eth_transfers(list(transaciton_traces)) + miner_eth_transfers = filter_transfers( + eth_transfers, to_address=miner_address.lower() + ) + total_eth_transfer_payment = sum( + transfer.amount for transfer in miner_eth_transfers ) - return [ - MinerPayment( - transaction_hash=transaction_hash, - total_eth_transfer_payment=eth_amount, - ) - for transaction_hash, eth_amount in eth_by_transaction.items() - ] + if total_eth_transfer_payment > 0: + miner_payments.append( + MinerPayment( + transaction_hash=transaction_hash, + total_eth_transfer_payment=total_eth_transfer_payment, + ) + ) + + return miner_payments diff --git a/mev_inspect/traces.py b/mev_inspect/traces.py index 459dddc..546f903 100644 --- a/mev_inspect/traces.py +++ b/mev_inspect/traces.py @@ -1,3 +1,4 @@ +from itertools import groupby from typing import List from mev_inspect.schemas.classified_traces import ClassifiedTrace @@ -31,3 +32,10 @@ def get_child_traces( child_traces.append(trace) return child_traces + + +def get_traces_by_transaction_hash( + traces: List[ClassifiedTrace], +) -> groupby[str, ClassifiedTrace]: + get_transaction_hash = lambda trace: trace.transaction_hash + return groupby(sorted(traces, key=get_transaction_hash), key=get_transaction_hash)