Break out shortest logic into a function
This commit is contained in:
parent
46f7786c4f
commit
46b768c147
@ -1,5 +1,5 @@
|
|||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
from typing import List, Tuple
|
from typing import List, Optional, Tuple
|
||||||
|
|
||||||
from mev_inspect.schemas.arbitrages import Arbitrage
|
from mev_inspect.schemas.arbitrages import Arbitrage
|
||||||
from mev_inspect.schemas.swaps import Swap
|
from mev_inspect.schemas.swaps import Swap
|
||||||
@ -45,37 +45,14 @@ def _get_arbitrages_from_swaps(swaps: List[Swap]) -> List[Arbitrage]:
|
|||||||
if len(start_ends) == 0:
|
if len(start_ends) == 0:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
used_swaps = []
|
used_swaps: List[Swap] = []
|
||||||
|
|
||||||
for (start, ends) in start_ends:
|
for (start, ends) in start_ends:
|
||||||
if start in used_swaps:
|
route = _get_shortest_route_from_start(start, ends, swaps, used_swaps)
|
||||||
continue
|
|
||||||
|
|
||||||
shortest_route = None
|
if route is not None:
|
||||||
|
start_amount = route[0].token_in_amount
|
||||||
for end in ends:
|
end_amount = route[-1].token_out_amount
|
||||||
if end in used_swaps:
|
|
||||||
continue
|
|
||||||
|
|
||||||
potential_intermediate_swaps = [
|
|
||||||
swap
|
|
||||||
for swap in swaps
|
|
||||||
if (swap is not start and swap is not end and swap not in used_swaps)
|
|
||||||
]
|
|
||||||
|
|
||||||
routes = _get_all_routes(
|
|
||||||
start,
|
|
||||||
end,
|
|
||||||
potential_intermediate_swaps,
|
|
||||||
)
|
|
||||||
|
|
||||||
for route in routes:
|
|
||||||
if shortest_route is None or len(route) < len(shortest_route):
|
|
||||||
shortest_route = route
|
|
||||||
|
|
||||||
if shortest_route is not None:
|
|
||||||
start_amount = shortest_route[0].token_in_amount
|
|
||||||
end_amount = shortest_route[-1].token_out_amount
|
|
||||||
profit_amount = end_amount - start_amount
|
profit_amount = end_amount - start_amount
|
||||||
error = None
|
error = None
|
||||||
for swap in route:
|
for swap in route:
|
||||||
@ -83,11 +60,11 @@ def _get_arbitrages_from_swaps(swaps: List[Swap]) -> List[Arbitrage]:
|
|||||||
error = swap.error
|
error = swap.error
|
||||||
|
|
||||||
arb = Arbitrage(
|
arb = Arbitrage(
|
||||||
swaps=shortest_route,
|
swaps=route,
|
||||||
block_number=shortest_route[0].block_number,
|
block_number=route[0].block_number,
|
||||||
transaction_hash=shortest_route[0].transaction_hash,
|
transaction_hash=route[0].transaction_hash,
|
||||||
account_address=shortest_route[0].from_address,
|
account_address=route[0].from_address,
|
||||||
profit_token_address=shortest_route[0].token_in_address,
|
profit_token_address=route[0].token_in_address,
|
||||||
start_amount=start_amount,
|
start_amount=start_amount,
|
||||||
end_amount=end_amount,
|
end_amount=end_amount,
|
||||||
profit_amount=profit_amount,
|
profit_amount=profit_amount,
|
||||||
@ -95,7 +72,7 @@ def _get_arbitrages_from_swaps(swaps: List[Swap]) -> List[Arbitrage]:
|
|||||||
)
|
)
|
||||||
|
|
||||||
all_arbitrages.append(arb)
|
all_arbitrages.append(arb)
|
||||||
used_swaps.extend(shortest_route)
|
used_swaps.extend(route)
|
||||||
|
|
||||||
if len(all_arbitrages) == 1:
|
if len(all_arbitrages) == 1:
|
||||||
return all_arbitrages
|
return all_arbitrages
|
||||||
@ -107,6 +84,44 @@ def _get_arbitrages_from_swaps(swaps: List[Swap]) -> List[Arbitrage]:
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def _get_shortest_route_from_start(
|
||||||
|
start_swap: Swap,
|
||||||
|
end_swaps: List[Swap],
|
||||||
|
all_swaps: List[Swap],
|
||||||
|
used_swaps: List[Swap],
|
||||||
|
) -> Optional[List[Swap]]:
|
||||||
|
if start_swap in used_swaps:
|
||||||
|
return None
|
||||||
|
|
||||||
|
shortest_route = None
|
||||||
|
|
||||||
|
for end_swap in end_swaps:
|
||||||
|
if end_swap in used_swaps:
|
||||||
|
continue
|
||||||
|
|
||||||
|
potential_intermediate_swaps = [
|
||||||
|
swap
|
||||||
|
for swap in all_swaps
|
||||||
|
if (
|
||||||
|
swap is not start_swap
|
||||||
|
and swap is not end_swap
|
||||||
|
and swap not in used_swaps
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
routes = _get_all_routes(
|
||||||
|
start_swap,
|
||||||
|
end_swap,
|
||||||
|
potential_intermediate_swaps,
|
||||||
|
)
|
||||||
|
|
||||||
|
for route in routes:
|
||||||
|
if shortest_route is None or len(route) < len(shortest_route):
|
||||||
|
shortest_route = route
|
||||||
|
|
||||||
|
return shortest_route
|
||||||
|
|
||||||
|
|
||||||
def _get_all_start_end_swaps(swaps: List[Swap]) -> List[Tuple[Swap, List[Swap]]]:
|
def _get_all_start_end_swaps(swaps: List[Swap]) -> List[Tuple[Swap, List[Swap]]]:
|
||||||
"""
|
"""
|
||||||
Gets the set of all possible opening and closing swap pairs in an arbitrage via
|
Gets the set of all possible opening and closing swap pairs in an arbitrage via
|
||||||
|
Loading…
x
Reference in New Issue
Block a user