Merge pull request #215 from flashbots/flip-token-in-out-amounts

Switch token amounts for taker and maker on 0x
This commit is contained in:
Luke Van Seters 2022-01-05 20:30:40 -05:00 committed by GitHub
commit 8bb92aa87e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 35 deletions

View File

@ -28,11 +28,11 @@ class ZeroExSwapClassifier(SwapClassifier):
if len(child_transfers) < 2: if len(child_transfers) < 2:
return None return None
token_in_address, token_in_amount = _get_0x_token_in_data( token_out_address, token_out_amount = _get_0x_token_out_data(
trace, child_transfers trace, child_transfers
) )
token_out_address, token_out_amount = _get_0x_token_out_data(trace) token_in_address, token_in_amount = _get_0x_token_in_data(trace)
return Swap( return Swap(
abi_name=trace.abi_name, abi_name=trace.abi_name,
@ -222,10 +222,10 @@ ZEROX_GENERIC_SPECS = [
ZEROX_CLASSIFIER_SPECS = ZEROX_CONTRACT_SPECS + ZEROX_GENERIC_SPECS ZEROX_CLASSIFIER_SPECS = ZEROX_CONTRACT_SPECS + ZEROX_GENERIC_SPECS
def _get_taker_token_in_amount( def _get_taker_token_transfer_amount(
trace: DecodedCallTrace, trace: DecodedCallTrace,
taker_address: str, taker_address: str,
token_in_address: str, token_address: str,
child_transfers: List[Transfer], child_transfers: List[Transfer],
) -> int: ) -> int:
@ -239,7 +239,7 @@ def _get_taker_token_in_amount(
if taker_address == ANY_TAKER_ADDRESS: if taker_address == ANY_TAKER_ADDRESS:
for transfer in child_transfers: for transfer in child_transfers:
if transfer.token_address == token_in_address: if transfer.token_address == token_address:
return transfer.amount return transfer.amount
else: else:
for transfer in child_transfers: for transfer in child_transfers:
@ -249,12 +249,11 @@ def _get_taker_token_in_amount(
raise RuntimeError("Unable to find transfers matching 0x order.") raise RuntimeError("Unable to find transfers matching 0x order.")
def _get_0x_token_in_data( def _get_0x_token_out_data(
trace: DecodedCallTrace, child_transfers: List[Transfer] trace: DecodedCallTrace, child_transfers: List[Transfer]
) -> Tuple[str, int]: ) -> Tuple[str, int]:
order: List = trace.inputs["order"] order: List = trace.inputs["order"]
token_in_address = order[0] token_out_address = order[0]
if trace.function_signature in RFQ_SIGNATURES: if trace.function_signature in RFQ_SIGNATURES:
taker_address = order[5] taker_address = order[5]
@ -267,17 +266,16 @@ def _get_0x_token_in_data(
f"0x orderbook function {trace.function_signature} is not supported" f"0x orderbook function {trace.function_signature} is not supported"
) )
token_in_amount = _get_taker_token_in_amount( token_out_amount = _get_taker_token_transfer_amount(
trace, taker_address, token_in_address, child_transfers trace, taker_address, token_out_address, child_transfers
) )
return token_in_address, token_in_amount
def _get_0x_token_out_data(trace: DecodedCallTrace) -> Tuple[str, int]:
order: List = trace.inputs["order"]
token_out_address = order[1]
token_out_amount = trace.inputs["takerTokenFillAmount"]
return token_out_address, token_out_amount return token_out_address, token_out_amount
def _get_0x_token_in_data(trace: DecodedCallTrace) -> Tuple[str, int]:
order: List = trace.inputs["order"]
token_in_address = order[1]
token_in_amount = trace.inputs["takerTokenFillAmount"]
return token_in_address, token_in_amount

View File

@ -20,10 +20,10 @@ def test_fillLimitOrder_swap(trace_classifier: TraceClassifier):
contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff", contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
from_address="0x00000000000e1d0dabf7b7c7b68866fc940d0db8", from_address="0x00000000000e1d0dabf7b7c7b68866fc940d0db8",
to_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff", to_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
token_in_address="0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", token_out_address="0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
token_in_amount=35000000000000000000, token_out_amount=35000000000000000000,
token_out_address="0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", token_in_address="0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
token_out_amount=143949683150, token_in_amount=143949683150,
protocol=Protocol.zero_ex, protocol=Protocol.zero_ex,
error=None, error=None,
) )
@ -50,10 +50,10 @@ def test__fillLimitOrder_swap(trace_classifier: TraceClassifier):
contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff", contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
from_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff", from_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
to_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff", to_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
token_in_address="0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", token_out_address="0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
token_in_amount=30000000, token_out_amount=30000000,
token_out_address="0x9ff79c75ae2bcbe0ec63c0375a3ec90ff75bbe0f", token_in_address="0x9ff79c75ae2bcbe0ec63c0375a3ec90ff75bbe0f",
token_out_amount=100000001, token_in_amount=100000001,
protocol=Protocol.zero_ex, protocol=Protocol.zero_ex,
error=None, error=None,
) )
@ -80,10 +80,10 @@ def test_RfqLimitOrder_swap(trace_classifier: TraceClassifier):
contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff", contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
from_address="0xdef171fe48cf0115b1d80b88dc8eab59176fee57", from_address="0xdef171fe48cf0115b1d80b88dc8eab59176fee57",
to_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff", to_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
token_in_address="0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", token_out_address="0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
token_in_amount=288948250430, token_out_amount=288948250430,
token_out_address="0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", token_in_address="0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
token_out_amount=70500000000000000000, token_in_amount=70500000000000000000,
protocol=Protocol.zero_ex, protocol=Protocol.zero_ex,
error=None, error=None,
) )
@ -110,10 +110,10 @@ def test__RfqLimitOrder_swap(trace_classifier: TraceClassifier):
contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff", contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
from_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff", from_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
to_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff", to_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
token_in_address="0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", token_out_address="0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
token_in_amount=979486121594935552, token_out_amount=979486121594935552,
token_out_address="0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce", token_in_address="0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce",
token_out_amount=92404351093861841165644172, token_in_amount=92404351093861841165644172,
protocol=Protocol.zero_ex, protocol=Protocol.zero_ex,
error=None, error=None,
) )