Break into two functions
This commit is contained in:
parent
e05da92cd2
commit
d4e8046947
@ -1,4 +1,4 @@
|
|||||||
from typing import List
|
from typing import List, Optional
|
||||||
|
|
||||||
from mev_inspect.schemas.sandwiches import Sandwich
|
from mev_inspect.schemas.sandwiches import Sandwich
|
||||||
from mev_inspect.schemas.swaps import Swap
|
from mev_inspect.schemas.swaps import Swap
|
||||||
@ -14,38 +14,46 @@ def get_sandwiches(swaps: List[Swap]) -> List[Sandwich]:
|
|||||||
|
|
||||||
sandwiches: List[Sandwich] = []
|
sandwiches: List[Sandwich] = []
|
||||||
|
|
||||||
for index, front_swap in enumerate(ordered_swaps):
|
for index, swap in enumerate(ordered_swaps):
|
||||||
sandwicher_address = front_swap.from_address
|
rest_swaps = ordered_swaps[index + 1 :]
|
||||||
rest_swaps = ordered_swaps[index:]
|
sandwich = _get_sandwich_starting_with_swap(swap, rest_swaps)
|
||||||
|
|
||||||
sandwiched_swaps = []
|
if sandwich is not None:
|
||||||
|
sandwiches.append(sandwich)
|
||||||
for other_swap in rest_swaps:
|
|
||||||
if other_swap.transaction_hash == front_swap.transaction_hash:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if other_swap.contract_address == front_swap.contract_address:
|
|
||||||
if (
|
|
||||||
other_swap.token_in_address == front_swap.token_in_address
|
|
||||||
and other_swap.token_out_address == front_swap.token_out_address
|
|
||||||
and other_swap.from_address != sandwicher_address
|
|
||||||
):
|
|
||||||
sandwiched_swaps.append(other_swap)
|
|
||||||
elif (
|
|
||||||
other_swap.token_out_address == front_swap.token_in_address
|
|
||||||
and other_swap.token_in_address == front_swap.token_out_address
|
|
||||||
and other_swap.from_address == sandwicher_address
|
|
||||||
):
|
|
||||||
sandwiches.append(
|
|
||||||
Sandwich(
|
|
||||||
block_number=front_swap.block_number,
|
|
||||||
sandwicher_address=sandwicher_address,
|
|
||||||
frontrun_transaction_hash=front_swap.transaction_hash,
|
|
||||||
backrun_transaction_hash=other_swap.transaction_hash,
|
|
||||||
sandwiched_swaps=sandwiched_swaps,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
break
|
|
||||||
|
|
||||||
return sandwiches
|
return sandwiches
|
||||||
|
|
||||||
|
|
||||||
|
def _get_sandwich_starting_with_swap(
|
||||||
|
front_swap: Swap,
|
||||||
|
rest_swaps: List[Swap],
|
||||||
|
) -> Optional[Sandwich]:
|
||||||
|
|
||||||
|
sandwicher_address = front_swap.from_address
|
||||||
|
sandwiched_swaps = []
|
||||||
|
|
||||||
|
for other_swap in rest_swaps:
|
||||||
|
if other_swap.transaction_hash == front_swap.transaction_hash:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if other_swap.contract_address == front_swap.contract_address:
|
||||||
|
if (
|
||||||
|
other_swap.token_in_address == front_swap.token_in_address
|
||||||
|
and other_swap.token_out_address == front_swap.token_out_address
|
||||||
|
and other_swap.from_address != sandwicher_address
|
||||||
|
):
|
||||||
|
sandwiched_swaps.append(other_swap)
|
||||||
|
elif (
|
||||||
|
other_swap.token_out_address == front_swap.token_in_address
|
||||||
|
and other_swap.token_in_address == front_swap.token_out_address
|
||||||
|
and other_swap.from_address == sandwicher_address
|
||||||
|
):
|
||||||
|
return Sandwich(
|
||||||
|
block_number=front_swap.block_number,
|
||||||
|
sandwicher_address=sandwicher_address,
|
||||||
|
frontrun_transaction_hash=front_swap.transaction_hash,
|
||||||
|
backrun_transaction_hash=other_swap.transaction_hash,
|
||||||
|
sandwiched_swaps=sandwiched_swaps,
|
||||||
|
)
|
||||||
|
|
||||||
|
return None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user