refactoring jit_liquidity to be more readable and improving error handling for mint and burn amounts
This commit is contained in:
parent
8ea2dd6d15
commit
225a1b5e01
@ -11,7 +11,7 @@ from mev_inspect.schemas.traces import (
|
|||||||
Protocol,
|
Protocol,
|
||||||
)
|
)
|
||||||
from mev_inspect.schemas.transfers import Transfer
|
from mev_inspect.schemas.transfers import Transfer
|
||||||
from mev_inspect.traces import is_child_trace_address
|
from mev_inspect.traces import get_traces_by_transaction_hash, is_child_trace_address
|
||||||
from mev_inspect.transfers import get_net_transfers
|
from mev_inspect.transfers import get_net_transfers
|
||||||
|
|
||||||
LIQUIDITY_MINT_ROUTERS = [
|
LIQUIDITY_MINT_ROUTERS = [
|
||||||
@ -131,93 +131,37 @@ def _get_transfer_info(
|
|||||||
burn_trace: ClassifiedTrace,
|
burn_trace: ClassifiedTrace,
|
||||||
) -> JITTransferInfo:
|
) -> JITTransferInfo:
|
||||||
|
|
||||||
error_found = False
|
grouped_traces = get_traces_by_transaction_hash(classified_traces)
|
||||||
mint_slice_start, mint_slice_end, burn_slice_start, burn_slice_end = (
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
)
|
|
||||||
|
|
||||||
for index, trace in enumerate(classified_traces):
|
|
||||||
if (
|
|
||||||
mint_slice_start is None
|
|
||||||
and trace.transaction_hash == mint_trace.transaction_hash
|
|
||||||
):
|
|
||||||
mint_slice_start = index
|
|
||||||
if (
|
|
||||||
mint_slice_end is None
|
|
||||||
and trace.transaction_position > mint_trace.transaction_position
|
|
||||||
):
|
|
||||||
mint_slice_end = index
|
|
||||||
if (
|
|
||||||
burn_slice_start is None
|
|
||||||
and trace.transaction_hash == burn_trace.transaction_hash
|
|
||||||
):
|
|
||||||
burn_slice_start = index
|
|
||||||
if (
|
|
||||||
burn_slice_end is None
|
|
||||||
and trace.transaction_position > burn_trace.transaction_position
|
|
||||||
):
|
|
||||||
burn_slice_end = index
|
|
||||||
break
|
|
||||||
|
|
||||||
mint_net_transfers_full = get_net_transfers(
|
|
||||||
classified_traces[mint_slice_start:mint_slice_end]
|
|
||||||
)
|
|
||||||
burn_net_transfers_full = get_net_transfers(
|
|
||||||
classified_traces[burn_slice_start:burn_slice_end]
|
|
||||||
)
|
|
||||||
|
|
||||||
mint_net_transfers, burn_net_transfers = [], []
|
mint_net_transfers, burn_net_transfers = [], []
|
||||||
pool_address = mint_trace.to_address
|
pool_address = mint_trace.to_address
|
||||||
|
|
||||||
for transfer in mint_net_transfers_full:
|
for transfer in get_net_transfers(grouped_traces[mint_trace.transaction_hash]):
|
||||||
if transfer.to_address == pool_address:
|
if transfer.to_address == pool_address:
|
||||||
mint_net_transfers.append(transfer)
|
mint_net_transfers.append(transfer)
|
||||||
|
|
||||||
for transfer in burn_net_transfers_full:
|
for transfer in get_net_transfers(grouped_traces[burn_trace.transaction_hash]):
|
||||||
if transfer.from_address == pool_address:
|
if transfer.from_address == pool_address:
|
||||||
burn_net_transfers.append(transfer)
|
burn_net_transfers.append(transfer)
|
||||||
|
|
||||||
if len(mint_net_transfers) > 2 or len(burn_net_transfers) > 2:
|
mint_len, burn_len = len(mint_net_transfers), len(burn_net_transfers)
|
||||||
error_found = True
|
|
||||||
|
|
||||||
if (
|
if mint_len == 2 and burn_len == 2:
|
||||||
len(mint_net_transfers) < 2 or len(burn_net_transfers) < 2
|
return _parse_standard_liquidity(mint_net_transfers, burn_net_transfers)
|
||||||
): # Uniswap V3 Limit Case
|
|
||||||
if len(mint_net_transfers) == 0 or len(burn_net_transfers) == 0:
|
|
||||||
raise Exception(
|
|
||||||
"JIT Liquidity found where no tokens are transferred to pool address"
|
|
||||||
)
|
|
||||||
|
|
||||||
return _parse_liquidity_limit_order(
|
elif (mint_len == 2 and burn_len == 1) or (mint_len == 1 and burn_len == 2):
|
||||||
mint_net_transfers, burn_net_transfers, error_found
|
return _parse_liquidity_limit_order(mint_net_transfers, burn_net_transfers)
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
token0_address, token1_address = _get_token_order(
|
return JITTransferInfo(
|
||||||
mint_net_transfers[0].token_address, mint_net_transfers[1].token_address
|
token0_address=ZERO_ADDRESS,
|
||||||
|
token1_address=ZERO_ADDRESS,
|
||||||
|
mint_token0=0,
|
||||||
|
mint_token1=0,
|
||||||
|
burn_token0=0,
|
||||||
|
burn_token1=0,
|
||||||
|
error=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
mint_token0, mint_token1 = _parse_token_amounts(
|
|
||||||
token0_address, mint_net_transfers
|
|
||||||
)
|
|
||||||
|
|
||||||
burn_token0, burn_token1 = _parse_token_amounts(
|
|
||||||
token0_address, burn_net_transfers
|
|
||||||
)
|
|
||||||
|
|
||||||
return JITTransferInfo(
|
|
||||||
token0_address=token0_address,
|
|
||||||
token1_address=token1_address,
|
|
||||||
mint_token0=mint_token0,
|
|
||||||
mint_token1=mint_token1,
|
|
||||||
burn_token0=burn_token0,
|
|
||||||
burn_token1=burn_token1,
|
|
||||||
error=error_found,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def _get_bot_address(
|
def _get_bot_address(
|
||||||
mint_trace: ClassifiedTrace,
|
mint_trace: ClassifiedTrace,
|
||||||
@ -246,10 +190,31 @@ def _get_bot_address(
|
|||||||
return ZERO_ADDRESS
|
return ZERO_ADDRESS
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_standard_liquidity(
|
||||||
|
mint_net_transfers: List[Transfer],
|
||||||
|
burn_net_transfers: List[Transfer],
|
||||||
|
) -> JITTransferInfo:
|
||||||
|
token0_address, token1_address = _get_token_order(
|
||||||
|
mint_net_transfers[0].token_address, mint_net_transfers[1].token_address
|
||||||
|
)
|
||||||
|
|
||||||
|
mint_token0, mint_token1 = _parse_token_amounts(token0_address, mint_net_transfers)
|
||||||
|
|
||||||
|
burn_token0, burn_token1 = _parse_token_amounts(token0_address, burn_net_transfers)
|
||||||
|
return JITTransferInfo(
|
||||||
|
token0_address=token0_address,
|
||||||
|
token1_address=token1_address,
|
||||||
|
mint_token0=mint_token0,
|
||||||
|
mint_token1=mint_token1,
|
||||||
|
burn_token0=burn_token0,
|
||||||
|
burn_token1=burn_token1,
|
||||||
|
error=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _parse_liquidity_limit_order(
|
def _parse_liquidity_limit_order(
|
||||||
mint_net_transfers: List[Transfer],
|
mint_net_transfers: List[Transfer],
|
||||||
burn_net_transfers: List[Transfer],
|
burn_net_transfers: List[Transfer],
|
||||||
error_found: bool,
|
|
||||||
) -> JITTransferInfo:
|
) -> JITTransferInfo:
|
||||||
try:
|
try:
|
||||||
token0_address, token1_address = _get_token_order(
|
token0_address, token1_address = _get_token_order(
|
||||||
@ -291,7 +256,7 @@ def _parse_liquidity_limit_order(
|
|||||||
mint_token1=mint_token1,
|
mint_token1=mint_token1,
|
||||||
burn_token0=burn_token0,
|
burn_token0=burn_token0,
|
||||||
burn_token1=burn_token1,
|
burn_token1=burn_token1,
|
||||||
error=error_found,
|
error=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user