diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 00000000..64941b9e
Binary files /dev/null and b/.DS_Store differ
diff --git a/Makefile b/Makefile
index 1926d4dd..5401a9e6 100644
--- a/Makefile
+++ b/Makefile
@@ -15,8 +15,8 @@
# limitations under the License.
# ****************************************************************************
-# EDIT THIS: Application name
-APPNAME = "PluginBoilerplate"
+# Application name
+APPNAME = "Origin"
# Application version
APPVERSION_M = 1
diff --git a/PLUGIN_SPECIFICATION.md b/PLUGIN_SPECIFICATION.md
index ae5c8711..94ceccdf 100644
--- a/PLUGIN_SPECIFICATION.md
+++ b/PLUGIN_SPECIFICATION.md
@@ -1,24 +1,47 @@
# Technical Specification
-> **Warning**
-This documentation is a template and shall be updated.
-
## About
-
-This documentation describes the smart contracts and functions supported by the boilerplate plugin.
+This documentation describes the smart contracts and functions supported by the Origin plugin for Ledger Live.
## Smart Contracts
Smart contracts covered by the plugin shall be described here:
-| Network | Version | Smart Contract | Address |
-| ---- | --- | ---- | --- |
-| NetworkName | VX | ContractName | `0x0000000000000000000000000000000000000000` |
-
-## Functions
-
-For the smart contracts implemented, the functions covered by the plugin shall be described here:
-
-|Contract | Function | Selector | Displayed Parameters |
-| --- | --- | --- | --- |
-|ContractName | FunctionName | `0x00000000`|
|
\ No newline at end of file
+| Contract | Address |
+| -------------------- | -------------------------------------------- |
+| OETH Zapper | `0x9858e47bcbbe6fbac040519b02d7cd4b2c470c66` |
+| OETH Vault | `0x39254033945aa2e4809cc2977e7087bee48bd7ab` |
+| ETH/OETH Curve Pool | `0x94b17476a93b3262d87b9a326965d1e91f9c13e7` |
+| Curve Router | `0x99a58482bd75cbab83b27ec03ca68ff489b5788f` |
+| OUSD Vault | `0xe75d77b1865ae93c7eaa3040b038d7aa7bc02f70` |
+| OUSD Flipper | `0xcecad69d7d4ed6d52efcfa028af8732f27e08f70` |
+| UniswapV3 Router | `0xe592427a0aece92de3edee1f18e0157c05861564` |
+| OUSD/3CRV Curve Pool | `0x87650d7bbfc3a9f10587d7778206671719d9910d` |
+| ETH/OETH Curve Pool | `0x94b17476a93b3262d87b9a326965d1e91f9c13e7` |
+| Curve Router | `0x99a58482bd75cbab83b27ec03ca68ff489b5788f` |
+| OUSD Vault | `0xe75d77b1865ae93c7eaa3040b038d7aa7bc02f70` |
+| OUSD Flipper | `0xcecad69d7d4ed6d52efcfa028af8732f27e08f70` |
+| WOETH | `0xdcee70654261af21c44c093c300ed3bb97b78192` |
+| WOUSD | `0xd2af830e8cbdfed6cc11bab697bb25496ed6fa62` |
+
+## Functions implemented:
+
+| Function | Selector | Displayed Parameters |
+| ------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| deposit | 0xd0e30db0 | |
+| depositSFRXETH | 0xd443e97d | uint256 amount |
uint256 minOETH |
|
+| mint | 0x156e29f6 | address \_asset |
,uint256 \_amount |
uint256 \_minimumOusdAmount |
|
+| redeem | 0x7cbc2373 | uint256 \_amount |
uint256 \_minimumUnitAmount |
|
+| exchange | 0x3df02124 | int128 i |
int128 j |
uint256 \_dx |
uint256 \_min_dy |
|
+| exchange_underlying | 0xa6417ed6 | int128 i |
int128 j |
uint256 \_dx |
uint256 \_min_dy |
|
+| exchange_multiple | 0x353ca424 | address[9] \_route |
uint256 \_amount |
uint256 \_expected |
|
+| exactInput | 0xc04b8d59 | bytes path |
address recipient |
uint256 amountIn |
uint256 amountOutMinimum |
|
+| exactInputSingle | 0x414bf389 | address tokenIn |
address tokenOut |
address recipient |
uint256 amountIn |
uint256 amountOutMinimum |
|
+| buyOusdWithUsdt | 0x35aa0b96 | |
+| sellOusdForUsdt | 0xcb939053 | |
+| buyOusdWithDai | 0x5981c746 | |
+| sellOusdForDai | 0x8a095a0f | |
+| buyOusdWithUsdc | 0xbfc11ffd | |
+| sellOusdForUsdc | 0xc6b68169 | |
+| redeem | 0xba087652 | uint256 assets |
address receiver |
|
+| redeem | 0xba087652 | uint256 shares |
address receiver |
|
diff --git a/README.md b/README.md
index 25a4e582..5e6d5ec8 100644
--- a/README.md
+++ b/README.md
@@ -2,23 +2,16 @@
[![Compilation & tests](https://github.com/LedgerHQ/app-plugin-boilerplate/actions/workflows/build_and_functional_tests.yml/badge.svg?branch=develop)](https://github.com/LedgerHQ/app-plugin-boilerplate/actions/workflows/build_and_functional_tests.yml)
-# app-plugin-boilerplate
+# app-plugin-origin
-This repo is meant to be a forkable example of a plugin.
-
-Plugins are lightweight applications that go hand-in-hand with the Ethereum
-Application on a Nano (S, S plus, X) and Stax devices.
-
-They allow users to safely interact with smart contracts by parsing the
-transaction data and displaying its content in a human-readable way. This is
-done on a "per contract" basis, meaning a plugin is required for every DApp.
-
-The code has been commented, and special "EDIT THIS" comments indicate where
-developers are expected to adapt the code to their own needs.
-
-It is STRONGLY recommended to follow the
-[plugin guide](https://developers.ledger.com/docs/dapp/embedded-plugin/code-overview/)
-in order to better understand the flow and the context for plugins.
+Ledger's recommended [plugin guide](https://developers.ledger.com/docs/dapp/embedded-plugin/code-overview/) is out-dated and doesn't work since they introduced a lot of new changes. Here's a simple way to get started with this repo:
+1. Clone this repo (along with git submodules)
+2. Install [Xquartz](https://www.xquartz.org/) and make sure you have enabled "Allow connections from network clients" enabled under "Security" settings.
+3. Install and start Docker (Note: If Docker is already running, quit and start it after starting Xquartz, otherwise docker cannot connect to Xquartz).
+4. Install the [Ledger Dev Tools VS Code plugin](https://marketplace.visualstudio.com/items?itemName=LedgerHQ.ledger-dev-tools#:~:text=ledger%2Dvscode%2Dextension,Plus%2C%20Nano%20X%2C%20Stax) and makes sure it's enabled
+5. Once you have installed the plugin and open the repo, the plugin should by default try to create and start the containers. If it doesn't, you can simply click "Update Container" under "Ledger Dev Tools" in the Activity Side Bar on VS Code.
+6. On the "Ledger Dev Tools" side bar, Select a target and then click on Build.
+7. Once build is complete, click on "Run tests" to run the tests
## Ethereum SDK
@@ -33,8 +26,12 @@ the code is compiled and tested on the latest version of the SDK.
## Documentation
-The documentation about the plugin shall be added in [PLUGIN_SPECIFICATON.md](https://github.com/LedgerHQ/app-plugin-boilerplate/blob/develop/PLUGIN_SPECIFICATION.md). It shall includes at least the smart contracts and functions supported by the plugin.
+The documentation about the plugin is in [PLUGIN_SPECIFICATON.md](https://github.com/LedgerHQ/app-plugin-boilerplate/blob/develop/PLUGIN_SPECIFICATION.md). It includes the smart contracts and functions supported by the plugin.
## Formatting
The C source code is expected to be formatted with `clang-format` 11.0.0 or higher.
+
+```
+clang-format -style=Google -i src/*
+```
\ No newline at end of file
diff --git a/glyphs/stax_origin_64px.gif b/glyphs/stax_origin_64px.gif
new file mode 100644
index 00000000..2440f0c4
Binary files /dev/null and b/glyphs/stax_origin_64px.gif differ
diff --git a/glyphs/stax_origin_64px_bitmap.jpg b/glyphs/stax_origin_64px_bitmap.jpg
new file mode 100644
index 00000000..2440f0c4
Binary files /dev/null and b/glyphs/stax_origin_64px_bitmap.jpg differ
diff --git a/glyphs/stax_pluginboilerplate_64px.gif b/glyphs/stax_pluginboilerplate_64px.gif
deleted file mode 100644
index 8bb3c2d3..00000000
Binary files a/glyphs/stax_pluginboilerplate_64px.gif and /dev/null differ
diff --git a/icons/nanos_app_origin.gif b/icons/nanos_app_origin.gif
new file mode 100644
index 00000000..f33e4829
Binary files /dev/null and b/icons/nanos_app_origin.gif differ
diff --git a/icons/nanos_app_origin.jpg b/icons/nanos_app_origin.jpg
new file mode 100644
index 00000000..ec60121e
Binary files /dev/null and b/icons/nanos_app_origin.jpg differ
diff --git a/icons/nanos_app_pluginboilerplate.gif b/icons/nanos_app_pluginboilerplate.gif
deleted file mode 100644
index beb00efd..00000000
Binary files a/icons/nanos_app_pluginboilerplate.gif and /dev/null differ
diff --git a/icons/nanox_app_origin.gif b/icons/nanox_app_origin.gif
new file mode 100644
index 00000000..b601c0ba
Binary files /dev/null and b/icons/nanox_app_origin.gif differ
diff --git a/icons/nanox_app_origin.jpg b/icons/nanox_app_origin.jpg
new file mode 100644
index 00000000..3e6de6f0
Binary files /dev/null and b/icons/nanox_app_origin.jpg differ
diff --git a/icons/nanox_app_pluginboilerplate.gif b/icons/nanox_app_pluginboilerplate.gif
deleted file mode 100644
index 0f194529..00000000
Binary files a/icons/nanox_app_pluginboilerplate.gif and /dev/null differ
diff --git a/icons/stax_app_origin.gif b/icons/stax_app_origin.gif
new file mode 100644
index 00000000..51c98e24
Binary files /dev/null and b/icons/stax_app_origin.gif differ
diff --git a/icons/stax_app_origin.jpg b/icons/stax_app_origin.jpg
new file mode 100644
index 00000000..145bed8a
Binary files /dev/null and b/icons/stax_app_origin.jpg differ
diff --git a/icons/stax_app_pluginboilerplate.gif b/icons/stax_app_pluginboilerplate.gif
deleted file mode 100644
index be577494..00000000
Binary files a/icons/stax_app_pluginboilerplate.gif and /dev/null differ
diff --git a/src/handle_finalize.c b/src/handle_finalize.c
index c8231770..61cc85c7 100644
--- a/src/handle_finalize.c
+++ b/src/handle_finalize.c
@@ -1,21 +1,50 @@
#include "plugin.h"
void handle_finalize(ethPluginFinalize_t *msg) {
- context_t *context = (context_t *) msg->pluginContext;
+ context_t *context = (context_t *)msg->pluginContext;
- msg->uiType = ETH_UI_TYPE_GENERIC;
+ msg->uiType = ETH_UI_TYPE_GENERIC;
- // EDIT THIS: Set the total number of screen you will need.
- msg->numScreens = 2;
- // EDIT THIS: Handle this case like you wish to (i.e. maybe no additional screen needed?).
- // If the beneficiary is NOT the sender, we will need an additional screen to display it.
- if (memcmp(msg->address, context->beneficiary, ADDRESS_LENGTH) != 0) {
- msg->numScreens += 1;
- }
+ // Number of screens needed
+ msg->numScreens = 2;
+
+ bool sender_is_beneficiary =
+ memcmp(msg->address, context->beneficiary, ADDRESS_LENGTH) == 0;
- // EDIT THIS: set `tokenLookup1` (and maybe `tokenLookup2`) to point to
- // token addresses you will info for (such as decimals, ticker...).
- msg->tokenLookup1 = context->token_received;
+ if (sender_is_beneficiary) {
+ // No need to show beneficary screen when signer is same as `beneficiary`
+ bool wrap_tx =
+ (context->selectorIndex == WRAP || context->selectorIndex == UNWRAP);
+ bool uniswap_tx =
+ (context->selectorIndex == UNISWAP_V3_ROUTER_EXACT_INPUT ||
+ context->selectorIndex == UNISWAP_ROUTER_EXACT_INPUT_SINGLE);
+
+ if (wrap_tx) {
+ msg->numScreens -= 1;
+ } else if (uniswap_tx) {
+ msg->numScreens += 1;
+ }
+ }
+ if (!ADDRESS_IS_NETWORK_TOKEN(context->contract_address_sent)) {
+ // Address is not network token (0xeee...) so we will need to look up the
+ // token in the CAL.
+ printf_hex_array("Setting address sent to: ", ADDRESS_LENGTH,
+ context->contract_address_sent);
+ msg->tokenLookup1 = context->contract_address_sent;
+ } else {
+ sent_network_token(context);
+ msg->tokenLookup1 = NULL;
+ }
+ if (!ADDRESS_IS_NETWORK_TOKEN(context->contract_address_received)) {
+ // Address is not network token (0xeee...) so we will need to look up the
+ // token in the CAL.
+ printf_hex_array("Setting address received to: ", ADDRESS_LENGTH,
+ context->contract_address_received);
+ msg->tokenLookup2 = context->contract_address_received;
+ } else {
+ received_network_token(context);
+ msg->tokenLookup2 = NULL;
+ }
- msg->result = ETH_PLUGIN_RESULT_OK;
+ msg->result = ETH_PLUGIN_RESULT_OK;
}
diff --git a/src/handle_init_contract.c b/src/handle_init_contract.c
index bdb15573..3f7761f0 100644
--- a/src/handle_init_contract.c
+++ b/src/handle_init_contract.c
@@ -1,59 +1,90 @@
-#include "plugin_utils.h"
#include "plugin.h"
+#include "plugin_utils.h"
// Called once to init.
void handle_init_contract(ethPluginInitContract_t *msg) {
- // Make sure we are running a compatible version.
- if (msg->interfaceVersion != ETH_PLUGIN_INTERFACE_VERSION_LATEST) {
- // If not the case, return the `UNAVAILABLE` status.
- msg->result = ETH_PLUGIN_RESULT_UNAVAILABLE;
- return;
- }
+ // Make sure we are running a compatible version.
+ if (msg->interfaceVersion != ETH_PLUGIN_INTERFACE_VERSION_LATEST) {
+ // If not the case, return the `UNAVAILABLE` status.
+ msg->result = ETH_PLUGIN_RESULT_UNAVAILABLE;
+ return;
+ }
- // Double check that the `context_t` struct is not bigger than the maximum size (defined by
- // `msg->pluginContextLength`).
- if (msg->pluginContextLength < sizeof(context_t)) {
- PRINTF("Plugin parameters structure is bigger than allowed size\n");
- msg->result = ETH_PLUGIN_RESULT_ERROR;
- return;
- }
+ // Double check that the `context_t` struct is not bigger than the maximum
+ // size (defined by `msg->pluginContextLength`).
+ if (msg->pluginContextLength < sizeof(context_t)) {
+ PRINTF("Plugin parameters structure is bigger than allowed size\n");
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ return;
+ }
- context_t *context = (context_t *) msg->pluginContext;
+ context_t *context = (context_t *)msg->pluginContext;
- // Initialize the context (to 0).
- memset(context, 0, sizeof(*context));
+ // Initialize the context (to 0).
+ memset(context, 0, sizeof(*context));
- size_t index;
- if (!find_selector(U4BE(msg->selector, 0), SELECTORS, SELECTOR_COUNT, &index)) {
- PRINTF("Error: selector not found!\n");
- msg->result = ETH_PLUGIN_RESULT_UNAVAILABLE;
- return;
- }
- context->selectorIndex = index;
- // check for overflow
- if ((size_t) context->selectorIndex != index) {
- PRINTF("Error: overflow detected on selector index!\n");
- msg->result = ETH_PLUGIN_RESULT_ERROR;
- return;
- }
+ size_t index;
+ if (!find_selector(U4BE(msg->selector, 0), SELECTORS, SELECTOR_COUNT,
+ &index)) {
+ PRINTF("Error: selector not found!\n");
+ msg->result = ETH_PLUGIN_RESULT_UNAVAILABLE;
+ return;
+ }
+ context->selectorIndex = index;
+ // check for overflow
+ if ((size_t)context->selectorIndex != index) {
+ PRINTF("Error: overflow detected on selector index!\n");
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ return;
+ }
- // Set `next_param` to be the first field we expect to parse.
- // EDIT THIS: Adapt the `cases`, and set the `next_param` to be the first parameter you expect
- // to parse.
- switch (context->selectorIndex) {
- case SWAP_EXACT_ETH_FOR_TOKENS:
- context->next_param = MIN_AMOUNT_RECEIVED;
- break;
- case BOILERPLATE_DUMMY_2:
- context->next_param = TOKEN_RECEIVED;
- break;
- // Keep this
- default:
- PRINTF("Missing selectorIndex: %d\n", context->selectorIndex);
- msg->result = ETH_PLUGIN_RESULT_ERROR;
- return;
- }
+ // Set `next_param` to be the first field we expect to parse.
+ switch (context->selectorIndex) {
+ case ZAPPER_DEPOSIT_ETH:
+ context->next_param = NONE;
+ break;
+ case CURVE_POOL_EXCHANGE:
+ case CURVE_POOL_EXCHANGE_UNDERLYING:
+ if (memcmp(CURVE_OETH_POOL_ADDRESS,
+ msg->pluginSharedRO->txContent->destination,
+ ADDRESS_LENGTH) == 0 ||
+ memcmp(CURVE_OUSD_POOL_ADDRESS,
+ msg->pluginSharedRO->txContent->destination,
+ ADDRESS_LENGTH) == 0) {
+ context->next_param = TOKEN_SENT;
+ break;
+ }
+ PRINTF("Missing selectorIndex: %d\n", context->selectorIndex);
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ return;
+ case UNISWAP_V3_ROUTER_EXACT_INPUT:
+ context->skip += 2;
+ context->next_param = BENEFICIARY;
+ case UNISWAP_ROUTER_EXACT_INPUT_SINGLE:
+ break;
+ case CURVE_ROUTER_EXCHANGE_MULTIPLE:
+ case VAULT_MINT:
+ context->next_param = TOKEN_SENT;
+ break;
+ case FLIPPER_BUY_OUSD_WITH_USDT:
+ case FLIPPER_SELL_OUSD_FOR_USDT:
+ case FLIPPER_BUY_OUSD_WITH_DAI:
+ case FLIPPER_SELL_OUSD_FOR_DAI:
+ case FLIPPER_BUY_OUSD_WITH_USDC:
+ case FLIPPER_SELL_OUSD_FOR_USDC:
+ case ZAPPER_DEPOSIT_SFRXETH:
+ case VAULT_REDEEM:
+ case WRAP:
+ case UNWRAP:
+ context->next_param = AMOUNT_SENT;
+ break;
+ // Keep this
+ default:
+ PRINTF("Missing selectorIndex: %d\n", context->selectorIndex);
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ return;
+ }
- // Return valid status.
- msg->result = ETH_PLUGIN_RESULT_OK;
+ // Return valid status.
+ msg->result = ETH_PLUGIN_RESULT_OK;
}
diff --git a/src/handle_provide_parameter.c b/src/handle_provide_parameter.c
index b34e2926..cc5c9c0c 100644
--- a/src/handle_provide_parameter.c
+++ b/src/handle_provide_parameter.c
@@ -1,68 +1,482 @@
#include "plugin.h"
-// EDIT THIS: Remove this function and write your own handlers!
-static void handle_swap_exact_eth_for_tokens(ethPluginProvideParameter_t *msg, context_t *context) {
- if (context->go_to_offset) {
- if (msg->parameterOffset != context->offset + SELECTOR_SIZE) {
- return;
- }
- context->go_to_offset = false;
+static void handle_beneficiary(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ memset(context->beneficiary, 0, sizeof(context->beneficiary));
+ memcpy(context->beneficiary,
+ &msg->parameter[PARAMETER_LENGTH - ADDRESS_LENGTH],
+ sizeof(context->beneficiary));
+ printf_hex_array("BENEFICIARY: ", ADDRESS_LENGTH, context->beneficiary);
+}
+
+static void handle_amount_sent(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ memcpy(context->amount_sent, msg->parameter, INT256_LENGTH);
+}
+
+static void handle_min_amount_received(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ memcpy(context->min_amount_received, msg->parameter, PARAMETER_LENGTH);
+}
+
+static void handle_token_sent(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ memset(context->contract_address_sent, 0,
+ sizeof(context->contract_address_sent));
+ memcpy(context->contract_address_sent,
+ &msg->parameter[PARAMETER_LENGTH - ADDRESS_LENGTH], ADDRESS_LENGTH);
+ printf_hex_array("TOKEN SENT: ", ADDRESS_LENGTH,
+ context->contract_address_sent);
+}
+
+static void handle_token_sent_curve_pool(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ memset(context->contract_address_sent, 0,
+ sizeof(context->contract_address_sent));
+
+ bool is_oeth =
+ memcmp(CURVE_OETH_POOL_ADDRESS,
+ msg->pluginSharedRO->txContent->destination, ADDRESS_LENGTH) == 0;
+
+ if (is_oeth) {
+ switch (msg->parameter[PARAMETER_LENGTH - 1]) {
+ case 0:
+ memcpy(context->contract_address_sent, NULL_ETH_ADDRESS,
+ ADDRESS_LENGTH);
+ break;
+ case 1:
+ memcpy(context->contract_address_sent, OETH_ADDRESS, ADDRESS_LENGTH);
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ break;
}
- switch (context->next_param) {
- case MIN_AMOUNT_RECEIVED: // amountOutMin
- copy_parameter(context->amount_received,
- msg->parameter,
- sizeof(context->amount_received));
- context->next_param = PATH_OFFSET;
- break;
- case PATH_OFFSET: // path
- context->offset = U2BE(msg->parameter, PARAMETER_LENGTH - 2);
- context->next_param = BENEFICIARY;
- break;
- case BENEFICIARY: // to
- copy_address(context->beneficiary, msg->parameter, sizeof(context->beneficiary));
- context->next_param = PATH_LENGTH;
- context->go_to_offset = true;
- break;
- case PATH_LENGTH:
- context->offset = msg->parameterOffset - SELECTOR_SIZE + PARAMETER_LENGTH * 2;
- context->go_to_offset = true;
- context->next_param = TOKEN_RECEIVED;
- break;
- case TOKEN_RECEIVED: // path[1] -> contract address of token received
- copy_address(context->token_received, msg->parameter, sizeof(context->token_received));
- context->next_param = UNEXPECTED_PARAMETER;
- break;
- // Keep this
- default:
- PRINTF("Param not supported: %d\n", context->next_param);
- msg->result = ETH_PLUGIN_RESULT_ERROR;
- break;
+ } else {
+ switch (msg->parameter[PARAMETER_LENGTH - 1]) {
+ case 0:
+ memcpy(context->contract_address_sent, OUSD_ADDRESS, ADDRESS_LENGTH);
+ break;
+ case 1:
+ memcpy(context->contract_address_sent, DAI_ADDRESS, ADDRESS_LENGTH);
+ break;
+ case 2:
+ memcpy(context->contract_address_sent, USDC_ADDRESS, ADDRESS_LENGTH);
+ break;
+ case 3:
+ memcpy(context->contract_address_sent, USDT_ADDRESS, ADDRESS_LENGTH);
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ break;
}
+ }
+
+ printf_hex_array("TOKEN SENT: ", ADDRESS_LENGTH,
+ context->contract_address_sent);
}
-void handle_provide_parameter(ethPluginProvideParameter_t *msg) {
- context_t *context = (context_t *) msg->pluginContext;
- // We use `%.*H`: it's a utility function to print bytes. You first give
- // the number of bytes you wish to print (in this case, `PARAMETER_LENGTH`) and then
- // the address (here `msg->parameter`).
- PRINTF("plugin provide parameter: offset %d\nBytes: %.*H\n",
- msg->parameterOffset,
- PARAMETER_LENGTH,
- msg->parameter);
-
- msg->result = ETH_PLUGIN_RESULT_OK;
-
- // EDIT THIS: adapt the cases and the names of the functions.
- switch (context->selectorIndex) {
- case SWAP_EXACT_ETH_FOR_TOKENS:
- handle_swap_exact_eth_for_tokens(msg, context);
- break;
- case BOILERPLATE_DUMMY_2:
- break;
- default:
- PRINTF("Selector Index not supported: %d\n", context->selectorIndex);
- msg->result = ETH_PLUGIN_RESULT_ERROR;
- break;
+static void handle_token_received(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ memset(context->contract_address_received, 0,
+ sizeof(context->contract_address_received));
+
+ memcpy(context->contract_address_received,
+ &msg->parameter[PARAMETER_LENGTH - ADDRESS_LENGTH], ADDRESS_LENGTH);
+ printf_hex_array("TOKEN RECEIVED: ", ADDRESS_LENGTH,
+ context->contract_address_received);
+}
+
+static void handle_token_received_curve_pool(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ memset(context->contract_address_received, 0,
+ sizeof(context->contract_address_received));
+
+ bool is_oeth =
+ memcmp(CURVE_OETH_POOL_ADDRESS,
+ msg->pluginSharedRO->txContent->destination, ADDRESS_LENGTH) == 0;
+
+ // determine token addresses of curve pools based on contract address and
+ // value of i/j params
+ if (is_oeth) {
+ switch (msg->parameter[PARAMETER_LENGTH - 1]) {
+ case 0:
+ memcpy(context->contract_address_received, NULL_ETH_ADDRESS,
+ ADDRESS_LENGTH);
+ break;
+ case 1:
+ memcpy(context->contract_address_received, OETH_ADDRESS,
+ ADDRESS_LENGTH);
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ break;
}
+ } else {
+ switch (msg->parameter[PARAMETER_LENGTH - 1]) {
+ case 0:
+ memcpy(context->contract_address_received, OUSD_ADDRESS,
+ ADDRESS_LENGTH);
+ break;
+ case 1:
+ memcpy(context->contract_address_received, DAI_ADDRESS, ADDRESS_LENGTH);
+ break;
+ case 2:
+ memcpy(context->contract_address_received, USDC_ADDRESS,
+ ADDRESS_LENGTH);
+ break;
+ case 3:
+ memcpy(context->contract_address_received, USDT_ADDRESS,
+ ADDRESS_LENGTH);
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ break;
+ }
+ }
+ printf_hex_array("TOKEN RECEIVED: ", ADDRESS_LENGTH,
+ context->contract_address_received);
+}
+
+static void handle_wrap_and_unwrap(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ switch (context->next_param) {
+ case AMOUNT_SENT: // path[1] -> contract address of token received
+ handle_amount_sent(msg, context);
+ context->next_param = BENEFICIARY;
+ break;
+ case BENEFICIARY: // path[1] -> contract address of token received
+ handle_beneficiary(msg, context);
+ context->next_param = NONE;
+ break;
+ case NONE:
+ break;
+ // Keep this
+ default:
+ PRINTF("Param not supported: %d\n", context->next_param);
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
+}
+
+static void handle_zapper_deposit_eth(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ switch (context->next_param) {
+ case NONE:
+ break;
+ default:
+ PRINTF("Param not supported: %d\n", context->next_param);
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
+}
+
+static void handle_zapper_deposit_sfrxeth(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ switch (context->next_param) {
+ case AMOUNT_SENT:
+ handle_amount_sent(msg, context);
+ context->next_param = MIN_AMOUNT_RECEIVED;
+ break;
+ case MIN_AMOUNT_RECEIVED:
+ handle_min_amount_received(msg, context);
+ context->next_param = NONE;
+ break;
+ case NONE:
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
+}
+
+// mint(address _asset,uint256 _amount,uint256 _minimumOusdAmount)
+static void handle_vault_mint(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ switch (context->next_param) {
+ case TOKEN_SENT:
+ handle_token_sent(msg, context);
+ context->next_param = AMOUNT_SENT;
+ break;
+ case AMOUNT_SENT:
+ handle_amount_sent(msg, context);
+ context->next_param = MIN_AMOUNT_RECEIVED;
+ break;
+ case MIN_AMOUNT_RECEIVED:
+ handle_min_amount_received(msg, context);
+ context->next_param = NONE;
+ break;
+ case NONE:
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
+}
+
+// redeem(uint256 _amount,uint256 _minimumUnitAmount)
+static void handle_vault_redeem(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ switch (context->next_param) {
+ case AMOUNT_SENT:
+ handle_amount_sent(msg, context);
+ context->next_param = MIN_AMOUNT_RECEIVED;
+ break;
+ case MIN_AMOUNT_RECEIVED:
+ handle_min_amount_received(msg, context);
+ context->next_param = NONE;
+ break;
+ case NONE:
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
+}
+
+// exchange(int128 i,int128 j,uint256 _dx,uint256 _min_dy)
+static void handle_curve_pool_exchange(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ switch (context->next_param) {
+ case TOKEN_SENT:
+ handle_token_sent_curve_pool(msg, context);
+ context->next_param = TOKEN_RECEIVED;
+ break;
+ case TOKEN_RECEIVED:
+ handle_token_received_curve_pool(msg, context);
+ context->next_param = AMOUNT_SENT;
+ break;
+ case AMOUNT_SENT:
+ handle_amount_sent(msg, context);
+ context->next_param = MIN_AMOUNT_RECEIVED;
+ break;
+ case MIN_AMOUNT_RECEIVED:
+ handle_min_amount_received(msg, context);
+ context->next_param = NONE;
+ break;
+ case NONE:
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
+}
+
+// exchange_multiple(address[9] _route,uint256[3][4] _swap_params,uint256
+// _amount,uint256 _expected)
+static void handle_curve_router_exchange(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ switch (context->next_param) {
+ case TOKEN_SENT:
+ handle_token_sent(msg, context);
+ 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],
+ 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;
+ break;
+ case MIN_AMOUNT_RECEIVED:
+ handle_min_amount_received(msg, context);
+ context->next_param = NONE;
+ break;
+ case NONE:
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
+}
+
+// exactInput(tuple params)
+static void handle_uniswap_v3_exchange(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ switch (context->next_param) {
+ case BENEFICIARY:
+ handle_beneficiary(msg, context);
+ context->skip += 1;
+ context->next_param = AMOUNT_SENT;
+ break;
+ case AMOUNT_SENT:
+ handle_amount_sent(msg, context);
+ context->next_param = MIN_AMOUNT_RECEIVED;
+ break;
+ case MIN_AMOUNT_RECEIVED:
+ handle_min_amount_received(msg, context);
+ context->next_param = PATH_LENGTH;
+ break;
+ case PATH_LENGTH:
+ context->offset =
+ U2BE(msg->parameter, PARAMETER_LENGTH - sizeof(context->offset));
+ PRINTF("OFFSET: %d\n", context->offset);
+ context->next_param = TOKEN_SENT;
+ break;
+ case TOKEN_SENT:
+ // first 20 bytes of path is token sent
+ memcpy(context->contract_address_sent, msg->parameter, ADDRESS_LENGTH);
+ printf_hex_array("TOKEN_SENT: ", ADDRESS_LENGTH,
+ context->contract_address_sent);
+ context->skip = (context->offset - ADDRESS_LENGTH) / 32 - 1;
+ context->next_param = TOKEN_RECEIVED;
+ break;
+ case TOKEN_RECEIVED:
+ // address of token received starts at 20 bytes from end of path
+ memcpy(&context->contract_address_received[0],
+ &msg->parameter[(context->offset - ADDRESS_LENGTH) %
+ PARAMETER_LENGTH],
+ ADDRESS_LENGTH);
+ context->next_param = TOKEN_RECEIVED_REST;
+ break;
+ case TOKEN_RECEIVED_REST:
+ // copy rest of address in case it overflows into the next param
+ memcpy(
+ &context
+ ->contract_address_received[PARAMETER_LENGTH -
+ (context->offset - ADDRESS_LENGTH) %
+ PARAMETER_LENGTH],
+ &msg->parameter[0],
+ (context->offset - ADDRESS_LENGTH) % PARAMETER_LENGTH +
+ ADDRESS_LENGTH - PARAMETER_LENGTH);
+ context->next_param = NONE;
+ break;
+ case NONE:
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
+}
+
+// exactInputSingle(tuple params)
+static void handle_uniswap_exchange_single(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ switch (context->next_param) {
+ case TOKEN_SENT:
+ handle_token_sent(msg, context);
+ context->next_param = TOKEN_RECEIVED;
+ break;
+ case TOKEN_RECEIVED:
+ handle_token_received(msg, context);
+ context->skip += 1;
+ context->next_param = BENEFICIARY;
+ break;
+ case BENEFICIARY:
+ handle_beneficiary(msg, context);
+ context->skip += 1;
+ context->next_param = AMOUNT_SENT;
+ break;
+ case AMOUNT_SENT:
+ handle_amount_sent(msg, context);
+ context->next_param = MIN_AMOUNT_RECEIVED;
+ break;
+ case MIN_AMOUNT_RECEIVED:
+ handle_min_amount_received(msg, context);
+ context->next_param = NONE;
+ break;
+ case NONE:
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
+}
+
+// buyOusdWithUsdt(uint256 amount)
+// sellOusdForUsdt(uint256 amount)
+// buyOusdWithDai(uint256 amount)
+// sellOusdForDai(uint256 amount)
+// buyOusdWithUsdc(uint256 amount)
+// sellOusdForUsdc(uint256 amount)
+static void handle_flipper_exchange(ethPluginProvideParameter_t *msg,
+ context_t *context) {
+ switch (context->next_param) {
+ case AMOUNT_SENT:
+ handle_amount_sent(msg, context);
+ context->next_param = NONE;
+ break;
+ case NONE:
+ break;
+ default:
+ PRINTF("Param not supported\n");
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
+}
+
+void handle_provide_parameter(ethPluginProvideParameter_t *msg) {
+ context_t *context = (context_t *)msg->pluginContext;
+ // We use `%.*H`: it's a utility function to print bytes. You first give
+ // the number of bytes you wish to print (in this case, `PARAMETER_LENGTH`)
+ // and then the address (here `msg->parameter`).
+ PRINTF("plugin provide parameter: offset %d\nBytes: %.*H\n",
+ msg->parameterOffset, PARAMETER_LENGTH, msg->parameter);
+
+ msg->result = ETH_PLUGIN_RESULT_OK;
+
+ if (context->skip) {
+ context->skip--;
+ return;
+ }
+
+ switch (context->selectorIndex) {
+ case WRAP:
+ case UNWRAP:
+ handle_wrap_and_unwrap(msg, context);
+ break;
+ case ZAPPER_DEPOSIT_ETH:
+ handle_zapper_deposit_eth(msg, context);
+ break;
+ case ZAPPER_DEPOSIT_SFRXETH:
+ handle_zapper_deposit_sfrxeth(msg, context);
+ break;
+ case VAULT_MINT:
+ handle_vault_mint(msg, context);
+ break;
+ case VAULT_REDEEM:
+ handle_vault_redeem(msg, context);
+ break;
+ case CURVE_POOL_EXCHANGE:
+ case CURVE_POOL_EXCHANGE_UNDERLYING:
+ handle_curve_pool_exchange(msg, context);
+ break;
+ case CURVE_ROUTER_EXCHANGE_MULTIPLE:
+ handle_curve_router_exchange(msg, context);
+ break;
+ case UNISWAP_V3_ROUTER_EXACT_INPUT:
+ handle_uniswap_v3_exchange(msg, context);
+ break;
+ case UNISWAP_ROUTER_EXACT_INPUT_SINGLE:
+ handle_uniswap_exchange_single(msg, context);
+ break;
+ case FLIPPER_BUY_OUSD_WITH_USDT:
+ case FLIPPER_SELL_OUSD_FOR_USDT:
+ case FLIPPER_BUY_OUSD_WITH_DAI:
+ case FLIPPER_SELL_OUSD_FOR_DAI:
+ case FLIPPER_BUY_OUSD_WITH_USDC:
+ case FLIPPER_SELL_OUSD_FOR_USDC:
+ handle_flipper_exchange(msg, context);
+ break;
+ default:
+ PRINTF("Selector Index not supported: %d\n", context->selectorIndex);
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ break;
+ }
}
diff --git a/src/handle_provide_token.c b/src/handle_provide_token.c
index b7e53979..963967ed 100644
--- a/src/handle_provide_token.c
+++ b/src/handle_provide_token.c
@@ -1,28 +1,56 @@
#include "plugin.h"
-// EDIT THIS: Adapt this function to your needs! Remember, the information for tokens are held in
-// `msg->token1` and `msg->token2`. If those pointers are `NULL`, this means the ethereum app didn't
+// The information for tokens are held in `msg->token1` and `msg->token2`.
+// If those pointers are `NULL`, this means the ethereum app didn't
// find any info regarding the requested tokens!
void handle_provide_token(ethPluginProvideInfo_t *msg) {
- context_t *context = (context_t *) msg->pluginContext;
+ context_t *context = (context_t *)msg->pluginContext;
- if (msg->item1) {
- // The Ethereum App found the information for the requested token!
- // Store its decimals.
- context->decimals = msg->item1->token.decimals;
- // Store its ticker.
- strlcpy(context->ticker, (char *) msg->item1->token.ticker, sizeof(context->ticker));
-
- // Keep track that we found the token.
- context->token_found = true;
+ PRINTF("Origin plugin provide token: 0x%p, 0x%p\n", msg->item1, msg->item2);
+ if (!check_token_sent(context)) {
+ if (ADDRESS_IS_NETWORK_TOKEN(context->contract_address_sent)) {
+ sent_network_token(context);
+ } else if (msg->item1 != NULL) {
+ context->decimals_sent = msg->item1->token.decimals;
+ strlcpy(context->ticker_sent, (char *)msg->item1->token.ticker,
+ sizeof(context->ticker_sent));
+ context->tokens_found |= TOKEN_SENT_FOUND;
} else {
- // The Ethereum App did not manage to find the info for the requested token.
- context->token_found = false;
+ // The Ethereum App found the information for the requested token!
+ // Store its decimals.
+ context->decimals_sent = DEFAULT_DECIMAL;
+ // Store its ticker.
+ strlcpy(context->ticker_sent, DEFAULT_TICKER,
+ sizeof(context->ticker_sent));
+ // // We will need an additional screen to display a warning message.
+ msg->additionalScreens++;
+ }
+ }
- // If we wanted to add a screen, say a warning screen for example, we could instruct the
- // ethereum app to add an additional screen by setting `msg->additionalScreens` here, just
- // like so:
- // msg->additionalScreens = 1;
+ if (!check_token_received(context)) {
+ if (ADDRESS_IS_NETWORK_TOKEN(context->contract_address_received)) {
+ received_network_token(context);
+ } else if (msg->item2 != NULL) {
+ context->decimals_received = msg->item2->token.decimals;
+ strlcpy(context->ticker_received, (char *)msg->item2->token.ticker,
+ sizeof(context->ticker_received));
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else if (context->selectorIndex == VAULT_REDEEM) {
+ context->decimals_received = DEFAULT_DECIMAL;
+ strlcpy(context->ticker_received, "UNITS",
+ sizeof(context->ticker_received));
+ } else {
+ // The Ethereum App did not manage to find the info for the requested
+ // token.
+ context->decimals_received = DEFAULT_DECIMAL;
+ strlcpy(context->ticker_received, DEFAULT_TICKER,
+ sizeof(context->ticker_received));
+ // If we wanted to add a screen, say a warning screen for example, we
+ // could instruct the ethereum app to add an additional screen by setting
+ // `msg->additionalScreens` here, just like so:
+ msg->additionalScreens++;
}
- msg->result = ETH_PLUGIN_RESULT_OK;
+ }
+
+ msg->result = ETH_PLUGIN_RESULT_OK;
}
diff --git a/src/handle_query_contract_id.c b/src/handle_query_contract_id.c
index 8c52902e..fd1fa027 100644
--- a/src/handle_query_contract_id.c
+++ b/src/handle_query_contract_id.c
@@ -2,19 +2,46 @@
// Sets the first screen to display.
void handle_query_contract_id(ethQueryContractID_t *msg) {
- const context_t *context = (const context_t *) msg->pluginContext;
- // msg->name will be the upper sentence displayed on the screen.
- // msg->version will be the lower sentence displayed on the screen.
+ const context_t *context = (const context_t *)msg->pluginContext;
+ // msg->name will be the upper sentence displayed on the screen.
+ // msg->version will be the lower sentence displayed on the screen.
- // For the first screen, display the plugin name.
- strlcpy(msg->name, APPNAME, msg->nameLength);
+ // For the first screen, display the plugin name.
+ strlcpy(msg->name, APPNAME, msg->nameLength);
- // EDIT THIS: Adapt the cases by modifying the strings you pass to `strlcpy`.
- if (context->selectorIndex == SWAP_EXACT_ETH_FOR_TOKENS) {
- strlcpy(msg->version, "Swap", msg->versionLength);
- msg->result = ETH_PLUGIN_RESULT_OK;
- } else {
- PRINTF("Selector index: %d not supported\n", context->selectorIndex);
- msg->result = ETH_PLUGIN_RESULT_ERROR;
- }
+ switch (context->selectorIndex) {
+ case ZAPPER_DEPOSIT_ETH:
+ case ZAPPER_DEPOSIT_SFRXETH:
+ case VAULT_MINT:
+ strlcpy(msg->version, "Mint", msg->versionLength);
+ break;
+ case VAULT_REDEEM:
+ strlcpy(msg->version, "Redeem", msg->versionLength);
+ break;
+ case CURVE_POOL_EXCHANGE:
+ case CURVE_POOL_EXCHANGE_UNDERLYING:
+ case CURVE_ROUTER_EXCHANGE_MULTIPLE:
+ case UNISWAP_V3_ROUTER_EXACT_INPUT:
+ case UNISWAP_ROUTER_EXACT_INPUT_SINGLE:
+ case FLIPPER_BUY_OUSD_WITH_USDT:
+ case FLIPPER_SELL_OUSD_FOR_USDT:
+ case FLIPPER_BUY_OUSD_WITH_DAI:
+ case FLIPPER_SELL_OUSD_FOR_DAI:
+ case FLIPPER_BUY_OUSD_WITH_USDC:
+ case FLIPPER_SELL_OUSD_FOR_USDC:
+ strlcpy(msg->version, "Swap", msg->versionLength);
+ break;
+ case WRAP:
+ strlcpy(msg->version, "Wrap", msg->versionLength);
+ break;
+ case UNWRAP:
+ strlcpy(msg->version, "Unwrap", msg->versionLength);
+ break;
+ default:
+ PRINTF("Selector Index :%d not supported\n", context->selectorIndex);
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ return;
+ }
+
+ msg->result = ETH_PLUGIN_RESULT_OK;
}
diff --git a/src/handle_query_contract_ui.c b/src/handle_query_contract_ui.c
index 6d2b8b49..49ae7220 100644
--- a/src/handle_query_contract_ui.c
+++ b/src/handle_query_contract_ui.c
@@ -1,95 +1,337 @@
#include "plugin.h"
-// EDIT THIS: You need to adapt / remove the static functions (set_send_ui, set_receive_ui ...) to
-// match what you wish to display.
-
// Set UI for the "Send" screen.
-// EDIT THIS: Adapt / remove this function to your needs.
-static bool set_send_ui(ethQueryContractUI_t *msg) {
- strlcpy(msg->title, "Send", msg->titleLength);
-
- const uint8_t *eth_amount = msg->pluginSharedRO->txContent->value.value;
- uint8_t eth_amount_size = msg->pluginSharedRO->txContent->value.length;
-
- // Converts the uint256 number located in `eth_amount` to its string representation and
- // copies this to `msg->msg`.
- return amountToString(eth_amount,
- eth_amount_size,
- WEI_TO_ETHER,
- "ETH",
- msg->msg,
- msg->msgLength);
+static bool set_send_ui(ethQueryContractUI_t *msg, context_t *context) {
+ strlcpy(context->ticker_sent,
+ get_ticker_for_address(context->contract_address_sent),
+ sizeof(context->ticker_sent));
+
+ context->amount_length = INT256_LENGTH;
+
+ bool is_woeth =
+ memcmp(WOETH_ADDRESS, msg->pluginSharedRO->txContent->destination,
+ ADDRESS_LENGTH) == 0;
+
+ strlcpy(msg->title, "Send", msg->titleLength);
+
+ switch (context->selectorIndex) {
+ case ZAPPER_DEPOSIT_ETH:
+ strlcpy(msg->title, "Deposit", msg->titleLength);
+ memcpy(context->amount_sent, &msg->pluginSharedRO->txContent->value.value,
+ msg->pluginSharedRO->txContent->value.length);
+ context->amount_length = msg->pluginSharedRO->txContent->value.length;
+ break;
+ case ZAPPER_DEPOSIT_SFRXETH:
+ strlcpy(msg->title, "Deposit", msg->titleLength);
+ strlcpy(context->ticker_sent, SFRXETH_TICKER,
+ sizeof(context->ticker_sent));
+ break;
+ case VAULT_MINT:
+ strlcpy(msg->title, "Deposit", msg->titleLength);
+ if (memcmp(USDT_ADDRESS, context->contract_address_sent,
+ ADDRESS_LENGTH) == 0 ||
+ memcmp(USDC_ADDRESS, context->contract_address_sent,
+ ADDRESS_LENGTH) == 0) {
+ context->decimals_sent = USDT_DECIMALS;
+ }
+ break;
+ case VAULT_REDEEM:
+ strlcpy(msg->title, "Redeem", msg->titleLength);
+ if (memcmp(OETH_VAULT_ADDRESS,
+ msg->pluginSharedRO->txContent->destination,
+ ADDRESS_LENGTH) == 0) {
+ strlcpy(context->ticker_sent, OETH_TICKER,
+ sizeof(context->ticker_sent));
+ } else {
+ strlcpy(context->ticker_sent, OUSD_TICKER,
+ sizeof(context->ticker_sent));
+ }
+ break;
+ case CURVE_POOL_EXCHANGE:
+ break;
+ case CURVE_POOL_EXCHANGE_UNDERLYING:
+ break;
+ case CURVE_ROUTER_EXCHANGE_MULTIPLE:
+ case UNISWAP_V3_ROUTER_EXACT_INPUT:
+ case UNISWAP_ROUTER_EXACT_INPUT_SINGLE:
+ if (memcmp(USDT_ADDRESS, context->contract_address_sent,
+ ADDRESS_LENGTH) == 0 ||
+ memcmp(USDC_ADDRESS, context->contract_address_sent,
+ ADDRESS_LENGTH) == 0) {
+ context->decimals_sent = USDT_DECIMALS;
+ }
+ break;
+ case FLIPPER_BUY_OUSD_WITH_USDT:
+ strlcpy(context->ticker_sent, USDT_TICKER, sizeof(context->ticker_sent));
+ context->decimals_sent = USDT_DECIMALS;
+ break;
+ case FLIPPER_BUY_OUSD_WITH_DAI:
+ strlcpy(context->ticker_sent, DAI_TICKER, sizeof(context->ticker_sent));
+ context->decimals_sent = DAI_DECIMALS;
+ break;
+ case FLIPPER_BUY_OUSD_WITH_USDC:
+ strlcpy(context->ticker_sent, USDC_TICKER, sizeof(context->ticker_sent));
+ context->decimals_sent = USDC_DECIMALS;
+ break;
+ case FLIPPER_SELL_OUSD_FOR_USDT:
+ case FLIPPER_SELL_OUSD_FOR_DAI:
+ case FLIPPER_SELL_OUSD_FOR_USDC:
+ strlcpy(context->ticker_sent, OUSD_TICKER, sizeof(context->ticker_sent));
+ context->decimals_sent = OUSD_DECIMALS;
+ break;
+ case WRAP:
+ strlcpy(msg->title, "Wrap", msg->titleLength);
+ strlcpy(context->ticker_sent, is_woeth ? OETH_TICKER : OUSD_TICKER,
+ sizeof(context->ticker_sent));
+ break;
+ case UNWRAP:
+ strlcpy(msg->title, "Unwrap", msg->titleLength);
+ strlcpy(context->ticker_sent, is_woeth ? OETH_TICKER : OUSD_TICKER,
+ sizeof(context->ticker_sent));
+ break;
+ default:
+ PRINTF("Unhandled selector Index: %d\n", context->selectorIndex);
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ return false;
+ }
+
+ // Converts the uint256 number located in `eth_amount` to its string
+ // representation and copies this to `msg->msg`.
+ return amountToString(context->amount_sent, context->amount_length,
+ context->decimals_sent, context->ticker_sent, msg->msg,
+ msg->msgLength);
}
// Set UI for "Receive" screen.
-// EDIT THIS: Adapt / remove this function to your needs.
-static bool set_receive_ui(ethQueryContractUI_t *msg, const context_t *context) {
- strlcpy(msg->title, "Receive Min.", msg->titleLength);
-
- uint8_t decimals = context->decimals;
- const char *ticker = context->ticker;
-
- // If the token look up failed, use the default network ticker along with the default decimals.
- if (!context->token_found) {
- decimals = WEI_TO_ETHER;
- ticker = msg->network_ticker;
- }
-
- return amountToString(context->amount_received,
- sizeof(context->amount_received),
- decimals,
- ticker,
- msg->msg,
- msg->msgLength);
+static bool set_receive_ui(ethQueryContractUI_t *msg, context_t *context) {
+ strlcpy(context->ticker_received,
+ get_ticker_for_address(context->contract_address_received),
+ sizeof(context->ticker_received));
+
+ context->amount_length = INT256_LENGTH;
+
+ strlcpy(msg->title, "Receive Min", msg->titleLength);
+
+ bool is_oeth =
+ memcmp(OETH_VAULT_ADDRESS, msg->pluginSharedRO->txContent->destination,
+ ADDRESS_LENGTH) == 0;
+
+ switch (context->selectorIndex) {
+ case ZAPPER_DEPOSIT_ETH:
+ memcpy(context->min_amount_received,
+ &msg->pluginSharedRO->txContent->value.value,
+ msg->pluginSharedRO->txContent->value.length);
+ context->amount_length = msg->pluginSharedRO->txContent->value.length;
+ strlcpy(context->ticker_received, OETH_TICKER,
+ sizeof(context->ticker_received));
+ break;
+ case ZAPPER_DEPOSIT_SFRXETH:
+ strlcpy(context->ticker_received, OETH_TICKER,
+ sizeof(context->ticker_received));
+ break;
+ case VAULT_MINT:
+ strlcpy(context->ticker_received, is_oeth ? OETH_TICKER : OUSD_TICKER,
+ sizeof(context->ticker_received));
+ break;
+ case VAULT_REDEEM:
+ strlcpy(context->ticker_received, is_oeth ? "LST MIX" : "USD MIX",
+ sizeof(context->ticker_received));
+ break;
+ case CURVE_POOL_EXCHANGE:
+ break;
+ case CURVE_POOL_EXCHANGE_UNDERLYING:
+ break;
+ case CURVE_ROUTER_EXCHANGE_MULTIPLE:
+ case UNISWAP_V3_ROUTER_EXACT_INPUT:
+ case UNISWAP_ROUTER_EXACT_INPUT_SINGLE:
+ if (memcmp(USDT_ADDRESS, context->contract_address_received,
+ ADDRESS_LENGTH) == 0 ||
+ memcmp(USDC_ADDRESS, context->contract_address_received,
+ ADDRESS_LENGTH) == 0) {
+ context->decimals_received = USDT_DECIMALS;
+ }
+ break;
+ case FLIPPER_BUY_OUSD_WITH_USDT:
+ case FLIPPER_BUY_OUSD_WITH_DAI:
+ case FLIPPER_BUY_OUSD_WITH_USDC:
+ memcpy(context->min_amount_received, context->amount_sent,
+ sizeof(context->amount_sent));
+ strlcpy(context->ticker_received, OUSD_TICKER,
+ sizeof(context->ticker_received));
+ if (memcmp(USDT_ADDRESS, context->contract_address_received,
+ ADDRESS_LENGTH) == 0 ||
+ memcmp(USDC_ADDRESS, context->contract_address_received,
+ ADDRESS_LENGTH) == 0) {
+ context->decimals_received = USDT_DECIMALS;
+ } else {
+ context->decimals_received = OUSD_DECIMALS;
+ }
+ break;
+ case FLIPPER_SELL_OUSD_FOR_USDT:
+ memcpy(context->min_amount_received, context->amount_sent,
+ sizeof(context->amount_sent));
+ strlcpy(context->ticker_received, USDT_TICKER,
+ sizeof(context->ticker_received));
+ context->decimals_received = OUSD_DECIMALS;
+ break;
+ case FLIPPER_SELL_OUSD_FOR_DAI:
+ memcpy(context->min_amount_received, context->amount_sent,
+ sizeof(context->amount_sent));
+ strlcpy(context->ticker_received, DAI_TICKER,
+ sizeof(context->ticker_received));
+ context->decimals_received = DAI_DECIMALS;
+ break;
+ case FLIPPER_SELL_OUSD_FOR_USDC:
+ memcpy(context->min_amount_received, context->amount_sent,
+ sizeof(context->amount_sent));
+ strlcpy(context->ticker_received, USDC_TICKER,
+ sizeof(context->ticker_received));
+ context->decimals_received = OUSD_DECIMALS;
+ break;
+ default:
+ PRINTF("Unhandled selector Index: %d\n", context->selectorIndex);
+ msg->result = ETH_PLUGIN_RESULT_ERROR;
+ return false;
+ }
+
+ // Convert to string.
+ return amountToString(context->min_amount_received, context->amount_length,
+ context->decimals_received, context->ticker_received,
+ msg->msg, msg->msgLength);
+}
+
+// Set UI for "Warning" screen.
+static bool set_warning_ui(ethQueryContractUI_t *msg,
+ const context_t *context __attribute__((unused))) {
+ strlcpy(msg->title, "WARNING", msg->titleLength);
+ strlcpy(msg->msg, "Unknown token", msg->msgLength);
+ return true;
}
// Set UI for "Beneficiary" screen.
-// EDIT THIS: Adapt / remove this function to your needs.
static bool set_beneficiary_ui(ethQueryContractUI_t *msg, context_t *context) {
- strlcpy(msg->title, "Beneficiary", msg->titleLength);
-
- // Prefix the address with `0x`.
- msg->msg[0] = '0';
- msg->msg[1] = 'x';
-
- // We need a random chainID for legacy reasons with `getEthAddressStringFromBinary`.
- // Setting it to `0` will make it work with every chainID :)
- uint64_t chainid = 0;
-
- // Get the string representation of the address stored in `context->beneficiary`. Put it in
- // `msg->msg`.
- return getEthAddressStringFromBinary(
- context->beneficiary,
- msg->msg + 2, // +2 here because we've already prefixed with '0x'.
- msg->pluginSharedRW->sha3,
- chainid);
+ strlcpy(msg->title, "Beneficiary", msg->titleLength);
+
+ // Prefix the address with `0x`.
+ msg->msg[0] = '0';
+ msg->msg[1] = 'x';
+
+ // We need a random chainID for legacy reasons with
+ // `getEthAddressStringFromBinary`. Setting it to `0` will make it work with
+ // every chainID :)
+ uint64_t chainid = 0;
+
+ // Get the string representation of the address stored in
+ // `context->beneficiary`. Put it in `msg->msg`.
+ return getEthAddressStringFromBinary(
+ context->beneficiary,
+ msg->msg + 2, // +2 here because we've already prefixed with '0x'.
+ msg->pluginSharedRW->sha3, chainid);
+}
+
+// Helper function that returns the enum corresponding to the screen that should
+// be displayed.
+static screens_t get_screen(const ethQueryContractUI_t *msg,
+ const context_t *context) {
+ uint8_t index = msg->screenIndex;
+
+ bool token_sent_found = context->tokens_found & TOKEN_SENT_FOUND;
+ bool token_received_found = context->tokens_found & TOKEN_RECEIVED_FOUND;
+
+ bool both_tokens_found = token_received_found && token_sent_found;
+ bool both_tokens_not_found = !token_received_found && !token_sent_found;
+
+ bool wrap =
+ context->selectorIndex == WRAP || context->selectorIndex == UNWRAP;
+
+ switch (index) {
+ case 0:
+ if (both_tokens_found) {
+ return SEND_SCREEN;
+ } else if (both_tokens_not_found) {
+ return WARN_SCREEN;
+ } else if (token_sent_found) {
+ return SEND_SCREEN;
+ } else if (token_received_found) {
+ return WARN_SCREEN;
+ }
+ break;
+ case 1:
+ if (wrap) {
+ return BENEFICIARY_SCREEN;
+ } else if (both_tokens_found) {
+ return RECEIVE_SCREEN;
+ } else if (both_tokens_not_found) {
+ return SEND_SCREEN;
+ } else if (token_sent_found) {
+ return WARN_SCREEN;
+ } else if (token_received_found) {
+ return SEND_SCREEN;
+ }
+ break;
+ case 2:
+ if (both_tokens_found) {
+ return BENEFICIARY_SCREEN;
+ } else if (both_tokens_not_found) {
+ return WARN_SCREEN;
+ } else {
+ return RECEIVE_SCREEN;
+ }
+ break;
+ case 3:
+ if (both_tokens_found) {
+ return ERROR;
+ } else if (both_tokens_not_found) {
+ return RECEIVE_SCREEN;
+ } else {
+ return BENEFICIARY_SCREEN;
+ }
+ break;
+ case 4:
+ if (both_tokens_found) {
+ return ERROR;
+ } else if (both_tokens_not_found) {
+ return BENEFICIARY_SCREEN;
+ }
+ break;
+ default:
+ return ERROR;
+ break;
+ }
+ return ERROR;
}
void handle_query_contract_ui(ethQueryContractUI_t *msg) {
- context_t *context = (context_t *) msg->pluginContext;
- bool ret = false;
-
- // msg->title is the upper line displayed on the device.
- // msg->msg is the lower line displayed on the device.
-
- // Clean the display fields.
- memset(msg->title, 0, msg->titleLength);
- memset(msg->msg, 0, msg->msgLength);
-
- // EDIT THIS: Adapt the cases for the screens you'd like to display.
- switch (msg->screenIndex) {
- case 0:
- ret = set_send_ui(msg);
- break;
- case 1:
- ret = set_receive_ui(msg, context);
- break;
- case 2:
- ret = set_beneficiary_ui(msg, context);
- break;
- // Keep this
- default:
- PRINTF("Received an invalid screenIndex\n");
- }
- msg->result = ret ? ETH_PLUGIN_RESULT_OK : ETH_PLUGIN_RESULT_ERROR;
+ context_t *context = (context_t *)msg->pluginContext;
+ bool ret = false;
+
+ // msg->title is the upper line displayed on the device.
+ // msg->msg is the lower line displayed on the device.
+
+ // Clean the display fields.
+ memset(msg->title, 0, msg->titleLength);
+ memset(msg->msg, 0, msg->msgLength);
+
+ screens_t screen = get_screen(msg, context);
+
+ switch (screen) {
+ case SEND_SCREEN:
+ ret = set_send_ui(msg, context);
+ break;
+ case RECEIVE_SCREEN:
+ ret = set_receive_ui(msg, context);
+ break;
+ case WARN_SCREEN:
+ ret = set_warning_ui(msg, context);
+ break;
+ case BENEFICIARY_SCREEN:
+ ret = set_beneficiary_ui(msg, context);
+ break;
+
+ // Keep this
+ default:
+ PRINTF("Received an invalid screenIndex\n");
+ }
+
+ msg->result = ret ? ETH_PLUGIN_RESULT_OK : ETH_PLUGIN_RESULT_ERROR;
}
diff --git a/src/plugin.c b/src/plugin.c
index cad5461a..b563c357 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Plugin Boilerplate
+ * Origin Plugin
* (c) 2023 Ledger
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,9 +15,70 @@
* limitations under the License.
********************************************************************************/
-#include
#include "plugin.h"
-// This array will be automatically expanded to map all selector_t names with the correct value.
-// Do not modify !
+#include
+
+// This array will be automatically expanded to map all selector_t names with
+// the correct value. Do not modify !
const uint32_t SELECTORS[SELECTOR_COUNT] = {SELECTORS_LIST(TO_VALUE)};
+
+const uint8_t NULL_ETH_ADDRESS[ADDRESS_LENGTH] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+const uint8_t OETH_ADDRESS[ADDRESS_LENGTH] = {
+ 0x85, 0x6c, 0x4e, 0xfb, 0x76, 0xc1, 0xd1, 0xae, 0x02, 0xe2,
+ 0x0c, 0xeb, 0x03, 0xa2, 0xa6, 0xa0, 0x8b, 0x0b, 0x8d, 0xc3};
+
+const uint8_t WETH_ADDRESS[ADDRESS_LENGTH] = {
+ 0xc0, 0x2a, 0xaa, 0x39, 0xb2, 0x23, 0xfe, 0x8d, 0x0a, 0x0e,
+ 0x5c, 0x4f, 0x27, 0xea, 0xd9, 0x08, 0x3c, 0x75, 0x6c, 0xc2};
+
+const uint8_t FRXETH_ADDRESS[ADDRESS_LENGTH] = {
+ 0x5e, 0x84, 0x22, 0x34, 0x52, 0x38, 0xf3, 0x42, 0x75, 0x88,
+ 0x80, 0x49, 0x02, 0x18, 0x21, 0xe8, 0xe0, 0x8c, 0xaa, 0x1f};
+
+const uint8_t RETH_ADDRESS[ADDRESS_LENGTH] = {
+ 0xae, 0x78, 0x73, 0x6c, 0xd6, 0x15, 0xf3, 0x74, 0xd3, 0x08,
+ 0x51, 0x23, 0xa2, 0x10, 0x44, 0x8e, 0x74, 0xfc, 0x63, 0x93};
+
+const uint8_t STETH_ADDRESS[ADDRESS_LENGTH] = {
+ 0xae, 0x7a, 0xb9, 0x65, 0x20, 0xde, 0x3a, 0x18, 0xe5, 0xe1,
+ 0x11, 0xb5, 0xea, 0xab, 0x09, 0x53, 0x12, 0xd7, 0xfe, 0x84};
+
+const uint8_t OUSD_ADDRESS[ADDRESS_LENGTH] = {
+ 0x2a, 0x8e, 0x1e, 0x67, 0x6e, 0xc2, 0x38, 0xd8, 0xa9, 0x92,
+ 0x30, 0x7b, 0x49, 0x5b, 0x45, 0xb3, 0xfe, 0xaa, 0x5e, 0x86};
+
+const uint8_t DAI_ADDRESS[ADDRESS_LENGTH] = {
+ 0x6b, 0x17, 0x54, 0x74, 0xe8, 0x90, 0x94, 0xc4, 0x4d, 0xa9,
+ 0x8b, 0x95, 0x4e, 0xed, 0xea, 0xc4, 0x95, 0x27, 0x1d, 0x0f};
+
+const uint8_t USDC_ADDRESS[ADDRESS_LENGTH] = {
+ 0xa0, 0xb8, 0x69, 0x91, 0xc6, 0x21, 0x8b, 0x36, 0xc1, 0xd1,
+ 0x9d, 0x4a, 0x2e, 0x9e, 0xb0, 0xce, 0x36, 0x06, 0xeb, 0x48};
+
+const uint8_t USDT_ADDRESS[ADDRESS_LENGTH] = {
+ 0xda, 0xc1, 0x7f, 0x95, 0x8d, 0x2e, 0xe5, 0x23, 0xa2, 0x20,
+ 0x62, 0x06, 0x99, 0x45, 0x97, 0xc1, 0x3d, 0x83, 0x1e, 0xc7};
+
+const uint8_t OETH_VAULT_ADDRESS[ADDRESS_LENGTH] = {
+ 0x39, 0x25, 0x40, 0x33, 0x94, 0x5a, 0xa2, 0xe4, 0x80, 0x9c,
+ 0xc2, 0x97, 0x7e, 0x70, 0x87, 0xbe, 0xe4, 0x8b, 0xd7, 0xab};
+
+const uint8_t WOETH_ADDRESS[ADDRESS_LENGTH] = {
+ 0xdc, 0xee, 0x70, 0x65, 0x42, 0x61, 0xaf, 0x21, 0xc4, 0x4c,
+ 0x09, 0x3c, 0x30, 0x0e, 0xd3, 0xbb, 0x97, 0xb7, 0x81, 0x92};
+
+const uint8_t CURVE_OETH_POOL_ADDRESS[ADDRESS_LENGTH] = {
+ 0x94, 0xb1, 0x74, 0x76, 0xa9, 0x3b, 0x32, 0x62, 0xd8, 0x7b,
+ 0x9a, 0x32, 0x69, 0x65, 0xd1, 0xe9, 0x1f, 0x9c, 0x13, 0xe7};
+
+const uint8_t CURVE_OUSD_POOL_ADDRESS[ADDRESS_LENGTH] = {
+ 0x87, 0x65, 0x0d, 0x7b, 0xbf, 0xc3, 0xa9, 0xf1, 0x05, 0x87,
+ 0xd7, 0x77, 0x82, 0x06, 0x67, 0x17, 0x19, 0xd9, 0x91, 0x0d};
+
+const uint8_t CURVE_POOL_ETH_ADDRESS[ADDRESS_LENGTH] = {
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee};
\ No newline at end of file
diff --git a/src/plugin.h b/src/plugin.h
index 53449dbc..ebc5f071 100644
--- a/src/plugin.h
+++ b/src/plugin.h
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Plugin Boilerplate
+ * Origin Plugin
* (c) 2023 Ledger
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,67 +18,326 @@
#pragma once
#include
+
#include "eth_internals.h"
#include "eth_plugin_interface.h"
// All possible selectors of your plugin.
-// EDIT THIS: Enter your selectors here, in the format X(NAME, value)
// A Xmacro below will create for you:
// - an enum named selector_t with every NAME
// - a map named SELECTORS associating each NAME with it's value
-#define SELECTORS_LIST(X) \
- X(SWAP_EXACT_ETH_FOR_TOKENS, 0x7ff36ab5) \
- X(BOILERPLATE_DUMMY_2, 0x13374242)
+#define SELECTORS_LIST(X) \
+ /* ### VAULT */ \
+ /* mint(address,uint256,uint256) */ \
+ X(VAULT_MINT, 0x156e29f6) \
+ /* redeem(uint256,uint256) */ \
+ X(VAULT_REDEEM, 0x7cbc2373) \
+ /* ### CURVE */ \
+ /* exchange(int128,int128,uint256,uint256) */ \
+ X(CURVE_POOL_EXCHANGE, 0x3df02124) \
+ /* exchange_underlying(int128,int128,uint256,uint256) */ \
+ X(CURVE_POOL_EXCHANGE_UNDERLYING, 0xa6417ed6) \
+ /* exchange_multiple(address[9],uint256[3],uint256,uint256) */ \
+ X(CURVE_ROUTER_EXCHANGE_MULTIPLE, 0x353ca424) \
+ /* ### UNISWAP */ \
+ /* exactInput(ExactInputParams params) */ \
+ X(UNISWAP_V3_ROUTER_EXACT_INPUT, 0xc04b8d59) \
+ /* exactInputSingle(ExactInputSingleParams params) */ \
+ X(UNISWAP_ROUTER_EXACT_INPUT_SINGLE, 0x414bf389) \
+ /* ### ZAPPER */ \
+ /* deposit() */ \
+ X(ZAPPER_DEPOSIT_ETH, 0xd0e30db0) \
+ /* depositSFRXETH(uint256,uint256) */ \
+ X(ZAPPER_DEPOSIT_SFRXETH, 0xd443e97d) \
+ /* ### FLIPPER */ \
+ /* buyOusdWithUsdt(uint256) */ \
+ X(FLIPPER_BUY_OUSD_WITH_USDT, 0x35aa0b96) \
+ /* sellOusdForUsdt(uint256) */ \
+ X(FLIPPER_SELL_OUSD_FOR_USDT, 0xcb939053) \
+ /* buyOusdWithDai(uint256) */ \
+ X(FLIPPER_BUY_OUSD_WITH_DAI, 0x5981c746) \
+ /* sellOusdForDai(uint256) */ \
+ X(FLIPPER_SELL_OUSD_FOR_DAI, 0x8a095a0f) \
+ /* buyOusdWithUsdc(uint256) */ \
+ X(FLIPPER_BUY_OUSD_WITH_USDC, 0xbfc11ffd) \
+ /* sellOusdForUsdc(uint256) */ \
+ X(FLIPPER_SELL_OUSD_FOR_USDC, 0xc6b68169) \
+ /* ### 4626 VAULT */ \
+ /* deposit(uint256,address) */ \
+ X(WRAP, 0x6e553f65) \
+ /* redeem(uint256,address,address) */ \
+ X(UNWRAP, 0xba087652)
// Xmacro helpers to define the enum and map
// Do not modify !
-#define TO_ENUM(selector_name, selector_id) selector_name,
+#define TO_ENUM(selector_name, selector_id) selector_name,
#define TO_VALUE(selector_name, selector_id) selector_id,
// This enum will be automatically expanded to hold all selector names.
// The value SELECTOR_COUNT can be used to get the number of defined selectors
// Do not modify !
typedef enum selector_e {
- SELECTORS_LIST(TO_ENUM) SELECTOR_COUNT,
+ SELECTORS_LIST(TO_ENUM) SELECTOR_COUNT,
} selector_t;
-// This array will be automatically expanded to map all selector_t names with the correct value.
-// Do not modify !
+// This array will be automatically expanded to map all selector_t names with
+// the correct value. Do not modify !
extern const uint32_t SELECTORS[SELECTOR_COUNT];
// Enumeration used to parse the smart contract data.
-// EDIT THIS: Adapt the parameter names here.
typedef enum {
- MIN_AMOUNT_RECEIVED = 0,
- TOKEN_RECEIVED,
- BENEFICIARY,
- PATH_OFFSET,
- PATH_LENGTH,
- UNEXPECTED_PARAMETER,
+ TOKEN_SENT,
+ TOKEN_RECEIVED,
+ TOKEN_RECEIVED_REST,
+ AMOUNT_SENT,
+ MIN_AMOUNT_RECEIVED,
+ BENEFICIARY,
+ PATH_LENGTH,
+ UNEXPECTED_PARAMETER,
+ NONE,
} parameter;
// Shared global memory with Ethereum app. Must be at most 5 * 32 bytes.
-// EDIT THIS: This struct is used by your plugin to save the parameters you parse. You
-// will need to adapt this struct to your plugin.
+// parse. You will need to adapt this struct to your plugin.
typedef struct context_s {
- // For display.
- uint8_t amount_received[INT256_LENGTH];
- uint8_t beneficiary[ADDRESS_LENGTH];
- uint8_t token_received[ADDRESS_LENGTH];
- char ticker[MAX_TICKER_LEN];
- uint8_t decimals;
- uint8_t token_found;
-
- // For parsing data.
- uint8_t next_param; // Set to be the next param we expect to parse.
- uint16_t offset; // Offset at which the array or struct starts.
- bool go_to_offset; // If set, will force the parsing to iterate through parameters until
- // `offset` is reached.
-
- // For both parsing and display.
- selector_t selectorIndex;
+ // For display.
+
+ uint8_t amount_sent[INT256_LENGTH];
+ uint8_t min_amount_received[INT256_LENGTH];
+ uint8_t contract_address_sent[ADDRESS_LENGTH];
+ uint8_t contract_address_received[ADDRESS_LENGTH];
+ uint8_t beneficiary[ADDRESS_LENGTH];
+ char ticker_sent[MAX_TICKER_LEN];
+ char ticker_received[MAX_TICKER_LEN];
+
+ uint8_t tokens_found;
+ uint8_t decimals_sent;
+ uint8_t decimals_received;
+ uint8_t skip;
+
+ bool valid;
+ uint8_t amount_length;
+
+ // For parsing data.
+ uint8_t next_param; // Set to be the next param we expect to parse.
+ uint8_t counter;
+ uint16_t offset; // Offset at which the array or struct starts.
+
+ // For both parsing and display.
+ selector_t selectorIndex;
} context_t;
-// Check if the context structure will fit in the RAM section ETH will prepare for us
-// Do not remove!
+typedef enum {
+ SEND_SCREEN,
+ RECEIVE_SCREEN,
+ WARN_SCREEN,
+ BENEFICIARY_SCREEN,
+ ERROR,
+} screens_t;
+
+#define TOKEN_SENT_FOUND 1
+#define TOKEN_RECEIVED_FOUND 1 << 1
+
+// Number of decimals used when the token wasn't found in the CAL.
+#define DEFAULT_DECIMAL WEI_TO_ETHER
+
+// Ticker used when the token wasn't found in the CAL.
+#define DEFAULT_TICKER ""
+
+#define ETH_TICKER "ETH"
+
+#define OETH_TICKER "OETH"
+#define OETH_DECIMALS WEI_TO_ETHER
+
+#define WETH_TICKER "WETH"
+#define WETH_DECIMALS WEI_TO_ETHER
+
+#define STETH_TICKER "STETH"
+#define STETH_DECIMALS WEI_TO_ETHER
+
+#define RETH_TICKER "RETH"
+#define RETH_DECIMALS WEI_TO_ETHER
+
+#define FRXETH_TICKER "FRXETH"
+#define FRXETH_DECIMALS WEI_TO_ETHER
+
+#define OUSD_TICKER "OUSD"
+#define OUSD_DECIMALS WEI_TO_ETHER
+
+#define DAI_TICKER "DAI"
+#define DAI_DECIMALS WEI_TO_ETHER
+
+#define USDC_TICKER "USDC"
+#define USDC_DECIMALS 6
+
+#define USDT_TICKER "USDT"
+#define USDT_DECIMALS 6
+
+#define WOETH_TICKER "WOETH"
+#define WOUSD_TICKER "WOUSD"
+
+#define SFRXETH_TICKER "sfrxETH"
+
+extern const uint8_t NULL_ETH_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t WETH_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t FRXETH_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t RETH_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t STETH_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t OETH_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t OUSD_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t DAI_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t USDC_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t USDT_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t CURVE_POOL_ETH_ADDRESS[ADDRESS_LENGTH];
+
+extern const uint8_t OETH_VAULT_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t CURVE_OETH_POOL_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t CURVE_OUSD_POOL_ADDRESS[ADDRESS_LENGTH];
+extern const uint8_t WOETH_ADDRESS[ADDRESS_LENGTH];
+
+#define ADDRESS_IS_NETWORK_TOKEN(_addr) \
+ (!memcmp(_addr, NULL_ETH_ADDRESS, ADDRESS_LENGTH) || \
+ !memcmp(_addr, CURVE_POOL_ETH_ADDRESS, ADDRESS_LENGTH))
+#define ADDRESS_IS_OETH(_addr) (!memcmp(_addr, OETH_ADDRESS, ADDRESS_LENGTH))
+#define ADDRESS_IS_WETH(_addr) (!memcmp(_addr, WETH_ADDRESS, ADDRESS_LENGTH))
+#define ADDRESS_IS_STETH(_addr) (!memcmp(_addr, STETH_ADDRESS, ADDRESS_LENGTH))
+#define ADDRESS_IS_RETH(_addr) (!memcmp(_addr, RETH_ADDRESS, ADDRESS_LENGTH))
+#define ADDRESS_IS_FRXETH(_addr) \
+ (!memcmp(_addr, FRXETH_ADDRESS, ADDRESS_LENGTH))
+#define ADDRESS_IS_OUSD(_addr) (!memcmp(_addr, OUSD_ADDRESS, ADDRESS_LENGTH))
+#define ADDRESS_IS_DAI(_addr) (!memcmp(_addr, DAI_ADDRESS, ADDRESS_LENGTH))
+#define ADDRESS_IS_USDC(_addr) (!memcmp(_addr, USDC_ADDRESS, ADDRESS_LENGTH))
+#define ADDRESS_IS_USDT(_addr) (!memcmp(_addr, USDT_ADDRESS, ADDRESS_LENGTH))
+
+// Check if the context structure will fit in the RAM section ETH will prepare
+// for us Do not remove!
ASSERT_SIZEOF_PLUGIN_CONTEXT(context_t);
+
+void handle_provide_parameter(ethPluginProvideParameter_t *msg);
+void handle_query_contract_ui(ethQueryContractUI_t *msg);
+void handle_init_contract(ethPluginInitContract_t *msg);
+void handle_finalize(ethPluginFinalize_t *msg);
+void handle_provide_token(ethPluginProvideInfo_t *msg);
+void handle_query_contract_id(ethQueryContractID_t *msg);
+
+static inline bool check_token_sent(context_t *context) {
+ if (ADDRESS_IS_OETH(context->contract_address_sent)) {
+ context->decimals_sent = OETH_DECIMALS;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+ } else if (ADDRESS_IS_NETWORK_TOKEN(context->contract_address_sent)) {
+ context->decimals_sent = DEFAULT_DECIMAL;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+ } else if (ADDRESS_IS_WETH(context->contract_address_sent)) {
+ context->decimals_sent = WETH_DECIMALS;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+ } else if (ADDRESS_IS_RETH(context->contract_address_sent)) {
+ context->decimals_sent = RETH_DECIMALS;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+ } else if (ADDRESS_IS_STETH(context->contract_address_sent)) {
+ context->decimals_sent = STETH_DECIMALS;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+ } else if (ADDRESS_IS_FRXETH(context->contract_address_sent)) {
+ context->decimals_sent = FRXETH_DECIMALS;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+ } else if (ADDRESS_IS_OUSD(context->contract_address_sent)) {
+ context->decimals_sent = OUSD_DECIMALS;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+ } else if (ADDRESS_IS_DAI(context->contract_address_sent)) {
+ context->decimals_sent = DAI_DECIMALS;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+ } else if (ADDRESS_IS_USDC(context->contract_address_sent)) {
+ context->decimals_sent = USDC_DECIMALS;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+ } else if (ADDRESS_IS_USDT(context->contract_address_sent)) {
+ context->decimals_sent = USDT_DECIMALS;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+ } else {
+ return false;
+ }
+ return true;
+}
+
+static inline bool check_token_received(context_t *context) {
+ if (ADDRESS_IS_OETH(context->contract_address_received)) {
+ context->decimals_received = OETH_DECIMALS;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else if (ADDRESS_IS_NETWORK_TOKEN(context->contract_address_received)) {
+ context->decimals_sent = DEFAULT_DECIMAL;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else if (ADDRESS_IS_WETH(context->contract_address_received)) {
+ context->decimals_received = WETH_DECIMALS;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else if (ADDRESS_IS_RETH(context->contract_address_received)) {
+ context->decimals_received = RETH_DECIMALS;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else if (ADDRESS_IS_STETH(context->contract_address_received)) {
+ context->decimals_received = STETH_DECIMALS;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else if (ADDRESS_IS_FRXETH(context->contract_address_received)) {
+ context->decimals_received = FRXETH_DECIMALS;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else if (ADDRESS_IS_OUSD(context->contract_address_received)) {
+ context->decimals_received = OUSD_DECIMALS;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else if (ADDRESS_IS_DAI(context->contract_address_received)) {
+ context->decimals_received = DAI_DECIMALS;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else if (ADDRESS_IS_USDC(context->contract_address_received)) {
+ context->decimals_received = USDC_DECIMALS;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else if (ADDRESS_IS_USDT(context->contract_address_received)) {
+ context->decimals_received = USDT_DECIMALS;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+ } else {
+ return false;
+ }
+ return true;
+}
+
+static inline void sent_network_token(context_t *context) {
+ context->decimals_sent = WEI_TO_ETHER;
+ context->tokens_found |= TOKEN_SENT_FOUND;
+}
+
+static inline void received_network_token(context_t *context) {
+ context->decimals_received = WEI_TO_ETHER;
+ context->tokens_found |= TOKEN_RECEIVED_FOUND;
+}
+
+static inline void printf_hex_array(const char *title __attribute__((unused)),
+ size_t len __attribute__((unused)),
+ const uint8_t *data
+ __attribute__((unused))) {
+ PRINTF(title);
+ for (size_t i = 0; i < len; ++i) {
+ PRINTF("%02x", data[i]);
+ };
+ PRINTF("\n");
+}
+
+static inline const char *get_ticker_for_address(
+ uint8_t address[ADDRESS_LENGTH]) {
+ if (ADDRESS_IS_NETWORK_TOKEN(address)) {
+ return ETH_TICKER;
+ } else if (ADDRESS_IS_OETH(address)) {
+ return OETH_TICKER;
+ } else if (ADDRESS_IS_WETH(address)) {
+ return WETH_TICKER;
+ } else if (ADDRESS_IS_FRXETH(address)) {
+ return FRXETH_TICKER;
+ } else if (ADDRESS_IS_RETH(address)) {
+ return RETH_TICKER;
+ } else if (ADDRESS_IS_STETH(address)) {
+ return STETH_TICKER;
+ } else if (ADDRESS_IS_OUSD(address)) {
+ return OUSD_TICKER;
+ } else if (ADDRESS_IS_DAI(address)) {
+ return DAI_TICKER;
+ } else if (ADDRESS_IS_USDC(address)) {
+ return USDC_TICKER;
+ } else if (ADDRESS_IS_USDT(address)) {
+ return USDT_TICKER;
+ } else {
+ return DEFAULT_TICKER;
+ }
+}
\ No newline at end of file
diff --git a/tests/.DS_Store b/tests/.DS_Store
new file mode 100644
index 00000000..6665f0d9
Binary files /dev/null and b/tests/.DS_Store differ
diff --git a/tests/abis/0x000102030405060708090a0b0c0d0e0f10111213.abi.json b/tests/abis/0x000102030405060708090a0b0c0d0e0f10111213.abi.json
deleted file mode 100644
index cb199761..00000000
--- a/tests/abis/0x000102030405060708090a0b0c0d0e0f10111213.abi.json
+++ /dev/null
@@ -1,36 +0,0 @@
-[
- {
- "inputs" : [
- {
- "internalType" : "uint256",
- "name" : "amountOutMin",
- "type" : "uint256"
- },
- {
- "internalType" : "address[]",
- "name" : "path",
- "type" : "address[]"
- },
- {
- "internalType" : "address",
- "name" : "to",
- "type" : "address"
- },
- {
- "internalType" : "uint256",
- "name" : "deadline",
- "type" : "uint256"
- }
- ],
- "name" : "swapExactETHForTokens",
- "outputs" : [
- {
- "internalType" : "uint256[]",
- "name" : "amounts",
- "type" : "uint256[]"
- }
- ],
- "stateMutability" : "payable",
- "type" : "function"
- }
-]
diff --git a/tests/abis/4626-vault.abi.json b/tests/abis/4626-vault.abi.json
new file mode 100644
index 00000000..380892da
--- /dev/null
+++ b/tests/abis/4626-vault.abi.json
@@ -0,0 +1 @@
+[{"inputs":[{"internalType":"contract ERC20","name":"underlying_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"PendingGovernorshipTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"transferGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"transferToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
\ No newline at end of file
diff --git a/tests/abis/curve-pool.abi.json b/tests/abis/curve-pool.abi.json
new file mode 100644
index 00000000..0a7b4834
--- /dev/null
+++ b/tests/abis/curve-pool.abi.json
@@ -0,0 +1 @@
+[{"name":"Transfer","inputs":[{"name":"sender","type":"address","indexed":true},{"name":"receiver","type":"address","indexed":true},{"name":"value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true},{"name":"spender","type":"address","indexed":true},{"name":"value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"TokenExchange","inputs":[{"name":"buyer","type":"address","indexed":true},{"name":"sold_id","type":"int128","indexed":false},{"name":"tokens_sold","type":"uint256","indexed":false},{"name":"bought_id","type":"int128","indexed":false},{"name":"tokens_bought","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"token_amounts","type":"uint256[2]","indexed":false},{"name":"fees","type":"uint256[2]","indexed":false},{"name":"invariant","type":"uint256","indexed":false},{"name":"token_supply","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidity","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"token_amounts","type":"uint256[2]","indexed":false},{"name":"fees","type":"uint256[2]","indexed":false},{"name":"token_supply","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityOne","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"token_amount","type":"uint256","indexed":false},{"name":"coin_amount","type":"uint256","indexed":false},{"name":"token_supply","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"token_amounts","type":"uint256[2]","indexed":false},{"name":"fees","type":"uint256[2]","indexed":false},{"name":"invariant","type":"uint256","indexed":false},{"name":"token_supply","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RampA","inputs":[{"name":"old_A","type":"uint256","indexed":false},{"name":"new_A","type":"uint256","indexed":false},{"name":"initial_time","type":"uint256","indexed":false},{"name":"future_time","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"StopRampA","inputs":[{"name":"A","type":"uint256","indexed":false},{"name":"t","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewFee","inputs":[{"name":"new_fee","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyNewFee","inputs":[{"name":"fee","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"initialize","inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_coins","type":"address[4]"},{"name":"_rate_multipliers","type":"uint256[4]"},{"name":"_A","type":"uint256"},{"name":"_fee","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"transfer","inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"transferFrom","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"approve","inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"permit","inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_deadline","type":"uint256"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"last_price","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"ema_price","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_balances","inputs":[],"outputs":[{"name":"","type":"uint256[2]"}]},{"stateMutability":"view","type":"function","name":"admin_fee","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"A","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"A_precise","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_p","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"price_oracle","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_virtual_price","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"calc_token_amount","inputs":[{"name":"_amounts","type":"uint256[2]"},{"name":"_is_deposit","type":"bool"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"add_liquidity","inputs":[{"name":"_amounts","type":"uint256[2]"},{"name":"_min_mint_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"add_liquidity","inputs":[{"name":"_amounts","type":"uint256[2]"},{"name":"_min_mint_amount","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"i","type":"int128"},{"name":"j","type":"int128"},{"name":"dx","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"i","type":"int128"},{"name":"j","type":"int128"},{"name":"_dx","type":"uint256"},{"name":"_min_dy","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"i","type":"int128"},{"name":"j","type":"int128"},{"name":"_dx","type":"uint256"},{"name":"_min_dy","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity","inputs":[{"name":"_burn_amount","type":"uint256"},{"name":"_min_amounts","type":"uint256[2]"}],"outputs":[{"name":"","type":"uint256[2]"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity","inputs":[{"name":"_burn_amount","type":"uint256"},{"name":"_min_amounts","type":"uint256[2]"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256[2]"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_imbalance","inputs":[{"name":"_amounts","type":"uint256[2]"},{"name":"_max_burn_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_imbalance","inputs":[{"name":"_amounts","type":"uint256[2]"},{"name":"_max_burn_amount","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"calc_withdraw_one_coin","inputs":[{"name":"_burn_amount","type":"uint256"},{"name":"i","type":"int128"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_one_coin","inputs":[{"name":"_burn_amount","type":"uint256"},{"name":"i","type":"int128"},{"name":"_min_received","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_one_coin","inputs":[{"name":"_burn_amount","type":"uint256"},{"name":"i","type":"int128"},{"name":"_min_received","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"ramp_A","inputs":[{"name":"_future_A","type":"uint256"},{"name":"_future_time","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"stop_ramp_A","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"admin_balances","inputs":[{"name":"i","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"withdraw_admin_fees","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"commit_new_fee","inputs":[{"name":"_new_fee","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"apply_new_fee","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_ma_exp_time","inputs":[{"name":"_ma_exp_time","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"coins","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"balances","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"fee","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"future_fee","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"admin_action_deadline","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"initial_A","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"future_A","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"initial_A_time","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"future_A_time","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"allowance","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32"}]},{"stateMutability":"view","type":"function","name":"nonces","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"ma_exp_time","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"ma_last_time","inputs":[],"outputs":[{"name":"","type":"uint256"}]}]
\ No newline at end of file
diff --git a/tests/abis/curve-router.abi.json b/tests/abis/curve-router.abi.json
new file mode 100644
index 00000000..9f08d194
--- /dev/null
+++ b/tests/abis/curve-router.abi.json
@@ -0,0 +1 @@
+[{"name":"TokenExchange","inputs":[{"name":"buyer","type":"address","indexed":true},{"name":"receiver","type":"address","indexed":true},{"name":"pool","type":"address","indexed":true},{"name":"token_sold","type":"address","indexed":false},{"name":"token_bought","type":"address","indexed":false},{"name":"amount_sold","type":"uint256","indexed":false},{"name":"amount_bought","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"ExchangeMultiple","inputs":[{"name":"buyer","type":"address","indexed":true},{"name":"receiver","type":"address","indexed":true},{"name":"route","type":"address[9]","indexed":false},{"name":"swap_params","type":"uint256[3][4]","indexed":false},{"name":"pools","type":"address[4]","indexed":false},{"name":"amount_sold","type":"uint256","indexed":false},{"name":"amount_bought","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_address_provider","type":"address"},{"name":"_calculator","type":"address"},{"name":"_weth","type":"address"}],"outputs":[]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"function","name":"exchange_with_best_rate","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange_with_best_rate","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange_multiple","inputs":[{"name":"_route","type":"address[9]"},{"name":"_swap_params","type":"uint256[3][4]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange_multiple","inputs":[{"name":"_route","type":"address[9]"},{"name":"_swap_params","type":"uint256[3][4]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"},{"name":"_pools","type":"address[4]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange_multiple","inputs":[{"name":"_route","type":"address[9]"},{"name":"_swap_params","type":"uint256[3][4]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"},{"name":"_pools","type":"address[4]"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_best_rate","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_best_rate","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_exclude_pools","type":"address[8]"}],"outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_exchange_amount","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_input_amount","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_exchange_amounts","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amounts","type":"uint256[100]"}],"outputs":[{"name":"","type":"uint256[100]"}]},{"stateMutability":"view","type":"function","name":"get_exchange_multiple_amount","inputs":[{"name":"_route","type":"address[9]"},{"name":"_swap_params","type":"uint256[3][4]"},{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_exchange_multiple_amount","inputs":[{"name":"_route","type":"address[9]"},{"name":"_swap_params","type":"uint256[3][4]"},{"name":"_amount","type":"uint256"},{"name":"_pools","type":"address[4]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_calculator","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"update_registry_address","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"set_calculator","inputs":[{"name":"_pool","type":"address"},{"name":"_calculator","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"set_default_calculator","inputs":[{"name":"_calculator","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"claim_balance","inputs":[{"name":"_token","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"set_killed","inputs":[{"name":"_is_killed","type":"bool"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"registry","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"factory_registry","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"crypto_registry","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"default_calculator","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"is_killed","inputs":[],"outputs":[{"name":"","type":"bool"}]}]
\ No newline at end of file
diff --git a/tests/abis/flipper.abi.json b/tests/abis/flipper.abi.json
new file mode 100644
index 00000000..1004b8f7
--- /dev/null
+++ b/tests/abis/flipper.abi.json
@@ -0,0 +1 @@
+[{"constant":true,"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyOusdWithUsdt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyOusdWithDai","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sellOusdForDai","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyOusdWithUsdc","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sellOusdForUsdc","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sellOusdForUsdt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"transferGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"rebaseOptIn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"PendingGovernorshipTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorshipTransferred","type":"event"}]
\ No newline at end of file
diff --git a/tests/abis/ousd-curve-pool.abi.json b/tests/abis/ousd-curve-pool.abi.json
new file mode 100644
index 00000000..5f764dad
--- /dev/null
+++ b/tests/abis/ousd-curve-pool.abi.json
@@ -0,0 +1 @@
+[{"name":"Transfer","inputs":[{"type":"address","name":"sender","indexed":true},{"type":"address","name":"receiver","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false,"type":"event"},{"name":"Approval","inputs":[{"type":"address","name":"owner","indexed":true},{"type":"address","name":"spender","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false,"type":"event"},{"name":"TokenExchange","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"TokenExchangeUnderlying","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityOne","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"token_amount","indexed":false},{"type":"uint256","name":"coin_amount","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewAdmin","inputs":[{"type":"uint256","name":"deadline","indexed":true},{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewFee","inputs":[{"type":"uint256","name":"deadline","indexed":true},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewFee","inputs":[{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"RampA","inputs":[{"type":"uint256","name":"old_A","indexed":false},{"type":"uint256","name":"new_A","indexed":false},{"type":"uint256","name":"initial_time","indexed":false},{"type":"uint256","name":"future_time","indexed":false}],"anonymous":false,"type":"event"},{"name":"StopRampA","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"t","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"name":"initialize","outputs":[],"inputs":[{"type":"string","name":"_name"},{"type":"string","name":"_symbol"},{"type":"address","name":"_coin"},{"type":"uint256","name":"_decimals"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"},{"type":"address","name":"_admin"}],"stateMutability":"nonpayable","type":"function","gas":470049},{"name":"decimals","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":291},{"name":"transfer","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":75402},{"name":"transferFrom","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_from"},{"type":"address","name":"_to"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":112037},{"name":"approve","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_spender"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":37854},{"name":"get_previous_balances","outputs":[{"type":"uint256[2]","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2254},{"name":"get_balances","outputs":[{"type":"uint256[2]","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2284},{"name":"get_twap_balances","outputs":[{"type":"uint256[2]","name":""}],"inputs":[{"type":"uint256[2]","name":"_first_balances"},{"type":"uint256[2]","name":"_last_balances"},{"type":"uint256","name":"_time_elapsed"}],"stateMutability":"view","type":"function","gas":1522},{"name":"get_price_cumulative_last","outputs":[{"type":"uint256[2]","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2344},{"name":"admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":621},{"name":"A","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":5859},{"name":"A_precise","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":5821},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1011891},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"bool","name":"_is_deposit"}],"stateMutability":"view","type":"function"},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"bool","name":"_is_deposit"},{"type":"bool","name":"_previous"}],"stateMutability":"view","type":"function"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"uint256","name":"_min_mint_amount"}],"stateMutability":"nonpayable","type":"function"},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"uint256","name":"_min_mint_amount"},{"type":"address","name":"_receiver"}],"stateMutability":"nonpayable","type":"function"},{"name":"get_dy","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"stateMutability":"view","type":"function"},{"name":"get_dy","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256[2]","name":"_balances"}],"stateMutability":"view","type":"function"},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"stateMutability":"view","type":"function"},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256[2]","name":"_balances"}],"stateMutability":"view","type":"function"},{"name":"exchange","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"stateMutability":"nonpayable","type":"function"},{"name":"exchange","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"},{"type":"address","name":"_receiver"}],"stateMutability":"nonpayable","type":"function"},{"name":"exchange_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"stateMutability":"nonpayable","type":"function"},{"name":"exchange_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"},{"type":"address","name":"_receiver"}],"stateMutability":"nonpayable","type":"function"},{"name":"remove_liquidity","outputs":[{"type":"uint256[2]","name":""}],"inputs":[{"type":"uint256","name":"_burn_amount"},{"type":"uint256[2]","name":"_min_amounts"}],"stateMutability":"nonpayable","type":"function"},{"name":"remove_liquidity","outputs":[{"type":"uint256[2]","name":""}],"inputs":[{"type":"uint256","name":"_burn_amount"},{"type":"uint256[2]","name":"_min_amounts"},{"type":"address","name":"_receiver"}],"stateMutability":"nonpayable","type":"function"},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"uint256","name":"_max_burn_amount"}],"stateMutability":"nonpayable","type":"function"},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"_amounts"},{"type":"uint256","name":"_max_burn_amount"},{"type":"address","name":"_receiver"}],"stateMutability":"nonpayable","type":"function"},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_burn_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function"},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_burn_amount"},{"type":"int128","name":"i"},{"type":"bool","name":"_previous"}],"stateMutability":"view","type":"function"},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_burn_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_received"}],"stateMutability":"nonpayable","type":"function"},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_burn_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_received"},{"type":"address","name":"_receiver"}],"stateMutability":"nonpayable","type":"function"},{"name":"ramp_A","outputs":[],"inputs":[{"type":"uint256","name":"_future_A"},{"type":"uint256","name":"_future_time"}],"stateMutability":"nonpayable","type":"function","gas":152464},{"name":"stop_ramp_A","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":149225},{"name":"admin_balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"i"}],"stateMutability":"view","type":"function","gas":3601},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":11347},{"name":"admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2141},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2280},{"name":"balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2310},{"name":"fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2231},{"name":"block_timestamp_last","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2261},{"name":"initial_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2291},{"name":"future_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2321},{"name":"initial_A_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2351},{"name":"future_A_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2381},{"name":"name","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":8813},{"name":"symbol","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":7866},{"name":"balanceOf","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2686},{"name":"allowance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"},{"type":"address","name":"arg1"}],"stateMutability":"view","type":"function","gas":2931},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2531}]
\ No newline at end of file
diff --git a/tests/abis/uniswap-v3.abi.json b/tests/abis/uniswap-v3.abi.json
new file mode 100644
index 00000000..2d94b59f
--- /dev/null
+++ b/tests/abis/uniswap-v3.abi.json
@@ -0,0 +1 @@
+[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH9","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH9","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMinimum","type":"uint256"}],"internalType":"struct ISwapRouter.ExactInputParams","name":"params","type":"tuple"}],"name":"exactInput","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMinimum","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct ISwapRouter.ExactInputSingleParams","name":"params","type":"tuple"}],"name":"exactInputSingle","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct ISwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct ISwapRouter.ExactOutputSingleParams","name":"params","type":"tuple"}],"name":"exactOutputSingle","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"refundETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitAllowed","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitAllowedIfNecessary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitIfNecessary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"feeBips","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"sweepTokenWithFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"unwrapWETH9","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"feeBips","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"unwrapWETH9WithFee","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
\ No newline at end of file
diff --git a/tests/abis/vault-core.abi.json b/tests/abis/vault-core.abi.json
new file mode 100644
index 00000000..abeb9356
--- /dev/null
+++ b/tests/abis/vault-core.abi.json
@@ -0,0 +1 @@
+[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"AllocateThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_asset","type":"address"},{"indexed":false,"internalType":"address","name":"_strategy","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"AssetAllocated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_asset","type":"address"},{"indexed":false,"internalType":"address","name":"_strategy","type":"address"}],"name":"AssetDefaultStrategyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_asset","type":"address"}],"name":"AssetSupported","type":"event"},{"anonymous":false,"inputs":[],"name":"CapitalPaused","type":"event"},{"anonymous":false,"inputs":[],"name":"CapitalUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxSupplyDiff","type":"uint256"}],"name":"MaxSupplyDiffChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"NetOusdMintForStrategyThresholdChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_ousdMetaStrategy","type":"address"}],"name":"OusdMetaStrategyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"PendingGovernorshipTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_priceProvider","type":"address"}],"name":"PriceProviderUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"RebasePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"RebaseThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"RebaseUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_redeemFeeBps","type":"uint256"}],"name":"RedeemFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"StrategistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"}],"name":"StrategyApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"}],"name":"StrategyRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_basis","type":"uint256"}],"name":"SwapAllowedUndervalueChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"_basis","type":"uint256"}],"name":"SwapSlippageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"_toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"_fromAssetAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toAssetAmount","type":"uint256"}],"name":"Swapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SwapperChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"TrusteeAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_basis","type":"uint256"}],"name":"TrusteeFeeBpsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_vaultBuffer","type":"uint256"}],"name":"VaultBufferUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_yield","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"YieldDistribution","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"allocate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"assetDefaultStrategies","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoAllocateThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnForStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calculateRedeemOutputs","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capitalPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"}],"name":"checkBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllAssets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllStrategies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"}],"name":"getAssetConfig","outputs":[{"components":[{"internalType":"bool","name":"isSupported","type":"bool"},{"internalType":"enum VaultStorage.UnitConversion","name":"unitConversion","type":"uint8"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint16","name":"allowedOracleSlippageBps","type":"uint16"}],"internalType":"struct VaultStorage.Asset","name":"config","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAssetCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStrategyCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"}],"name":"isSupportedAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyDiff","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minimumOusdAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintForStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"netOusdMintForStrategyThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"netOusdMintedForStrategy","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ousdMetaStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"priceUnitMint","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"priceUnitRedeem","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebasePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minimumUnitAmount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumUnitAmount","type":"uint256"}],"name":"redeemAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemFeeBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImpl","type":"address"}],"name":"setAdminImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategistAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalValue","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"transferGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trusteeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trusteeFeeBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
\ No newline at end of file
diff --git a/tests/abis/zapper.abi.json b/tests/abis/zapper.abi.json
new file mode 100644
index 00000000..b10f011e
--- /dev/null
+++ b/tests/abis/zapper.abi.json
@@ -0,0 +1 @@
+[{"inputs":[{"internalType":"address","name":"_oeth","type":"address"},{"internalType":"address","name":"_vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Zap","type":"event"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minOETH","type":"uint256"}],"name":"depositSFRXETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"frxeth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oeth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sfrxeth","outputs":[{"internalType":"contract ISfrxETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH9","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
\ No newline at end of file
diff --git a/tests/ethereum_build/.DS_Store b/tests/ethereum_build/.DS_Store
new file mode 100644
index 00000000..f57d65af
Binary files /dev/null and b/tests/ethereum_build/.DS_Store differ
diff --git a/tests/oeth/.DS_Store b/tests/oeth/.DS_Store
new file mode 100644
index 00000000..135733a9
Binary files /dev/null and b/tests/oeth/.DS_Store differ
diff --git a/tests/oeth/test_oeth_curve_swap.py b/tests/oeth/test_oeth_curve_swap.py
new file mode 100644
index 00000000..a42de5a9
--- /dev/null
+++ b/tests/oeth/test_oeth_curve_swap.py
@@ -0,0 +1,132 @@
+from web3 import Web3
+from tests.utils import run_test, load_contract
+
+contract_curve_pool = load_contract(
+ "94b17476a93b3262d87b9a326965d1e91f9c13e7",
+ "curve-pool"
+)
+
+contract_curve_router = load_contract(
+ "94b17476a93b3262d87b9a326965d1e91f9c13e7",
+ "curve-router"
+)
+
+def test_oeth_curve_swap_from_oeth(backend, firmware, navigator, test_name):
+ data = contract_curve_pool.encodeABI("exchange", [
+ 1,
+ 0,
+ Web3.to_wei(1, "ether"),
+ Web3.to_wei(0.975, "ether")
+ ])
+
+ run_test(contract_curve_pool, data, backend, firmware, navigator, test_name)
+
+def test_oeth_curve_swap_to_oeth(backend, firmware, navigator, test_name):
+ data = contract_curve_pool.encodeABI("exchange", [
+ 0,
+ 1,
+ Web3.to_wei(1, "ether"),
+ Web3.to_wei(0.995, "ether")
+ ])
+
+ run_test(contract_curve_pool, data, backend, firmware, navigator, test_name)
+
+def test_oeth_curve_swap_multiple_oeth_to_reth(backend, firmware, navigator, test_name):
+ data = contract_curve_router.encodeABI("exchange_multiple", [
+ [
+ bytes.fromhex("856c4Efb76C1D1AE02e20CEB03A2A6a08b0b8dC3"),
+ bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"),
+ bytes.fromhex("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"),
+ bytes.fromhex("0f3159811670c117c372428d4e69ac32325e4d0f"),
+ bytes.fromhex("ae78736cd615f374d3085123a210448e74fc6393"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ ],
+ [
+ [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)
+
+def test_oeth_curve_swap_multiple_reth_to_oeth(backend, firmware, navigator, test_name):
+ data = contract_curve_router.encodeABI("exchange_multiple", [
+ [
+ bytes.fromhex("ae78736cd615f374d3085123a210448e74fc6393"),
+ bytes.fromhex("0f3159811670c117c372428d4e69ac32325e4d0f"),
+ bytes.fromhex("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"),
+ bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"),
+ bytes.fromhex("856c4Efb76C1D1AE02e20CEB03A2A6a08b0b8dC3"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ ],
+ [
+ [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)
+
+def test_oeth_curve_swap_multiple_eth_to_oeth(backend, firmware, navigator, test_name):
+ data = contract_curve_router.encodeABI("exchange_multiple", [
+ [
+ bytes.fromhex("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"),
+ bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"),
+ bytes.fromhex("856c4Efb76C1D1AE02e20CEB03A2A6a08b0b8dC3"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ ],
+ [
+ [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)
+
+def test_oeth_curve_swap_multiple_oeth_to_eth(backend, firmware, navigator, test_name):
+ data = contract_curve_router.encodeABI("exchange_multiple", [
+ [
+ bytes.fromhex("856c4Efb76C1D1AE02e20CEB03A2A6a08b0b8dC3"),
+ bytes.fromhex("94b17476a93b3262d87b9a326965d1e91f9c13e7"),
+ bytes.fromhex("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ bytes.fromhex("0000000000000000000000000000000000000000"),
+ ],
+ [
+ [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/oeth/test_oeth_vault.py b/tests/oeth/test_oeth_vault.py
new file mode 100644
index 00000000..1d118d16
--- /dev/null
+++ b/tests/oeth/test_oeth_vault.py
@@ -0,0 +1,51 @@
+from web3 import Web3
+from tests.utils import run_test, load_contract
+
+contract_oeth_vault = load_contract(
+ "39254033945AA2E4809Cc2977E7087BEE48bd7Ab",
+ "vault-core"
+)
+
+def test_oeth_vault_mint_weth(backend, firmware, navigator, test_name):
+ data = contract_oeth_vault.encodeABI("mint", [
+ bytes.fromhex("C02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"),
+ Web3.to_wei(1, "ether"),
+ Web3.to_wei(1, "ether")
+ ])
+
+ run_test(contract_oeth_vault, data, backend, firmware, navigator, test_name)
+
+def test_oeth_vault_mint_reth(backend, firmware, navigator, test_name):
+ data = contract_oeth_vault.encodeABI("mint", [
+ bytes.fromhex("ae78736cd615f374d3085123a210448e74fc6393"),
+ Web3.to_wei(1, "ether"),
+ Web3.to_wei(1, "ether")
+ ])
+
+ run_test(contract_oeth_vault, data, backend, firmware, navigator, test_name)
+
+def test_oeth_vault_mint_steth(backend, firmware, navigator, test_name):
+ data = contract_oeth_vault.encodeABI("mint", [
+ bytes.fromhex("ae7ab96520de3a18e5e111b5eaab095312d7fe84"),
+ Web3.to_wei(1, "ether"),
+ Web3.to_wei(1, "ether")
+ ])
+
+ run_test(contract_oeth_vault, data, backend, firmware, navigator, test_name)
+
+def test_oeth_vault_mint_frxeth(backend, firmware, navigator, test_name):
+ data = contract_oeth_vault.encodeABI("mint", [
+ bytes.fromhex("5e8422345238f34275888049021821e8e08caa1f"),
+ Web3.to_wei(1, "ether"),
+ Web3.to_wei(1, "ether")
+ ])
+
+ run_test(contract_oeth_vault, data, backend, firmware, navigator, test_name)
+
+def test_oeth_vault_redeem(backend, firmware, navigator, test_name):
+ data = contract_oeth_vault.encodeABI("redeem", [
+ Web3.to_wei(1, "ether"),
+ Web3.to_wei(0.88, "ether")
+ ])
+
+ run_test(contract_oeth_vault, data, backend, firmware, navigator, test_name)
diff --git a/tests/oeth/test_oeth_wrap.py b/tests/oeth/test_oeth_wrap.py
new file mode 100644
index 00000000..c9bf6a37
--- /dev/null
+++ b/tests/oeth/test_oeth_wrap.py
@@ -0,0 +1,56 @@
+from web3 import Web3
+from tests.utils import run_test, load_contract
+
+from ledger_app_clients.ethereum.client import EthAppClient
+import ledger_app_clients.ethereum.response_parser as ResponseParser
+
+contract_woeth = load_contract(
+ "DcEe70654261AF21C44c093C300eD3Bb97b78192",
+ "4626-vault"
+)
+
+def test_oeth_wrap(backend, firmware, navigator, test_name):
+ client = EthAppClient(backend)
+
+ with client.get_public_addr(display=False):
+ pass
+ _, addr, _ = ResponseParser.pk_addr(client.response().data)
+
+ data = contract_woeth.encodeABI("deposit", [
+ Web3.to_wei(1, "ether"),
+ addr
+ ])
+
+ run_test(contract_woeth, data, backend, firmware, navigator, test_name)
+
+def test_oeth_wrap_different_beneficiary(backend, firmware, navigator, test_name):
+ data = contract_woeth.encodeABI("deposit", [
+ Web3.to_wei(1, "ether"),
+ bytes.fromhex("000000000000000000000000000000000000dEaD")
+ ])
+
+ run_test(contract_woeth, data, backend, firmware, navigator, test_name)
+
+def test_oeth_unwrap(backend, firmware, navigator, test_name):
+ client = EthAppClient(backend)
+
+ with client.get_public_addr(display=False):
+ pass
+ _, addr, _ = ResponseParser.pk_addr(client.response().data)
+
+ data = contract_woeth.encodeABI("redeem", [
+ Web3.to_wei(1, "ether"),
+ addr,
+ addr
+ ])
+
+ run_test(contract_woeth, data, backend, firmware, navigator, test_name)
+
+def test_oeth_unwrap_different_beneficiary(backend, firmware, navigator, test_name):
+ data = contract_woeth.encodeABI("redeem", [
+ Web3.to_wei(1, "ether"),
+ bytes.fromhex("000000000000000000000000000000000000dEaD"),
+ bytes.fromhex("000000000000000000000000000000000002dEaD")
+ ])
+
+ run_test(contract_woeth, data, backend, firmware, navigator, test_name)
diff --git a/tests/oeth/test_zapper.py b/tests/oeth/test_zapper.py
new file mode 100644
index 00000000..794e2f5b
--- /dev/null
+++ b/tests/oeth/test_zapper.py
@@ -0,0 +1,28 @@
+from web3 import Web3
+from tests.utils import run_test, load_contract
+
+contract_oeth_zapper = load_contract(
+ "9858e47bcbbe6fbac040519b02d7cd4b2c470c66",
+ "zapper"
+)
+
+def test_oeth_zapper_deposit_eth(backend, firmware, navigator, test_name):
+ data = contract_oeth_zapper.encodeABI("deposit", [])
+
+ run_test(
+ contract_oeth_zapper,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name,
+ value=Web3.to_wei(1, "ether")
+ )
+
+def test_oeth_zapper_deposit_sfrxeth(backend, firmware, navigator, test_name):
+ data = contract_oeth_zapper.encodeABI("depositSFRXETH", [
+ Web3.to_wei(1, "ether"),
+ Web3.to_wei(0.991, "ether")
+ ])
+
+ run_test(contract_oeth_zapper, data, backend, firmware, navigator, test_name)
diff --git a/tests/ousd/.DS_Store b/tests/ousd/.DS_Store
new file mode 100644
index 00000000..135733a9
Binary files /dev/null and b/tests/ousd/.DS_Store differ
diff --git a/tests/ousd/test_flipper.py b/tests/ousd/test_flipper.py
new file mode 100644
index 00000000..14c0c668
--- /dev/null
+++ b/tests/ousd/test_flipper.py
@@ -0,0 +1,91 @@
+from web3 import Web3
+from tests.utils import run_test, load_contract
+
+contract_ousd_flipper = load_contract(
+ "cecaD69d7D4Ed6D52eFcFA028aF8732F27e08F70",
+ "flipper"
+)
+
+def test_ousd_flipper_flip_with_usdc(backend, firmware, navigator, test_name):
+ data = contract_ousd_flipper.encodeABI("buyOusdWithUsdc", [
+ Web3.to_wei(10000, "ether")
+ ])
+
+ run_test(
+ contract_ousd_flipper,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
+
+def test_ousd_flipper_flip_to_usdc(backend, firmware, navigator, test_name):
+ data = contract_ousd_flipper.encodeABI("sellOusdForUsdc", [
+ Web3.to_wei(10000, "ether")
+ ])
+
+ run_test(
+ contract_ousd_flipper,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
+
+def test_ousd_flipper_flip_with_usdt(backend, firmware, navigator, test_name):
+ data = contract_ousd_flipper.encodeABI("buyOusdWithUsdt", [
+ Web3.to_wei(10000, "ether"),
+ ])
+
+ run_test(
+ contract_ousd_flipper,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
+
+def test_ousd_flipper_flip_to_usdt(backend, firmware, navigator, test_name):
+ data = contract_ousd_flipper.encodeABI("sellOusdForUsdt", [
+ Web3.to_wei(10000, "ether")
+ ])
+
+ run_test(
+ contract_ousd_flipper,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
+
+def test_ousd_flipper_flip_with_dai(backend, firmware, navigator, test_name):
+ data = contract_ousd_flipper.encodeABI("buyOusdWithDai", [
+ Web3.to_wei(10000, "ether")
+ ])
+
+ run_test(
+ contract_ousd_flipper,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
+
+def test_ousd_flipper_flip_to_dai(backend, firmware, navigator, test_name):
+ data = contract_ousd_flipper.encodeABI("sellOusdForDai", [
+ Web3.to_wei(10000, "ether")
+ ])
+
+ run_test(
+ contract_ousd_flipper,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
diff --git a/tests/ousd/test_ousd_curve_swap.py b/tests/ousd/test_ousd_curve_swap.py
new file mode 100644
index 00000000..1108ea37
--- /dev/null
+++ b/tests/ousd/test_ousd_curve_swap.py
@@ -0,0 +1,67 @@
+from web3 import Web3
+from tests.utils import run_test, load_contract
+
+contract_curve_pool = load_contract(
+ "87650D7bbfC3A9F10587d7778206671719d9910D",
+ "ousd-curve-pool"
+)
+
+def test_ousd_curve_swap_from_dai(backend, firmware, navigator, test_name):
+ data = contract_curve_pool.encodeABI("exchange_underlying", [
+ 1,
+ 0,
+ Web3.to_wei(10000, "ether"),
+ Web3.to_wei(9750, "ether")
+ ])
+
+ run_test(contract_curve_pool, data, backend, firmware, navigator, test_name)
+
+def test_ousd_curve_swap_to_dai(backend, firmware, navigator, test_name):
+ data = contract_curve_pool.encodeABI("exchange_underlying", [
+ 0,
+ 1,
+ Web3.to_wei(10000, "ether"),
+ Web3.to_wei(9750, "ether")
+ ])
+
+ run_test(contract_curve_pool, data, backend, firmware, navigator, test_name)
+
+def test_ousd_curve_swap_from_usdt(backend, firmware, navigator, test_name):
+ data = contract_curve_pool.encodeABI("exchange_underlying", [
+ 3,
+ 0,
+ Web3.to_wei(10000, "mwei"),
+ Web3.to_wei(9750, "ether")
+ ])
+
+ run_test(contract_curve_pool, data, backend, firmware, navigator, test_name)
+
+def test_ousd_curve_swap_to_usdt(backend, firmware, navigator, test_name):
+ data = contract_curve_pool.encodeABI("exchange_underlying", [
+ 0,
+ 3,
+ Web3.to_wei(10000, "ether"),
+ Web3.to_wei(9750, "mwei")
+ ])
+
+ run_test(contract_curve_pool, data, backend, firmware, navigator, test_name)
+
+def test_ousd_curve_swap_from_usdc(backend, firmware, navigator, test_name):
+ data = contract_curve_pool.encodeABI("exchange_underlying", [
+ 2,
+ 0,
+ Web3.to_wei(10000, "mwei"),
+ Web3.to_wei(9750, "ether")
+ ])
+
+ run_test(contract_curve_pool, data, backend, firmware, navigator, test_name)
+
+def test_ousd_curve_swap_to_usdc(backend, firmware, navigator, test_name):
+ data = contract_curve_pool.encodeABI("exchange_underlying", [
+ 0,
+ 2,
+ Web3.to_wei(10000, "ether"),
+ Web3.to_wei(9750, "mwei")
+ ])
+
+ run_test(contract_curve_pool, data, backend, firmware, navigator, test_name)
diff --git a/tests/ousd/test_ousd_univ3.py b/tests/ousd/test_ousd_univ3.py
new file mode 100644
index 00000000..af7801bb
--- /dev/null
+++ b/tests/ousd/test_ousd_univ3.py
@@ -0,0 +1,133 @@
+from web3 import Web3
+from tests.utils import run_test, load_contract
+
+contract_univ3_router = load_contract(
+ "e592427a0aece92de3edee1f18e0157c05861564",
+ "uniswap-v3"
+)
+
+def test_ousd_univ3_swap_to_usdc(backend, firmware, navigator, test_name):
+ data = contract_univ3_router.encodeABI("exactInput", [
+ [
+ bytes.fromhex("2a8e1e676ec238d8a992307b495b45b3feaa5e860001f4dac17f958d2ee523a2206206994597c13d831ec7000064a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"),
+ bytes.fromhex("dead0000000dead000000dead00000000000dead"),
+ 0,
+ Web3.to_wei(10000, "ether"),
+ Web3.to_wei(9500, "mwei"),
+ ]
+ ])
+
+ run_test(
+ contract_univ3_router,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
+
+def test_ousd_univ3_swap_from_usdc(backend, firmware, navigator, test_name):
+ data = contract_univ3_router.encodeABI("exactInput", [
+ [
+ bytes.fromhex("a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480001f46b175474e89094c44da98b954eedeac495271d0f0001f42a8e1e676ec238d8a992307b495b45b3feaa5e86"),
+ bytes.fromhex("dead0000000dead000000dead00000000000dead"),
+ 0,
+ Web3.to_wei(9500, "mwei"),
+ Web3.to_wei(10000, "ether"),
+ ]
+ ])
+
+ run_test(
+ contract_univ3_router,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
+
+def test_ousd_univ3_swap_to_usdt(backend, firmware, navigator, test_name):
+ data = contract_univ3_router.encodeABI("exactInputSingle", [
+ [
+ bytes.fromhex("2a8e1e676ec238d8a992307b495b45b3feaa5e86"),
+ bytes.fromhex("dac17f958d2ee523a2206206994597c13d831ec7"),
+ 500,
+ bytes.fromhex("dead0000000dead000000dead00000000000dead"),
+ 0,
+ Web3.to_wei(10000, "ether"),
+ Web3.to_wei(9550, "mwei"),
+ 0
+ ]
+ ])
+
+ run_test(
+ contract_univ3_router,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
+
+def test_ousd_univ3_swap_from_usdt(backend, firmware, navigator, test_name):
+ data = contract_univ3_router.encodeABI("exactInputSingle", [
+ [
+ bytes.fromhex("dac17f958d2ee523a2206206994597c13d831ec7"),
+ bytes.fromhex("2a8e1e676ec238d8a992307b495b45b3feaa5e86"),
+ 500,
+ bytes.fromhex("dead0000000dead000000dead00000000000dead"),
+ 0,
+ Web3.to_wei(9550, "mwei"),
+ Web3.to_wei(10000, "ether"),
+ 0
+ ]
+ ])
+
+ run_test(
+ contract_univ3_router,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
+
+def test_ousd_univ3_swap_to_dai(backend, firmware, navigator, test_name):
+ data = contract_univ3_router.encodeABI("exactInput", [
+ [
+ bytes.fromhex("2a8e1e676ec238d8a992307b495b45b3feaa5e860001f4dac17f958d2ee523a2206206994597c13d831ec70000646b175474e89094c44da98b954eedeac495271d0f"),
+ bytes.fromhex("dead0000000dead000000dead00000000000dead"),
+ 0,
+ Web3.to_wei(10000, "ether"),
+ Web3.to_wei(9500, "ether"),
+ ]
+ ])
+
+ run_test(
+ contract_univ3_router,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
+
+def test_ousd_univ3_swap_from_dai(backend, firmware, navigator, test_name):
+ data = contract_univ3_router.encodeABI("exactInput", [
+ [
+ bytes.fromhex("6b175474e89094c44da98b954eedeac495271d0f0001f46b175474e89094c44da98b954eedeac495271d0f0001f42a8e1e676ec238d8a992307b495b45b3feaa5e86"),
+ bytes.fromhex("dead0000000dead000000dead00000000000dead"),
+ 0,
+ Web3.to_wei(9600, "ether"),
+ Web3.to_wei(10000, "ether"),
+ ]
+ ])
+
+ run_test(
+ contract_univ3_router,
+ data,
+ backend,
+ firmware,
+ navigator,
+ test_name
+ )
\ No newline at end of file
diff --git a/tests/ousd/test_ousd_vault.py b/tests/ousd/test_ousd_vault.py
new file mode 100644
index 00000000..cabdd6ef
--- /dev/null
+++ b/tests/ousd/test_ousd_vault.py
@@ -0,0 +1,42 @@
+from web3 import Web3
+from tests.utils import run_test, load_contract
+
+contract_ousd_vault = load_contract(
+ "E75D77B1865Ae93c7eaa3040B038D7aA7BC02F70",
+ "vault-core"
+)
+
+def test_ousd_vault_mint_dai(backend, firmware, navigator, test_name):
+ data = contract_ousd_vault.encodeABI("mint", [
+ bytes.fromhex("6b175474e89094c44da98b954eedeac495271d0f"),
+ Web3.to_wei(10000, "ether"),
+ Web3.to_wei(9500, "ether")
+ ])
+
+ run_test(contract_ousd_vault, data, backend, firmware, navigator, test_name)
+
+def test_ousd_vault_mint_usdc(backend, firmware, navigator, test_name):
+ data = contract_ousd_vault.encodeABI("mint", [
+ bytes.fromhex("a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"),
+ Web3.to_wei(10000, "mwei"),
+ Web3.to_wei(9500, "ether")
+ ])
+
+ run_test(contract_ousd_vault, data, backend, firmware, navigator, test_name)
+
+def test_ousd_vault_mint_usdt(backend, firmware, navigator, test_name):
+ data = contract_ousd_vault.encodeABI("mint", [
+ bytes.fromhex("dac17f958d2ee523a2206206994597c13d831ec7"),
+ Web3.to_wei(10000, "mwei"),
+ Web3.to_wei(9500, "ether")
+ ])
+
+ run_test(contract_ousd_vault, data, backend, firmware, navigator, test_name)
+
+def test_ousd_vault_redeem(backend, firmware, navigator, test_name):
+ data = contract_ousd_vault.encodeABI("redeem", [
+ Web3.to_wei(10000, "ether"),
+ Web3.to_wei(9088, "ether")
+ ])
+
+ run_test(contract_ousd_vault, data, backend, firmware, navigator, test_name)
diff --git a/tests/ousd/test_ousd_wrap.py b/tests/ousd/test_ousd_wrap.py
new file mode 100644
index 00000000..a6dec836
--- /dev/null
+++ b/tests/ousd/test_ousd_wrap.py
@@ -0,0 +1,56 @@
+from web3 import Web3
+from tests.utils import run_test, load_contract
+
+from ledger_app_clients.ethereum.client import EthAppClient
+import ledger_app_clients.ethereum.response_parser as ResponseParser
+
+contract_wousd = load_contract(
+ "D2af830E8CBdFed6CC11Bab697bB25496ed6FA62",
+ "4626-vault"
+)
+
+def test_ousd_wrap(backend, firmware, navigator, test_name):
+ client = EthAppClient(backend)
+
+ with client.get_public_addr(display=False):
+ pass
+ _, addr, _ = ResponseParser.pk_addr(client.response().data)
+
+ data = contract_wousd.encodeABI("deposit", [
+ Web3.to_wei(1, "ether"),
+ addr
+ ])
+
+ run_test(contract_wousd, data, backend, firmware, navigator, test_name)
+
+def test_ousd_wrap_different_beneficiary(backend, firmware, navigator, test_name):
+ data = contract_wousd.encodeABI("deposit", [
+ Web3.to_wei(1, "ether"),
+ bytes.fromhex("000000000000000000000000000000000000dEaD")
+ ])
+
+ run_test(contract_wousd, data, backend, firmware, navigator, test_name)
+
+def test_ousd_unwrap(backend, firmware, navigator, test_name):
+ client = EthAppClient(backend)
+
+ with client.get_public_addr(display=False):
+ pass
+ _, addr, _ = ResponseParser.pk_addr(client.response().data)
+
+ data = contract_wousd.encodeABI("redeem", [
+ Web3.to_wei(1, "ether"),
+ addr,
+ addr
+ ])
+
+ run_test(contract_wousd, data, backend, firmware, navigator, test_name)
+
+def test_ousd_unwrap_different_beneficiary(backend, firmware, navigator, test_name):
+ data = contract_wousd.encodeABI("redeem", [
+ Web3.to_wei(1, "ether"),
+ bytes.fromhex("000000000000000000000000000000000000dEaD"),
+ bytes.fromhex("000000000000000000000000000000000002dEaD")
+ ])
+
+ run_test(contract_wousd, data, backend, firmware, navigator, test_name)
diff --git a/tests/plugin_binaries/nanos/bin/app.apdu b/tests/plugin_binaries/nanos/bin/app.apdu
new file mode 100644
index 00000000..fc00df12
--- /dev/null
+++ b/tests/plugin_binaries/nanos/bin/app.apdu
@@ -0,0 +1,34 @@
+e0000000130c11506c7567696e426f696c6572706c617465
+e0000000150b0000164000000000000000510000080000000001
+e0000000050500000000
+e0000000d30600008cb0044662b600f083fc6d46284601f045f9a88585b2002d0ed1684600f0bcfe0a90002c1cd020680e49884202d0616800f016fc00f08efe6c460020a0850a9800f0aafe08487844294600f097fc00f097fea042eed10a9800f09efe00f07afe00f042fcff0100004b15000003b401480be000003200000003b4014805e000004400000003b40248ffe70249084700007100000001001200f0b593b003920491054601231898014699431e224a4019990a430027002a3a4619d1059306aa3324234600f06ff800285fd006ae30462146
+e0000000d30600d001f07ef93318221a30497944184601f0f7f83046214601f073f90246059b06a8059280182a4e7e44e95d0f240a092140715c4170b15c0170801c7f1c142ff3d11902039f3846fff7afff002100283ad12020019006a802900090059b2833012238460f4605921146029afff797ff3946002828d10020049f059b05e0715c059b3954401c28281ad002461a404308e95c002a03d021400929f0d902e009090929ecd906affb5c920004275740fb401a07715c00d52039049fe1e7002103e02820002139541946084613b0f0bd16130000
+e0000000d30601a0fd120000f0b587b002930446002001920546c7b27b1c029883422bd2009306950a250026204605912a46334600f03afe049003912a46069d334600f053fe019a201a30210143d155681c0921091b3146059b9941049c0399dad3c0b216542806009b07d0d05d915dd15590557f1e761cbe42f7d30298834202d3002007b0f0bd012007b0f0bdf0b583b0029314460e460746012907d13878302804d1029802283dd200256fe0089bb34222d2b11c0025029801918142294645d80020f11a04d03a5c2254401c8142fad1002b024602d0
+e0000000d30602702e212154421cb042114632d2331a38181146067866545b1e401c491c002bf8d127e0d91c0025029801918142294622d8991b2e2060703020207000290dd0a01c3022009100f0cafe0098821c06e0002060703020207001252de00222002e114607d01146387860547f1c761e491c002ef8d1002060540298019b83421bd88a420ed2002303e0521c9142034609d0002b104600d01846a35c302bf4d00020f2e700200125002806d000212154401e225c2e2a00d12154284603b0f0bdf0b58bb014460a46202901d900263ae01d460146
+e0000000d306034000260a96099608960796069605960496039603afb81a203000f070fe2021384600f056f8002809d0022d22d32749794420462a4600f0d6ff01261ae0002003a90a5a52ba0a52801c2028f8d103a8202100f03ef84742474100280dd02e46a119ad1b20462a4600f04dfe0020605501267e4030460bb0f0bd0095002df7d0009e019402960024204603ad295b000446180a273046394600f0edfc28534743f01ba41c202cf0d130210843029e761e019ca05503a8202100f00bf847424741002802d1002eddd1d2e7009dc8e79c100000
+e0000000d3060410b0b54b1e0a469a4100290ed00378002b0bd101231c468c421a4600d30022a14203d0055d641c002df5d001205040b0bdf0b59db0039302920d46074604ac64262046314600f0ecfd3846294622463346fff764ff00282cd0239c229d04a8642100f0aeff01900b21039800f0a9ff0746c6b2a642224600d832462846039900f0d5fd002e02d02020a8557f1c02980090f8b22a18c04303190198c1b204a8fff7bafe002803d06119491e00220a701db0f0bd00201db0f0bd80b5142a00d31422891a203100f0b6fd80bd80b5202a00d3
+e0000000d30604e0202200f0affd80bdb0b504460a48a083a069a56829462031142200f0affd0421a1773435e560002802d003206077b0bd02206077b0bdc04602020000b0b582b004460078062827d12069592805d81948784400f023fa00201fe0e5685a21284600f076fd606900f02ff813497944022201ab00f0d7fb00280ad0553501982871010a0dd1c1b202290dd22870042004e00a48784400f002fa0120607002b0b0bd07487844d5e70748784400f0f7f90020f3e7c046dc0e0000e0100000d30e0000df0e0000060f00000178090642781204
+e0000000d30605b05118827812028918c078081870470000b0b504468568c36801690c487844202200f0d4f9042020755920295c01290cd0002904d12046294600f00cf8b0bd0448784400f0c3f900202075b0bddd0e0000ea0e000070b504465820085c0e465636002806d020693288121d904244d10020b0700d4655352a78012a0cdd022a18d0032a22d0042a30d10120b0702870208a3c30308070bd002a1ed0012a25d1e3683431142208461946fff736ff0520287070bde3682031142208461946fff72cff0120b0700420287070bde06800f018f8
+e0000000d306068030800220287070bde368202208461946fff723ff0320287070bd04487844114600f06cf90020207570bdc046600e0000c17f807f0002401880b27047b0b504468068e16805465335002909d0c97f2970e168483014310b2200f024fe012000e00020042161756870b0bd0000b0b504468568c06822690c49794400f013fe5920295c002906d00a48784400f037f900202077b0bd6069a2690449794400f002fe04202077b0bdc0461d0e00000d0e0000240e000070b50446c569406aa16a00f077fce06a216b00f073fc2020205c2646
+e0000000d30607502036022807d001280ad000280dd1204600f018f80ee02046294600f059f809e02046294600f02cf804e00548784400f0fdf80020411e88418000307570bdc046d20d000010b582b00446406aa26a0a49794400f0bffd606800686221415ce26a236b0092019342301222044b7b44fff73ffe02b010bdc046cf0d0000b80d0000b0b582b00d460446406aa26a0f49794400f0a0fd5320285c294653314978e26a236b00920193002904d02c464834002903d003e01034002900d11220c2b2202128462346fff714fe02b0b0bd9a0d0000
+e0000000d3060820b0b582b00c460546406aaa6a0b49794400f078fde86a30210170e86a7821417028680268e86a0021009101912034811c2046fff721fc02b0b0bdc046570d000080b5002912d00246ff20034604339a4211dc023082421dd08120400082421dd09a4227d10846fff72ffe80bd1548784400f074f880bd41239b009a4212d00630824213d083204000824213d10846fff741ff80bd0846fff731fe80bd0846fff77ffe80bd0846fff7f9fe80bd0846fff70dff80bd02487844114600f04ff880bde50c0000430d000080b586b000200590
+e0000000d30608f00490064878440190012003900002029001a800f019fa06b080bdc046be0c000080b5002000f040fa80bd00000446704600f00ef8024605487844214600f026f800f026fa214600f0bdfcc046c30c000003497944401a0149401870470000dec0bbf6ffffb0b582b00c46054601a881705f210170210a4170032100f0fdf9a1b2284600f0f9f902b0b0bd000083b0f0b58cb011ac0ec4002800d1a7e1074611a806903878002800d1a0e10120019004e0bf193878002800d198e10026b85d002803d0252801d0761cf8e738463146fff7
+e0000000d30609c0c9ffb85d2528ebd1b819471c002320240593184601e0104619d139787f1c00222d29f8dd472937dc0a46303a0a2a1cd2039430221d460b4653402c462b4300d0039a0a2363435b18303b1446e5e725295ad02a2900d0f0e03878732800d0ece00699081d0690022013e02e2900d0e4e038782a2800d0e0e07878482804d0732802d0682800d0d8e07f1c0699081d0690012009680591c0e767290adda24d7d44722910dd732931d0752933d0782910d0c3e0622916dc482900d1a7e0582900d0bbe0012006e0682900d1a4e0702900d0
+e0000000d3060a90b3e0002004900698011d069100680b9010251fe0632900d1abe0642900d0a4e00698011d069100680b900a25002800d5f7e0002004900de0781ea0e01c460297002183e00698011d069100680b90002004900a250198064602970b9905918d42039402d90746024616e05a1e0b980590284607461446002128463a460b4600f0b9f94a1e9141059a904202d8621e0029efd02346019a039c30465040191a002e02d0002614460be0e2b20026302a344606d107aa1c462d23137023460126019c8a1e0d2a0fd8491e0dd04042009007a8
+e0000000d3060b608019039ad2b2039300f070fa0398301800994018461e002c03d107a82d218155761c002f1cd05d487844039012e0039c0598394600f00ef9294600f047f9605c07a988553846294600f004f9761cbd42074605d804980028e9d1514c7c44e7e707a83146fff7c6fe029feae61c460297474d7d4401e01c4602970199069a131d0693c0b21768002815d001281ad0022838d138780028029f61d03c487844052106e00698011d069100680b900ba80121fff7a0fec5e600203a5c401c002afbd1401e0590002920d0059c002c2ad00021
+e0000000d3060c300e4607e007a81146fff78cfe0021761cb4421dd0b85d0209aa5c07ab5a545a180f230340e85c50708a1cc81c1028e9d21146ece705960029ded13846059d2946fff770fe22462c46029fa24210d890e6224601e0002211460029029f05d007a81446fff75ffe2246059ca24200d880e6a41a154878440121fff754fe641cf8d377e640420b9000260496019814e725460598441c0b4878440121fff743fe641ef8d134462a46a242e2d862e60cb0f0bc01bc03b00047c046ad0b000008080000490a00004309000065090000930a0000
+e0000000d3060d004f0a0000b0b5002a07d000240d68854205d0091d641ca242f8d10020b0bd0120002bfbd01c60b0bd01df002900d170470846fff7f3fd000080b584b0002102910190034801a9fff7efff04b080bdc0460d67006082b00020019002486946fff7e3ffffde8d68006080b584b00191009002486946fff7d8ff04b080bd8183006080b582b00020019002486946fff7ccff02b080bdb187006080b584b0002102910190034801a9fff7bfff04b080bdc046060b0160002934d00123002210b488422cd301242407a14204d2814202d20901
+e0000000d3060dd01b01f8e7e400a14204d2814202d249005b00f8e7884201d3401a1a434c08a04202d3001b5c0822438c08a04202d3001b9c082243cc08a04202d3001bdc082243002803d01b0901d00909e3e7100010bc704701b5002000f00bf802bd0029f8d003b5fff7c1ff0ebc4243891a1847c0467047c046002b11d1002a0fd1002900d1002802d00021c943080007b4024802a14018029003bdc046d9ffffff03b4684601b5029800f02af8019b9e4602b00cbc7047c046f7b5019383b29c460600030c60460d00614697b27843140c5f436343
+e0000000d3060ea04c43010c8c46e4196444a74202d9802149025b1801996a437143270cfb182404c91880b22018891803b0f0bdf0b506000f0015001c0085b08b4263d801d1824260d82100280000f079f839000090300000f074f8009b21001b1a1a002800039300f060f800900191b94245d801d1b04242d8009b019c01200021039af61aa74100f050f804000d00039b002b2bd0019b009adb0750081843019b5908039b9c46b9422cd801d1b04229d832003b00121a8b41012692185b410027b6185f4101235b429c446346002bead130003900039a
+e0000000d3060f7000f01cf8039aa4197d4106000f0000f021f8241a8d410a9b002b01d01e605f602000290005b0f0bd00240025c4e7b6197f41dce700240025ede70000d0400b00d1409c46203ad3401843524263469340184370479140030090409c46203a9340194352426346d3401943704710b5002903d100f007f8203002e0080000f002f810bdc0461c2101231b04984201d3000c10391b0a984201d3000a08391b09984201d30009043902a2105c40187047c0460403020201010101000000000000000010b5002200f00af810bdc04610b500f0
+e0000000d306104031f810bd10b500f07ff810bd0b0010b511001a0000f0cef810bdc04630b5032a0cd903000b439b0719d103680c68a34215d1043a04300431032af6d8551e002a0bd0002303e05a1c9d4206d01300c25ccc5ca242f7d0101b00e0002030bd551eefe7c046f0b5c64600b50f2a41d903270d003e0005430c0003002e402f423dd11500103d2d09a8462d01ac46844427681d001f6067685f60a7689f60e7681034df6010336545f2d145460f230c2401352d01491913404519144222d08c59ac5104369c1b032cf9d8043b9b0801339b00
+e0000000d3061110ed18c91803231a40561e002a06d00023cc5c1a00ec5401339642f9d180bcb846f0bd0500561e002af1d1f7e70500561eede71a00f6e7c046f0b588420ad98b18984207d2531e002a03d0ca5cc254013bfbd2f0bd0f2a0bd80500561e002af8d00023cc5c1a00ec5401339642f9d1f0e703270d003e0005430c0003002e402f422bd11500103d2d09ac462f013f1825681d6065685d60a5689d60e5681034dd601d001033bd42f2d165460f230c2401352d01491913404519144211d08c59ac5104369c1b032cf9d8043b9b0801339b00
+e0000000d30611e0ed18c91803231a40bfe70500561ebfe71a00bae7f0b50500830749d0541e002a45d003000326cab202e00135013c3ed301332a703342f8d1032c30d9ff220a40150215432a0415430f2c34d92700103f3f093e01b4461e001a0010366644156055609560d5601032b242f8d101373f01db190f270c22274022403c00002a0ed03e1fb608b400a4461a001c1d644420c2a242fcd103240136b6009b193c40002c05d0c9b21c19197001339c42fbd1f0bd03001400c0e72700e2e7c046f0c041464a4653465c466d4676467ec02838f0c8
+e0000000d30612b00020704710307cc890469946a246ab46b54608c82838f0c8080000d10120184770b5002a1fd00300851802e00133ab4202d01c78002cf9d11e1a951bb24213d00c780a00002c0ad0012d02d01c70013d013354780132002cf6d1521ab61800221a70300070bd0026080000f02bf83618f7e7c046f0b50500002a13d0501e012a19d000234f1c6e1c02e00133984216d0f418a446cc5cfa18ec54002cf5d1501a0138f0bd0a00130001335c1e24781a00002cf9d1f3e70a0000232b70f3e76546fae7c04610b583070ad00300032102e0
+e0000000d306138001330b4205d01a78002af9d1181a10bd030019680c4a0d4c8a188a4322420fd15968094a04338a188a43224208d15968054a04338a188a432242f1d000e001331a78002afbd1e1e7fffefefe8080808010b503004418002903d109e001339c4204d01a78002af9d1181a10bd201afce70020fae730780030313233343536373839616263646566004552524f52003000506c7567696e20706172616d65746572732073747275637475726520697320626967676572207468616e20616c6c6f7765642073697a650a004572726f723a20
+e0000000d306145073656c6563746f72206e6f7420666f756e64210a004572726f723a206f766572666c6f77206465746563746564206f6e2073656c6563746f7220696e646578210a004d697373696e672073656c6563746f72496e6465783a2025640a00706c7567696e2070726f7669646520706172616d657465723a206f66667365742025640a42797465733a20252e2a480a0053656c6563746f7220496e646578206e6f7420737570706f727465643a2025640a00506172616d206e6f7420737570706f727465643a2025640a00506c7567696e42
+e0000000d30615206f696c6572706c61746500537761700053656c6563746f7220696e6465783a202564206e6f7420737570706f727465640a00526563656976656420616e20696e76616c69642073637265656e496e6465780a0053656e64004554480052656365697665204d696e2e0042656e65666963696172790045786974696e6720666f6c6c6f77696e6720657863657074696f6e3a2025640a00457468657265756d00556e68616e646c6564206d6573736167652025640a005265636569766564206e756c6c20706172616d65746572730a0065
+e0000000a40615f07863657074696f6e5b3078253034585d3a204c523d3078253038580a002000303132333435363738396162636465663031323334353637383941424344454600b56af37f4242371300000000000000000111506c7567696e426f696c6572706c6174650205312e302e3003290100000000ffffff00ffffffffffff3fff3fff07f807f807f81fe01fe007f8c7f8c7f8ffffffffffff040a01028000002c8000003c
+e00000000107
+e00000000908000000001691d417
+e00000000109
diff --git a/tests/plugin_binaries/nanos/bin/app.elf b/tests/plugin_binaries/nanos/bin/app.elf
new file mode 100644
index 00000000..0811270a
Binary files /dev/null and b/tests/plugin_binaries/nanos/bin/app.elf differ
diff --git a/tests/plugin_binaries/nanos/bin/app.hex b/tests/plugin_binaries/nanos/bin/app.hex
new file mode 100644
index 00000000..96a97d56
--- /dev/null
+++ b/tests/plugin_binaries/nanos/bin/app.hex
@@ -0,0 +1,365 @@
+:02000004C0D06A
+:100000008CB0044662B600F083FC6D46284601F0D1
+:1000100045F9A88585B2002D0ED1684600F0BCFEDA
+:100020000A90002C1CD020680E49884202D06168DA
+:1000300000F016FC00F08EFE6C460020A0850A98A9
+:1000400000F0AAFE08487844294600F097FC00F02A
+:1000500097FEA042EED10A9800F09EFE00F07AFED4
+:1000600000F042FCFF0100004B15000003B4014802
+:100070000BE000003200000003B4014805E000007E
+:100080004400000003B40248FFE7024908470000AB
+:100090007100000001001200F0B593B003920491CA
+:1000A000054601231898014699431E224A40199992
+:1000B0000A430027002A3A4619D1059306AA332499
+:1000C000234600F06FF800285FD006AE3046214688
+:1000D00001F07EF93318221A30497944184601F0AC
+:1000E000F7F83046214601F073F90246059B06A851
+:1000F000059280182A4E7E44E95D0F240A092140AA
+:10010000715C4170B15C0170801C7F1C142FF3D1B5
+:100110001902039F3846FFF7AFFF002100283AD1AC
+:100120002020019006A802900090059B2833012210
+:1001300038460F4605921146029AFFF797FF394657
+:10014000002828D10020049F059B05E0715C059BD9
+:100150003954401C28281AD002461A404308E95C4A
+:10016000002A03D021400929F0D902E00909092910
+:10017000ECD906AFFB5C920004275740FB401A07FE
+:10018000715C00D52039049FE1E7002103E02820BD
+:10019000002139541946084613B0F0BD161300006B
+:1001A000FD120000F0B587B00293044600200192D2
+:1001B0000546C7B27B1C029883422BD2009306955A
+:1001C0000A250026204605912A46334600F03AFECD
+:1001D000049003912A46069D334600F053FE019A8F
+:1001E000201A30210143D155681C0921091B3146D1
+:1001F000059B9941049C0399DAD3C0B21654280692
+:10020000009B07D0D05D915DD15590557F1E761C27
+:10021000BE42F7D30298834202D3002007B0F0BD5C
+:10022000012007B0F0BDF0B583B0029314460E462E
+:100230000746012907D13878302804D102980228CE
+:100240003DD200256FE0089BB34222D2B11C0025AD
+:10025000029801918142294645D80020F11A04D024
+:100260003A5C2254401C8142FAD1002B024602D053
+:100270002E212154421CB042114632D2331A381872
+:100280001146067866545B1E401C491C002BF8D1B1
+:1002900027E0D91C0025029801918142294622D8E5
+:1002A000991B2E2060703020207000290DD0A01CDA
+:1002B0003022009100F0CAFE0098821C06E0002067
+:1002C00060703020207001252DE00222002E1146A2
+:1002D00007D01146387860547F1C761E491C002ECA
+:1002E000F8D1002060540298019B83421BD88A42B7
+:1002F0000ED2002303E0521C9142034609D0002B8A
+:10030000104600D01846A35C302BF4D00020F2E752
+:1003100000200125002806D000212154401E225C27
+:100320002E2A00D12154284603B0F0BDF0B58BB081
+:1003300014460A46202901D900263AE01D46014606
+:1003400000260A960996089607960696059604963C
+:10035000039603AFB81A203000F070FE2021384613
+:1003600000F056F8002809D0022D22D327497944FD
+:1003700020462A4600F0D6FF01261AE0002003A9F5
+:100380000A5A52BA0A52801C2028F8D103A8202108
+:1003900000F03EF84742474100280DD02E46A119F3
+:1003A000AD1B20462A4600F04DFE00206055012678
+:1003B0007E4030460BB0F0BD0095002DF7D0009E7A
+:1003C000019402960024204603AD295B00044618E0
+:1003D0000A273046394600F0EDFC28534743F01B0E
+:1003E000A41C202CF0D130210843029E761E019CD3
+:1003F000A05503A8202100F00BF8474247410028F0
+:1004000002D1002EDDD1D2E7009DC8E79C1000008C
+:10041000B0B54B1E0A469A4100290ED00378002B36
+:100420000BD101231C468C421A4600D30022A14264
+:1004300003D0055D641C002DF5D001205040B0BDF7
+:10044000F0B59DB0039302920D46074604AC6426B6
+:100450002046314600F0ECFD384629462246334618
+:10046000FFF764FF00282CD0239C229D04A8642160
+:1004700000F0AEFF01900B21039800F0A9FF0746A2
+:10048000C6B2A642224600D832462846039900F05A
+:10049000D5FD002E02D02020A8557F1C0298009088
+:1004A000F8B22A18C04303190198C1B204A8FFF793
+:1004B000BAFE002803D06119491E00220A701DB03F
+:1004C000F0BD00201DB0F0BD80B5142A00D3142269
+:1004D000891A203100F0B6FD80BD80B5202A00D3F6
+:1004E000202200F0AFFD80BDB0B504460A48A083CD
+:1004F000A069A56829462031142200F0AFFD04212F
+:10050000A1773435E560002802D003206077B0BDC4
+:1005100002206077B0BDC04602020000B0B582B0D4
+:1005200004460078062827D12069592805D819489B
+:10053000784400F023FA00201FE0E5685A2128469D
+:1005400000F076FD606900F02FF81349794402222B
+:1005500001AB00F0D7FB00280AD05535019828716F
+:10056000010A0DD1C1B202290DD22870042004E085
+:100570000A48784400F002FA0120607002B0B0BD71
+:1005800007487844D5E70748784400F0F7F9002099
+:10059000F3E7C046DC0E0000E0100000D30E0000C0
+:1005A000DF0E0000060F00000178090642781204F1
+:1005B0005118827812028918C07808187047000014
+:1005C000B0B504468568C36801690C4878442022A8
+:1005D00000F0D4F9042020755920295C01290CD0A1
+:1005E000002904D12046294600F00CF8B0BD04488B
+:1005F000784400F0C3F900202075B0BDDD0E000086
+:10060000EA0E000070B504465820085C0E465636C7
+:10061000002806D020693288121D904244D1002063
+:10062000B0700D4655352A78012A0CDD022A18D003
+:10063000032A22D0042A30D10120B0702870208AE9
+:100640003C30308070BD002A1ED0012A25D1E368DD
+:100650003431142208461946FFF736FF052028706A
+:1006600070BDE3682031142208461946FFF72CFFBD
+:100670000120B0700420287070BDE06800F018F808
+:1006800030800220287070BDE36820220846194699
+:10069000FFF723FF0320287070BD044878441146FB
+:1006A00000F06CF90020207570BDC046600E00009F
+:1006B000C17F807F0002401880B27047B0B5044609
+:1006C0008068E16805465335002909D0C97F297043
+:1006D000E168483014310B2200F024FE012000E0D4
+:1006E0000020042161756870B0BD0000B0B50446FB
+:1006F0008568C06822690C49794400F013FE5920CE
+:10070000295C002906D00A48784400F037F9002017
+:100710002077B0BD6069A2690449794400F002FE07
+:1007200004202077B0BDC0461D0E00000D0E000055
+:10073000240E000070B50446C569406AA16A00F045
+:1007400077FCE06A216B00F073FC2020205C2646D9
+:100750002036022807D001280AD000280DD12046D3
+:1007600000F018F80EE02046294600F059F809E09C
+:100770002046294600F02CF804E00548784400F0B3
+:10078000FDF80020411E88418000307570BDC046D4
+:10079000D20D000010B582B00446406AA26A0A4930
+:1007A000794400F0BFFD606800686221415CE26A44
+:1007B000236B0092019342301222044B7B44FFF7DB
+:1007C0003FFE02B010BDC046CF0D0000B80D0000C6
+:1007D000B0B582B00D460446406AA26A0F4979441A
+:1007E00000F0A0FD5320285C294653314978E26A85
+:1007F000236B00920193002904D02C464834002931
+:1008000003D003E01034002900D11220C2B220210D
+:1008100028462346FFF714FE02B0B0BD9A0D000033
+:10082000B0B582B00C460546406AAA6A0B497944C5
+:1008300000F078FDE86A30210170E86A78214170A3
+:1008400028680268E86A0021009101912034811C27
+:100850002046FFF721FC02B0B0BDC046570D000096
+:1008600080B5002912D00246FF20034604339A4285
+:1008700011DC023082421DD08120400082421DD016
+:100880009A4227D10846FFF72FFE80BD15487844CD
+:1008900000F074F880BD41239B009A4212D00630CC
+:1008A000824213D083204000824213D10846FFF7D2
+:1008B00041FF80BD0846FFF731FE80BD0846FFF7C7
+:1008C0007FFE80BD0846FFF7F9FE80BD0846FFF7B2
+:1008D0000DFF80BD02487844114600F04FF880BDFE
+:1008E000E50C0000430D000080B586B000200590A7
+:1008F0000490064878440190012003900002029081
+:1009000001A800F019FA06B080BDC046BE0C000078
+:1009100080B5002000F040FA80BD0000044670461B
+:1009200000F00EF8024605487844214600F026F80B
+:1009300000F026FA214600F0BDFCC046C30C0000C2
+:1009400003497944401A0149401870470000DEC04D
+:10095000BBF6FFFFB0B582B00C46054601A881701A
+:100960005F210170210A4170032100F0FDF9A1B25D
+:10097000284600F0F9F902B0B0BD000083B0F0B530
+:100980008CB011AC0EC4002800D1A7E1074611A815
+:1009900006903878002800D1A0E10120019004E001
+:1009A000BF193878002800D198E10026B85D0028EA
+:1009B00003D0252801D0761CF8E738463146FFF7EA
+:1009C000C9FFB85D2528EBD1B819471C00232024A6
+:1009D0000593184601E0104619D139787F1C002292
+:1009E0002D29F8DD472937DC0A46303A0A2A1CD27D
+:1009F000039430221D460B4653402C462B4300D017
+:100A0000039A0A2363435B18303B1446E5E7252924
+:100A10005AD02A2900D0F0E03878732800D0ECE0D2
+:100A20000699081D0690022013E02E2900D0E4E06C
+:100A300038782A2800D0E0E07878482804D0732855
+:100A400002D0682800D0D8E07F1C0699081D0690C7
+:100A5000012009680591C0E767290ADDA24D7D44A0
+:100A6000722910DD732931D0752933D0782910D03F
+:100A7000C3E0622916DC482900D1A7E0582900D03C
+:100A8000BBE0012006E0682900D1A4E0702900D075
+:100A9000B3E0002004900698011D069100680B90B9
+:100AA00010251FE0632900D1ABE0642900D0A4E049
+:100AB0000698011D069100680B900A25002800D5B4
+:100AC000F7E0002004900DE0781EA0E01C4602979D
+:100AD000002183E00698011D069100680B9000201C
+:100AE00004900A250198064602970B9905918D42BC
+:100AF000039402D90746024616E05A1E0B98059049
+:100B0000284607461446002128463A460B4600F080
+:100B1000B9F94A1E9141059A904202D8621E0029F5
+:100B2000EFD02346019A039C30465040191A002EFC
+:100B300002D0002614460BE0E2B20026302A3446EA
+:100B400006D107AA1C462D23137023460126019CBB
+:100B50008A1E0D2A0FD8491E0DD04042009007A8CA
+:100B60008019039AD2B2039300F070FA03983018F8
+:100B700000994018461E002C03D107A82D2181554D
+:100B8000761C002F1CD05D487844039012E0039C33
+:100B90000598394600F00EF9294600F047F9605CE7
+:100BA00007A988553846294600F004F9761CBD424D
+:100BB000074605D804980028E9D1514C7C44E7E762
+:100BC00007A83146FFF7C6FE029FEAE61C460297D9
+:100BD000474D7D4401E01C4602970199069A131D7A
+:100BE0000693C0B21768002815D001281AD0022831
+:100BF00038D138780028029F61D03C4878440521DC
+:100C000006E00698011D069100680B900BA80121D3
+:100C1000FFF7A0FEC5E600203A5C401C002AFBD18D
+:100C2000401E0590002920D0059C002C2AD00021D0
+:100C30000E4607E007A81146FFF78CFE0021761C40
+:100C4000B4421DD0B85D0209AA5C07AB5A545A18C9
+:100C50000F230340E85C50708A1CC81C1028E9D29E
+:100C60001146ECE705960029DED13846059D294658
+:100C7000FFF770FE22462C46029FA24210D890E653
+:100C8000224601E0002211460029029F05D007A854
+:100C90001446FFF75FFE2246059CA24200D880E67C
+:100CA000A41A154878440121FFF754FE641CF8D3B8
+:100CB00077E640420B9000260496019814E72546FB
+:100CC0000598441C0B4878440121FFF743FE641E3D
+:100CD000F8D134462A46A242E2D862E60CB0F0BC13
+:100CE00001BC03B00047C046AD0B0000080800007F
+:100CF000490A00004309000065090000930A00004A
+:100D00004F0A0000B0B5002A07D000240D688542C4
+:100D100005D0091D641CA242F8D10020B0BD0120FD
+:100D2000002BFBD01C60B0BD01DF002900D1704753
+:100D30000846FFF7F3FD000080B584B00021029162
+:100D40000190034801A9FFF7EFFF04B080BDC04642
+:100D50000D67006082B00020019002486946FFF7ED
+:100D6000E3FFFFDE8D68006080B584B001910090E4
+:100D700002486946FFF7D8FF04B080BD8183006058
+:100D800080B582B00020019002486946FFF7CCFF91
+:100D900002B080BDB187006080B584B000210291AF
+:100DA0000190034801A9FFF7BFFF04B080BDC04612
+:100DB000060B0160002934D00123002210B48842C0
+:100DC0002CD301242407A14204D2814202D209017A
+:100DD0001B01F8E7E400A14204D2814202D249009B
+:100DE0005B00F8E7884201D3401A1A434C08A0423E
+:100DF00002D3001B5C0822438C08A04202D3001BD4
+:100E00009C082243CC08A04202D3001BDC082243EA
+:100E1000002803D01B0901D00909E3E7100010BC2A
+:100E2000704701B5002000F00BF802BD0029F8D092
+:100E300003B5FFF7C1FF0EBC4243891A1847C046ED
+:100E40007047C046002B11D1002A0FD1002900D1D4
+:100E5000002802D00021C943080007B4024802A1BB
+:100E60004018029003BDC046D9FFFFFF03B4684697
+:100E700001B5029800F02AF8019B9E4602B00CBC16
+:100E80007047C046F7B5019383B29C460600030C39
+:100E900060460D00614697B27843140C5F4363438C
+:100EA0004C43010C8C46E4196444A74202D98021CA
+:100EB00049025B1801996A437143270CFB1824040B
+:100EC000C91880B22018891803B0F0BDF0B506002B
+:100ED0000F0015001C0085B08B4263D801D18242FF
+:100EE00060D82100280000F079F839000090300027
+:100EF00000F074F8009B21001B1A1A0028000393CD
+:100F000000F060F800900191B94245D801D1B0429B
+:100F100042D8009B019C01200021039AF61AA741A8
+:100F200000F050F804000D00039B002B2BD0019B18
+:100F3000009ADB0750081843019B5908039B9C4605
+:100F4000B9422CD801D1B04229D832003B00121A44
+:100F50008B41012692185B410027B6185F4101239F
+:100F60005B429C446346002BEAD130003900039A6F
+:100F700000F01CF8039AA4197D4106000F0000F050
+:100F800021F8241A8D410A9B002B01D01E605F605E
+:100F90002000290005B0F0BD00240025C4E7B619E3
+:100FA0007F41DCE700240025EDE70000D0400B0086
+:100FB000D1409C46203AD340184352426346934066
+:100FC000184370479140030090409C46203A93405C
+:100FD000194352426346D3401943704710B5002964
+:100FE00003D100F007F8203002E0080000F002F81A
+:100FF00010BDC0461C2101231B04984201D3000CE4
+:1010000010391B0A984201D3000A08391B0998427B
+:1010100001D30009043902A2105C40187047C04691
+:1010200004030202010101010000000000000000B1
+:1010300010B5002200F00AF810BDC04610B500F04F
+:1010400031F810BD10B500F07FF810BD0B0010B5E1
+:1010500011001A0000F0CEF810BDC04630B5032ACA
+:101060000CD903000B439B0719D103680C68A342FA
+:1010700015D1043A04300431032AF6D8551E002A4B
+:101080000BD0002303E05A1C9D4206D01300C25C23
+:10109000CC5CA242F7D0101B00E0002030BD551EF2
+:1010A000EFE7C046F0B5C64600B50F2A41D9032781
+:1010B0000D003E0005430C0003002E402F423DD1A1
+:1010C0001500103D2D09A8462D01AC468444276823
+:1010D0001D001F6067685F60A7689F60E768103445
+:1010E000DF6010336545F2D145460F230C240135EE
+:1010F0002D01491913404519144222D08C59AC5185
+:1011000004369C1B032CF9D8043B9B0801339B003D
+:10111000ED18C91803231A40561E002A06D00023D2
+:10112000CC5C1A00EC5401339642F9D180BCB8462D
+:10113000F0BD0500561E002AF1D1F7E70500561E46
+:10114000EDE71A00F6E7C046F0B588420AD98B18D9
+:10115000984207D2531E002A03D0CA5CC254013BF6
+:10116000FBD2F0BD0F2A0BD80500561E002AF8D07E
+:101170000023CC5C1A00EC5401339642F9D1F0E71D
+:1011800003270D003E0005430C0003002E402F42B4
+:101190002BD11500103D2D09AC462F013F182568B5
+:1011A0001D6065685D60A5689D60E5681034DD6060
+:1011B0001D001033BD42F2D165460F230C240135CA
+:1011C0002D01491913404519144211D08C59AC51C5
+:1011D00004369C1B032CF9D8043B9B0801339B006D
+:1011E000ED18C91803231A40BFE70500561EBFE7D4
+:1011F0001A00BAE7F0B50500830749D0541E002A4B
+:1012000045D003000326CAB202E00135013C3ED3BB
+:1012100001332A703342F8D1032C30D9FF220A401F
+:10122000150215432A0415430F2C34D92700103F0B
+:101230003F093E01B4461E001A0010366644156090
+:1012400055609560D5601032B242F8D101373F0148
+:10125000DB190F270C22274022403C00002A0ED029
+:101260003E1FB608B400A4461A001C1D644420C2E8
+:10127000A242FCD103240136B6009B193C40002C4D
+:1012800005D0C9B21C19197001339C42FBD1F0BDC5
+:1012900003001400C0E72700E2E7C046F0C0414663
+:1012A0004A4653465C466D4676467EC02838F0C8AE
+:1012B0000020704710307CC890469946A246AB4645
+:1012C000B54608C82838F0C8080000D101201847E2
+:1012D00070B5002A1FD00300851802E00133AB422D
+:1012E00002D01C78002CF9D11E1A951BB24213D0E3
+:1012F0000C780A00002C0AD0012D02D01C70013D90
+:10130000013354780132002CF6D1521AB61800225B
+:101310001A70300070BD0026080000F02BF8361857
+:10132000F7E7C046F0B50500002A13D0501E012A89
+:1013300019D000234F1C6E1C02E00133984216D0D6
+:10134000F418A446CC5CFA18EC54002CF5D1501AD1
+:101350000138F0BD0A00130001335C1E24781A0026
+:10136000002CF9D1F3E70A0000232B70F3E7654660
+:10137000FAE7C04610B583070AD00300032102E054
+:1013800001330B4205D01A78002AF9D1181A10BD82
+:10139000030019680C4A0D4C8A188A4322420FD167
+:1013A0005968094A04338A188A43224208D1596885
+:1013B000054A04338A188A432242F1D000E00133FF
+:1013C0001A78002AFBD1E1E7FFFEFEFE80808080D4
+:1013D00010B503004418002903D109E001339C42F1
+:1013E00004D01A78002AF9D1181A10BD201AFCE787
+:1013F0000020FAE730780030313233343536373870
+:1014000039616263646566004552524F5200300094
+:10141000506C7567696E20706172616D657465727C
+:1014200073207374727563747572652069732062BA
+:101430006967676572207468616E20616C6C6F7794
+:1014400065642073697A650A004572726F723A208A
+:1014500073656C6563746F72206E6F7420666F7550
+:101460006E64210A004572726F723A206F7665725F
+:10147000666C6F77206465746563746564206F6E55
+:101480002073656C6563746F7220696E6465782182
+:101490000A004D697373696E672073656C656374C8
+:1014A0006F72496E6465783A2025640A00706C7525
+:1014B00067696E2070726F76696465207061726111
+:1014C0006D657465723A206F666673657420256475
+:1014D0000A42797465733A20252E2A480A0053651A
+:1014E0006C6563746F7220496E646578206E6F74EA
+:1014F00020737570706F727465643A2025640A00F9
+:10150000506172616D206E6F7420737570706F72B0
+:101510007465643A2025640A00506C7567696E42F0
+:101520006F696C6572706C617465005377617000EF
+:1015300053656C6563746F7220696E6465783A20D8
+:101540002564206E6F7420737570706F727465649B
+:101550000A00526563656976656420616E20696E74
+:1015600076616C69642073637265656E496E64654B
+:10157000780A0053656E64004554480052656365FF
+:10158000697665204D696E2E0042656E65666963F9
+:10159000696172790045786974696E6720666F6C5D
+:1015A0006C6F77696E6720657863657074696F6EBC
+:1015B0003A2025640A00457468657265756D0055AA
+:1015C0006E68616E646C6564206D657373616765D8
+:1015D0002025640A005265636569766564206E752E
+:1015E0006C6C20706172616D65746572730A006560
+:1015F0007863657074696F6E5B3078253034585D40
+:101600003A204C523D3078253038580A00200030BE
+:101610003132333435363738396162636465663068
+:101620003132333435363738394142434445460048
+:10163000B56AF37F4242371300000000000000004B
+:101640000111506C7567696E426F696C6572706CE0
+:101650006174650205312E302E300329010000002F
+:1016600000FFFFFF00FFFFFFFFFFFF3FFF3FFF0700
+:10167000F807F807F81FE01FE007F8C7F8C7F8FFFA
+:10168000FFFFFFFFFF040A01028000002C80000022
+:011690003C1D
+:04000005C0D0000166
+:00000001FF
diff --git a/tests/plugin_binaries/nanos/bin/app.sha256 b/tests/plugin_binaries/nanos/bin/app.sha256
new file mode 100644
index 00000000..8973aef9
--- /dev/null
+++ b/tests/plugin_binaries/nanos/bin/app.sha256
@@ -0,0 +1 @@
+f638b583ee25e4877175c655bbacdbad2b3228dfb58b5b9bebedca6bc55b1d63
diff --git a/tests/plugin_binaries/nanos2/bin/app.apdu b/tests/plugin_binaries/nanos2/bin/app.apdu
new file mode 100644
index 00000000..3f301518
--- /dev/null
+++ b/tests/plugin_binaries/nanos2/bin/app.apdu
@@ -0,0 +1,34 @@
+e0000000130c11506c7567696e426f696c6572706c617465
+e0000000160b0100001600000000000000004a0000080000000001
+e0000000050500000000
+e0000000d30600008cb0044662b600f09ffc6d46284601f0b7f881b2adf82c0071b9684600f0c8fe0a90f4b1206840f2ff11884202d0616800f036fc00f09efe0a980c460021adf82c1000f0b5fe08482146784400f0b4fc00f0a4fea842edd10a9800f0a9fe00f089fe00f05dfc00bfc513000003b44ff0470007e003b44ff0590003e003b44ff08600ffe700490847018080002de9f0458fb092460c46dde91621054622f0010383f01e030b4318d102af10463a46332300f06af8d8b33846332101f0aff830493b18c0f133027944184601f067f83846
+e0000000d30600d0332101f0a3f8074600e000270df10808284e07eb080002387e444ff0ff3100bf6a18527801311309f35c02f00f02b25c00f8023f13294270f2d150464ff48071fff7b0ff58b9202007f128030190504601214246cdf80080fff7a0ff18b100200fb0bde8f08500204ff0040c0de000bf18f803108cea8703d940b25c090748bf203a2254013028280bd04308e95c10f0010701f00f0208bf0a09092ae8d8b25cefe7002084f8280001200fb0bde8f08539120000001200002de9f04d984692460f460646002200bfd5b26c1c44452fd2
+e0000000d30601a09346304639460a22002300f00ffed6f109024ff00002ba4100eb8002a6eb420242f030020af805200bf1010206460f46e2d3d0b200215fea0b620af800100fd04ff0ff300aeb00014a781af805300af805204b70811c013da94200f10100f1d30020444538bf0120bde8f08d2de9f04d9b4614460e46012907460fd1387830280cd1bbf1020f4ff0000038bfbde8f08d3021217060700120bde8f08dddf820c0b44505d206f1020ede4507d9002040e00cf1030ada4513d9002072e0b6eb0c021ed0aceb06034ff0ff3200bfb918a518
+e0000000d306027001324978981801306970f7d1531c10e03020bceb060820704ff02e00607048d0a01c4146302200f02eff08f1020c42e00023bcf1000f9c461ebf03f1010c2e20e054b34260460ad2d819471ef31a624617f8011f501ca154013b0246f8d100212154de4584bf0020bde8f08d002384454ff0000111d24242acf10100002100bf27187f780130002908bf0146302f02eb000718bf19460137f2d1002993d0481e235c00222e2b625408bf22540120bde8f08d4ff0020c60464eb1791e634600bf11f8012f581ce254013e0346f8d10021
+e0000000d30603402154da4584bf0020bde8f08dc6e700002de9f04589b092460a460146202a4ff000003cd801aecde90700cde90500cde90300cde90100b01a2030984600f0b7fe3046202100f066f830b1b8f1020f29d2002009b0bde8f085002000bf36f8101009ba090c26f8101001301028f6d101ae3046202100f04ef8b0fa80f14fea5114d0b14746a8eb07050aeb070150462a4600f08ffe00200af8050084f0010009b0bde8f0851a4950467944424600f0f9fe012009b0bde8f085b8f1000fedd0134d474600bf0020002136f8102042ea0141
+e0000000d3060410a1fb0523da0802eb820326f8102001301028a1eb4301efd1013f41f030000af807003046202100f00df8b0fa80f100284fea5114bed1002fdcd1c6e7cdcccccce10e000000298c4618bf4ff0010c0fd003786bb9012300bf8b424ff0000c38bf4ff0010c994203d0c25c0133002af3d08cf0010070472de9f04d9ab001ac0d460746204664211e46924600f025fe3846294622466423fff753ff80b3dde9228b01a8642100f0b2fe074630460b2100f0adfec4b205462246404631465c4588bf5a4600f00cfe002c1ebf0135202008f8
+e0000000d30604e00400e8b208eb0002c043f9b200eb0b0301a8cdf800a0fff789fe00281ebf0beb0801002201f8012c1ab0bde8f08d00201ab0bde8f08d80b5142a28bf1422891a203100f0e6fd80bd80b5202a28bf202200f0dffd80bdb0b5044640f20220a568a083a06905f12001142200f0d9fd0321002805f1340008bf0221e06004206177a077b0bdb0b582b004460078062828d12069592805d81948784400f01dfa002020e0e5685a21284600f0aefd606900f02ff8134901ab7944022200f0c1fb60b10198b0f5807f85f859000ed2c1b20229
+e0000000d30605b00ed285f85500042004e00a48784400f0fbf90120607002b0b0bd07487844d4e70648784400f0f0f90020f3e7b80c0000d60e0000e80c0000980d00005e0e00004278017883781204c07842ea016141ea0321084470470000b0b50446d0e9025301690c482022784400f0cef995f8591004200129207508bfb0bd21b92046294600f00cf8b0bd0448784400f0bdf900202075b0bdb60d0000ca0c0000b0b50c4691f85810054649b1b4f8560029690430814218bfb0bd002084f8580094f8551001290fdd02291ad0032925d0042935d1
+e0000000d3060680288a3c30a4f85600012084f8580084f85500b0bd09b3012928d1e96804f134001422fff738ff052084f85500b0bde96804f120001422fff72eff042084f85500012084f85800b0bde86800f019f8a4f85600022084f85500b0bde96820462022fff722ff032084f85500b0bd0348784400f062f900202875b0bd00bfdd0b0000817fc07f40ea012080b27047b0b50446c068a56858b1c07fe16885f8530005f1480014310b2200f05cfd012000e0002085f8540004206075b0bd0000b0b50446d0e9025022690b49794400f04afd95f8
+e0000000d3060750591031b10948784400f02ef900202077b0bdd4e905020449794400f03afd04202077b0bdb50c0000370b0000130b0000b0b50446c569406aa16a00f0adfcd4e90b0100f0a9fc94f82000022806d0012809d068b9204600f019f80ee02046294600f056f809e02046294600f02df804e00548784400f0f8f80020002818bf042084f83400b0bd00bfcf0b000010b582b00446406aa26a0a49794400f0fafc6068e26a0068246b90f862100092054b42307b4412220194fff73efe02b010bd00bfa30a0000e40a0000b0b582b00446406a
+e0000000d3060820a26a0d460d49794400f0dbfc95f8540005f1480395f85310002808bf04f11003d4e90b0408bf12210090cab2284620210194fff718fe02b0b0bd00bf6a0a0000b0b582b00446406aa26a0d460b49794400f0b7fce06a30210170e06a782141702168e36a0a6805f12000991c0023cde90033fff7fbfb02b0b0bd00bfcc0a000080b591b10246b0f5827f13da40f2011082421bd0b2f5817f1cd040f20310824224d10846fff737fe80bd1448784400f073f880bd12d040f20510824212d0b2f5837f13d10846fff74bff80bd0846fff7
+e0000000d30608f039fe80bd0846fff787fe80bd0846fff705ff80bd0846fff719ff80bd02481146784400f051f880bd140a0000e60a000080b586b00748784401904ff480700290012003900020cde9040001a800f00cfa06b080bd9a09000080b5002000f030fa80bd00000446704600f00ef8024605482146784400f028f800f018fa214600f00dfc00bfe40900000349024a7944401a104470470000dec081f6ffffb0b582b005465f208df80400080a0c468df805008df8061001a8032100f0ecf9a1b2284600f0e8f902b0b0bd83b02de9f04d89b0
+e0000000d30609c0cde91112139320b10446007811a9039158b909b0bde8f04d03b0704741466c1efff7d4ff20780028f3d00026a05d18b1252801d00136f9e720463146a519fff7c5ffa05d2c462528ecd1691c00274ff0200c4ff0000800204d1c15f8011c01352d2915dc4ff00000f7d0252974d02a2940f00281294611f8010d732840f0fc800398021d0392d0f800800220e4e700bf472929dca1f130020a2a0dd281f030023a4307eb870201eb420108bf4ff0300ca1f13007691ecfe72e2940f0dd8015f8010c2a2840f0d8802878482804d07328
+e0000000d3060a9002d0682840f0d0800399081d0390d1f8008001202946b7e7672908dd722910dd732933d0752936d0782910d0bce0622916dc482900f0a280582940f0b580012406e0682900f09d80702940f0ad80002403981026011d039100680890012022e0632900f0a580642940f09e800398011d03910068b0f1ff3f089011dc4042089000200a2600240ee0a81e97e07a4979448a46002179e00398011d039100680890002401200a26ddf820a0564502d94ff0010b10e0ddf820a07b1e31468b46a6fb0112002a18bf012251451f4603d8002a
+e0000000d3060b60a7f10103f2d018b14ff0000801230de05ffa8cf1302906d12d2101234ff001088df8101002e000234ff0000880f00100391a8a1e0d2a11d801390fd04042019004a840445ffa8cf2029300f0a4fa019908eb0700029b0844a0f10108002b04a802bf2d2100f8081008f10108bbf1000f3ff404af5049a8f101077944bafbfbf2002cb2fbf6f303fb16224c4b7b4408bf0b469a5c5e45bbfbf6fb00eb070307f101075a70ead907f10108e7e63f49794401e03c4979448a460121039ac0b2131d0393d2f800b0b0b101281cd002283dd1
+e0000000d3060c309bf80000002857d031480521784406e00398011d03910068089008a80121fff79dfe6c1ec6e600201bf800200130002afad1a0f1010821b3b8f1000f27d00021002604af03e000bf0136b0451cd01bf806007b18020900f00f001af800001af802205870c81c7a54102801f102015446ead33846fff772fe0021e5e7b0460029dad15846414606e0474619b905e00027002111b104a8fff761fe4745a5f101047ff688aea8eb07050e4801217844fff755fe0135f8d37de608f10104084801217844fff74bfe013cf8d1b046e5e700bf
+e0000000d3060d00bd060000370800002d0900004d080000ad050000c1050000710800006f08000080b54ab14ff0000c51f82ce0864505d00cf1010c6245f7d1002080bd1bb10120c3f800c080bd012080bd01df002900d170470846fff7fefd80b582b000900020019003486946fff7f0ff02b080bd00bf6700000182b00020019069466820fff7e4ffffde80b582b0cde9000102486946fff7dbff02b080bd8300000280b582b00020019069468720fff7cfff02b080bd80b582b000900020019003486946fff7c4ff02b080bd00bf0b01000153b94ab9
+e0000000d3060dd0002908bf00281cbf4ff0ff314ff0ff3000f00cb8adf1080c6de904ce00f008f8ddf804e0dde9022304b07047704700bf2de9f04f099e0d4604460f46002b47d18a4294465fd9b2fa82f343b1c3f120019f4002fa03fc9c4020fa01f10f434fea1c451ffa8cfe220cb7fbf5f105fb117701fb0ef042ea0742904208d91ceb020201f1ff3702d2904200f234813946121aa4b2b2fbf5f005fb102200fb0efe44ea0244a64508d91ceb040400f1ff3202d2a64500f21981104640ea0140a4eb0e0400211eb1dc400023c6e90043bde8f08f
+e0000000d3060ea08b4208d9002e00f0fb800021c6e900050846bde8f08fb3fa83f100294bd1ab42c0f0f180824240f2ee800846002ee5d0c6e90047e2e702b9ffdeb2fa82f3002b40f09d808d1a4fea124e97b20121b5fbfef20efb1250250c45ea004507fb02f0a8420fd91ceb050502f1ff382cbf4ff001094ff00009a84203d9b9f1000f00f0ce8042462d1aa4b2b5fbfef00efb105500fb07f744ea0544a74208d91ceb040400f1ff3502d2a74200f2b3802846e41b40ea02409de7c1f120078b4005fa01f422fa07fcfd408a404cea030c20fa07f3
+e0000000d3060f704fea1c491c431ffa8cfe00fa01f3200cb5fbf9f809fb185540ea054508fb0ef0a8420fd91ceb050508f1ff3a2cbf4ff0010b4ff0000ba84203d9bbf1000f00f08c80d0462d1aa4b2b5fbf9f009fb105500fb0efe44ea0545ae4507d91ceb050500f1ff3401d2ae457ed8204640ea0840a5eb0e05a0fb029845454c46c64602d306d14b4504d20138b9eb020468eb0c0e002e6fd01a1b65eb0e0522fa01f305fa07f7cd4000211f43c6e900753ee702fa03fcc3f1200001fa03f24fea1c4ec14024fa00f51ffa8cf79c401543b1fbfef0
+e0000000d30610402a0c0efb101142ea014200fb07f191420ed91ceb020200f1ff382cbf4ff001094ff00009914202d9b9f1000f31d04046521aadb2b2fbfef10efb112245ea024501fb07f2aa4207d91ceb050501f1ff3801d2aa4223d84146ad1a41ea004126e731463046fae6841a65eb030301201f460ce7644402384ae764440238e4e6023a65442fe702396244c9e6a8f10208654470e702386244cbe7023865447ee702396544d9e73146d9e6002200f004b800f017b800f022b813460a46194600f037b80139024410b5904201d1002005e00378
+e0000000d306111011f8014fa34201d0181b10bd0130f2e70a44431e914200d1704710b511f8014b914203f8014ff9d110bd884210b501eb020402d98442234607d8431ea14208d011f8012b03f8012ff8e7024401468a4200d110bd13f8014d02f8014df7e702440346934200d1704703f8011bf9e70000ec46a0e8f05f4ff000007047b0e8f05fe546080008bf0120704700bf70b50446084616192146b1420b4606d11c1b121b08d100f02bf8204470bd1d780131002df1d1f3e70646314616f8015b15b9081a1d70f0e7012a1cbf02f1ff3203f8015b
+e0000000d30611e0f1e70b4610b562b1013a08d013f8014b00f8014b002cf7d1581a013810bd0022027013f8012b002afbd1f5e7034613f8012b002afbd1181a013870470246014410b58a42134603d01c780132002cf8d1181a10bd506c7567696e20706172616d65746572732073747275637475726520697320626967676572207468616e20616c6c6f7765642073697a650a0053656c6563746f7220696e6465783a202564206e6f7420737570706f727465640a0053656e640052656365697665204d696e2e00200053776170004572726f723a2073
+e0000000d30612b0656c6563746f72206e6f7420666f756e64210a00457468657265756d003000506172616d206e6f7420737570706f727465643a2025640a004554480030313233343536373839616263646566004552524f520030780053656c6563746f7220496e646578206e6f7420737570706f727465643a2025640a00556e68616e646c6564206d6573736167652025640a0042656e656669636961727900657863657074696f6e5b3078253034585d3a204c523d3078253038580a004572726f723a206f766572666c6f77206465746563746564
+e0000000d3061380206f6e2073656c6563746f7220696e646578210a00526563656976656420616e20696e76616c69642073637265656e496e6465780a005265636569766564206e756c6c20706172616d65746572730a00706c7567696e2070726f7669646520706172616d657465723a206f66667365742025640a42797465733a20252e2a480a00506c7567696e426f696c6572706c6174650045786974696e6720666f6c6c6f77696e6720657863657074696f6e3a2025640a004d697373696e672073656c6563746f72496e6465783a2025640a0030
+e0000000d30614503132333435363738396162636465663031323334353637383941424344454600b56af37f42423713000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+e0000000d306152000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+e00000005d0615f0000000000000000000000000000000000111506c7567696e426f696c6572706c6174650205312e302e3003220100000000ffffff0000000000068001fc03ffc03fc03ff00fffc039700e00000000040a01028000002c8000003c
+e00000000107
+e0000000090800000000164a9517
+e00000000109
diff --git a/tests/plugin_binaries/nanos2/bin/app.elf b/tests/plugin_binaries/nanos2/bin/app.elf
new file mode 100644
index 00000000..1ee4bc02
Binary files /dev/null and b/tests/plugin_binaries/nanos2/bin/app.elf differ
diff --git a/tests/plugin_binaries/nanos2/bin/app.hex b/tests/plugin_binaries/nanos2/bin/app.hex
new file mode 100644
index 00000000..68e8b8ce
--- /dev/null
+++ b/tests/plugin_binaries/nanos2/bin/app.hex
@@ -0,0 +1,360 @@
+:02000004C0DE5C
+:100000008CB0044662B600F09FFC6D46284601F0B5
+:10001000B7F881B2ADF82C0071B9684600F0C8FE9F
+:100020000A90F4B1206840F2FF11884202D0616862
+:1000300000F036FC00F09EFE0A980C460021ADF858
+:100040002C1000F0B5FE08482146784400F0B4FCBE
+:1000500000F0A4FEA842EDD10A9800F0A9FE00F03D
+:1000600089FE00F05DFC00BFC513000003B44FF033
+:10007000470007E003B44FF0590003E003B44FF02A
+:100080008600FFE700490847018080002DE9F04520
+:100090008FB092460C46DDE91621054622F0010399
+:1000A00083F01E030B4318D102AF10463A463323A8
+:1000B00000F06AF8D8B33846332101F0AFF8304980
+:1000C0003B18C0F133027944184601F067F838460E
+:1000D000332101F0A3F8074600E000270DF10808DE
+:1000E000284E07EB080002387E444FF0FF3100BF76
+:1000F0006A18527801311309F35C02F00F02B25C06
+:1001000000F8023F13294270F2D150464FF480713B
+:10011000FFF7B0FF58B9202007F12803019050469F
+:1001200001214246CDF80080FFF7A0FF18B1002062
+:100130000FB0BDE8F08500204FF0040C0DE000BFCB
+:1001400018F803108CEA8703D940B25C090748BF4E
+:10015000203A2254013028280BD04308E95C10F0E3
+:10016000010701F00F0208BF0A09092AE8D8B25CAA
+:10017000EFE7002084F8280001200FB0BDE8F085EB
+:1001800039120000001200002DE9F04D9846924609
+:100190000F460646002200BFD5B26C1C44452FD244
+:1001A0009346304639460A22002300F00FFED6F16E
+:1001B00009024FF00002BA4100EB8002A6EB4202B6
+:1001C00042F030020AF805200BF1010206460F4604
+:1001D000E2D3D0B200215FEA0B620AF800100FD020
+:1001E0004FF0FF300AEB00014A781AF805300AF8A0
+:1001F00005204B70811C013DA94200F10100F1D3A3
+:100200000020444538BF0120BDE8F08D2DE9F04DB8
+:100210009B4614460E46012907460FD138783028F0
+:100220000CD1BBF1020F4FF0000038BFBDE8F08DDC
+:100230003021217060700120BDE8F08DDDF820C014
+:10024000B44505D206F1020EDE4507D9002040E094
+:100250000CF1030ADA4513D9002072E0B6EB0C0268
+:100260001ED0ACEB06034FF0FF3200BFB918A51843
+:1002700001324978981801306970F7D1531C10E0A9
+:100280003020BCEB060820704FF02E00607048D084
+:10029000A01C4146302200F02EFF08F1020C42E083
+:1002A0000023BCF1000F9C461EBF03F1010C2E2061
+:1002B000E054B34260460AD2D819471EF31A624688
+:1002C00017F8011F501CA154013B0246F8D1002130
+:1002D0002154DE4584BF0020BDE8F08D0023844515
+:1002E0004FF0000111D24242ACF10100002100BFE9
+:1002F00027187F780130002908BF0146302F02EB14
+:10030000000718BF19460137F2D1002993D0481EC3
+:10031000235C00222E2B625408BF22540120BDE82A
+:10032000F08D4FF0020C60464EB1791E634600BF5F
+:1003300011F8012F581CE254013E0346F8D1002168
+:100340002154DA4584BF0020BDE8F08DC6E70000E7
+:100350002DE9F04589B092460A460146202A4FF021
+:1003600000003CD801AECDE90700CDE90500CDE99C
+:100370000300CDE90100B01A2030984600F0B7FE26
+:100380003046202100F066F830B1B8F1020F29D2D2
+:10039000002009B0BDE8F085002000BF36F810103D
+:1003A00009BA090C26F8101001301028F6D101AE58
+:1003B0003046202100F04EF8B0FA80F14FEA511497
+:1003C000D0B14746A8EB07050AEB070150462A467D
+:1003D00000F08FFE00200AF8050084F0010009B04B
+:1003E000BDE8F0851A4950467944424600F0F9FECE
+:1003F000012009B0BDE8F085B8F1000FEDD0134D34
+:10040000474600BF0020002136F8102042EA014193
+:10041000A1FB0523DA0802EB820326F81020013045
+:100420001028A1EB4301EFD1013F41F030000AF861
+:1004300007003046202100F00DF8B0FA80F10028C6
+:100440004FEA5114BED1002FDCD1C6E7CDCCCCCCC5
+:10045000E10E000000298C4618BF4FF0010C0FD0B0
+:1004600003786BB9012300BF8B424FF0000C38BFFB
+:100470004FF0010C994203D0C25C0133002AF3D043
+:100480008CF0010070472DE9F04D9AB001AC0D469B
+:100490000746204664211E46924600F025FE384657
+:1004A000294622466423FFF753FF80B3DDE9228B00
+:1004B00001A8642100F0B2FE074630460B2100F08F
+:1004C000ADFEC4B205462246404631465C4588BF73
+:1004D0005A4600F00CFE002C1EBF0135202008F803
+:1004E0000400E8B208EB0002C043F9B200EB0B03D2
+:1004F00001A8CDF800A0FFF789FE00281EBF0BEB76
+:100500000801002201F8012C1AB0BDE8F08D00208E
+:100510001AB0BDE8F08D80B5142A28BF1422891ABC
+:10052000203100F0E6FD80BD80B5202A28BF2022C2
+:1005300000F0DFFD80BDB0B5044640F20220A568A2
+:10054000A083A06905F12001142200F0D9FD032148
+:10055000002805F1340008BF0221E0600420617723
+:10056000A077B0BDB0B582B004460078062828D187
+:100570002069592805D81948784400F01DFA002050
+:1005800020E0E5685A21284600F0AEFD606900F0E1
+:100590002FF8134901AB7944022200F0C1FB60B18E
+:1005A0000198B0F5807F85F859000ED2C1B20229BA
+:1005B0000ED285F85500042004E00A48784400F083
+:1005C000FBF90120607002B0B0BD07487844D4E761
+:1005D0000648784400F0F0F90020F3E7B80C00007A
+:1005E000D60E0000E80C0000980D00005E0E000022
+:1005F0004278017883781204C07842EA016141EAC6
+:100600000321084470470000B0B50446D0E9025306
+:1006100001690C482022784400F0CEF995F8591071
+:1006200004200129207508BFB0BD21B92046294604
+:1006300000F00CF8B0BD0448784400F0BDF900208B
+:100640002075B0BDB60D0000CA0C0000B0B50C4658
+:1006500091F85810054649B1B4F85600296904309C
+:10066000814218BFB0BD002084F8580094F855109E
+:1006700001290FDD02291AD0032925D0042935D1FB
+:10068000288A3C30A4F85600012084F8580084F8E9
+:100690005500B0BD09B3012928D1E96804F134003F
+:1006A0001422FFF738FF052084F85500B0BDE96833
+:1006B00004F120001422FFF72EFF042084F85500D7
+:1006C000012084F85800B0BDE86800F019F8A4F8DB
+:1006D0005600022084F85500B0BDE968204620226B
+:1006E000FFF722FF032084F85500B0BD034878448B
+:1006F00000F062F900202875B0BD00BFDD0B0000DE
+:10070000817FC07F40EA012080B27047B0B50446C7
+:10071000C068A56858B1C07FE16885F8530005F14D
+:10072000480014310B2200F05CFD012000E00020A5
+:1007300085F8540004206075B0BD0000B0B50446D3
+:10074000D0E9025022690B49794400F04AFD95F83E
+:10075000591031B10948784400F02EF90020207773
+:10076000B0BDD4E905020449794400F03AFD042003
+:100770002077B0BDB50C0000370B0000130B000054
+:10078000B0B50446C569406AA16A00F0ADFCD4E981
+:100790000B0100F0A9FC94F82000022806D00128E3
+:1007A00009D068B9204600F019F80EE02046294625
+:1007B00000F056F809E02046294600F02DF804E044
+:1007C0000548784400F0F8F80020002818BF0420FD
+:1007D00084F83400B0BD00BFCF0B000010B582B06C
+:1007E0000446406AA26A0A49794400F0FAFC60684B
+:1007F000E26A0068246B90F862100092054B423068
+:100800007B4412220194FFF73EFE02B010BD00BFF0
+:10081000A30A0000E40A0000B0B582B00446406AB2
+:10082000A26A0D460D49794400F0DBFC95F85400AE
+:1008300005F1480395F85310002808BF04F1100390
+:10084000D4E90B0408BF12210090CAB22846202127
+:100850000194FFF718FE02B0B0BD00BF6A0A0000A5
+:10086000B0B582B00446406AA26A0D460B4979448D
+:1008700000F0B7FCE06A30210170E06A7821417035
+:100880002168E36A0A6805F12000991C0023CDE97C
+:100890000033FFF7FBFB02B0B0BD00BFCC0A000085
+:1008A00080B591B10246B0F5827F13DA40F20110B3
+:1008B00082421BD0B2F5817F1CD040F203108242ED
+:1008C00024D10846FFF737FE80BD1448784400F075
+:1008D00073F880BD12D040F20510824212D0B2F5FA
+:1008E000837F13D10846FFF74BFF80BD0846FFF713
+:1008F00039FE80BD0846FFF787FE80BD0846FFF73A
+:1009000005FF80BD0846FFF719FF80BD024811466C
+:10091000784400F051F880BD140A0000E60A000097
+:1009200080B586B00748784401904FF480700290FB
+:10093000012003900020CDE9040001A800F00CFA8A
+:1009400006B080BD9A09000080B5002000F030FAA2
+:1009500080BD00000446704600F00EF802460548CF
+:100960002146784400F028F800F018FA214600F0FB
+:100970000DFC00BFE40900000349024A7944401A13
+:10098000104470470000DEC081F6FFFFB0B582B0B2
+:1009900005465F208DF80400080A0C468DF8050016
+:1009A0008DF8061001A8032100F0ECF9A1B2284649
+:1009B00000F0E8F902B0B0BD83B02DE9F04D89B088
+:1009C000CDE91112139320B10446007811A90391C7
+:1009D00058B909B0BDE8F04D03B0704741466C1EF0
+:1009E000FFF7D4FF20780028F3D00026A05D18B1CF
+:1009F000252801D00136F9E720463146A519FFF731
+:100A0000C5FFA05D2C462528ECD1691C00274FF0BE
+:100A1000200C4FF0000800204D1C15F8011C01357A
+:100A20002D2915DC4FF00000F7D0252974D02A2994
+:100A300040F00281294611F8010D732840F0FC8036
+:100A40000398021D0392D0F800800220E4E700BF63
+:100A5000472929DCA1F130020A2A0DD281F03002A7
+:100A60003A4307EB870201EB420108BF4FF0300C1D
+:100A7000A1F13007691ECFE72E2940F0DD8015F87F
+:100A8000010C2A2840F0D8802878482804D0732800
+:100A900002D0682840F0D0800399081D0390D1F857
+:100AA000008001202946B7E7672908DD722910DD9B
+:100AB000732933D0752936D0782910D0BCE062294B
+:100AC00016DC482900F0A280582940F0B5800124A6
+:100AD00006E0682900F09D80702940F0AD80002478
+:100AE00003981026011D039100680890012022E060
+:100AF000632900F0A580642940F09E800398011DC1
+:100B000003910068B0F1FF3F089011DC404208906B
+:100B100000200A2600240EE0A81E97E07A497944B6
+:100B20008A46002179E00398011D0391006808902E
+:100B3000002401200A26DDF820A0564502D94FF0F6
+:100B4000010B10E0DDF820A07B1E31468B46A6FB92
+:100B50000112002A18BF012251451F4603D8002A5E
+:100B6000A7F10103F2D018B14FF0000801230DE006
+:100B70005FFA8CF1302906D12D2101234FF00108B5
+:100B80008DF8101002E000234FF0000880F0010003
+:100B9000391A8A1E0D2A11D801390FD0404201900E
+:100BA00004A840445FFA8CF2029300F0A4FA019981
+:100BB00008EB0700029B0844A0F10108002B04A8E1
+:100BC00002BF2D2100F8081008F10108BBF1000F49
+:100BD0003FF404AF5049A8F101077944BAFBFBF296
+:100BE000002CB2FBF6F303FB16224C4B7B4408BFF0
+:100BF0000B469A5C5E45BBFBF6FB00EB070307F177
+:100C000001075A70EAD907F10108E7E63F4979443C
+:100C100001E03C4979448A460121039AC0B2131D80
+:100C20000393D2F800B0B0B101281CD002283DD106
+:100C30009BF80000002857D031480521784406E091
+:100C40000398011D03910068089008A80121FFF78F
+:100C50009DFE6C1EC6E600201BF800200130002A15
+:100C6000FAD1A0F1010821B3B8F1000F27D000217B
+:100C7000002604AF03E000BF0136B0451CD01BF8CE
+:100C800006007B18020900F00F001AF800001AF89D
+:100C900002205870C81C7A54102801F102015446F1
+:100CA000EAD33846FFF772FE0021E5E7B046002997
+:100CB000DAD15846414606E0474619B905E0002713
+:100CC000002111B104A8FFF761FE4745A5F1010419
+:100CD0007FF688AEA8EB07050E4801217844FFF7A0
+:100CE00055FE0135F8D37DE608F1010408480121DD
+:100CF0007844FFF74BFE013CF8D1B046E5E700BF72
+:100D0000BD060000370800002D0900004D08000056
+:100D1000AD050000C1050000710800006F0800006B
+:100D200080B54AB14FF0000C51F82CE0864505D053
+:100D30000CF1010C6245F7D1002080BD1BB10120F0
+:100D4000C3F800C080BD012080BD01DF002900D1B3
+:100D500070470846FFF7FEFD80B582B00090002086
+:100D6000019003486946FFF7F0FF02B080BD00BF65
+:100D70006700000182B00020019069466820FFF7FB
+:100D8000E4FFFFDE80B582B0CDE90001024869468C
+:100D9000FFF7DBFF02B080BD8300000280B582B0A8
+:100DA0000020019069468720FFF7CFFF02B080BD89
+:100DB00080B582B000900020019003486946FFF79B
+:100DC000C4FF02B080BD00BF0B01000153B94AB996
+:100DD000002908BF00281CBF4FF0FF314FF0FF3043
+:100DE00000F00CB8ADF1080C6DE904CE00F008F885
+:100DF000DDF804E0DDE9022304B07047704700BF6E
+:100E00002DE9F04F099E0D4604460F46002B47D1B1
+:100E10008A4294465FD9B2FA82F343B1C3F120010A
+:100E20009F4002FA03FC9C4020FA01F10F434FEA75
+:100E30001C451FFA8CFE220CB7FBF5F105FB117760
+:100E400001FB0EF042EA0742904208D91CEB020275
+:100E500001F1FF3702D2904200F234813946121A72
+:100E6000A4B2B2FBF5F005FB102200FB0EFE44EA33
+:100E70000244A64508D91CEB040400F1FF3202D25B
+:100E8000A64500F21981104640EA0140A4EB0E0489
+:100E900000211EB1DC400023C6E90043BDE8F08F0D
+:100EA0008B4208D9002E00F0FB800021C6E9000526
+:100EB0000846BDE8F08FB3FA83F100294BD1AB426D
+:100EC000C0F0F180824240F2EE800846002EE5D06C
+:100ED000C6E90047E2E702B9FFDEB2FA82F3002B6F
+:100EE00040F09D808D1A4FEA124E97B20121B5FB5A
+:100EF000FEF20EFB1250250C45EA004507FB02F0FE
+:100F0000A8420FD91CEB050502F1FF382CBF4FF0AA
+:100F100001094FF00009A84203D9B9F1000F00F010
+:100F2000CE8042462D1AA4B2B5FBFEF00EFB105542
+:100F300000FB07F744EA0544A74208D91CEB040468
+:100F400000F1FF3502D2A74200F2B3802846E41B2D
+:100F500040EA02409DE7C1F120078B4005FA01F409
+:100F600022FA07FCFD408A404CEA030C20FA07F302
+:100F70004FEA1C491C431FFA8CFE00FA01F3200CB7
+:100F8000B5FBF9F809FB185540EA054508FB0EF0DA
+:100F9000A8420FD91CEB050508F1FF3A2CBF4FF012
+:100FA000010B4FF0000BA84203D9BBF1000F00F07A
+:100FB0008C80D0462D1AA4B2B5FBF9F009FB105570
+:100FC00000FB0EFE44EA0545AE4507D91CEB0505BE
+:100FD00000F1FF3401D2AE457ED8204640EA0840F9
+:100FE000A5EB0E05A0FB029845454C46C64602D32C
+:100FF00006D14B4504D20138B9EB020468EB0C0E64
+:10100000002E6FD01A1B65EB0E0522FA01F305FACC
+:1010100007F7CD4000211F43C6E900753EE702FAFD
+:1010200003FCC3F1200001FA03F24FEA1C4EC14059
+:1010300024FA00F51FFA8CF79C401543B1FBFEF033
+:101040002A0C0EFB101142EA014200FB07F191420B
+:101050000ED91CEB020200F1FF382CBF4FF0010942
+:101060004FF00009914202D9B9F1000F31D040464A
+:10107000521AADB2B2FBFEF10EFB112245EA024557
+:1010800001FB07F2AA4207D91CEB050501F1FF3865
+:1010900001D2AA4223D84146AD1A41EA004126E7CF
+:1010A00031463046FAE6841A65EB030301201F46F9
+:1010B0000CE7644402384AE764440238E4E6023A42
+:1010C00065442FE702396244C9E6A8F10208654485
+:1010D00070E702386244CBE7023865447EE70239A4
+:1010E0006544D9E73146D9E6002200F004B800F0A3
+:1010F00017B800F022B813460A46194600F037B870
+:101100000139024410B5904201D1002005E0037876
+:1011100011F8014FA34201D0181B10BD0130F2E7B6
+:101120000A44431E914200D1704710B511F8014B9B
+:10113000914203F8014FF9D110BD884210B501EB7F
+:10114000020402D98442234607D8431EA14208D094
+:1011500011F8012B03F8012FF8E7024401468A42F7
+:1011600000D110BD13F8014D02F8014DF7E702441C
+:101170000346934200D1704703F8011BF9E70000D2
+:10118000EC46A0E8F05F4FF000007047B0E8F05F79
+:10119000E546080008BF0120704700BF70B504464F
+:1011A000084616192146B1420B4606D11C1B121BDC
+:1011B00008D100F02BF8204470BD1D780131002DBE
+:1011C000F1D1F3E70646314616F8015B15B9081A66
+:1011D0001D70F0E7012A1CBF02F1FF3203F8015B2A
+:1011E000F1E70B4610B562B1013A08D013F8014B94
+:1011F00000F8014B002CF7D1581A013810BD00221D
+:10120000027013F8012B002AFBD1F5E7034613F80F
+:10121000012B002AFBD1181A0138704702460144FD
+:1012200010B58A42134603D01C780132002CF8D145
+:10123000181A10BD506C7567696E20706172616D0F
+:10124000657465727320737472756374757265204A
+:10125000697320626967676572207468616E2061D6
+:101260006C6C6F7765642073697A650A0053656CEE
+:101270006563746F7220696E6465783A2025642016
+:101280006E6F7420737570706F727465640A0053AA
+:10129000656E640052656365697665204D696E2EE2
+:1012A00000200053776170004572726F723A2073AC
+:1012B000656C6563746F72206E6F7420666F756EF7
+:1012C00064210A00457468657265756D00300050D0
+:1012D0006172616D206E6F7420737570706F7274BF
+:1012E00065643A2025640A004554480030313233A1
+:1012F0003435363738396162636465660045525269
+:101300004F520030780053656C6563746F722049EA
+:101310006E646578206E6F7420737570706F727470
+:1013200065643A2025640A00556E68616E646C65D8
+:1013300064206D6573736167652025640A004265EA
+:101340006E6566696369617279006578636570745A
+:10135000696F6E5B3078253034585D3A204C523DD1
+:101360003078253038580A004572726F723A206F13
+:10137000766572666C6F7720646574656374656406
+:10138000206F6E2073656C6563746F7220696E6484
+:101390006578210A00526563656976656420616E2F
+:1013A00020696E76616C69642073637265656E494D
+:1013B0006E6465780A005265636569766564206EBF
+:1013C000756C6C20706172616D65746572730A0072
+:1013D000706C7567696E2070726F766964652070D5
+:1013E0006172616D657465723A206F6666736574CB
+:1013F0002025640A42797465733A20252E2A480A0A
+:1014000000506C7567696E426F696C6572706C61D3
+:1014100074650045786974696E6720666F6C6C6FDF
+:1014200077696E6720657863657074696F6E3A20BE
+:1014300025640A004D697373696E672073656C6576
+:1014400063746F72496E6465783A2025640A0030CF
+:10145000313233343536373839616263646566302A
+:10146000313233343536373839414243444546000A
+:10147000B56AF37F4242371300000000000000000D
+:10148000000000000000000000000000000000005C
+:10149000000000000000000000000000000000004C
+:1014A000000000000000000000000000000000003C
+:1014B000000000000000000000000000000000002C
+:1014C000000000000000000000000000000000001C
+:1014D000000000000000000000000000000000000C
+:1014E00000000000000000000000000000000000FC
+:1014F00000000000000000000000000000000000EC
+:1015000000000000000000000000000000000000DB
+:1015100000000000000000000000000000000000CB
+:1015200000000000000000000000000000000000BB
+:1015300000000000000000000000000000000000AB
+:10154000000000000000000000000000000000009B
+:10155000000000000000000000000000000000008B
+:10156000000000000000000000000000000000007B
+:10157000000000000000000000000000000000006B
+:10158000000000000000000000000000000000005B
+:10159000000000000000000000000000000000004B
+:1015A000000000000000000000000000000000003B
+:1015B000000000000000000000000000000000002B
+:1015C000000000000000000000000000000000001B
+:1015D000000000000000000000000000000000000B
+:1015E00000000000000000000000000000000000FB
+:1015F00000000000000000000000000000000000EB
+:101600000111506C7567696E426F696C6572706C20
+:101610006174650205312E302E3003220100000076
+:1016200000FFFFFF0000000000068001FC03FFC078
+:101630003FC03FF00FFFC039700E00000000040AE9
+:0A16400001028000002C8000003C35
+:04000005C0DE000158
+:00000001FF
diff --git a/tests/plugin_binaries/nanos2/bin/app.sha256 b/tests/plugin_binaries/nanos2/bin/app.sha256
new file mode 100644
index 00000000..ad8402a5
--- /dev/null
+++ b/tests/plugin_binaries/nanos2/bin/app.sha256
@@ -0,0 +1 @@
+7361f2dcc7e90c4adbd624a81eb4fcf89a03765528da52173f95feb9c512117b
diff --git a/tests/plugin_binaries/nanox/bin/app.apdu b/tests/plugin_binaries/nanox/bin/app.apdu
new file mode 100644
index 00000000..f64f1ae7
--- /dev/null
+++ b/tests/plugin_binaries/nanox/bin/app.apdu
@@ -0,0 +1,36 @@
+e0000000130c11506c7567696e426f696c6572706c617465
+e0000000160b0500001800000000000000004a0000080000000001
+e0000000050500000000
+e0000000d30600008cb0044662b600f083fc6d46284601f0e3f9a88585b2002d0ed1684600f0b8fe0a90002c1cd020680e49884202d0616800f016fc00f08efe6c460020a0850a9800f0a6fe08487844294600f097fc00f095fea042eed10a9800f09afe00f07afe00f042fcff010000e916000003b401480be000004800000003b4014805e000005a00000003b40248ffe70249084700008700000001002100f0b593b003920491054601231898014699431e224a4019990a430027002a3a4619d1059306aa3324234600f06ff800285fd006ae30462146
+e0000000d30600d001f02afa3318221a30497944184601f095f93046214601f01ffa0246059b06a8059280182a4e7e44e95d0f240a092140715c4170b15c0170801c7f1c142ff3d11902039f3846fff7afff002100283ad12020019006a802900090059b2833012238460f4605921146029afff797ff3946002828d10020049f059b05e0715c059b3954401c28281ad002461a404308e95c002a03d021400929f0d902e009090929ecd906affb5c920004275740fb401a07715c00d52039049fe1e7002103e02820002139541946084613b0f0bd45150000
+e0000000d30601a012150000f0b587b002930446002001920546c7b27b1c029883422bd2009306950a250026204605912a46334600f07afe049003912a46069d334600f093fe019a201a30210143d155681c0921091b3146059b9941049c0399dad3c0b216542806009b07d0d05d915dd15590557f1e761cbe42f7d30298834202d3002007b0f0bd012007b0f0bdf0b583b0029314460e460746012907d13878302804d1029802283dd200256fe0089bb34222d2b11c0025029801918142294645d80020f11a04d03a5c2254401c8142fad1002b024602d0
+e0000000d30602702e212154421cb042114632d2331a38181146067866545b1e401c491c002bf8d127e0d91c0025029801918142294622d8991b2e2060703020207000290dd0a01c3022009100f05aff0098821c06e0002060703020207001252de00222002e114607d01146387860547f1c761e491c002ef8d1002060540298019b83421bd88a420ed2002303e0521c9142034609d0002b104600d01846a35c302bf4d00020f2e700200125002806d000212154401e225c2e2a00d12154284603b0f0bdf0b58bb014460a46202901d900263ae01d460146
+e0000000d306034000260a96099608960796069605960496039603afb81a203000f000ff2021384600f056f8002809d0022d22d32749794420462a4601f07ef801261ae0002003a90a5a52ba0a52801c2028f8d103a8202100f03ef84742474100280dd02e46a119ad1b20462a4600f0ddfe0020605501267e4030460bb0f0bd0095002df7d0009e019402960024204603ad295b000446180a273046394600f0e9fc28534743f01ba41c202cf0d130210843029e761e019ca05503a8202100f00bf847424741002802d1002eddd1d2e7009dc8e77b120000
+e0000000d3060410b0b54b1e0a469a4100290ed00378002b0bd101231c468c421a4600d30022a14203d0055d641c002df5d001205040b0bdf0b59db0039302920d46074604ac64262046314600f07cfe3846294622463346fff764ff00282cd0239c229d04a8642101f05af801900b21039801f055f80746c6b2a642224600d832462846039900f065fe002e02d02020a8557f1c02980090f8b22a18c04303190198c1b204a8fff7bafe002803d06119491e00220a701db0f0bd00201db0f0bd80b5142a00d31422891a203100f046fe80bd80b5202a00d3
+e0000000d30604e0202200f03ffe80bdb0b504460a48a083a069a56829462031142200f03ffe0421a1773435e560002802d003206077b0bd02206077b0bdc04602020000b0b582b004460078062827d12069592805d81948784400f023fa00201fe0e5685a21284600f006fe606900f02ff813497944022201ab00f0d7fb00280ad0553501982871010a0dd1c1b202290dd22870042004e00a48784400f002fa0120607002b0b0bd07487844d5e70748784400f0f7f90020f3e7c04620100000401200005210000002110000c81100000178090642781204
+e0000000d30605b05118827812028918c07808187047d4d4b0b504468568c36801690c487844202200f0d4f9042020755920295c01290cd0002904d12046294600f00cf8b0bd0448784400f0c3f900202075b0bd201100003210000070b504465820085c0e465636002806d020693288121d904244d10020b0700d4655352a78012a0cdd022a18d0032a22d0042a30d10120b0702870208a3c30308070bd002a1ed0012a25d1e3683431142208461946fff736ff0520287070bde3682031142208461946fff72cff0120b0700420287070bde06800f018f8
+e0000000d306068030800220287070bde368202208461946fff723ff0320287070bd04487844114600f06cf90020207570bdc0464f0f0000c17f807f0002401880b27047b0b504468068e16805465335002909d0c97f2970e168483014310b2200f0ccfe012000e00020042161756870b0bdd4d4b0b504468568c06822690c49794400f0bbfe5920295c002906d00a48784400f037f900202077b0bd6069a2690449794400f0aafe04202077b0bdc04625100000a50e0000810e000070b50446c569406aa16a00f007fde06a216b00f003fd2020205c2646
+e0000000d30607502036022807d001280ad000280dd1204600f018f80ee02046294600f059f809e02046294600f02cf804e00548784400f0fdf80020411e88418000307570bdc046350f000010b582b00446406aa26a0a49794400f067fe606800686221415ce26a236b0092019342301222044b7b44fff73ffe02b010bdc0460b0e0000480e0000b0b582b00d460446406aa26a0f49794400f048fe5320285c294653314978e26a236b00920193002904d02c464834002903d003e01034002900d11220c2b2202128462346fff714fe02b0b0bdd20d0000
+e0000000d3060820b0b582b00c460546406aaa6a0b49794400f020fee86a30210170e86a7821417028680268e86a0021009101912034811c2046fff721fc02b0b0bdc0462c0e000080b5002912d00246ff20034604339a4211dc023082421dd08120400082421dd09a4227d10846fff72ffe80bd1548784400f074f880bd41239b009a4212d00630824213d083204000824213d10846fff741ff80bd0846fff731fe80bd0846fff77ffe80bd0846fff7f9fe80bd0846fff70dff80bd02487844114600f04ff880bd6e0d0000440e000080b586b000200590
+e0000000d30608f00490064878440190012003900002029001a800f019fa06b080bdc046ec0c000080b5002000f03cfa80bdd4d40446704600f00ef8024605487844214600f026f800f024fa214600f05bfdc0463e0d000003497944401a0149401870470000dec0bbf6ffffb0b582b00c46054601a881705f210170210a4170032100f0fbf9a1b2284600f0f7f902b0b0bdd4d483b0f0b58cb011ac0ec4002800d1a7e1074611a806903878002800d1a0e10120019004e0bf193878002800d198e10026b85d002803d0252801d0761cf8e738463146fff7
+e0000000d30609c0c9ffb85d2528ebd1b819471c002320240593184601e0104619d139787f1c00222d29f8dd472937dc0a46303a0a2a1cd2039430221d460b4653402c462b4300d0039a0a2363435b18303b1446e5e725295ad02a2900d0f0e03878732800d0ece00699081d0690022013e02e2900d0e4e038782a2800d0e0e07878482804d0732802d0682800d0d8e07f1c0699081d0690012009680591c0e767290adda24d7d44722910dd732931d0752933d0782910d0c3e0622916dc482900d1a7e0582900d0bbe0012006e0682900d1a4e0702900d0
+e0000000d3060a90b3e0002004900698011d069100680b9010251fe0632900d1abe0642900d0a4e00698011d069100680b900a25002800d5f7e0002004900de0781ea0e01c460297002183e00698011d069100680b90002004900a250198064602970b9905918d42039402d90746024616e05a1e0b980590284607461446002128463a460b4600f0f9f94a1e9141059a904202d8621e0029efd02346019a039c30465040191a002e02d0002614460be0e2b20026302a344606d107aa1c462d23137023460126019c8a1e0d2a0fd8491e0dd04042009007a8
+e0000000d3060b608019039ad2b2039300f000fb0398301800994018461e002c03d107a82d218155761c002f1cd05d487844039012e0039c0598394600f00af9294600f08df9605c07a988553846294600f000f9761cbd42074605d804980028e9d1514c7c44e7e707a83146fff7c6fe029feae61c460297474d7d4401e01c4602970199069a131d0693c0b21768002815d001281ad0022838d138780028029f61d03c487844052106e00698011d069100680b900ba80121fff7a0fec5e600203a5c401c002afbd1401e0590002920d0059c002c2ad00021
+e0000000d3060c300e4607e007a81146fff78cfe0021761cb4421dd0b85d0209aa5c07ab5a545a180f230340e85c50708a1cc81c1028e9d21146ece705960029ded13846059d2946fff770fe22462c46029fa24210d890e6224601e0002211460029029f05d007a81446fff75ffe2246059ca24200d880e6a41a154878440121fff754fe641cf8d377e640420b9000260496019814e725460598441c0b4878440121fff743fe641ef8d134462a46a242e2d862e60cb0f0bc01bc03b00047c0460d0d00001d0a0000a90b0000f708000019090000f30b0000
+e0000000d3060d00af0b0000b0b5002a07d000240d68854205d0091d641ca242f8d10020b0bd0120002bfbd01c60b0bd01df002900d170470846fff7f3fdd4d480b582b000210191009003486946fff7efff02b080bdc0466700000182b00020019068206946fff7e3ffffde80b582b00191009002486946fff7daff02b080bd8300000280b582b00020019087206946fff7ceff02b080bd80b582b000210191009003486946fff7c3ff02b080bdc0460b010001002243088b4274d303098b425fd3030a8b4244d3030b8b4228d3030c8b420dd3ff220902
+e0000000d3060dd012ba030c8b4202d31212090265d0030b8b4219d300e0090ac30b8b4201d3cb03c01a5241830b8b4201d38b03c01a5241430b8b4201d34b03c01a5241030b8b4201d30b03c01a5241c30a8b4201d3cb02c01a5241830a8b4201d38b02c01a5241430a8b4201d34b02c01a5241030a8b4201d30b02c01a5241cdd2c3098b4201d3cb01c01a524183098b4201d38b01c01a524143098b4201d34b01c01a524103098b4201d30b01c01a5241c3088b4201d3cb00c01a524183088b4201d38b00c01a524143088b4201d34b00c01a5241411a
+e0000000d3060ea000d20146524110467047ffe701b5002000f006f802bdc0460029f7d076e770477047c046002b11d1002a0fd1002900d1002802d00021c943081c07b4024802a14018029003bdc046d9ffffff03b4684601b5029800f030f8019b9e4602b00cbc7047c046f0b5ce46474615042d0c2e0080b50704140c3f0c9946030c7e435d43674363437f19340ce4199c46a54203d980235b029846c4444b4643435143250c36046544360c2404a4195b19591820000cbc90469946f0bdf0b557464e464546de46e0b5040083b00d00924699468b42
+e0000000d3060f7030d82dd04946504600f0c0f829000600200000f0bbf8331a9846203b9b4633d45a465346934042461f00534693401e00af423ad8af4200d17be05b46a41bbd41002b00da78e0002200230092019301235a4693400193012342469340009328e08242cfd900220023009201930c9b002b01d01c605d600098019903b03cbc90469946a246ab46f0bd424620239b1a5246da40414613004a468a40170042461f43534693401e00af42c4d900220023009201934346002bd9d0fb079c46614672080a437b0846460ee0ab4201d1a2420cd8
+e0000000d3061040a41a9d41012024196d410021013e24184d41002e06d0ab42eed9013e24196d41002ef8d1009801995b4600196941002b25db2b005a464446d3402a00e2401c005b461500002b2bdb26005f46be40330026004746be403200801a9941009001919ce7a342b9d880e74246202300219b1a0022009101920122da40019283e7424620239b1a2a0046469a402300f340444613432a00e2401c005b461500002bd3da2023424626009b1ade402f00b4464646b74066463b003343cae7c04610b5002903d100f007f8203002e0081c00f002f8
+e0000000d306111010bdc0461c2101231b04984201d3000c10391b0a984201d3000a08391b09984201d30009043902a2105c40187047c0460403020201010101000000000000000010b5002200f00af810bdc04610b500f035f810bd10b500f085f810bd130010b50a00190000f0dcf810bdc04630b5032a0cd903000b439b071cd103680c68a34218d1043a04300431032af6d8551e002a0ed002780c7894420ed101350123013904e0c25c0133cc5ca24205d1ab42f8d1002030bd551eece7101bfae7f0b5c64600b50f2a43d90b00032603431e400c00
+e0000000d30611e00300002e40d11500103d2d09ac462d01a846804400e03b00676825685f60e7681d60df601f00a56810379d6010344345f1d165460f230c2401352d01491913404519144223d08c59ac5104369c1b032cf9d80324043b9b0801339b002240ed18c918561e002a07d0002300e02300ca5c5c1cea549e42f9d104bc9046f0bd0500561e002af0d1f7e7561e0500ece71a00f6e7c046f0b5c64600b588420cd98b18984209d2531e002a03d0ca5cc254013bfbd204bc9046f0bd0f2a0cd80500561e002af6d0002300e02300ca5c5c1cea54
+e0000000d30612b09e42f9d1ede70b00032603431e400c000300002e2ed11500103d2d09ac462d01a846804400e02b001d00276810351f6067685f60a7689f60e7681034df604345f1d165460f230c2401352d01491913404519144211d08c59ac5104369c1b032cf9d80324043b9b0801339b00ed18c9182240bce7561e0500bce71a00b7e7c046f0b5050083074ad0541e002a44d0ceb20300032202e00135013c3dd301332e701342f8d1032c2fd9ff220a40150215432a0415430f2c35d92700103f3f093e01b4461e001a0010366644156055609560
+e0000000d3061380d5601032b242f8d10f260c2201373f012640db193700224217d03e1fb608b400a4461a001c1d644420c2a242fcd103240136b6009b193c40002c05d0c9b21c19197001339c42fbd1f0bd3400f4e714000300bfe72700e0e7f0c041464a4653465c466d4676467ec02838f0c80020704710307cc890469946a246ab46b54608c82838f0c8081c00d10120184770b5002a2ad00378002b29d08418030002e01d78002d18d00133a342f9d1261a921b16d00d780b00002d0ad0012a02d02570013a013401331d78002df6d15b1af6180023
+e0000000d30614502370300070bd1c00261a921be8d1080000f02ef83618f4e70026f8e704000026dee7c046f0b5002a13d0013a002a19d000234f1c461c02e001339a4216d0f518ac46cd5cfc18c554002df5d1601a0138f0bd0c00230001335a1e12781c00002af9d1f3e70c0000230370f3e76046fae710b5830727d00378002b26d00300032102e01a78002a1cd001330b42f9d119680f4a104c8a188a4322420fd1043319680b4a8a188a43224208d104331968084a8a188a432242f1d000e001331a78002afbd1181a10bd0300e1e70020fae7c046
+e0000000d3061520fffefefe8080808010b500290bd00378002b0cd04418030002e01a78002a04d00133a342f9d1080010bd191afbe70021f9e7c046506c7567696e20706172616d65746572732073747275637475726520697320626967676572207468616e20616c6c6f7765642073697a650a0053656c6563746f7220696e6465783a202564206e6f7420737570706f727465640a0053656e640052656365697665204d696e2e00200053776170004572726f723a2073656c6563746f72206e6f7420666f756e64210a00457468657265756d00300050
+e0000000d30615f06172616d206e6f7420737570706f727465643a2025640a004554480030313233343536373839616263646566004552524f520030780053656c6563746f7220496e646578206e6f7420737570706f727465643a2025640a00556e68616e646c6564206d6573736167652025640a0042656e656669636961727900657863657074696f6e5b3078253034585d3a204c523d3078253038580a004572726f723a206f766572666c6f77206465746563746564206f6e2073656c6563746f7220696e646578210a00526563656976656420616e
+e0000000d30616c020696e76616c69642073637265656e496e6465780a005265636569766564206e756c6c20706172616d65746572730a00706c7567696e2070726f7669646520706172616d657465723a206f66667365742025640a42797465733a20252e2a480a00506c7567696e426f696c6572706c6174650045786974696e6720666f6c6c6f77696e6720657863657074696f6e3a2025640a004d697373696e672073656c6563746f72496e6465783a2025640a003031323334353637383961626364656630313233343536373839414243444546d4
+e0000000bd061790b56af37f42423713d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d40111506c7567696e426f696c6572706c6174650205312e302e3003220100000000ffffff0000000000068001fc03ffc03fc03ff00fffc039700e00000000040a01028000002c8000003c
+e00000000107
+e0000000090800000000184a3952
+e00000000109
diff --git a/tests/plugin_binaries/nanox/bin/app.elf b/tests/plugin_binaries/nanox/bin/app.elf
new file mode 100644
index 00000000..f62d65e9
Binary files /dev/null and b/tests/plugin_binaries/nanox/bin/app.elf differ
diff --git a/tests/plugin_binaries/nanox/bin/app.hex b/tests/plugin_binaries/nanox/bin/app.hex
new file mode 100644
index 00000000..45658e7e
--- /dev/null
+++ b/tests/plugin_binaries/nanox/bin/app.hex
@@ -0,0 +1,392 @@
+:02000004C0DE5C
+:100000008CB0044662B600F083FC6D46284601F0D1
+:10001000E3F9A88585B2002D0ED1684600F0B8FE40
+:100020000A90002C1CD020680E49884202D06168DA
+:1000300000F016FC00F08EFE6C460020A0850A98A9
+:1000400000F0A6FE08487844294600F097FC00F02E
+:1000500095FEA042EED10A9800F09AFE00F07AFEDA
+:1000600000F042FCFF010000E916000003B4014863
+:100070000BE000004800000003B4014805E0000068
+:100080005A00000003B40248FFE702490847000095
+:100090008700000001002100F0B593B003920491A5
+:1000A000054601231898014699431E224A40199992
+:1000B0000A430027002A3A4619D1059306AA332499
+:1000C000234600F06FF800285FD006AE3046214688
+:1000D00001F02AFA3318221A30497944184601F0FF
+:1000E00095F93046214601F01FFA0246059B06A805
+:1000F000059280182A4E7E44E95D0F240A092140AA
+:10010000715C4170B15C0170801C7F1C142FF3D1B5
+:100110001902039F3846FFF7AFFF002100283AD1AC
+:100120002020019006A802900090059B2833012210
+:1001300038460F4605921146029AFFF797FF394657
+:10014000002828D10020049F059B05E0715C059BD9
+:100150003954401C28281AD002461A404308E95C4A
+:10016000002A03D021400929F0D902E00909092910
+:10017000ECD906AFFB5C920004275740FB401A07FE
+:10018000715C00D52039049FE1E7002103E02820BD
+:10019000002139541946084613B0F0BD451500003A
+:1001A00012150000F0B587B00293044600200192BA
+:1001B0000546C7B27B1C029883422BD2009306955A
+:1001C0000A250026204605912A46334600F07AFE8D
+:1001D000049003912A46069D334600F093FE019A4F
+:1001E000201A30210143D155681C0921091B3146D1
+:1001F000059B9941049C0399DAD3C0B21654280692
+:10020000009B07D0D05D915DD15590557F1E761C27
+:10021000BE42F7D30298834202D3002007B0F0BD5C
+:10022000012007B0F0BDF0B583B0029314460E462E
+:100230000746012907D13878302804D102980228CE
+:100240003DD200256FE0089BB34222D2B11C0025AD
+:10025000029801918142294645D80020F11A04D024
+:100260003A5C2254401C8142FAD1002B024602D053
+:100270002E212154421CB042114632D2331A381872
+:100280001146067866545B1E401C491C002BF8D1B1
+:1002900027E0D91C0025029801918142294622D8E5
+:1002A000991B2E2060703020207000290DD0A01CDA
+:1002B0003022009100F05AFF0098821C06E00020D6
+:1002C00060703020207001252DE00222002E1146A2
+:1002D00007D01146387860547F1C761E491C002ECA
+:1002E000F8D1002060540298019B83421BD88A42B7
+:1002F0000ED2002303E0521C9142034609D0002B8A
+:10030000104600D01846A35C302BF4D00020F2E752
+:1003100000200125002806D000212154401E225C27
+:100320002E2A00D12154284603B0F0BDF0B58BB081
+:1003300014460A46202901D900263AE01D46014606
+:1003400000260A960996089607960696059604963C
+:10035000039603AFB81A203000F000FF2021384682
+:1003600000F056F8002809D0022D22D327497944FD
+:1003700020462A4601F07EF801261AE0002003A953
+:100380000A5A52BA0A52801C2028F8D103A8202108
+:1003900000F03EF84742474100280DD02E46A119F3
+:1003A000AD1B20462A4600F0DDFE002060550126E8
+:1003B0007E4030460BB0F0BD0095002DF7D0009E7A
+:1003C000019402960024204603AD295B00044618E0
+:1003D0000A273046394600F0E9FC28534743F01B12
+:1003E000A41C202CF0D130210843029E761E019CD3
+:1003F000A05503A8202100F00BF8474247410028F0
+:1004000002D1002EDDD1D2E7009DC8E77B120000AB
+:10041000B0B54B1E0A469A4100290ED00378002B36
+:100420000BD101231C468C421A4600D30022A14264
+:1004300003D0055D641C002DF5D001205040B0BDF7
+:10044000F0B59DB0039302920D46074604AC6426B6
+:100450002046314600F07CFE384629462246334687
+:10046000FFF764FF00282CD0239C229D04A8642160
+:1004700001F05AF801900B21039801F055F8074656
+:10048000C6B2A642224600D832462846039900F05A
+:1004900065FE002E02D02020A8557F1C02980090F7
+:1004A000F8B22A18C04303190198C1B204A8FFF793
+:1004B000BAFE002803D06119491E00220A701DB03F
+:1004C000F0BD00201DB0F0BD80B5142A00D3142269
+:1004D000891A203100F046FE80BD80B5202A00D365
+:1004E000202200F03FFE80BDB0B504460A48A0833C
+:1004F000A069A56829462031142200F03FFE04219E
+:10050000A1773435E560002802D003206077B0BDC4
+:1005100002206077B0BDC04602020000B0B582B0D4
+:1005200004460078062827D12069592805D819489B
+:10053000784400F023FA00201FE0E5685A2128469D
+:1005400000F006FE606900F02FF81349794402229A
+:1005500001AB00F0D7FB00280AD05535019828716F
+:10056000010A0DD1C1B202290DD22870042004E085
+:100570000A48784400F002FA0120607002B0B0BD71
+:1005800007487844D5E70748784400F0F7F9002099
+:10059000F3E7C04620100000401200005210000097
+:1005A00002110000C8110000017809064278120407
+:1005B0005118827812028918C07808187047D4D46C
+:1005C000B0B504468568C36801690C4878442022A8
+:1005D00000F0D4F9042020755920295C01290CD0A1
+:1005E000002904D12046294600F00CF8B0BD04488B
+:1005F000784400F0C3F900202075B0BD2011000040
+:100600003210000070B504465820085C0E4656367D
+:10061000002806D020693288121D904244D1002063
+:10062000B0700D4655352A78012A0CDD022A18D003
+:10063000032A22D0042A30D10120B0702870208AE9
+:100640003C30308070BD002A1ED0012A25D1E368DD
+:100650003431142208461946FFF736FF052028706A
+:1006600070BDE3682031142208461946FFF72CFFBD
+:100670000120B0700420287070BDE06800F018F808
+:1006800030800220287070BDE36820220846194699
+:10069000FFF723FF0320287070BD044878441146FB
+:1006A00000F06CF90020207570BDC0464F0F0000AF
+:1006B000C17F807F0002401880B27047B0B5044609
+:1006C0008068E16805465335002909D0C97F297043
+:1006D000E168483014310B2200F0CCFE012000E02C
+:1006E0000020042161756870B0BDD4D4B0B5044653
+:1006F0008568C06822690C49794400F0BBFE592026
+:10070000295C002906D00A48784400F037F9002017
+:100710002077B0BD6069A2690449794400F0AAFE5F
+:1007200004202077B0BDC04625100000A50E0000B3
+:10073000810E000070B50446C569406AA16A00F0E8
+:1007400007FDE06A216B00F003FD2020205C2646B7
+:100750002036022807D001280AD000280DD12046D3
+:1007600000F018F80EE02046294600F059F809E09C
+:100770002046294600F02CF804E00548784400F0B3
+:10078000FDF80020411E88418000307570BDC046D4
+:10079000350F000010B582B00446406AA26A0A49CB
+:1007A000794400F067FE606800686221415CE26A9B
+:1007B000236B0092019342301222044B7B44FFF7DB
+:1007C0003FFE02B010BDC0460B0E0000480E0000F8
+:1007D000B0B582B00D460446406AA26A0F4979441A
+:1007E00000F048FE5320285C294653314978E26ADC
+:1007F000236B00920193002904D02C464834002931
+:1008000003D003E01034002900D11220C2B220210D
+:1008100028462346FFF714FE02B0B0BDD20D0000FB
+:10082000B0B582B00C460546406AAA6A0B497944C5
+:1008300000F020FEE86A30210170E86A78214170FA
+:1008400028680268E86A0021009101912034811C27
+:100850002046FFF721FC02B0B0BDC0462C0E0000C0
+:1008600080B5002912D00246FF20034604339A4285
+:1008700011DC023082421DD08120400082421DD016
+:100880009A4227D10846FFF72FFE80BD15487844CD
+:1008900000F074F880BD41239B009A4212D00630CC
+:1008A000824213D083204000824213D10846FFF7D2
+:1008B00041FF80BD0846FFF731FE80BD0846FFF7C7
+:1008C0007FFE80BD0846FFF7F9FE80BD0846FFF7B2
+:1008D0000DFF80BD02487844114600F04FF880BDFE
+:1008E0006E0D0000440E000080B586B0002005901B
+:1008F0000490064878440190012003900002029081
+:1009000001A800F019FA06B080BDC046EC0C00004A
+:1009100080B5002000F03CFA80BDD4D40446704677
+:1009200000F00EF8024605487844214600F026F80B
+:1009300000F024FA214600F05BFDC0463E0D0000A9
+:1009400003497944401A0149401870470000DEC04D
+:10095000BBF6FFFFB0B582B00C46054601A881701A
+:100960005F210170210A4170032100F0FBF9A1B25F
+:10097000284600F0F7F902B0B0BDD4D483B0F0B58A
+:100980008CB011AC0EC4002800D1A7E1074611A815
+:1009900006903878002800D1A0E10120019004E001
+:1009A000BF193878002800D198E10026B85D0028EA
+:1009B00003D0252801D0761CF8E738463146FFF7EA
+:1009C000C9FFB85D2528EBD1B819471C00232024A6
+:1009D0000593184601E0104619D139787F1C002292
+:1009E0002D29F8DD472937DC0A46303A0A2A1CD27D
+:1009F000039430221D460B4653402C462B4300D017
+:100A0000039A0A2363435B18303B1446E5E7252924
+:100A10005AD02A2900D0F0E03878732800D0ECE0D2
+:100A20000699081D0690022013E02E2900D0E4E06C
+:100A300038782A2800D0E0E07878482804D0732855
+:100A400002D0682800D0D8E07F1C0699081D0690C7
+:100A5000012009680591C0E767290ADDA24D7D44A0
+:100A6000722910DD732931D0752933D0782910D03F
+:100A7000C3E0622916DC482900D1A7E0582900D03C
+:100A8000BBE0012006E0682900D1A4E0702900D075
+:100A9000B3E0002004900698011D069100680B90B9
+:100AA00010251FE0632900D1ABE0642900D0A4E049
+:100AB0000698011D069100680B900A25002800D5B4
+:100AC000F7E0002004900DE0781EA0E01C4602979D
+:100AD000002183E00698011D069100680B9000201C
+:100AE00004900A250198064602970B9905918D42BC
+:100AF000039402D90746024616E05A1E0B98059049
+:100B0000284607461446002128463A460B4600F080
+:100B1000F9F94A1E9141059A904202D8621E0029B5
+:100B2000EFD02346019A039C30465040191A002EFC
+:100B300002D0002614460BE0E2B20026302A3446EA
+:100B400006D107AA1C462D23137023460126019CBB
+:100B50008A1E0D2A0FD8491E0DD04042009007A8CA
+:100B60008019039AD2B2039300F000FB0398301867
+:100B700000994018461E002C03D107A82D2181554D
+:100B8000761C002F1CD05D487844039012E0039C33
+:100B90000598394600F00AF9294600F08DF9605CA5
+:100BA00007A988553846294600F000F9761CBD4251
+:100BB000074605D804980028E9D1514C7C44E7E762
+:100BC00007A83146FFF7C6FE029FEAE61C460297D9
+:100BD000474D7D4401E01C4602970199069A131D7A
+:100BE0000693C0B21768002815D001281AD0022831
+:100BF00038D138780028029F61D03C4878440521DC
+:100C000006E00698011D069100680B900BA80121D3
+:100C1000FFF7A0FEC5E600203A5C401C002AFBD18D
+:100C2000401E0590002920D0059C002C2AD00021D0
+:100C30000E4607E007A81146FFF78CFE0021761C40
+:100C4000B4421DD0B85D0209AA5C07AB5A545A18C9
+:100C50000F230340E85C50708A1CC81C1028E9D29E
+:100C60001146ECE705960029DED13846059D294658
+:100C7000FFF770FE22462C46029FA24210D890E653
+:100C8000224601E0002211460029029F05D007A854
+:100C90001446FFF75FFE2246059CA24200D880E67C
+:100CA000A41A154878440121FFF754FE641CF8D3B8
+:100CB00077E640420B9000260496019814E72546FB
+:100CC0000598441C0B4878440121FFF743FE641E3D
+:100CD000F8D134462A46A242E2D862E60CB0F0BC13
+:100CE00001BC03B00047C0460D0D00001D0A000006
+:100CF000A90B0000F708000019090000F30B000021
+:100D0000AF0B0000B0B5002A07D000240D68854263
+:100D100005D0091D641CA242F8D10020B0BD0120FD
+:100D2000002BFBD01C60B0BD01DF002900D1704753
+:100D30000846FFF7F3FDD4D480B582B000210191BD
+:100D4000009003486946FFF7EFFF02B080BDC04640
+:100D50006700000182B00020019068206946FFF71B
+:100D6000E3FFFFDE80B582B0019100900248694642
+:100D7000FFF7DAFF02B080BD8300000280B582B0C9
+:100D80000020019087206946FFF7CEFF02B080BDAA
+:100D900080B582B000210191009003486946FFF7B9
+:100DA000C3FF02B080BDC0460B0100010022430812
+:100DB0008B4274D303098B425FD3030A8B4244D323
+:100DC000030B8B4228D3030C8B420DD3FF22090265
+:100DD00012BA030C8B4202D31212090265D0030B24
+:100DE0008B4219D300E0090AC30B8B4201D3CB031A
+:100DF000C01A5241830B8B4201D38B03C01A52415C
+:100E0000430B8B4201D34B03C01A5241030B8B425D
+:100E100001D30B03C01A5241C30A8B4201D3CB0248
+:100E2000C01A5241830A8B4201D38B02C01A52412D
+:100E3000430A8B4201D34B02C01A5241030A8B4230
+:100E400001D30B02C01A5241CDD2C3098B4201D348
+:100E5000CB01C01A524183098B4201D38B01C01AC6
+:100E6000524143098B4201D34B01C01A524103093D
+:100E70008B4201D30B01C01A5241C3088B4201D3EC
+:100E8000CB00C01A524183088B4201D38B00C01A99
+:100E9000524143088B4201D34B00C01A5241411AC0
+:100EA00000D20146524110467047FFE701B50020CD
+:100EB00000F006F802BDC0460029F7D076E770477B
+:100EC0007047C046002B11D1002A0FD1002900D154
+:100ED000002802D00021C943081C07B4024802A11F
+:100EE0004018029003BDC046D9FFFFFF03B4684617
+:100EF00001B5029800F030F8019B9E4602B00CBC90
+:100F00007047C046F0B5CE46474615042D0C2E005E
+:100F100080B50704140C3F0C9946030C7E435D43D7
+:100F2000674363437F19340CE4199C46A54203D9F7
+:100F300080235B029846C4444B4643435143250CEF
+:100F400036046544360C2404A4195B195918200092
+:100F50000CBC90469946F0BDF0B557464E46454606
+:100F6000DE46E0B5040083B00D00924699468B4200
+:100F700030D82DD04946504600F0C0F82900060070
+:100F8000200000F0BBF8331A9846203B9B4633D430
+:100F90005A465346934042461F00534693401E0014
+:100FA000AF423AD8AF4200D17BE05B46A41BBD41C3
+:100FB000002B00DA78E00022002300920193012345
+:100FC0005A4693400193012342469340009328E000
+:100FD0008242CFD900220023009201930C9B002B68
+:100FE00001D01C605D600098019903B03CBC904644
+:100FF0009946A246AB46F0BD424620239B1A524674
+:10100000DA40414613004A468A40170042461F43D1
+:10101000534693401E00AF42C4D9002200230092E1
+:1010200001934346002BD9D0FB079C4661467208CA
+:101030000A437B0846460EE0AB4201D1A2420CD8DF
+:10104000A41A9D41012024196D410021013E24185C
+:101050004D41002E06D0AB42EED9013E24196D4120
+:10106000002EF8D1009801995B4600196941002BC8
+:1010700025DB2B005A464446D3402A00E2401C00A0
+:101080005B461500002B2BDB26005F46BE4033007D
+:1010900026004746BE403200801A994100900191D7
+:1010A0009CE7A342B9D880E74246202300219B1A3F
+:1010B0000022009101920122DA40019283E7424628
+:1010C00020239B1A2A0046469A402300F3404446B8
+:1010D00013432A00E2401C005B461500002BD3DAC4
+:1010E0002023424626009B1ADE402F00B446464687
+:1010F000B74066463B003343CAE7C04610B50029F7
+:1011000003D100F007F8203002E0081C00F002F8DC
+:1011100010BDC0461C2101231B04984201D3000CC2
+:1011200010391B0A984201D3000A08391B0998425A
+:1011300001D30009043902A2105C40187047C04670
+:101140000403020201010101000000000000000090
+:1011500010B5002200F00AF810BDC04610B500F02E
+:1011600035F810BD10B500F085F810BD130010B5AE
+:101170000A00190000F0DCF810BDC04630B5032AA3
+:101180000CD903000B439B071CD103680C68A342D6
+:1011900018D1043A04300431032AF6D8551E002A27
+:1011A0000ED002780C7894420ED10135012301391A
+:1011B00004E0C25C0133CC5CA24205D1AB42F8D161
+:1011C000002030BD551EECE7101BFAE7F0B5C6460F
+:1011D00000B50F2A43D90B00032603431E400C0021
+:1011E0000300002E40D11500103D2D09AC462D0105
+:1011F000A846804400E03B00676825685F60E768B8
+:101200001D60DF601F00A56810379D6010344345E6
+:10121000F1D165460F230C2401352D0149191340E6
+:101220004519144223D08C59AC5104369C1B032C15
+:10123000F9D80324043B9B0801339B002240ED189E
+:10124000C918561E002A07D0002300E02300CA5CFC
+:101250005C1CEA549E42F9D104BC9046F0BD0500E6
+:10126000561E002AF0D1F7E7561E0500ECE71A00DB
+:10127000F6E7C046F0B5C64600B588420CD98B18D3
+:10128000984209D2531E002A03D0CA5CC254013BC3
+:10129000FBD204BC9046F0BD0F2A0CD80500561EA8
+:1012A000002AF6D0002300E02300CA5C5C1CEA544C
+:1012B0009E42F9D1EDE70B00032603431E400C00CC
+:1012C0000300002E2ED11500103D2D09AC462D0136
+:1012D000A846804400E02B001D00276810351F60E1
+:1012E00067685F60A7689F60E7681034DF60434508
+:1012F000F1D165460F230C2401352D014919134006
+:101300004519144211D08C59AC5104369C1B032C46
+:10131000F9D80324043B9B0801339B00ED18C9183E
+:101320002240BCE7561E0500BCE71A00B7E7C046DE
+:10133000F0B5050083074AD0541E002A44D0CEB22F
+:101340000300032202E00135013C3DD301332E703E
+:101350001342F8D1032C2FD9FF220A40150215435E
+:101360002A0415430F2C35D92700103F3F093E01B1
+:10137000B4461E001A00103666441560556095602C
+:10138000D5601032B242F8D10F260C2201373F014E
+:101390002640DB193700224217D03E1FB608B400A2
+:1013A000A4461A001C1D644420C2A242FCD103249E
+:1013B0000136B6009B193C40002C05D0C9B21C195F
+:1013C000197001339C42FBD1F0BD3400F4E71400E6
+:1013D0000300BFE72700E0E7F0C041464A46534616
+:1013E0005C466D4676467EC02838F0C800207047BF
+:1013F00010307CC890469946A246AB46B54608C810
+:101400002838F0C8081C00D10120184770B5002A00
+:101410002AD00378002B29D08418030002E01D781D
+:10142000002D18D00133A342F9D1261A921B16D0F1
+:101430000D780B00002D0AD0012A02D02570013A48
+:10144000013401331D78002DF6D15B1AF618002304
+:101450002370300070BD1C00261A921BE8D10800D2
+:1014600000F02EF83618F4E70026F8E7040000260E
+:10147000DEE7C046F0B5002A13D0013A002A19D0A1
+:1014800000234F1C461C02E001339A4216D0F51887
+:10149000AC46CD5CFC18C554002DF5D1601A01385E
+:1014A000F0BD0C00230001335A1E12781C00002AE4
+:1014B000F9D1F3E70C0000230370F3E76046FAE785
+:1014C00010B5830727D00378002B26D00300032113
+:1014D00002E01A78002A1CD001330B42F9D11968B6
+:1014E0000F4A104C8A188A4322420FD104331968DC
+:1014F0000B4A8A188A43224208D104331968084AE1
+:101500008A188A432242F1D000E001331A78002A77
+:10151000FBD1181A10BD0300E1E70020FAE7C0462E
+:10152000FFFEFEFE8080808010B500290BD003787E
+:10153000002B0CD04418030002E01A78002A04D0D3
+:101540000133A342F9D1080010BD191AFBE70021AD
+:10155000F9E7C046506C7567696E20706172616D05
+:101560006574657273207374727563747572652027
+:10157000697320626967676572207468616E2061B3
+:101580006C6C6F7765642073697A650A0053656CCB
+:101590006563746F7220696E6465783A20256420F3
+:1015A0006E6F7420737570706F727465640A005387
+:1015B000656E640052656365697665204D696E2EBF
+:1015C00000200053776170004572726F723A207389
+:1015D000656C6563746F72206E6F7420666F756ED4
+:1015E00064210A00457468657265756D00300050AD
+:1015F0006172616D206E6F7420737570706F72749C
+:1016000065643A2025640A0045544800303132337D
+:101610003435363738396162636465660045525245
+:101620004F520030780053656C6563746F722049C7
+:101630006E646578206E6F7420737570706F72744D
+:1016400065643A2025640A00556E68616E646C65B5
+:1016500064206D6573736167652025640A004265C7
+:101660006E65666963696172790065786365707437
+:10167000696F6E5B3078253034585D3A204C523DAE
+:101680003078253038580A004572726F723A206FF0
+:10169000766572666C6F77206465746563746564E3
+:1016A000206F6E2073656C6563746F7220696E6461
+:1016B0006578210A00526563656976656420616E0C
+:1016C00020696E76616C69642073637265656E492A
+:1016D0006E6465780A005265636569766564206E9C
+:1016E000756C6C20706172616D65746572730A004F
+:1016F000706C7567696E2070726F766964652070B2
+:101700006172616D657465723A206F6666736574A7
+:101710002025640A42797465733A20252E2A480AE6
+:1017200000506C7567696E426F696C6572706C61B0
+:1017300074650045786974696E6720666F6C6C6FBC
+:1017400077696E6720657863657074696F6E3A209B
+:1017500025640A004D697373696E672073656C6553
+:1017600063746F72496E6465783A2025640A0030AC
+:101770003132333435363738396162636465663007
+:10178000313233343536373839414243444546D413
+:10179000B56AF37F42423713D4D4D4D4D4D4D4D44A
+:1017A000D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4F9
+:1017B000D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4E9
+:1017C000D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D9
+:1017D000D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C9
+:1017E000D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4B9
+:1017F000D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4A9
+:101800000111506C7567696E426F696C6572706C1E
+:101810006174650205312E302E3003220100000074
+:1018200000FFFFFF0000000000068001FC03FFC076
+:101830003FC03FF00FFFC039700E00000000040AE7
+:0A18400001028000002C8000003C33
+:04000005C0DE000158
+:00000001FF
diff --git a/tests/plugin_binaries/nanox/bin/app.sha256 b/tests/plugin_binaries/nanox/bin/app.sha256
new file mode 100644
index 00000000..ce6772dc
--- /dev/null
+++ b/tests/plugin_binaries/nanox/bin/app.sha256
@@ -0,0 +1 @@
+809d67f9b0669f5eb7b5fdc383f736be59aab1ba4e4815a3713e74e4597bb345
diff --git a/tests/plugin_binaries/stax/bin/app.apdu b/tests/plugin_binaries/stax/bin/app.apdu
new file mode 100644
index 00000000..6304e7ee
--- /dev/null
+++ b/tests/plugin_binaries/stax/bin/app.apdu
@@ -0,0 +1,37 @@
+e0000000130c11506c7567696e426f696c6572706c617465
+e0000000160b0e0000180000000000000000ea0000080000000001
+e0000000050500000000
+e0000000d30600008cb0044662b600f0ddfc6d46284601f0f5f881b2adf82c0071b9684600f006ff0a90f4b1206840f2ff11884202d0616800f036fc00f0dcfe0a980c460021adf82c1000f0f3fe08482146784400f0f2fc00f0e2fea842edd10a9800f0e7fe00f0c7fe00f05dfc00bf4114000003b44ff0480007e003b44ff05a0003e003b44ff08700ffe700490847018081002de9f0458fb092460c46dde91621054622f0010383f01e030b4318d102af10463a46332300f06af8d8b33846332101f0edf830493b18c0f133027944184601f0a5f83846
+e0000000d30600d0332101f0e1f8074600e000270df10808284e07eb080002387e444ff0ff3100bf6a18527801311309f35c02f00f02b25c00f8023f13294270f2d150464ff48071fff7b0ff58b9202007f128030190504601214246cdf80080fff7a0ff18b100200fb0bde8f08500204ff0040c0de000bf18f803108cea8703d940b25c090748bf203a2254013028280bd04308e95c10f0010701f00f0208bf0a09092ae8d8b25cefe7002084f8280001200fb0bde8f085b51200007c1200002de9f04d984692460f460646002200bfd5b26c1c44452fd2
+e0000000d30601a09346304639460a22002300f04dfed6f109024ff00002ba4100eb8002a6eb420242f030020af805200bf1010206460f46e2d3d0b200215fea0b620af800100fd04ff0ff300aeb00014a781af805300af805204b70811c013da94200f10100f1d30020444538bf0120bde8f08d2de9f04d9b4614460e46012907460fd1387830280cd1bbf1020f4ff0000038bfbde8f08d3021217060700120bde8f08dddf820c0b44505d206f1020ede4507d9002040e00cf1030ada4513d9002072e0b6eb0c021ed0aceb06034ff0ff3200bfb918a518
+e0000000d306027001324978981801306970f7d1531c10e03020bceb060820704ff02e00607048d0a01c4146302200f06cff08f1020c42e00023bcf1000f9c461ebf03f1010c2e20e054b34260460ad2d819471ef31a624617f8011f501ca154013b0246f8d100212154de4584bf0020bde8f08d002384454ff0000111d24242acf10100002100bf27187f780130002908bf0146302f02eb000718bf19460137f2d1002993d0481e235c00222e2b625408bf22540120bde8f08d4ff0020c60464eb1791e634600bf11f8012f581ce254013e0346f8d10021
+e0000000d30603402154da4584bf0020bde8f08dc6e700002de9f04589b092460a460146202a4ff000003cd801aecde90700cde90500cde90300cde90100b01a2030984600f0f5fe3046202100f066f830b1b8f1020f29d2002009b0bde8f085002000bf36f8101009ba090c26f8101001301028f6d101ae3046202100f04ef8b0fa80f14fea5114d0b14746a8eb07050aeb070150462a4600f0cdfe00200af8050084f0010009b0bde8f0851a4950467944424600f037ff012009b0bde8f085b8f1000fedd0134d474600bf0020002136f8102042ea0141
+e0000000d3060410a1fb0523da0802eb820326f8102001301028a1eb4301efd1013f41f030000af807003046202100f00df8b0fa80f100284fea5114bed1002fdcd1c6e7cdcccccc5d0f000000298c4618bf4ff0010c0fd003786bb9012300bf8b424ff0000c38bf4ff0010c994203d0c25c0133002af3d08cf0010070472de9f04d9ab001ac0d460746204664211e46924600f063fe3846294622466423fff753ff80b3dde9228b01a8642100f0f0fe074630460b2100f0ebfec4b205462246404631465c4588bf5a4600f04afe002c1ebf0135202008f8
+e0000000d30604e00400e8b208eb0002c043f9b200eb0b0301a8cdf800a0fff789fe00281ebf0beb0801002201f8012c1ab0bde8f08d00201ab0bde8f08d80b5142a28bf1422891a203100f024fe80bd80b5202a28bf202200f01dfe80bdb0b5044640f20220a568a083a06905f12001142200f017fe0321002805f1340008bf0221e06004206177a077b0bdb0b582b004460078062828d12069592805d81948784400f05bfa002020e0e5685a21284600f0ecfd606900f02ff8134901ab7944022200f0fffb60b10198b0f5807f85f859000ed2c1b20229
+e0000000d30605b00ed285f85500042004e00a48784400f039fa0120607002b0b0bd07487844d4e70648784400f02efa0020f3e7340d0000c6100000640d0000140e0000da0e00004278017883781204c07842ea016141ea0321084470470000b0b50446d0e9025301690c482022784400f00cfa95f8591004200129207508bfb0bd21b92046294600f00cf8b0bd0448784400f0fbf900202075b0bd320e0000460d0000b0b50c4691f85810054649b1b4f8560029690430814218bfb0bd002084f8580094f8551001290fdd02291ad0032925d0042935d1
+e0000000d3060680288a3c30a4f85600012084f8580084f85500b0bd09b3012928d1e96804f134001422fff738ff052084f85500b0bde96804f120001422fff72eff042084f85500012084f85800b0bde86800f019f8a4f85600022084f85500b0bde96820462022fff722ff032084f85500b0bd0348784400f0a0f900202875b0bd00bf590c0000817fc07f40ea012080b27047b0b50446c068a56858b1c07fe16885f8530005f1480014310b2200f09afd012000e0002085f8540004206075b0bd0000b0b50446d0e9025022690b49794400f088fd95f8
+e0000000d3060750591031b10948784400f06cf900202077b0bdd4e905020449794400f078fd04202077b0bd310d0000b30b00008f0b0000b0b50446c569406aa16a00f0ebfcd4e90b0100f0e7fc94f82000022806d0012809d068b9204600f019f80ee02046294600f056f809e02046294600f02df804e00548784400f036f90020002818bf042084f83400b0bd00bf4b0c000010b582b00446406aa26a0a49794400f038fd6068e26a0068246b90f862100092054b42307b4412220194fff73efe02b010bd00bf1f0b0000600b0000b0b582b00446406a
+e0000000d3060820a26a0d460d49794400f019fd95f8540005f1480395f85310002808bf04f11003d4e90b0408bf12210090cab2284620210194fff718fe02b0b0bd00bfe60a0000b0b582b00446406aa26a0d460b49794400f0f5fce06a30210170e06a782141702168e36a0a6805f12000991c0023cde90033fff7fbfb02b0b0bd00bf480b000080b591b10246b0f5827f13da40f2011082421bd0b2f5817f1cd040f20310824224d10846fff737fe80bd1448784400f0b1f880bd12d040f20510824212d0b2f5837f13d10846fff74bff80bd0846fff7
+e0000000d30608f039fe80bd0846fff787fe80bd0846fff705ff80bd0846fff719ff80bd02481146784400f08ff880bd900a0000620b000070b5e6b0234859ae784461904ff48070629001206390002064901f48314678443cc83cc102881d480a80784401788278c378457842ea032241ea052141ea0241427a037a569143ea0221427910f8043fadf860118178c07843ea022241ea002042ea004057900e496c46794420464ff4ab7200f0eafb200cadf8600156a85f905ea8659061a8adf85e415e9600f012fa66b070bd140a0000ea0c0000d30c0000
+e0000000d30609c03d0b000080b5002000f030fa80bd00000446704600f00ef8024605482146784400f028f800f018fa214600f00dfc00bfe40900000349024a7944401a104470470000dec005f6ffffb0b582b005465f208df80400080a0c468df805008df8061001a8032100f0ecf9a1b2284600f0e8f902b0b0bd83b02de9f04d89b0cde91112139320b10446007811a9039158b909b0bde8f04d03b0704741466c1efff7d4ff20780028f3d00026a05d18b1252801d00136f9e720463146a519fff7c5ffa05d2c462528ecd1691c00274ff0200c4ff0
+e0000000d3060a90000800204d1c15f8011c01352d2915dc4ff00000f7d0252974d02a2940f00281294611f8010d732840f0fc800398021d0392d0f800800220e4e700bf472929dca1f130020a2a0dd281f030023a4307eb870201eb420108bf4ff0300ca1f13007691ecfe72e2940f0dd8015f8010c2a2840f0d8802878482804d0732802d0682840f0d0800399081d0390d1f8008001202946b7e7672908dd722910dd732933d0752936d0782910d0bce0622916dc482900f0a280582940f0b580012406e0682900f09d80702940f0ad80002403981026
+e0000000d3060b60011d039100680890012022e0632900f0a580642940f09e800398011d03910068b0f1ff3f089011dc4042089000200a2600240ee0a81e97e07a4979448a46002179e00398011d039100680890002401200a26ddf820a0564502d94ff0010b10e0ddf820a07b1e31468b46a6fb0112002a18bf012251451f4603d8002aa7f10103f2d018b14ff0000801230de05ffa8cf1302906d12d2101234ff001088df8101002e000234ff0000880f00100391a8a1e0d2a11d801390fd04042019004a840445ffa8cf2029300f0a4fa019908eb0700
+e0000000d3060c30029b0844a0f10108002b04a802bf2d2100f8081008f10108bbf1000f3ff404af5049a8f101077944bafbfbf2002cb2fbf6f303fb16224c4b7b4408bf0b469a5c5e45bbfbf6fb00eb070307f101075a70ead907f10108e7e63f49794401e03c4979448a460121039ac0b2131d0393d2f800b0b0b101281cd002283dd19bf80000002857d031480521784406e00398011d03910068089008a80121fff79dfe6c1ec6e600201bf800200130002afad1a0f1010821b3b8f1000f27d00021002604af03e000bf0136b0451cd01bf806007b18
+e0000000d3060d00020900f00f001af800001af802205870c81c7a54102801f102015446ead33846fff772fe0021e5e7b0460029dad15846414606e0474619b905e00027002111b104a8fff761fe4745a5f101047ff688aea8eb07050e4801217844fff755fe0135f8d37de608f10104084801217844fff74bfe013cf8d1b046e5e700bfbd060000aa090000a00a0000c0090000ad050000c1050000e4090000e209000080b54ab14ff0000c51f82ce0864505d00cf1010c6245f7d1002080bd1bb10120c3f800c080bd012080bd01df002900d170470846
+e0000000d3060dd0fff7fefd80b582b000900020019003486946fff7f0ff02b080bd00bf6700000182b00020019069466820fff7e4ffffde80b582b0cde9000102486946fff7dbff02b080bd8300000280b582b00020019069468720fff7cfff02b080bd80b582b000900020019003486946fff7c4ff02b080bd00bf0b01000153b94ab9002908bf00281cbf4ff0ff314ff0ff3000f00cb8adf1080c6de904ce00f008f8ddf804e0dde9022304b07047704700bf2de9f04f099e0d4604460f46002b47d18a4294465fd9b2fa82f343b1c3f120019f4002fa
+e0000000d3060ea003fc9c4020fa01f10f434fea1c451ffa8cfe220cb7fbf5f105fb117701fb0ef042ea0742904208d91ceb020201f1ff3702d2904200f234813946121aa4b2b2fbf5f005fb102200fb0efe44ea0244a64508d91ceb040400f1ff3202d2a64500f21981104640ea0140a4eb0e0400211eb1dc400023c6e90043bde8f08f8b4208d9002e00f0fb800021c6e900050846bde8f08fb3fa83f100294bd1ab42c0f0f180824240f2ee800846002ee5d0c6e90047e2e702b9ffdeb2fa82f3002b40f09d808d1a4fea124e97b20121b5fbfef20efb
+e0000000d3060f701250250c45ea004507fb02f0a8420fd91ceb050502f1ff382cbf4ff001094ff00009a84203d9b9f1000f00f0ce8042462d1aa4b2b5fbfef00efb105500fb07f744ea0544a74208d91ceb040400f1ff3502d2a74200f2b3802846e41b40ea02409de7c1f120078b4005fa01f422fa07fcfd408a404cea030c20fa07f34fea1c491c431ffa8cfe00fa01f3200cb5fbf9f809fb185540ea054508fb0ef0a8420fd91ceb050508f1ff3a2cbf4ff0010b4ff0000ba84203d9bbf1000f00f08c80d0462d1aa4b2b5fbf9f009fb105500fb0efe
+e0000000d306104044ea0545ae4507d91ceb050500f1ff3401d2ae457ed8204640ea0840a5eb0e05a0fb029845454c46c64602d306d14b4504d20138b9eb020468eb0c0e002e6fd01a1b65eb0e0522fa01f305fa07f7cd4000211f43c6e900753ee702fa03fcc3f1200001fa03f24fea1c4ec14024fa00f51ffa8cf79c401543b1fbfef02a0c0efb101142ea014200fb07f191420ed91ceb020200f1ff382cbf4ff001094ff00009914202d9b9f1000f31d04046521aadb2b2fbfef10efb112245ea024501fb07f2aa4207d91ceb050501f1ff3801d2aa42
+e0000000d306111023d84146ad1a41ea004126e731463046fae6841a65eb030301201f460ce7644402384ae764440238e4e6023a65442fe702396244c9e6a8f10208654470e702386244cbe7023865447ee702396544d9e73146d9e6002200f004b800f017b800f022b813460a46194600f037b80139024410b5904201d1002005e0037811f8014fa34201d0181b10bd0130f2e70a44431e914200d1704710b511f8014b914203f8014ff9d110bd884210b501eb020402d98442234607d8431ea14208d011f8012b03f8012ff8e7024401468a4200d110bd
+e0000000d30611e013f8014d02f8014df7e702440346934200d1704703f8011bf9e70000ec46a0e8f05f4ff000007047b0e8f05fe546080008bf0120704700bf70b50446084616192146b1420b4606d11c1b121b08d100f02bf8204470bd1d780131002df1d1f3e70646314616f8015b15b9081a1d70f0e7012a1cbf02f1ff3203f8015bf1e70b4610b562b1013a08d013f8014b00f8014b002cf7d1581a013810bd0022027013f8012b002afbd1f5e7034613f8012b002afbd1181a013870470246014410b58a42134603d01c780132002cf8d1181a10bd
+e0000000d30612b0506c7567696e20706172616d65746572732073747275637475726520697320626967676572207468616e20616c6c6f7765642073697a650a0053656c6563746f7220696e6465783a202564206e6f7420737570706f727465640a0053656e640052656365697665204d696e2e00200053776170004572726f723a2073656c6563746f72206e6f7420666f756e64210a00457468657265756d003000506172616d206e6f7420737570706f727465643a2025640a004554480030313233343536373839616263646566004552524f520030
+e0000000d3061380780053656c6563746f7220496e646578206e6f7420737570706f727465643a2025640a00556e68616e646c6564206d6573736167652025640a0042656e656669636961727900657863657074696f6e5b3078253034585d3a204c523d3078253038580a004572726f723a206f766572666c6f77206465746563746564206f6e2073656c6563746f7220696e646578210a00526563656976656420616e20696e76616c69642073637265656e496e6465780a005265636569766564206e756c6c20706172616d65746572730a00706c7567
+e0000000d3061450696e2070726f7669646520706172616d657465723a206f66667365742025640a42797465733a20252e2a480a00506c7567696e426f696c6572706c6174650045786974696e6720666f6c6c6f77696e6720657863657074696f6e3a2025640a004d697373696e672073656c6563746f72496e6465783a2025640a0040004000214e01004c011f8b08000000000002fffbff9fce60b1a0f27a3cd2d7041818c4eee394fe9bc00004f938e57f81a419d870ca3f06cb33e3b46011589e01a70b170c98fcbf772000955ffbeeeddb77ef50c2
+e0000000d30615202dd9d8c8d8d85800222f6c0c0266086ffe3560c004025670f9cb0cd800229c12b0ca23220287bc3eccf106d8e5f9a925af4063f307a3fb199584c0e1fbefd6aa550258226fedddbba0f8fbbb18abd18ceb602907bbd5524446fd2fecd24cb0a4f35900ab3c3c8b7ec4ae9f0b26ff8180fc2702f29f19f0dbff4b00bffb71f89f311f7fd64184dfff64a06a2c16c0f3f8bf55ab9629608fbff7f8e35f995af9eb2ff1fad5b29619e2910795ddd704709b0ff6f5429cfab950d31486bc1d846f804b7e3d4a318a290f8dd58b68f2300319
+e0000000d30615f0a1f297a0f2f268890026ff08bdfc7b8c9a6a2ea1979f7f1550e4a1caad50eb3d74fd6af7695f1d0300c214e80400080000400040000201cb14dec000506c7567696e426f696c6572706c6174650030313233343536373839616263646566303132333435363738394142434445460000b56af37f4242371300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+e0000000d30616c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+e0000000d3061790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111506c7567696e426f696c6572706c6174650205312e302e300381c12000200021b90000b7001f8b08000000000002fffbff1f3bd82c988bccfd6bc0c086ccff26c0c0b01f99cfc0c0301f17fff6eedd9b81fcecddbbf781b83f1518a08051
+e00000008d0618601864c6250604b007f23720f1f9a9cb57d2ff7f2dcd00cecdbefbfeb781009ccb0c54fc1949333790ff0189af0be47f44e37f43e27382022a11c16706f9eef7cc04b880daeefdb8dcc7a884c267b4be3b19990f74da6f05243ec8690950fe46a8533640f98f813ed283f2f3412e3080cbb3dd478f670060df5da900020000040a01028000002c8000003c
+e00000000107
+e000000009080000000018ea120a
+e00000000109
diff --git a/tests/plugin_binaries/stax/bin/app.elf b/tests/plugin_binaries/stax/bin/app.elf
new file mode 100644
index 00000000..d84128d6
Binary files /dev/null and b/tests/plugin_binaries/stax/bin/app.elf differ
diff --git a/tests/plugin_binaries/stax/bin/app.hex b/tests/plugin_binaries/stax/bin/app.hex
new file mode 100644
index 00000000..c7c98170
--- /dev/null
+++ b/tests/plugin_binaries/stax/bin/app.hex
@@ -0,0 +1,402 @@
+:02000004C0DE5C
+:100000008CB0044662B600F0DDFC6D46284601F077
+:10001000F5F881B2ADF82C0071B9684600F006FF22
+:100020000A90F4B1206840F2FF11884202D0616862
+:1000300000F036FC00F0DCFE0A980C460021ADF81A
+:100040002C1000F0F3FE08482146784400F0F2FC42
+:1000500000F0E2FEA842EDD10A9800F0E7FE00F0C1
+:10006000C7FE00F05DFC00BF4114000003B44FF078
+:10007000480007E003B44FF05A0003E003B44FF028
+:100080008700FFE700490847018081002DE9F0451E
+:100090008FB092460C46DDE91621054622F0010399
+:1000A00083F01E030B4318D102AF10463A463323A8
+:1000B00000F06AF8D8B33846332101F0EDF8304942
+:1000C0003B18C0F133027944184601F0A5F83846D0
+:1000D000332101F0E1F8074600E000270DF10808A0
+:1000E000284E07EB080002387E444FF0FF3100BF76
+:1000F0006A18527801311309F35C02F00F02B25C06
+:1001000000F8023F13294270F2D150464FF480713B
+:10011000FFF7B0FF58B9202007F12803019050469F
+:1001200001214246CDF80080FFF7A0FF18B1002062
+:100130000FB0BDE8F08500204FF0040C0DE000BFCB
+:1001400018F803108CEA8703D940B25C090748BF4E
+:10015000203A2254013028280BD04308E95C10F0E3
+:10016000010701F00F0208BF0A09092AE8D8B25CAA
+:10017000EFE7002084F8280001200FB0BDE8F085EB
+:10018000B51200007C1200002DE9F04D9846924611
+:100190000F460646002200BFD5B26C1C44452FD244
+:1001A0009346304639460A22002300F04DFED6F130
+:1001B00009024FF00002BA4100EB8002A6EB4202B6
+:1001C00042F030020AF805200BF1010206460F4604
+:1001D000E2D3D0B200215FEA0B620AF800100FD020
+:1001E0004FF0FF300AEB00014A781AF805300AF8A0
+:1001F00005204B70811C013DA94200F10100F1D3A3
+:100200000020444538BF0120BDE8F08D2DE9F04DB8
+:100210009B4614460E46012907460FD138783028F0
+:100220000CD1BBF1020F4FF0000038BFBDE8F08DDC
+:100230003021217060700120BDE8F08DDDF820C014
+:10024000B44505D206F1020EDE4507D9002040E094
+:100250000CF1030ADA4513D9002072E0B6EB0C0268
+:100260001ED0ACEB06034FF0FF3200BFB918A51843
+:1002700001324978981801306970F7D1531C10E0A9
+:100280003020BCEB060820704FF02E00607048D084
+:10029000A01C4146302200F06CFF08F1020C42E045
+:1002A0000023BCF1000F9C461EBF03F1010C2E2061
+:1002B000E054B34260460AD2D819471EF31A624688
+:1002C00017F8011F501CA154013B0246F8D1002130
+:1002D0002154DE4584BF0020BDE8F08D0023844515
+:1002E0004FF0000111D24242ACF10100002100BFE9
+:1002F00027187F780130002908BF0146302F02EB14
+:10030000000718BF19460137F2D1002993D0481EC3
+:10031000235C00222E2B625408BF22540120BDE82A
+:10032000F08D4FF0020C60464EB1791E634600BF5F
+:1003300011F8012F581CE254013E0346F8D1002168
+:100340002154DA4584BF0020BDE8F08DC6E70000E7
+:100350002DE9F04589B092460A460146202A4FF021
+:1003600000003CD801AECDE90700CDE90500CDE99C
+:100370000300CDE90100B01A2030984600F0F5FEE8
+:100380003046202100F066F830B1B8F1020F29D2D2
+:10039000002009B0BDE8F085002000BF36F810103D
+:1003A00009BA090C26F8101001301028F6D101AE58
+:1003B0003046202100F04EF8B0FA80F14FEA511497
+:1003C000D0B14746A8EB07050AEB070150462A467D
+:1003D00000F0CDFE00200AF8050084F0010009B00D
+:1003E000BDE8F0851A4950467944424600F037FF8F
+:1003F000012009B0BDE8F085B8F1000FEDD0134D34
+:10040000474600BF0020002136F8102042EA014193
+:10041000A1FB0523DA0802EB820326F81020013045
+:100420001028A1EB4301EFD1013F41F030000AF861
+:1004300007003046202100F00DF8B0FA80F10028C6
+:100440004FEA5114BED1002FDCD1C6E7CDCCCCCCC5
+:100450005D0F000000298C4618BF4FF0010C0FD033
+:1004600003786BB9012300BF8B424FF0000C38BFFB
+:100470004FF0010C994203D0C25C0133002AF3D043
+:100480008CF0010070472DE9F04D9AB001AC0D469B
+:100490000746204664211E46924600F063FE384619
+:1004A000294622466423FFF753FF80B3DDE9228B00
+:1004B00001A8642100F0F0FE074630460B2100F051
+:1004C000EBFEC4B205462246404631465C4588BF35
+:1004D0005A4600F04AFE002C1EBF0135202008F8C5
+:1004E0000400E8B208EB0002C043F9B200EB0B03D2
+:1004F00001A8CDF800A0FFF789FE00281EBF0BEB76
+:100500000801002201F8012C1AB0BDE8F08D00208E
+:100510001AB0BDE8F08D80B5142A28BF1422891ABC
+:10052000203100F024FE80BD80B5202A28BF202283
+:1005300000F01DFE80BDB0B5044640F20220A56863
+:10054000A083A06905F12001142200F017FE032109
+:10055000002805F1340008BF0221E0600420617723
+:10056000A077B0BDB0B582B004460078062828D187
+:100570002069592805D81948784400F05BFA002012
+:1005800020E0E5685A21284600F0ECFD606900F0A3
+:100590002FF8134901AB7944022200F0FFFB60B150
+:1005A0000198B0F5807F85F859000ED2C1B20229BA
+:1005B0000ED285F85500042004E00A48784400F083
+:1005C00039FA0120607002B0B0BD07487844D4E722
+:1005D0000648784400F02EFA0020F3E7340D0000BE
+:1005E000C6100000640D0000140E0000DA0E0000BA
+:1005F0004278017883781204C07842EA016141EAC6
+:100600000321084470470000B0B50446D0E9025306
+:1006100001690C482022784400F00CFA95F8591032
+:1006200004200129207508BFB0BD21B92046294604
+:1006300000F00CF8B0BD0448784400F0FBF900204D
+:100640002075B0BD320E0000460D0000B0B50C465E
+:1006500091F85810054649B1B4F85600296904309C
+:10066000814218BFB0BD002084F8580094F855109E
+:1006700001290FDD02291AD0032925D0042935D1FB
+:10068000288A3C30A4F85600012084F8580084F8E9
+:100690005500B0BD09B3012928D1E96804F134003F
+:1006A0001422FFF738FF052084F85500B0BDE96833
+:1006B00004F120001422FFF72EFF042084F85500D7
+:1006C000012084F85800B0BDE86800F019F8A4F8DB
+:1006D0005600022084F85500B0BDE968204620226B
+:1006E000FFF722FF032084F85500B0BD034878448B
+:1006F00000F0A0F900202875B0BD00BF590C000023
+:10070000817FC07F40EA012080B27047B0B50446C7
+:10071000C068A56858B1C07FE16885F8530005F14D
+:10072000480014310B2200F09AFD012000E0002067
+:1007300085F8540004206075B0BD0000B0B50446D3
+:10074000D0E9025022690B49794400F088FD95F800
+:10075000591031B10948784400F06CF90020207735
+:10076000B0BDD4E905020449794400F078FD0420C5
+:100770002077B0BD310D0000B30B00008F0B0000DF
+:10078000B0B50446C569406AA16A00F0EBFCD4E943
+:100790000B0100F0E7FC94F82000022806D00128A5
+:1007A00009D068B9204600F019F80EE02046294625
+:1007B00000F056F809E02046294600F02DF804E044
+:1007C0000548784400F036F90020002818BF0420BE
+:1007D00084F83400B0BD00BF4B0C000010B582B0EF
+:1007E0000446406AA26A0A49794400F038FD60680C
+:1007F000E26A0068246B90F862100092054B423068
+:100800007B4412220194FFF73EFE02B010BD00BFF0
+:100810001F0B0000600B0000B0B582B00446406AB8
+:10082000A26A0D460D49794400F019FD95F854006F
+:1008300005F1480395F85310002808BF04F1100390
+:10084000D4E90B0408BF12210090CAB22846202127
+:100850000194FFF718FE02B0B0BD00BFE60A000029
+:10086000B0B582B00446406AA26A0D460B4979448D
+:1008700000F0F5FCE06A30210170E06A78214170F7
+:100880002168E36A0A6805F12000991C0023CDE97C
+:100890000033FFF7FBFB02B0B0BD00BF480B000008
+:1008A00080B591B10246B0F5827F13DA40F20110B3
+:1008B00082421BD0B2F5817F1CD040F203108242ED
+:1008C00024D10846FFF737FE80BD1448784400F075
+:1008D000B1F880BD12D040F20510824212D0B2F5BC
+:1008E000837F13D10846FFF74BFF80BD0846FFF713
+:1008F00039FE80BD0846FFF787FE80BD0846FFF73A
+:1009000005FF80BD0846FFF719FF80BD024811466C
+:10091000784400F08FF880BD900A0000620B000060
+:1009200070B5E6B0234859AE784461904FF48070BA
+:10093000629001206390002064901F483146784403
+:100940003CC83CC102881D480A80784401788278FE
+:10095000C378457842EA032241EA052141EA02418F
+:10096000427A037A569143EA0221427910F8043F11
+:10097000ADF860118178C07843EA022241EA002094
+:1009800042EA004057900E496C46794420464FF4A5
+:10099000AB7200F0EAFB200CADF8600156A85F9046
+:1009A0005EA8659061A8ADF85E415E9600F012FA0F
+:1009B00066B070BD140A0000EA0C0000D30C000001
+:1009C0003D0B000080B5002000F030FA80BD000033
+:1009D0000446704600F00EF8024605482146784469
+:1009E00000F028F800F018FA214600F00DFC00BFD6
+:1009F000E40900000349024A7944401A1044704750
+:100A00000000DEC005F6FFFFB0B582B005465F20EE
+:100A10008DF80400080A0C468DF805008DF80610C4
+:100A200001A8032100F0ECF9A1B2284600F0E8F992
+:100A300002B0B0BD83B02DE9F04D89B0CDE91112FF
+:100A4000139320B10446007811A9039158B909B055
+:100A5000BDE8F04D03B0704741466C1EFFF7D4FF70
+:100A600020780028F3D00026A05D18B1252801D0F9
+:100A70000136F9E720463146A519FFF7C5FFA05D0D
+:100A80002C462528ECD1691C00274FF0200C4FF094
+:100A9000000800204D1C15F8011C01352D2915DC1E
+:100AA0004FF00000F7D0252974D02A2940F00281A8
+:100AB000294611F8010D732840F0FC800398021DAF
+:100AC0000392D0F800800220E4E700BF472929DC28
+:100AD000A1F130020A2A0DD281F030023A4307EB2D
+:100AE000870201EB420108BF4FF0300CA1F1300743
+:100AF000691ECFE72E2940F0DD8015F8010C2A2869
+:100B000040F0D8802878482804D0732802D068287C
+:100B100040F0D0800399081D0390D1F80080012097
+:100B20002946B7E7672908DD722910DD732933D01C
+:100B3000752936D0782910D0BCE0622916DC482906
+:100B400000F0A280582940F0B580012406E0682911
+:100B500000F09D80702940F0AD800024039810269D
+:100B6000011D039100680890012022E0632900F034
+:100B7000A580642940F09E800398011D03910068C0
+:100B8000B0F1FF3F089011DC4042089000200A2697
+:100B900000240EE0A81E97E07A4979448A46002195
+:100BA00079E00398011D039100680890002401205A
+:100BB0000A26DDF820A0564502D94FF0010B10E0BF
+:100BC000DDF820A07B1E31468B46A6FB0112002AD1
+:100BD00018BF012251451F4603D8002AA7F101037F
+:100BE000F2D018B14FF0000801230DE05FFA8CF14C
+:100BF000302906D12D2101234FF001088DF8101066
+:100C000002E000234FF0000880F00100391A8A1E2C
+:100C10000D2A11D801390FD04042019004A8404458
+:100C20005FFA8CF2029300F0A4FA019908EB070036
+:100C3000029B0844A0F10108002B04A802BF2D214B
+:100C400000F8081008F10108BBF1000F3FF404AFF1
+:100C50005049A8F101077944BAFBFBF2002CB2FB22
+:100C6000F6F303FB16224C4B7B4408BF0B469A5C01
+:100C70005E45BBFBF6FB00EB070307F101075A706B
+:100C8000EAD907F10108E7E63F49794401E03C4928
+:100C900079448A460121039AC0B2131D0393D2F806
+:100CA00000B0B0B101281CD002283DD19BF8000053
+:100CB000002857D031480521784406E00398011DEB
+:100CC00003910068089008A80121FFF79DFE6C1EA3
+:100CD000C6E600201BF800200130002AFAD1A0F15E
+:100CE000010821B3B8F1000F27D00021002604AF7E
+:100CF00003E000BF0136B0451CD01BF806007B188E
+:100D0000020900F00F001AF800001AF802205870CB
+:100D1000C81C7A54102801F102015446EAD338461F
+:100D2000FFF772FE0021E5E7B0460029DAD1584608
+:100D3000414606E0474619B905E00027002111B1F8
+:100D400004A8FFF761FE4745A5F101047FF688AED0
+:100D5000A8EB07050E4801217844FFF755FE013541
+:100D6000F8D37DE608F10104084801217844FFF733
+:100D70004BFE013CF8D1B046E5E700BFBD060000E0
+:100D8000AA090000A00A0000C0090000AD0500008B
+:100D9000C1050000E4090000E209000080B54AB185
+:100DA0004FF0000C51F82CE0864505D00CF1010CF9
+:100DB0006245F7D1002080BD1BB10120C3F800C0FF
+:100DC00080BD012080BD01DF002900D170470846A9
+:100DD000FFF7FEFD80B582B000900020019003482F
+:100DE0006946FFF7F0FF02B080BD00BF6700000159
+:100DF00082B00020019069466820FFF7E4FFFFDE23
+:100E000080B582B0CDE9000102486946FFF7DBFFFB
+:100E100002B080BD8300000280B582B00020019046
+:100E200069468720FFF7CFFF02B080BD80B582B052
+:100E300000900020019003486946FFF7C4FF02B00C
+:100E400080BD00BF0B01000153B94AB9002908BF9A
+:100E500000281CBF4FF0FF314FF0FF3000F00CB8FE
+:100E6000ADF1080C6DE904CE00F008F8DDF804E0FF
+:100E7000DDE9022304B07047704700BF2DE9F04F51
+:100E8000099E0D4604460F46002B47D18A429446E0
+:100E90005FD9B2FA82F343B1C3F120019F4002FA55
+:100EA00003FC9C4020FA01F10F434FEA1C451FFA56
+:100EB0008CFE220CB7FBF5F105FB117701FB0EF060
+:100EC00042EA0742904208D91CEB020201F1FF37C7
+:100ED00002D2904200F234813946121AA4B2B2FB17
+:100EE000F5F005FB102200FB0EFE44EA0244A64585
+:100EF00008D91CEB040400F1FF3202D2A64500F22F
+:100F00001981104640EA0140A4EB0E0400211EB1F5
+:100F1000DC400023C6E90043BDE8F08F8B4208D9CE
+:100F2000002E00F0FB800021C6E900050846BDE860
+:100F3000F08FB3FA83F100294BD1AB42C0F0F180BE
+:100F4000824240F2EE800846002EE5D0C6E9004716
+:100F5000E2E702B9FFDEB2FA82F3002B40F09D8097
+:100F60008D1A4FEA124E97B20121B5FBFEF20EFB2D
+:100F70001250250C45EA004507FB02F0A8420FD9A4
+:100F80001CEB050502F1FF382CBF4FF001094FF0B3
+:100F90000009A84203D9B9F1000F00F0CE80424603
+:100FA0002D1AA4B2B5FBFEF00EFB105500FB07F79F
+:100FB00044EA0544A74208D91CEB040400F1FF35BC
+:100FC00002D2A74200F2B3802846E41B40EA024066
+:100FD0009DE7C1F120078B4005FA01F422FA07FCD6
+:100FE000FD408A404CEA030C20FA07F34FEA1C4903
+:100FF0001C431FFA8CFE00FA01F3200CB5FBF9F834
+:1010000009FB185540EA054508FB0EF0A8420FD928
+:101010001CEB050508F1FF3A2CBF4FF0010B4FF018
+:10102000000BA84203D9BBF1000F00F08C80D04622
+:101030002D1AA4B2B5FBF9F009FB105500FB0EFE0A
+:1010400044EA0545AE4507D91CEB050500F1FF3420
+:1010500001D2AE457ED8204640EA0840A5EB0E05F9
+:10106000A0FB029845454C46C64602D306D14B45E7
+:1010700004D20138B9EB020468EB0C0E002E6FD0DD
+:101080001A1B65EB0E0522FA01F305FA07F7CD40AE
+:1010900000211F43C6E900753EE702FA03FCC3F1D5
+:1010A000200001FA03F24FEA1C4EC14024FA00F579
+:1010B0001FFA8CF79C401543B1FBFEF02A0C0EFB87
+:1010C000101142EA014200FB07F191420ED91CEBDC
+:1010D000020200F1FF382CBF4FF001094FF0000968
+:1010E000914202D9B9F1000F31D04046521AADB247
+:1010F000B2FBFEF10EFB112245EA024501FB07F2AD
+:10110000AA4207D91CEB050501F1FF3801D2AA421A
+:1011100023D84146AD1A41EA004126E73146304620
+:10112000FAE6841A65EB030301201F460CE76444CA
+:1011300002384AE764440238E4E6023A65442FE79D
+:1011400002396244C9E6A8F10208654470E7023832
+:101150006244CBE7023865447EE702396544D9E74B
+:101160003146D9E6002200F004B800F017B800F0CC
+:1011700022B813460A46194600F037B8013902442E
+:1011800010B5904201D1002005E0037811F8014F1D
+:10119000A34201D0181B10BD0130F2E70A44431EE0
+:1011A000914200D1704710B511F8014B914203F8FC
+:1011B000014FF9D110BD884210B501EB020402D9EC
+:1011C0008442234607D8431EA14208D011F8012BC0
+:1011D00003F8012FF8E7024401468A4200D110BD0E
+:1011E00013F8014D02F8014DF7E70244034693421C
+:1011F00000D1704703F8011BF9E70000EC46A0E8B6
+:10120000F05F4FF000007047B0E8F05FE54608007F
+:1012100008BF0120704700BF70B504460846161984
+:101220002146B1420B4606D11C1B121B08D100F00F
+:101230002BF8204470BD1D780131002DF1D1F3E76A
+:101240000646314616F8015B15B9081A1D70F0E71D
+:10125000012A1CBF02F1FF3203F8015BF1E70B46E4
+:1012600010B562B1013A08D013F8014B00F8014BF8
+:10127000002CF7D1581A013810BD0022027013F863
+:10128000012B002AFBD1F5E7034613F8012B002AB6
+:10129000FBD1181A013870470246014410B58A4242
+:1012A000134603D01C780132002CF8D1181A10BD57
+:1012B000506C7567696E20706172616D65746572DE
+:1012C000732073747275637475726520697320621C
+:1012D0006967676572207468616E20616C6C6F77F6
+:1012E00065642073697A650A0053656C6563746F81
+:1012F0007220696E6465783A202564206E6F7420D0
+:10130000737570706F727465640A0053656E640063
+:1013100052656365697665204D696E2E0020005325
+:10132000776170004572726F723A2073656C656305
+:10133000746F72206E6F7420666F756E64210A0080
+:10134000457468657265756D003000506172616D3D
+:10135000206E6F7420737570706F727465643A20BC
+:1013600025640A004554480030313233343536376D
+:101370003839616263646566004552524F520030ED
+:10138000780053656C6563746F7220496E6465788C
+:10139000206E6F7420737570706F727465643A207C
+:1013A00025640A00556E68616E646C6564206D6525
+:1013B00073736167652025640A0042656E6566691E
+:1013C000636961727900657863657074696F6E5BDB
+:1013D0003078253034585D3A204C523D30782530F5
+:1013E00038580A004572726F723A206F76657266DD
+:1013F0006C6F77206465746563746564206F6E201C
+:1014000073656C6563746F7220696E646578210A18
+:1014100000526563656976656420616E20696E7649
+:10142000616C69642073637265656E496E6465788A
+:101430000A005265636569766564206E756C6C2080
+:10144000706172616D65746572730A00706C7567A6
+:10145000696E2070726F7669646520706172616D6B
+:10146000657465723A206F66667365742025640A38
+:1014700042797465733A20252E2A480A00506C750B
+:1014800067696E426F696C6572706C617465004566
+:10149000786974696E6720666F6C6C6F77696E67C8
+:1014A00020657863657074696F6E3A2025640A0060
+:1014B0004D697373696E672073656C6563746F72D1
+:1014C000496E6465783A2025640A00400040002196
+:1014D0004E01004C011F8B08000000000002FFFBC2
+:1014E000FF9FCE60B1A0F27A3CD2D7041818C4EEA8
+:1014F000E394FE9BC00004F938E57F81A419D870FD
+:10150000CA3F06CB33E3B46011589E01A70B170CFA
+:1015100098FCBF772000955FFBEEEDDB77EF50C2C4
+:101520002DD9D8C8D8D85800222F6C0C0266086F65
+:10153000FE3560C004025670F9CB0CD800229C1214
+:10154000B0CA23220287BC3ECCF106D8E5F9A92512
+:10155000AF4063F307A3FB199584C0E1FBEFD6AA64
+:10156000550258226FEDDDBBA0F8FBBB18ABD18C48
+:10157000EB602907BBD5524446FD2FECD24CB0A4FA
+:10158000F35900AB3C3C8B7EC4AE9F0B26FF8180A1
+:10159000FC2702F29F19F0DBFF4B00BFFB71F89FA5
+:1015A000311F7FD64184DFFF64A06A2C16C0F3F898
+:1015B000BF55AB9629608FBFF7F8E35F995AF9EBF7
+:1015C0002FF1FAD5B29619E2910795DDD704709BF9
+:1015D0000FF6F5429CFAB950D31486BC1D846F8077
+:1015E0004B7E3D4A318A290F8DD58B68F230031925
+:1015F000A1F297A0F2F268890026FF08BDFC7B8C5F
+:101600009A6A2EA1979F7F1550E4A1CAAD50EB3D79
+:1016100074FD6AF7695F1D0300C214E80400080046
+:1016200000400040000201CB14DEC000506C756722
+:10163000696E426F696C6572706C617465003031FF
+:101640003233343536373839616263646566303138
+:101650003233343536373839414243444546000049
+:10166000B56AF37F4242371300000000000000001B
+:10167000000000000000000000000000000000006A
+:10168000000000000000000000000000000000005A
+:10169000000000000000000000000000000000004A
+:1016A000000000000000000000000000000000003A
+:1016B000000000000000000000000000000000002A
+:1016C000000000000000000000000000000000001A
+:1016D000000000000000000000000000000000000A
+:1016E00000000000000000000000000000000000FA
+:1016F00000000000000000000000000000000000EA
+:1017000000000000000000000000000000000000D9
+:1017100000000000000000000000000000000000C9
+:1017200000000000000000000000000000000000B9
+:1017300000000000000000000000000000000000A9
+:101740000000000000000000000000000000000099
+:101750000000000000000000000000000000000089
+:101760000000000000000000000000000000000079
+:101770000000000000000000000000000000000069
+:101780000000000000000000000000000000000059
+:101790000000000000000000000000000000000049
+:1017A0000000000000000000000000000000000039
+:1017B0000000000000000000000000000000000029
+:1017C0000000000000000000000000000000000019
+:1017D0000000000000000000000000000000000009
+:1017E00000000000000000000000000000000000F9
+:1017F00000000000000000000000000000000000E9
+:101800000111506C7567696E426F696C6572706C1E
+:101810006174650205312E302E300381C120002015
+:101820000021B90000B7001F8B0800000000000273
+:10183000FFFBFF1F3BD82C988BCCFD6BC0C086CC28
+:10184000FF26C0C0B01F99CFC0C0301F17FFF6EEF3
+:10185000DD9B81FCECDDBBF781B83F1518A0805102
+:101860001864C6250604B007F23720F1F9A9CB5752
+:10187000D2FF7F2DCD00CECDBEFBFEB781009CCB2D
+:101880000C54FC1949333790FF0189AF0BE47F44B6
+:10189000E37F43E27382022A11C16706F9EEF7CCB7
+:1018A00004B880DAEEFDB8DCC7A884C267B4BE3BDA
+:1018B00019990F74DA6F05243EC8690950FE46A8CD
+:1018C000533640F98F813ED283F2F3412E3080CBE4
+:1018D000B3DD478F670060DF5DA900020000040AE6
+:0A18E00001028000002C8000003C93
+:04000005C0DE000158
+:00000001FF
diff --git a/tests/plugin_binaries/stax/bin/app.sha256 b/tests/plugin_binaries/stax/bin/app.sha256
new file mode 100644
index 00000000..8a705235
--- /dev/null
+++ b/tests/plugin_binaries/stax/bin/app.sha256
@@ -0,0 +1 @@
+72e80774112a1cbdd180b23302579e3af1b5ea804c26cbe71ff95b7aa5822493
diff --git a/tests/snapshots/.DS_Store b/tests/snapshots/.DS_Store
new file mode 100644
index 00000000..5008ddfc
Binary files /dev/null and b/tests/snapshots/.DS_Store differ
diff --git a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00000.png b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00000.png
similarity index 100%
rename from tests/snapshots/nanos/test_swap_exact_eth_for_token/00000.png
rename to tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00000.png
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00001.png b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00002.png b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00002.png
new file mode 100644
index 00000000..8c346121
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00003.png b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00003.png
new file mode 100644
index 00000000..32c76dfe
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00004.png b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00004.png differ
diff --git a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00008.png b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00005.png
similarity index 100%
rename from tests/snapshots/nanos/test_swap_exact_eth_for_token/00008.png
rename to tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00005.png
diff --git a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00009.png b/tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00006.png
similarity index 100%
rename from tests/snapshots/nanos/test_swap_exact_eth_for_token/00009.png
rename to tests/snapshots/nanos/test_oeth_curve_swap_from_oeth/00006.png
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/00000.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/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/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/00001.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/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/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/00002.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/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/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/00003.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/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/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/00004.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/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/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/00005.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/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/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/00006.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_eth_to_oeth/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/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00000.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00001.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00002.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00002.png
new file mode 100644
index 00000000..8c346121
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00003.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00003.png
new file mode 100644
index 00000000..ab6f8f28
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00004.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00005.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00006.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_eth/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00000.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00001.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00002.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00002.png
new file mode 100644
index 00000000..8c346121
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00003.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00003.png
new file mode 100644
index 00000000..64bb86a6
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00004.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00005.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00006.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_oeth_to_reth/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00000.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00001.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00002.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00002.png
new file mode 100644
index 00000000..f6894ea4
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00003.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00003.png
new file mode 100644
index 00000000..0b9c638e
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00004.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00005.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00006.png b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_multiple_reth_to_oeth/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00000.png b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00001.png b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00002.png b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00002.png
new file mode 100644
index 00000000..096a2e4c
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00003.png b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00003.png
new file mode 100644
index 00000000..40197e4f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00004.png b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00005.png b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00006.png b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_curve_swap_to_oeth/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap/00000.png b/tests/snapshots/nanos/test_oeth_unwrap/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap/00001.png b/tests/snapshots/nanos/test_oeth_unwrap/00001.png
new file mode 100644
index 00000000..5a47e686
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap/00002.png b/tests/snapshots/nanos/test_oeth_unwrap/00002.png
new file mode 100644
index 00000000..0ff80553
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap/00003.png b/tests/snapshots/nanos/test_oeth_unwrap/00003.png
new file mode 100644
index 00000000..387f76b3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap/00004.png b/tests/snapshots/nanos/test_oeth_unwrap/00004.png
new file mode 100644
index 00000000..795c84c7
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap/00005.png b/tests/snapshots/nanos/test_oeth_unwrap/00005.png
new file mode 100644
index 00000000..33e72c6e
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap/00006.png b/tests/snapshots/nanos/test_oeth_unwrap/00006.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap/00007.png b/tests/snapshots/nanos/test_oeth_unwrap/00007.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap/00007.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap/00008.png b/tests/snapshots/nanos/test_oeth_unwrap/00008.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap/00008.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00000.png b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00001.png b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..5a47e686
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00002.png b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..0ff80553
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00003.png b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..f7f3a795
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00004.png b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..52a88db0
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00005.png b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..322e781c
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00006.png b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00007.png b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00007.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00007.png differ
diff --git a/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00008.png b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00008.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_unwrap_different_beneficiary/00008.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00000.png b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00001.png b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00001.png
new file mode 100644
index 00000000..c95cc427
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00002.png b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00002.png
new file mode 100644
index 00000000..477a7a0f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00003.png b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00003.png
new file mode 100644
index 00000000..419220c7
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00004.png b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00005.png b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00006.png b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_frxeth/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_reth/00000.png b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_reth/00001.png b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00001.png
new file mode 100644
index 00000000..c95cc427
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_reth/00002.png b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00002.png
new file mode 100644
index 00000000..c90057b5
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_reth/00003.png b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00003.png
new file mode 100644
index 00000000..419220c7
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_reth/00004.png b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_reth/00005.png b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_reth/00006.png b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_reth/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_steth/00000.png b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_steth/00001.png b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00001.png
new file mode 100644
index 00000000..c95cc427
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_steth/00002.png b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00002.png
new file mode 100644
index 00000000..25ca34d4
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_steth/00003.png b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00003.png
new file mode 100644
index 00000000..419220c7
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_steth/00004.png b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_steth/00005.png b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_steth/00006.png b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_steth/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_weth/00000.png b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_weth/00001.png b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00001.png
new file mode 100644
index 00000000..c95cc427
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_weth/00002.png b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00002.png
new file mode 100644
index 00000000..ac8d450d
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_weth/00003.png b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00003.png
new file mode 100644
index 00000000..419220c7
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_weth/00004.png b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_weth/00005.png b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_mint_weth/00006.png b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_mint_weth/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_redeem/00000.png b/tests/snapshots/nanos/test_oeth_vault_redeem/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_redeem/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_redeem/00001.png b/tests/snapshots/nanos/test_oeth_vault_redeem/00001.png
new file mode 100644
index 00000000..6f10884d
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_redeem/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_redeem/00002.png b/tests/snapshots/nanos/test_oeth_vault_redeem/00002.png
new file mode 100644
index 00000000..b0fccf0f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_redeem/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_redeem/00003.png b/tests/snapshots/nanos/test_oeth_vault_redeem/00003.png
new file mode 100644
index 00000000..d8441be5
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_redeem/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_redeem/00004.png b/tests/snapshots/nanos/test_oeth_vault_redeem/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_redeem/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_redeem/00005.png b/tests/snapshots/nanos/test_oeth_vault_redeem/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_redeem/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_vault_redeem/00006.png b/tests/snapshots/nanos/test_oeth_vault_redeem/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_vault_redeem/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap/00000.png b/tests/snapshots/nanos/test_oeth_wrap/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap/00001.png b/tests/snapshots/nanos/test_oeth_wrap/00001.png
new file mode 100644
index 00000000..310a0870
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap/00002.png b/tests/snapshots/nanos/test_oeth_wrap/00002.png
new file mode 100644
index 00000000..b8f922c2
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap/00003.png b/tests/snapshots/nanos/test_oeth_wrap/00003.png
new file mode 100644
index 00000000..387f76b3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap/00004.png b/tests/snapshots/nanos/test_oeth_wrap/00004.png
new file mode 100644
index 00000000..795c84c7
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap/00005.png b/tests/snapshots/nanos/test_oeth_wrap/00005.png
new file mode 100644
index 00000000..33e72c6e
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap/00006.png b/tests/snapshots/nanos/test_oeth_wrap/00006.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap/00007.png b/tests/snapshots/nanos/test_oeth_wrap/00007.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap/00007.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap/00008.png b/tests/snapshots/nanos/test_oeth_wrap/00008.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap/00008.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00000.png b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00001.png b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..310a0870
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00002.png b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..b8f922c2
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00003.png b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..f7f3a795
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00004.png b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..52a88db0
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00005.png b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..322e781c
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00006.png b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00007.png b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00007.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00007.png differ
diff --git a/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00008.png b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00008.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_wrap_different_beneficiary/00008.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00000.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00001.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00001.png
new file mode 100644
index 00000000..c95cc427
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00002.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00002.png
new file mode 100644
index 00000000..a04ea4d0
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00003.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00003.png
new file mode 100644
index 00000000..419220c7
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00004.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00005.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00006.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_eth/00006.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00000.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00000.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00001.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00001.png
new file mode 100644
index 00000000..c95cc427
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00001.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00002.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00002.png
new file mode 100644
index 00000000..ab2b96ec
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00002.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00003.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00003.png
new file mode 100644
index 00000000..51cf29a1
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00003.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00004.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00004.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00005.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00005.png differ
diff --git a/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00006.png b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_oeth_zapper_deposit_sfrxeth/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00000.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00001.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00002.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00002.png
new file mode 100644
index 00000000..632f94b5
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00003.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00003.png
new file mode 100644
index 00000000..57190acd
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00004.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00005.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00006.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_dai/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00000.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00001.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00002.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00002.png
new file mode 100644
index 00000000..5600dc0a
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00003.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00003.png
new file mode 100644
index 00000000..57190acd
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00004.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00005.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00006.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00007.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdc/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00000.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00001.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00002.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00002.png
new file mode 100644
index 00000000..f986f611
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00003.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00003.png
new file mode 100644
index 00000000..57190acd
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00004.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00005.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00006.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00007.png b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_from_usdt/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00000.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00001.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00002.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00002.png
new file mode 100644
index 00000000..78d75380
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00003.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00003.png
new file mode 100644
index 00000000..58f15462
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00004.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00005.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00006.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_dai/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00000.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00001.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00002.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00002.png
new file mode 100644
index 00000000..78d75380
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00003.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00003.png
new file mode 100644
index 00000000..2abd5ebe
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00004.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00005.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00006.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00007.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdc/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00000.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00001.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00002.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00002.png
new file mode 100644
index 00000000..78d75380
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00003.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00003.png
new file mode 100644
index 00000000..b773d07d
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00004.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00005.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00006.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00007.png b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_curve_swap_to_usdt/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00000.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00001.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00002.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00002.png
new file mode 100644
index 00000000..78d75380
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00003.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00003.png
new file mode 100644
index 00000000..37dfd040
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00004.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00005.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00006.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_dai/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00000.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00001.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00002.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00002.png
new file mode 100644
index 00000000..78d75380
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00003.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00003.png
new file mode 100644
index 00000000..8a57145c
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00004.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00005.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00006.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00007.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdc/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00000.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00001.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00002.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00002.png
new file mode 100644
index 00000000..78d75380
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00003.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00003.png
new file mode 100644
index 00000000..8674965c
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00004.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00005.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00006.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00007.png b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_to_usdt/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00000.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00001.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00002.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00002.png
new file mode 100644
index 00000000..632f94b5
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00003.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00003.png
new file mode 100644
index 00000000..9b10ebfa
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00004.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00005.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00006.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_dai/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00000.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00001.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00002.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00002.png
new file mode 100644
index 00000000..d802584f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00003.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00003.png
new file mode 100644
index 00000000..af13bb8f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00004.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00004.png
new file mode 100644
index 00000000..9b10ebfa
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00005.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00005.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00006.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00006.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00007.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdc/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00000.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00001.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00002.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00002.png
new file mode 100644
index 00000000..208c53c4
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00003.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00003.png
new file mode 100644
index 00000000..af13bb8f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00004.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00004.png
new file mode 100644
index 00000000..9b10ebfa
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00005.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00005.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00006.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00006.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00007.png b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_flipper_flip_with_usdt/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00000.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00001.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00002.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00002.png
new file mode 100644
index 00000000..0a222aab
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00003.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00003.png
new file mode 100644
index 00000000..9b10ebfa
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00004.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00005.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00006.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_dai/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00000.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00001.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00002.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00002.png
new file mode 100644
index 00000000..e422cc81
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00003.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00003.png
new file mode 100644
index 00000000..9b10ebfa
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00004.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00005.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00006.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdc/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/.DS_Store b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/.DS_Store
new file mode 100644
index 00000000..5008ddfc
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/.DS_Store differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00000.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00001.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00002.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00002.png
new file mode 100644
index 00000000..bcc9fa60
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00003.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00003.png
new file mode 100644
index 00000000..9b10ebfa
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00004.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00005.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00006.png b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_from_usdt/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00000.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00001.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00002.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00002.png
new file mode 100644
index 00000000..78d75380
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00003.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00003.png
new file mode 100644
index 00000000..e289e399
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00004.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00005.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00006.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00007.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_dai/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/.DS_Store b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/.DS_Store
new file mode 100644
index 00000000..5008ddfc
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/.DS_Store differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00000.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00001.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00002.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00002.png
new file mode 100644
index 00000000..78d75380
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00003.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00003.png
new file mode 100644
index 00000000..3e76fdcc
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00004.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00005.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00006.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00007.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdc/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00000.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00001.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00001.png
new file mode 100644
index 00000000..0791458f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00002.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00002.png
new file mode 100644
index 00000000..78d75380
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00003.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00003.png
new file mode 100644
index 00000000..40e4ca8f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00004.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00005.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00006.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00007.png b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00007.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_univ3_swap_to_usdt/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap/00000.png b/tests/snapshots/nanos/test_ousd_unwrap/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap/00001.png b/tests/snapshots/nanos/test_ousd_unwrap/00001.png
new file mode 100644
index 00000000..5a47e686
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap/00002.png b/tests/snapshots/nanos/test_ousd_unwrap/00002.png
new file mode 100644
index 00000000..29f2519f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap/00003.png b/tests/snapshots/nanos/test_ousd_unwrap/00003.png
new file mode 100644
index 00000000..387f76b3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap/00004.png b/tests/snapshots/nanos/test_ousd_unwrap/00004.png
new file mode 100644
index 00000000..795c84c7
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap/00005.png b/tests/snapshots/nanos/test_ousd_unwrap/00005.png
new file mode 100644
index 00000000..33e72c6e
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap/00006.png b/tests/snapshots/nanos/test_ousd_unwrap/00006.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap/00007.png b/tests/snapshots/nanos/test_ousd_unwrap/00007.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap/00008.png b/tests/snapshots/nanos/test_ousd_unwrap/00008.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap/00008.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00000.png b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00001.png b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..5a47e686
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00002.png b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..29f2519f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00003.png b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..f7f3a795
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00004.png b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..52a88db0
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00005.png b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..322e781c
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00006.png b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00007.png b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00007.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00008.png b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00008.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_unwrap_different_beneficiary/00008.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_dai/00000.png b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_dai/00001.png b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00001.png
new file mode 100644
index 00000000..c95cc427
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_dai/00002.png b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00002.png
new file mode 100644
index 00000000..abadd815
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_dai/00003.png b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00003.png
new file mode 100644
index 00000000..61ce9386
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_dai/00004.png b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_dai/00005.png b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_dai/00006.png b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_dai/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00000.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00001.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00001.png
new file mode 100644
index 00000000..c95cc427
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00002.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00002.png
new file mode 100644
index 00000000..41064893
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00003.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00003.png
new file mode 100644
index 00000000..61ce9386
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00004.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00005.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00006.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdc/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00000.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00001.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00001.png
new file mode 100644
index 00000000..c95cc427
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00002.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00002.png
new file mode 100644
index 00000000..990e1db8
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00003.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00003.png
new file mode 100644
index 00000000..61ce9386
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00004.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00005.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00006.png b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_mint_usdt/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_redeem/00000.png b/tests/snapshots/nanos/test_ousd_vault_redeem/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_redeem/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_redeem/00001.png b/tests/snapshots/nanos/test_ousd_vault_redeem/00001.png
new file mode 100644
index 00000000..6f10884d
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_redeem/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_redeem/00002.png b/tests/snapshots/nanos/test_ousd_vault_redeem/00002.png
new file mode 100644
index 00000000..89e4d237
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_redeem/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_redeem/00003.png b/tests/snapshots/nanos/test_ousd_vault_redeem/00003.png
new file mode 100644
index 00000000..b8b98b8d
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_redeem/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_redeem/00004.png b/tests/snapshots/nanos/test_ousd_vault_redeem/00004.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_redeem/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_redeem/00005.png b/tests/snapshots/nanos/test_ousd_vault_redeem/00005.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_redeem/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_vault_redeem/00006.png b/tests/snapshots/nanos/test_ousd_vault_redeem/00006.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_vault_redeem/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap/00000.png b/tests/snapshots/nanos/test_ousd_wrap/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap/00001.png b/tests/snapshots/nanos/test_ousd_wrap/00001.png
new file mode 100644
index 00000000..310a0870
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap/00002.png b/tests/snapshots/nanos/test_ousd_wrap/00002.png
new file mode 100644
index 00000000..f9611f65
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap/00003.png b/tests/snapshots/nanos/test_ousd_wrap/00003.png
new file mode 100644
index 00000000..387f76b3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap/00004.png b/tests/snapshots/nanos/test_ousd_wrap/00004.png
new file mode 100644
index 00000000..795c84c7
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap/00005.png b/tests/snapshots/nanos/test_ousd_wrap/00005.png
new file mode 100644
index 00000000..33e72c6e
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap/00006.png b/tests/snapshots/nanos/test_ousd_wrap/00006.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap/00007.png b/tests/snapshots/nanos/test_ousd_wrap/00007.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap/00008.png b/tests/snapshots/nanos/test_ousd_wrap/00008.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap/00008.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00000.png b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..8d84cc70
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00001.png b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..310a0870
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00002.png b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..f9611f65
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00003.png b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..f7f3a795
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00004.png b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..52a88db0
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00005.png b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..322e781c
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00006.png b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..1492e09f
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00007.png b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00007.png
new file mode 100644
index 00000000..1c9156c3
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00007.png differ
diff --git a/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00008.png b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00008.png
new file mode 100644
index 00000000..ce795f34
Binary files /dev/null and b/tests/snapshots/nanos/test_ousd_wrap_different_beneficiary/00008.png differ
diff --git a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00001.png b/tests/snapshots/nanos/test_swap_exact_eth_for_token/00001.png
deleted file mode 100644
index 9ca56dc2..00000000
Binary files a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00001.png and /dev/null differ
diff --git a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00002.png b/tests/snapshots/nanos/test_swap_exact_eth_for_token/00002.png
deleted file mode 100644
index 56481a39..00000000
Binary files a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00002.png and /dev/null differ
diff --git a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00003.png b/tests/snapshots/nanos/test_swap_exact_eth_for_token/00003.png
deleted file mode 100644
index 7eb80fd6..00000000
Binary files a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00003.png and /dev/null differ
diff --git a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00004.png b/tests/snapshots/nanos/test_swap_exact_eth_for_token/00004.png
deleted file mode 100644
index db2dd8c1..00000000
Binary files a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00004.png and /dev/null differ
diff --git a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00005.png b/tests/snapshots/nanos/test_swap_exact_eth_for_token/00005.png
deleted file mode 100644
index cb94c7fa..00000000
Binary files a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00005.png and /dev/null differ
diff --git a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00006.png b/tests/snapshots/nanos/test_swap_exact_eth_for_token/00006.png
deleted file mode 100644
index dda2fb66..00000000
Binary files a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00006.png and /dev/null differ
diff --git a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00007.png b/tests/snapshots/nanos/test_swap_exact_eth_for_token/00007.png
deleted file mode 100644
index 96b0111e..00000000
Binary files a/tests/snapshots/nanos/test_swap_exact_eth_for_token/00007.png and /dev/null differ
diff --git a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00000.png b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00000.png
similarity index 100%
rename from tests/snapshots/nanosp/test_swap_exact_eth_for_token/00000.png
rename to tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00000.png
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00001.png b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00002.png b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00002.png
new file mode 100644
index 00000000..c52eb7ef
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00003.png b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00003.png
new file mode 100644
index 00000000..c2e4f154
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00004.png b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00006.png b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00005.png
similarity index 100%
rename from tests/snapshots/nanosp/test_swap_exact_eth_for_token/00006.png
rename to tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00005.png
diff --git a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00007.png b/tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00006.png
similarity index 100%
rename from tests/snapshots/nanosp/test_swap_exact_eth_for_token/00007.png
rename to tests/snapshots/nanosp/test_oeth_curve_swap_from_oeth/00006.png
diff --git a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00000.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00000.png
similarity index 100%
rename from tests/snapshots/nanox/test_swap_exact_eth_for_token/00000.png
rename to tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00000.png
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00001.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00002.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00002.png
new file mode 100644
index 00000000..ea439675
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00003.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00003.png
new file mode 100644
index 00000000..a561172c
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00004.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00004.png differ
diff --git a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00006.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00005.png
similarity index 100%
rename from tests/snapshots/nanox/test_swap_exact_eth_for_token/00006.png
rename to tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00005.png
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00006.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_eth_to_oeth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00000.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00001.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00002.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00002.png
new file mode 100644
index 00000000..c52eb7ef
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00003.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00003.png
new file mode 100644
index 00000000..04432b72
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00004.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00005.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00006.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_eth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00000.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00001.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00002.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00002.png
new file mode 100644
index 00000000..c52eb7ef
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00003.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00003.png
new file mode 100644
index 00000000..3286d176
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00004.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00005.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00006.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_oeth_to_reth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00000.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00001.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00002.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00002.png
new file mode 100644
index 00000000..0d789883
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00003.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00003.png
new file mode 100644
index 00000000..a561172c
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00004.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00005.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00006.png b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_multiple_reth_to_oeth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00000.png b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00001.png b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00002.png b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00002.png
new file mode 100644
index 00000000..ea439675
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00003.png b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00003.png
new file mode 100644
index 00000000..9645b380
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00004.png b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00005.png b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00006.png b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_curve_swap_to_oeth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap/00000.png b/tests/snapshots/nanosp/test_oeth_unwrap/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap/00001.png b/tests/snapshots/nanosp/test_oeth_unwrap/00001.png
new file mode 100644
index 00000000..277305bb
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap/00002.png b/tests/snapshots/nanosp/test_oeth_unwrap/00002.png
new file mode 100644
index 00000000..6c5ab466
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap/00003.png b/tests/snapshots/nanosp/test_oeth_unwrap/00003.png
new file mode 100644
index 00000000..f3bbcde2
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap/00004.png b/tests/snapshots/nanosp/test_oeth_unwrap/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap/00005.png b/tests/snapshots/nanosp/test_oeth_unwrap/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap/00006.png b/tests/snapshots/nanosp/test_oeth_unwrap/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00000.png b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00001.png b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..277305bb
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00002.png b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..6c5ab466
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00003.png b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..3e97c405
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00004.png b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00005.png b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00006.png b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_unwrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00000.png b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00001.png b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00002.png b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00002.png
new file mode 100644
index 00000000..2d552caa
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00003.png b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00003.png
new file mode 100644
index 00000000..75002047
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00004.png b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00005.png b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00006.png b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_frxeth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00000.png b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00001.png b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00002.png b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00002.png
new file mode 100644
index 00000000..fb5322f1
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00003.png b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00003.png
new file mode 100644
index 00000000..75002047
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00004.png b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00005.png b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00006.png b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_reth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00000.png b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00001.png b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00002.png b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00002.png
new file mode 100644
index 00000000..76fe1a8a
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00003.png b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00003.png
new file mode 100644
index 00000000..75002047
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00004.png b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00005.png b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00006.png b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_steth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00000.png b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00001.png b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00002.png b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00002.png
new file mode 100644
index 00000000..e6ccae1f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00003.png b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00003.png
new file mode 100644
index 00000000..75002047
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00004.png b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00005.png b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00006.png b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_mint_weth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_redeem/00000.png b/tests/snapshots/nanosp/test_oeth_vault_redeem/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_redeem/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_redeem/00001.png b/tests/snapshots/nanosp/test_oeth_vault_redeem/00001.png
new file mode 100644
index 00000000..ddceadad
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_redeem/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_redeem/00002.png b/tests/snapshots/nanosp/test_oeth_vault_redeem/00002.png
new file mode 100644
index 00000000..7483d045
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_redeem/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_redeem/00003.png b/tests/snapshots/nanosp/test_oeth_vault_redeem/00003.png
new file mode 100644
index 00000000..bfe25c80
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_redeem/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_redeem/00004.png b/tests/snapshots/nanosp/test_oeth_vault_redeem/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_redeem/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_redeem/00005.png b/tests/snapshots/nanosp/test_oeth_vault_redeem/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_redeem/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_vault_redeem/00006.png b/tests/snapshots/nanosp/test_oeth_vault_redeem/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_vault_redeem/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap/00000.png b/tests/snapshots/nanosp/test_oeth_wrap/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap/00001.png b/tests/snapshots/nanosp/test_oeth_wrap/00001.png
new file mode 100644
index 00000000..297fb18b
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap/00002.png b/tests/snapshots/nanosp/test_oeth_wrap/00002.png
new file mode 100644
index 00000000..26950568
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap/00003.png b/tests/snapshots/nanosp/test_oeth_wrap/00003.png
new file mode 100644
index 00000000..f3bbcde2
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap/00004.png b/tests/snapshots/nanosp/test_oeth_wrap/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap/00005.png b/tests/snapshots/nanosp/test_oeth_wrap/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap/00006.png b/tests/snapshots/nanosp/test_oeth_wrap/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00000.png b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00001.png b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..297fb18b
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00002.png b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..26950568
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00003.png b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..3e97c405
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00004.png b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00005.png b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00006.png b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_wrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00000.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00001.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00002.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00002.png
new file mode 100644
index 00000000..20645af0
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00003.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00003.png
new file mode 100644
index 00000000..75002047
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00004.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00005.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00006.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_eth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00000.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00000.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00001.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00001.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00002.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00002.png
new file mode 100644
index 00000000..8436d0be
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00002.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00003.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00003.png
new file mode 100644
index 00000000..aa909ef1
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00003.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00004.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00004.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00005.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00005.png differ
diff --git a/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00006.png b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_oeth_zapper_deposit_sfrxeth/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00000.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00001.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00002.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00002.png
new file mode 100644
index 00000000..e1599663
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00003.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00003.png
new file mode 100644
index 00000000..21b5b3cc
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00004.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00005.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00006.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_dai/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00000.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00001.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00002.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00002.png
new file mode 100644
index 00000000..fb7370f8
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00003.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00003.png
new file mode 100644
index 00000000..21b5b3cc
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00004.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00005.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00006.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdc/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00000.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00001.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00002.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00002.png
new file mode 100644
index 00000000..84aea411
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00003.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00003.png
new file mode 100644
index 00000000..21b5b3cc
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00004.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00005.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00006.png b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_from_usdt/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00000.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00001.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00002.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00002.png
new file mode 100644
index 00000000..ab52e6b6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00003.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00003.png
new file mode 100644
index 00000000..78101534
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00004.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00005.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00006.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_dai/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00000.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00001.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00002.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00002.png
new file mode 100644
index 00000000..ab52e6b6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00003.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00003.png
new file mode 100644
index 00000000..4ac8ceb2
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00004.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00005.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00006.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdc/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00000.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00001.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00002.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00002.png
new file mode 100644
index 00000000..ab52e6b6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00003.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00003.png
new file mode 100644
index 00000000..250c5aec
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00004.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00005.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00006.png b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_curve_swap_to_usdt/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00000.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00001.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00002.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00002.png
new file mode 100644
index 00000000..ab52e6b6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00003.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00003.png
new file mode 100644
index 00000000..659a2088
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00004.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00005.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00006.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_dai/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00000.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00001.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00002.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00002.png
new file mode 100644
index 00000000..ab52e6b6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00003.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00003.png
new file mode 100644
index 00000000..27dabd52
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00004.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00005.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00006.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdc/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00000.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00001.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00002.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00002.png
new file mode 100644
index 00000000..ab52e6b6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00003.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00003.png
new file mode 100644
index 00000000..8633a331
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00004.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00005.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00006.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_to_usdt/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00000.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00001.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00002.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00002.png
new file mode 100644
index 00000000..e1599663
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00003.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00004.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00005.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00006.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_dai/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00000.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00001.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00002.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00002.png
new file mode 100644
index 00000000..68d3a5dc
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00003.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00004.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00005.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00006.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdc/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00000.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00001.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00002.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00002.png
new file mode 100644
index 00000000..cb08ae9a
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00003.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00004.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00005.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00006.png b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_flipper_flip_with_usdt/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00000.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00001.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00002.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00002.png
new file mode 100644
index 00000000..4211ee7e
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00003.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00004.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00005.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00006.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_dai/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00000.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00001.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00002.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00002.png
new file mode 100644
index 00000000..42d3bad0
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00003.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00004.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00005.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00006.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdc/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00000.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00001.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00002.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00002.png
new file mode 100644
index 00000000..bfcd2610
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00003.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00004.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00005.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00006.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_from_usdt/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00000.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00001.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00002.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00002.png
new file mode 100644
index 00000000..ab52e6b6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00003.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00003.png
new file mode 100644
index 00000000..e149bd74
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00004.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00005.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00006.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_dai/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00000.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00001.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00002.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00002.png
new file mode 100644
index 00000000..ab52e6b6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00003.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00003.png
new file mode 100644
index 00000000..976e7b39
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00004.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00005.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00006.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdc/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00000.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00001.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00002.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00002.png
new file mode 100644
index 00000000..ab52e6b6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00003.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00003.png
new file mode 100644
index 00000000..e64415f4
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00004.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00005.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00006.png b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_univ3_swap_to_usdt/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap/00000.png b/tests/snapshots/nanosp/test_ousd_unwrap/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap/00001.png b/tests/snapshots/nanosp/test_ousd_unwrap/00001.png
new file mode 100644
index 00000000..277305bb
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap/00002.png b/tests/snapshots/nanosp/test_ousd_unwrap/00002.png
new file mode 100644
index 00000000..827af867
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap/00003.png b/tests/snapshots/nanosp/test_ousd_unwrap/00003.png
new file mode 100644
index 00000000..f3bbcde2
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap/00004.png b/tests/snapshots/nanosp/test_ousd_unwrap/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap/00005.png b/tests/snapshots/nanosp/test_ousd_unwrap/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap/00006.png b/tests/snapshots/nanosp/test_ousd_unwrap/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00000.png b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00001.png b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..277305bb
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00002.png b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..827af867
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00003.png b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..3e97c405
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00004.png b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00005.png b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00006.png b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_unwrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00000.png b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00001.png b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00002.png b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00002.png
new file mode 100644
index 00000000..789004d5
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00003.png b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00003.png
new file mode 100644
index 00000000..06a20cb6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00004.png b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00005.png b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00006.png b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_dai/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00000.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00001.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00002.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00002.png
new file mode 100644
index 00000000..cf1728ca
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00003.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00003.png
new file mode 100644
index 00000000..06a20cb6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00004.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00005.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00006.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdc/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00000.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00001.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00002.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00002.png
new file mode 100644
index 00000000..67d5afb6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00003.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00003.png
new file mode 100644
index 00000000..06a20cb6
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00004.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00005.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00006.png b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_mint_usdt/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_redeem/00000.png b/tests/snapshots/nanosp/test_ousd_vault_redeem/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_redeem/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_redeem/00001.png b/tests/snapshots/nanosp/test_ousd_vault_redeem/00001.png
new file mode 100644
index 00000000..ddceadad
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_redeem/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_redeem/00002.png b/tests/snapshots/nanosp/test_ousd_vault_redeem/00002.png
new file mode 100644
index 00000000..6119e28e
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_redeem/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_redeem/00003.png b/tests/snapshots/nanosp/test_ousd_vault_redeem/00003.png
new file mode 100644
index 00000000..977ff24a
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_redeem/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_redeem/00004.png b/tests/snapshots/nanosp/test_ousd_vault_redeem/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_redeem/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_redeem/00005.png b/tests/snapshots/nanosp/test_ousd_vault_redeem/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_redeem/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_vault_redeem/00006.png b/tests/snapshots/nanosp/test_ousd_vault_redeem/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_vault_redeem/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap/00000.png b/tests/snapshots/nanosp/test_ousd_wrap/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap/00001.png b/tests/snapshots/nanosp/test_ousd_wrap/00001.png
new file mode 100644
index 00000000..297fb18b
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap/00002.png b/tests/snapshots/nanosp/test_ousd_wrap/00002.png
new file mode 100644
index 00000000..2e0a144c
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap/00003.png b/tests/snapshots/nanosp/test_ousd_wrap/00003.png
new file mode 100644
index 00000000..f3bbcde2
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap/00004.png b/tests/snapshots/nanosp/test_ousd_wrap/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap/00005.png b/tests/snapshots/nanosp/test_ousd_wrap/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap/00006.png b/tests/snapshots/nanosp/test_ousd_wrap/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap/00006.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00000.png b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00001.png b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..297fb18b
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00002.png b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..2e0a144c
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00003.png b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..3e97c405
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00004.png b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..c2c9b769
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00005.png b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00006.png b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..a58590b9
Binary files /dev/null and b/tests/snapshots/nanosp/test_ousd_wrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00001.png b/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00001.png
deleted file mode 100644
index 8a2a784f..00000000
Binary files a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00001.png and /dev/null differ
diff --git a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00002.png b/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00002.png
deleted file mode 100644
index 2a88e11a..00000000
Binary files a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00002.png and /dev/null differ
diff --git a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00003.png b/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00003.png
deleted file mode 100644
index 18dac8ed..00000000
Binary files a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00003.png and /dev/null differ
diff --git a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00004.png b/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00004.png
deleted file mode 100644
index d858b6f7..00000000
Binary files a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00004.png and /dev/null differ
diff --git a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00005.png b/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00005.png
deleted file mode 100644
index d3508954..00000000
Binary files a/tests/snapshots/nanosp/test_swap_exact_eth_for_token/00005.png and /dev/null differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00000.png b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00001.png b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00002.png b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00002.png
new file mode 100644
index 00000000..d4bf280f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00003.png b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00003.png
new file mode 100644
index 00000000..c2e4f154
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00004.png b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00005.png b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00005.png differ
diff --git a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00007.png b/tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00006.png
similarity index 100%
rename from tests/snapshots/nanox/test_swap_exact_eth_for_token/00007.png
rename to tests/snapshots/nanox/test_oeth_curve_swap_from_oeth/00006.png
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/00000.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/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/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/00001.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/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/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/00002.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/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/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/00003.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/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/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/00004.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/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/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/00005.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/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/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/00006.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_eth_to_oeth/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/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00000.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00001.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00002.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00002.png
new file mode 100644
index 00000000..d4bf280f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00003.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00003.png
new file mode 100644
index 00000000..04432b72
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00004.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00005.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00006.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_eth/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00000.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00001.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00002.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00002.png
new file mode 100644
index 00000000..d4bf280f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00003.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00003.png
new file mode 100644
index 00000000..3286d176
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00004.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00005.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00006.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_oeth_to_reth/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00000.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00001.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00002.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00002.png
new file mode 100644
index 00000000..8c66a87b
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00003.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00003.png
new file mode 100644
index 00000000..a561172c
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00004.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00005.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00006.png b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_multiple_reth_to_oeth/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00000.png b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00001.png b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00002.png b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00002.png
new file mode 100644
index 00000000..17c1e2c1
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00003.png b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00003.png
new file mode 100644
index 00000000..9645b380
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00004.png b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00005.png b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00006.png b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_curve_swap_to_oeth/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap/00000.png b/tests/snapshots/nanox/test_oeth_unwrap/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap/00001.png b/tests/snapshots/nanox/test_oeth_unwrap/00001.png
new file mode 100644
index 00000000..277305bb
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap/00002.png b/tests/snapshots/nanox/test_oeth_unwrap/00002.png
new file mode 100644
index 00000000..6c5ab466
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap/00003.png b/tests/snapshots/nanox/test_oeth_unwrap/00003.png
new file mode 100644
index 00000000..f3bbcde2
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap/00004.png b/tests/snapshots/nanox/test_oeth_unwrap/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap/00005.png b/tests/snapshots/nanox/test_oeth_unwrap/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap/00006.png b/tests/snapshots/nanox/test_oeth_unwrap/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00000.png b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00001.png b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..277305bb
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00002.png b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..6c5ab466
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00003.png b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..3e97c405
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00004.png b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00005.png b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00006.png b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_unwrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00000.png b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00001.png b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00002.png b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00002.png
new file mode 100644
index 00000000..94162cea
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00003.png b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00003.png
new file mode 100644
index 00000000..75002047
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00004.png b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00005.png b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00006.png b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_frxeth/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_reth/00000.png b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_reth/00001.png b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_reth/00002.png b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00002.png
new file mode 100644
index 00000000..fb5322f1
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_reth/00003.png b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00003.png
new file mode 100644
index 00000000..75002047
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_reth/00004.png b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_reth/00005.png b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_reth/00006.png b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_reth/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_steth/00000.png b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_steth/00001.png b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_steth/00002.png b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00002.png
new file mode 100644
index 00000000..76fe1a8a
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_steth/00003.png b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00003.png
new file mode 100644
index 00000000..75002047
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_steth/00004.png b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_steth/00005.png b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_steth/00006.png b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_steth/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_weth/00000.png b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_weth/00001.png b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_weth/00002.png b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00002.png
new file mode 100644
index 00000000..e6ccae1f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_weth/00003.png b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00003.png
new file mode 100644
index 00000000..75002047
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_weth/00004.png b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_weth/00005.png b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_mint_weth/00006.png b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_mint_weth/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_redeem/00000.png b/tests/snapshots/nanox/test_oeth_vault_redeem/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_redeem/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_redeem/00001.png b/tests/snapshots/nanox/test_oeth_vault_redeem/00001.png
new file mode 100644
index 00000000..ddceadad
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_redeem/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_redeem/00002.png b/tests/snapshots/nanox/test_oeth_vault_redeem/00002.png
new file mode 100644
index 00000000..7483d045
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_redeem/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_redeem/00003.png b/tests/snapshots/nanox/test_oeth_vault_redeem/00003.png
new file mode 100644
index 00000000..1ffbfe26
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_redeem/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_redeem/00004.png b/tests/snapshots/nanox/test_oeth_vault_redeem/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_redeem/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_redeem/00005.png b/tests/snapshots/nanox/test_oeth_vault_redeem/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_redeem/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_vault_redeem/00006.png b/tests/snapshots/nanox/test_oeth_vault_redeem/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_vault_redeem/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap/00000.png b/tests/snapshots/nanox/test_oeth_wrap/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap/00001.png b/tests/snapshots/nanox/test_oeth_wrap/00001.png
new file mode 100644
index 00000000..297fb18b
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap/00002.png b/tests/snapshots/nanox/test_oeth_wrap/00002.png
new file mode 100644
index 00000000..26950568
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap/00003.png b/tests/snapshots/nanox/test_oeth_wrap/00003.png
new file mode 100644
index 00000000..f3bbcde2
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap/00004.png b/tests/snapshots/nanox/test_oeth_wrap/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap/00005.png b/tests/snapshots/nanox/test_oeth_wrap/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap/00006.png b/tests/snapshots/nanox/test_oeth_wrap/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00000.png b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00001.png b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..297fb18b
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00002.png b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..26950568
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00003.png b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..3e97c405
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00004.png b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00005.png b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00006.png b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_wrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00000.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00001.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00002.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00002.png
new file mode 100644
index 00000000..20645af0
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00003.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00003.png
new file mode 100644
index 00000000..75002047
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00004.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00005.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00006.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_eth/00006.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00000.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00000.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00001.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00001.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00002.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00002.png
new file mode 100644
index 00000000..8436d0be
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00002.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00003.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00003.png
new file mode 100644
index 00000000..aa909ef1
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00003.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00004.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00004.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00005.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00005.png differ
diff --git a/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00006.png b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_oeth_zapper_deposit_sfrxeth/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00000.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00001.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00002.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00002.png
new file mode 100644
index 00000000..cf2c9115
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00003.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00003.png
new file mode 100644
index 00000000..21b5b3cc
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00004.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00005.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00006.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_dai/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00000.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00001.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00002.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00002.png
new file mode 100644
index 00000000..cfd41d49
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00003.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00003.png
new file mode 100644
index 00000000..21b5b3cc
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00004.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00005.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00006.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdc/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00000.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00001.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00002.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00002.png
new file mode 100644
index 00000000..d3a57e6a
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00003.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00003.png
new file mode 100644
index 00000000..21b5b3cc
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00004.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00005.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00006.png b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_from_usdt/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00000.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00001.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00002.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00002.png
new file mode 100644
index 00000000..b6b7cf0e
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00003.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00003.png
new file mode 100644
index 00000000..78101534
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00004.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00005.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00006.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_dai/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00000.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00001.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00002.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00002.png
new file mode 100644
index 00000000..b6b7cf0e
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00003.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00003.png
new file mode 100644
index 00000000..4ac8ceb2
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00004.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00005.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00006.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdc/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00000.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00001.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00002.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00002.png
new file mode 100644
index 00000000..b6b7cf0e
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00003.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00003.png
new file mode 100644
index 00000000..250c5aec
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00004.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00005.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00006.png b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_curve_swap_to_usdt/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00000.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00001.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00002.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00002.png
new file mode 100644
index 00000000..b6b7cf0e
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00003.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00003.png
new file mode 100644
index 00000000..659a2088
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00004.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00005.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00006.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_dai/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00000.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00001.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00002.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00002.png
new file mode 100644
index 00000000..b6b7cf0e
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00003.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00003.png
new file mode 100644
index 00000000..27dabd52
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00004.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00005.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00006.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdc/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00000.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00001.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00002.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00002.png
new file mode 100644
index 00000000..b6b7cf0e
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00003.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00003.png
new file mode 100644
index 00000000..8633a331
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00004.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00005.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00006.png b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_to_usdt/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00000.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00001.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00002.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00002.png
new file mode 100644
index 00000000..cf2c9115
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00003.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00004.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00005.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00006.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_dai/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00000.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00001.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00002.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00002.png
new file mode 100644
index 00000000..997aff51
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00003.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00004.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00005.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00006.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdc/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00000.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00001.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00002.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00002.png
new file mode 100644
index 00000000..6e537c5c
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00003.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00004.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00005.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00006.png b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_flipper_flip_with_usdt/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00000.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00001.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00002.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00002.png
new file mode 100644
index 00000000..96c05715
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00003.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00004.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00005.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00006.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_dai/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00000.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00001.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00002.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00002.png
new file mode 100644
index 00000000..007dd0bd
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00003.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00004.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00005.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00006.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdc/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00000.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00001.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00002.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00002.png
new file mode 100644
index 00000000..fa6a3ea7
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00003.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00003.png
new file mode 100644
index 00000000..7b52ffe2
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00004.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00005.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00006.png b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_from_usdt/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00000.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00001.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00002.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00002.png
new file mode 100644
index 00000000..b6b7cf0e
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00003.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00003.png
new file mode 100644
index 00000000..e149bd74
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00004.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00005.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00006.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_dai/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00000.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00001.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00002.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00002.png
new file mode 100644
index 00000000..b6b7cf0e
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00003.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00003.png
new file mode 100644
index 00000000..976e7b39
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00004.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00005.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00006.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdc/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00000.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00001.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00001.png
new file mode 100644
index 00000000..39492eaf
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00002.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00002.png
new file mode 100644
index 00000000..b6b7cf0e
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00003.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00003.png
new file mode 100644
index 00000000..e64415f4
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00004.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00005.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00006.png b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_univ3_swap_to_usdt/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap/00000.png b/tests/snapshots/nanox/test_ousd_unwrap/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap/00001.png b/tests/snapshots/nanox/test_ousd_unwrap/00001.png
new file mode 100644
index 00000000..277305bb
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap/00002.png b/tests/snapshots/nanox/test_ousd_unwrap/00002.png
new file mode 100644
index 00000000..827af867
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap/00003.png b/tests/snapshots/nanox/test_ousd_unwrap/00003.png
new file mode 100644
index 00000000..f3bbcde2
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap/00004.png b/tests/snapshots/nanox/test_ousd_unwrap/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap/00005.png b/tests/snapshots/nanox/test_ousd_unwrap/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap/00006.png b/tests/snapshots/nanox/test_ousd_unwrap/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00000.png b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00001.png b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..277305bb
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00002.png b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..827af867
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00003.png b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..3e97c405
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00004.png b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00005.png b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00006.png b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_unwrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_dai/00000.png b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_dai/00001.png b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_dai/00002.png b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00002.png
new file mode 100644
index 00000000..789004d5
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_dai/00003.png b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00003.png
new file mode 100644
index 00000000..06a20cb6
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_dai/00004.png b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_dai/00005.png b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_dai/00006.png b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_dai/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00000.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00001.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00002.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00002.png
new file mode 100644
index 00000000..cf1728ca
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00003.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00003.png
new file mode 100644
index 00000000..06a20cb6
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00004.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00005.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00006.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdc/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00000.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00001.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00001.png
new file mode 100644
index 00000000..59fad364
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00002.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00002.png
new file mode 100644
index 00000000..67d5afb6
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00003.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00003.png
new file mode 100644
index 00000000..06a20cb6
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00004.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00005.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00006.png b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_mint_usdt/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_redeem/00000.png b/tests/snapshots/nanox/test_ousd_vault_redeem/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_redeem/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_redeem/00001.png b/tests/snapshots/nanox/test_ousd_vault_redeem/00001.png
new file mode 100644
index 00000000..ddceadad
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_redeem/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_redeem/00002.png b/tests/snapshots/nanox/test_ousd_vault_redeem/00002.png
new file mode 100644
index 00000000..6119e28e
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_redeem/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_redeem/00003.png b/tests/snapshots/nanox/test_ousd_vault_redeem/00003.png
new file mode 100644
index 00000000..d9eddf39
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_redeem/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_redeem/00004.png b/tests/snapshots/nanox/test_ousd_vault_redeem/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_redeem/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_redeem/00005.png b/tests/snapshots/nanox/test_ousd_vault_redeem/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_redeem/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_vault_redeem/00006.png b/tests/snapshots/nanox/test_ousd_vault_redeem/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_vault_redeem/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap/00000.png b/tests/snapshots/nanox/test_ousd_wrap/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap/00001.png b/tests/snapshots/nanox/test_ousd_wrap/00001.png
new file mode 100644
index 00000000..297fb18b
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap/00002.png b/tests/snapshots/nanox/test_ousd_wrap/00002.png
new file mode 100644
index 00000000..2e0a144c
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap/00003.png b/tests/snapshots/nanox/test_ousd_wrap/00003.png
new file mode 100644
index 00000000..f3bbcde2
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap/00004.png b/tests/snapshots/nanox/test_ousd_wrap/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap/00005.png b/tests/snapshots/nanox/test_ousd_wrap/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap/00006.png b/tests/snapshots/nanox/test_ousd_wrap/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap/00006.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00000.png b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00000.png
new file mode 100644
index 00000000..487ea10f
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00000.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00001.png b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00001.png
new file mode 100644
index 00000000..297fb18b
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00001.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00002.png b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00002.png
new file mode 100644
index 00000000..2e0a144c
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00002.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00003.png b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00003.png
new file mode 100644
index 00000000..3e97c405
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00003.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00004.png b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00004.png
new file mode 100644
index 00000000..9cdfdf9d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00004.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00005.png b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00005.png
new file mode 100644
index 00000000..570ce28d
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00005.png differ
diff --git a/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00006.png b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00006.png
new file mode 100644
index 00000000..65788722
Binary files /dev/null and b/tests/snapshots/nanox/test_ousd_wrap_different_beneficiary/00006.png differ
diff --git a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00001.png b/tests/snapshots/nanox/test_swap_exact_eth_for_token/00001.png
deleted file mode 100644
index 8a2a784f..00000000
Binary files a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00001.png and /dev/null differ
diff --git a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00002.png b/tests/snapshots/nanox/test_swap_exact_eth_for_token/00002.png
deleted file mode 100644
index 65bb3b17..00000000
Binary files a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00002.png and /dev/null differ
diff --git a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00003.png b/tests/snapshots/nanox/test_swap_exact_eth_for_token/00003.png
deleted file mode 100644
index 18dac8ed..00000000
Binary files a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00003.png and /dev/null differ
diff --git a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00004.png b/tests/snapshots/nanox/test_swap_exact_eth_for_token/00004.png
deleted file mode 100644
index d858b6f7..00000000
Binary files a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00004.png and /dev/null differ
diff --git a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00005.png b/tests/snapshots/nanox/test_swap_exact_eth_for_token/00005.png
deleted file mode 100644
index 3a1c8871..00000000
Binary files a/tests/snapshots/nanox/test_swap_exact_eth_for_token/00005.png and /dev/null differ
diff --git a/tests/snapshots/stax/test_swap_exact_eth_for_token/00000.png b/tests/snapshots/stax/test_swap_exact_eth_for_token/00000.png
deleted file mode 100644
index 38f491b8..00000000
Binary files a/tests/snapshots/stax/test_swap_exact_eth_for_token/00000.png and /dev/null differ
diff --git a/tests/snapshots/stax/test_swap_exact_eth_for_token/00001.png b/tests/snapshots/stax/test_swap_exact_eth_for_token/00001.png
deleted file mode 100644
index 8cf15eb3..00000000
Binary files a/tests/snapshots/stax/test_swap_exact_eth_for_token/00001.png and /dev/null differ
diff --git a/tests/snapshots/stax/test_swap_exact_eth_for_token/00002.png b/tests/snapshots/stax/test_swap_exact_eth_for_token/00002.png
deleted file mode 100644
index b7c3410e..00000000
Binary files a/tests/snapshots/stax/test_swap_exact_eth_for_token/00002.png and /dev/null differ
diff --git a/tests/snapshots/stax/test_swap_exact_eth_for_token/00003.png b/tests/snapshots/stax/test_swap_exact_eth_for_token/00003.png
deleted file mode 100644
index f4ec144e..00000000
Binary files a/tests/snapshots/stax/test_swap_exact_eth_for_token/00003.png and /dev/null differ
diff --git a/tests/snapshots/stax/test_swap_exact_eth_for_token/00004.png b/tests/snapshots/stax/test_swap_exact_eth_for_token/00004.png
deleted file mode 100644
index cd2f5275..00000000
Binary files a/tests/snapshots/stax/test_swap_exact_eth_for_token/00004.png and /dev/null differ
diff --git a/tests/snapshots/stax/test_swap_exact_eth_for_token/00005.png b/tests/snapshots/stax/test_swap_exact_eth_for_token/00005.png
deleted file mode 100644
index b1ff1b3a..00000000
Binary files a/tests/snapshots/stax/test_swap_exact_eth_for_token/00005.png and /dev/null differ
diff --git a/tests/test_swap.py b/tests/test_swap.py
deleted file mode 100644
index 059d2e89..00000000
--- a/tests/test_swap.py
+++ /dev/null
@@ -1,75 +0,0 @@
-from pathlib import Path
-import json
-import os
-
-import datetime
-
-from web3 import Web3
-from eth_typing import ChainId
-
-from ledger_app_clients.ethereum.client import EthAppClient, StatusWord
-from ledger_app_clients.ethereum.utils import get_selector_from_data
-from ragger.navigator import NavInsID
-
-from .utils import get_appname_from_makefile
-
-
-ROOT_SCREENSHOT_PATH = Path(__file__).parent
-ABIS_FOLDER = "%s/abis" % (os.path.dirname(__file__))
-
-PLUGIN_NAME = get_appname_from_makefile()
-
-with open("%s/0x000102030405060708090a0b0c0d0e0f10111213.abi.json" % (ABIS_FOLDER)) as file:
- contract = Web3().eth.contract(
- abi=json.load(file),
- # Get address from filename
- address=bytes.fromhex(os.path.basename(file.name).split(".")[0].split("x")[-1])
- )
-
-
-# EDIT THIS: build your own test
-def test_swap_exact_eth_for_token(backend, firmware, navigator, test_name):
- client = EthAppClient(backend)
-
- data = contract.encodeABI("swapExactETHForTokens", [
- Web3.to_wei(28.5, "ether"),
- [
- bytes.fromhex("C02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"),
- bytes.fromhex("6B3595068778DD592e39A122f4f5a5cF09C90fE2")
- ],
- bytes.fromhex("d8dA6BF26964aF9D7eEd9e03E53415D37aA96045"),
- int(datetime.datetime(2023, 12, 25, 0, 0).timestamp())
- ])
-
- # first setup the external plugin
- with client.set_external_plugin(PLUGIN_NAME,
- contract.address,
- # Extract function selector from the encoded data
- get_selector_from_data(data)):
- pass
-
- # send the transaction
- with client.sign("m/44'/60'/1'/0/0", {
- "nonce": 20,
- "maxFeePerGas": Web3.to_wei(145, "gwei"),
- "maxPriorityFeePerGas": Web3.to_wei(1.5, "gwei"),
- "gas": 173290,
- "to": contract.address,
- "value": Web3.to_wei(0.1, "ether"),
- "chainId": ChainId.ETH,
- "data": data
- }):
- # Validate the on-screen request by performing the navigation appropriate for this device
- if firmware.device.startswith("nano"):
- navigator.navigate_until_text_and_compare(NavInsID.RIGHT_CLICK,
- [NavInsID.BOTH_CLICK],
- "Accept",
- ROOT_SCREENSHOT_PATH,
- test_name)
- else:
- navigator.navigate_until_text_and_compare(NavInsID.USE_CASE_REVIEW_TAP,
- [NavInsID.USE_CASE_REVIEW_CONFIRM,
- NavInsID.USE_CASE_STATUS_DISMISS],
- "Hold to sign",
- ROOT_SCREENSHOT_PATH,
- test_name)
diff --git a/tests/utils.py b/tests/utils.py
index de202329..b8a90577 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -1,5 +1,14 @@
import os
import re
+import json
+from pathlib import Path
+
+from web3 import Web3
+from eth_typing import ChainId
+
+from ledger_app_clients.ethereum.client import EthAppClient
+from ledger_app_clients.ethereum.utils import get_selector_from_data
+from ragger.navigator import NavInsID
from pathlib import Path
from typing import Optional
@@ -12,6 +21,9 @@
default_strip_parameter = " \t\n\r\x0b\x0c"
+ROOT_SCREENSHOT_PATH = Path(__file__).parent
+ABIS_FOLDER = "%s/abis" % (os.path.dirname(__file__))
+
def get_appname_from_makefile() -> str:
'''
Parse the app Makefile to automatically get the APPNAME value
@@ -27,3 +39,51 @@ def get_appname_from_makefile() -> str:
raise AssertionError("Unable to find APPNAME in the Makefile")
return APPNAME
+
+PLUGIN_NAME = get_appname_from_makefile()
+
+def load_contract(address, abi_file):
+ with open("%s/%s.abi.json" % (ABIS_FOLDER, abi_file)) as file:
+ return Web3().eth.contract(
+ abi=json.load(file),
+ # Get address from filename
+ address=bytes.fromhex(
+ address
+ )
+ )
+
+def run_test(contract, data, backend, firmware, navigator, test_name, value=0, gas=300000):
+ client = EthAppClient(backend)
+
+ # first setup the external plugin
+ with client.set_external_plugin(PLUGIN_NAME,
+ contract.address,
+ # Extract function selector from the encoded data
+ get_selector_from_data(data)):
+ pass
+
+ # send the transaction
+ with client.sign("m/44'/60'/1'/0/0", {
+ "nonce": 20,
+ "maxFeePerGas": Web3.to_wei(145, "gwei"),
+ "maxPriorityFeePerGas": Web3.to_wei(1.5, "gwei"),
+ "gas": gas,
+ "to": contract.address,
+ "value": value,
+ "chainId": ChainId.ETH,
+ "data": data
+ }):
+ # Validate the on-screen request by performing the navigation appropriate for this device
+ if firmware.device.startswith("nano"):
+ navigator.navigate_until_text_and_compare(NavInsID.RIGHT_CLICK,
+ [NavInsID.BOTH_CLICK],
+ "Accept",
+ ROOT_SCREENSHOT_PATH,
+ test_name)
+ else:
+ navigator.navigate_until_text_and_compare(NavInsID.USE_CASE_REVIEW_TAP,
+ [NavInsID.USE_CASE_REVIEW_CONFIRM,
+ NavInsID.USE_CASE_STATUS_DISMISS],
+ "Hold to sign",
+ ROOT_SCREENSHOT_PATH,
+ test_name)
\ No newline at end of file