diff --git a/src/handle_provide_parameter.c b/src/handle_provide_parameter.c index bb09bb21..e1beab47 100644 --- a/src/handle_provide_parameter.c +++ b/src/handle_provide_parameter.c @@ -249,19 +249,25 @@ static void handle_curve_router_exchange(ethPluginProvideParameter_t *msg, conte context->next_param = TOKEN_RECEIVED; break; case TOKEN_RECEIVED: - PRINTF("Counter: %d\n", context->counter); context->counter += 1; - if (memcmp(&msg->parameter[PARAMETER_LENGTH - ADDRESS_LENGTH], + if (context->counter % 2 == 0) { + handle_token_received(msg, context); + if (context->counter == 8) { + context->skip += 20 - context->counter; + context->counter = 0; + context->next_param = AMOUNT_SENT; + } else { + context->next_param = TOKEN_RECEIVED; + } + } else if (memcmp(&msg->parameter[PARAMETER_LENGTH - ADDRESS_LENGTH], NULL_ETH_ADDRESS, ADDRESS_LENGTH) == 0) { context->skip += 20 - context->counter; context->counter = 0; context->next_param = AMOUNT_SENT; - } else { - handle_token_received(msg, context); - context->next_param = TOKEN_RECEIVED; } break; + case AMOUNT_SENT: handle_amount_sent(msg, context); context->next_param = MIN_AMOUNT_RECEIVED; diff --git a/tests/oeth/test_oeth_curve_swap.py b/tests/oeth/test_oeth_curve_swap.py index a42de5a9..e3443817 100644 --- a/tests/oeth/test_oeth_curve_swap.py +++ b/tests/oeth/test_oeth_curve_swap.py @@ -129,4 +129,29 @@ def test_oeth_curve_swap_multiple_oeth_to_eth(backend, firmware, navigator, test Web3.to_wei(0.941, "ether"), ]) + run_test(contract_curve_router, data, backend, firmware, navigator, test_name) + +def test_oeth_curve_swap_multiple_eth_to_oeth_diff_route(backend, firmware, navigator, test_name): + data = contract_curve_router.encodeABI("exchange_multiple", [ + [ + bytes.fromhex("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"), + bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"), + bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"), + bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"), + bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"), + bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"), + bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"), + bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"), + bytes.fromhex("856c4Efb76C1D1AE02e20CEB03A2A6a08b0b8dC3"), + ], + [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0], + [0, 0, 0] + ], + Web3.to_wei(1, "ether"), + Web3.to_wei(0.941, "ether"), + ]) + run_test(contract_curve_router, data, backend, firmware, navigator, test_name) \ No newline at end of file diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00000.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00000.png new file mode 100644 index 00000000..8d84cc70 Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00000.png differ diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00001.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00001.png new file mode 100644 index 00000000..0791458f Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00001.png differ diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00002.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00002.png new file mode 100644 index 00000000..096a2e4c Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00002.png differ diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00003.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00003.png new file mode 100644 index 00000000..0b9c638e Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00003.png differ diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00004.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00004.png new file mode 100644 index 00000000..1492e09f Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00004.png differ diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00005.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00005.png new file mode 100644 index 00000000..1c9156c3 Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00005.png differ diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00006.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00006.png new file mode 100644 index 00000000..ce795f34 Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00006.png differ diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00000.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00000.png new file mode 100644 index 00000000..487ea10f Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00000.png differ diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00001.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00001.png new file mode 100644 index 00000000..39492eaf Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00001.png differ diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00002.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00002.png new file mode 100644 index 00000000..17c1e2c1 Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00002.png differ diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00003.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00003.png new file mode 100644 index 00000000..a561172c Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00003.png differ diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00004.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00004.png new file mode 100644 index 00000000..9cdfdf9d Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00004.png differ diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00005.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00005.png new file mode 100644 index 00000000..570ce28d Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00005.png differ diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00006.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00006.png new file mode 100644 index 00000000..65788722 Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00006.png differ diff --git a/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00000.png b/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00000.png new file mode 100644 index 00000000..725fb26c Binary files /dev/null and b/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00000.png differ diff --git a/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00001.png b/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00001.png new file mode 100644 index 00000000..148be150 Binary files /dev/null and b/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00001.png differ diff --git a/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00002.png b/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00002.png new file mode 100644 index 00000000..e5661473 Binary files /dev/null and b/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00002.png differ diff --git a/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00003.png b/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00003.png new file mode 100644 index 00000000..cd2f5275 Binary files /dev/null and b/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00003.png differ diff --git a/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00004.png b/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00004.png new file mode 100644 index 00000000..b1ff1b3a Binary files /dev/null and b/tests/snapshots/stax/test_oeth_curve_swap_multiple_eth_to_oeth_diff_route/00004.png differ