From c0bce2e868368c76a6420ec63369ba6c407769e6 Mon Sep 17 00:00:00 2001 From: Steven Lin Date: Mon, 20 Jan 2025 15:43:53 +0100 Subject: [PATCH 1/5] feat: added mint method to be tested --- src/handle_finalize.c | 3 +++ src/handle_init_contract.c | 3 +++ src/handle_provide_parameter.c | 26 +++++++++++++++++++ src/handle_query_contract_id.c | 4 +++ src/handle_query_contract_ui.c | 47 ++++++++++++++++++++++++++++++++-- src/plugin.h | 5 +++- 6 files changed, 85 insertions(+), 3 deletions(-) diff --git a/src/handle_finalize.c b/src/handle_finalize.c index 039c4a59..0278a2f9 100644 --- a/src/handle_finalize.c +++ b/src/handle_finalize.c @@ -10,6 +10,9 @@ void handle_finalize(ethPluginFinalize_t *msg) { case DELEGATE: msg->numScreens = 1; break; + case MINT: + msg->numScreens = 3; + break; default: PRINTF("Selector index: %d not supported\n", context->selectorIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; diff --git a/src/handle_init_contract.c b/src/handle_init_contract.c index cc1523ea..d7107d5d 100644 --- a/src/handle_init_contract.c +++ b/src/handle_init_contract.c @@ -45,6 +45,9 @@ void handle_init_contract(ethPluginInitContract_t *msg) { case DELEGATE: context->next_param = BENEFICIARY; break; + case MINT: + context->next_param = ADDRESS; + break; // Keep this default: PRINTF("Missing selectorIndex: %d\n", context->selectorIndex); diff --git a/src/handle_provide_parameter.c b/src/handle_provide_parameter.c index d635d72c..1411d128 100644 --- a/src/handle_provide_parameter.c +++ b/src/handle_provide_parameter.c @@ -30,6 +30,29 @@ static void handle_create_reward_vault(ethPluginProvideParameter_t *msg, context } } +static void handle_mint(ethPluginProvideParameter_t *msg, context_t *context) { + switch (context->next_param) { + case ADDRESS: + copy_address(context->address, msg->parameter, sizeof(context->address)); + context->next_param = MIN_AMOUNT_RECEIVED; + break; + case MIN_AMOUNT_RECEIVED: + copy_parameter(context->amount_received, msg->parameter, sizeof(context->amount_received)); + context->next_param = BENEFICIARY; + break; + case BENEFICIARY: + copy_address(context->beneficiary, msg->parameter, sizeof(context->beneficiary)); + context->next_param = NONE; + break; + case NONE: + break; + default: + PRINTF("Param not supported: %d\n", context->next_param); + 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 @@ -50,6 +73,9 @@ void handle_provide_parameter(ethPluginProvideParameter_t *msg) { case DELEGATE: handle_delegate(msg, context); break; + case MINT: + handle_mint(msg, context); + break; default: PRINTF("Selector Index not supported: %d\n", context->selectorIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; diff --git a/src/handle_query_contract_id.c b/src/handle_query_contract_id.c index f5608c9b..b6e47bd3 100644 --- a/src/handle_query_contract_id.c +++ b/src/handle_query_contract_id.c @@ -19,6 +19,10 @@ void handle_query_contract_id(ethQueryContractID_t *msg) { strlcpy(msg->version, "Delegate", msg->versionLength); msg->result = ETH_PLUGIN_RESULT_OK; break; + case MINT: + strlcpy(msg->version, "Mint", msg->versionLength); + msg->result = ETH_PLUGIN_RESULT_OK; + break; default: PRINTF("Selector index: %d not supported\n", context->selectorIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; diff --git a/src/handle_query_contract_ui.c b/src/handle_query_contract_ui.c index 2617ded4..9172a248 100644 --- a/src/handle_query_contract_ui.c +++ b/src/handle_query_contract_ui.c @@ -23,7 +23,7 @@ // 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) { + static bool set_receive_ui(ethQueryContractUI_t *msg, const context_t *context) { strlcpy(msg->title, "Receive Min.", msg->titleLength); uint8_t decimals = context->decimals; @@ -41,7 +41,7 @@ ticker, msg->msg, msg->msgLength); -} */ +} // Set UI for "Beneficiary" screen. static bool set_beneficiary_ui(ethQueryContractUI_t *msg, context_t *context) { @@ -52,6 +52,9 @@ static bool set_beneficiary_ui(ethQueryContractUI_t *msg, context_t *context) { case DELEGATE: strlcpy(msg->title, "Beneficiary", msg->titleLength); break; + case MINT: + strlcpy(msg->title, "To", msg->titleLength); + break; default: PRINTF("Received an invalid selectorIndex\n"); break; @@ -73,6 +76,30 @@ static bool set_beneficiary_ui(ethQueryContractUI_t *msg, context_t *context) { chainid); } +static bool set_address_ui(ethQueryContractUI_t *msg, context_t *context) { + switch (context->selectorIndex) { + case MINT: + strlcpy(msg->title, "Core", msg->titleLength); + break; + default: + PRINTF("Received an invalid selectorIndex\n"); + break; + } + + // 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; + + return getEthAddressStringFromBinary( + context->address, + msg->msg + 2, // +2 here because we've already prefixed with '0x'. + chainid); +} + void handle_query_contract_ui(ethQueryContractUI_t *msg) { context_t *context = (context_t *) msg->pluginContext; bool ret = false; @@ -97,6 +124,22 @@ void handle_query_contract_ui(ethQueryContractUI_t *msg) { break; } break; + case MINT: + switch (msg->screenIndex) { + case 0: + ret = set_address_ui(msg, context); + break; + case 1: + ret = set_min_amount_received_ui(msg, context); + break; + case 2: + ret = set_beneficiary_ui(msg, context); + break; + default: + PRINTF("Received an invalid screenIndex\n"); + break; + } + break; default: PRINTF("Received an invalid selectorIndex\n"); break; diff --git a/src/plugin.h b/src/plugin.h index c9e80238..a9c1b3cb 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -27,7 +27,8 @@ // - a map named SELECTORS associating each NAME with it's value #define SELECTORS_LIST(X) \ X(CREATE_REWARD_VAULT, 0x577ee5c7) \ - X(DELEGATE, 0x5c19a95c) + X(DELEGATE, 0x5c19a95c) \ + X(MINT, 0x0d4d1513) // Xmacro helpers to define the enum and map // Do not modify ! @@ -51,6 +52,7 @@ typedef enum { MIN_AMOUNT_RECEIVED = 0, TOKEN_RECEIVED, BENEFICIARY, + ADDRESS, PATH_OFFSET, PATH_LENGTH, UNEXPECTED_PARAMETER, @@ -64,6 +66,7 @@ typedef struct context_s { // For display. uint8_t amount_received[INT256_LENGTH]; uint8_t beneficiary[ADDRESS_LENGTH]; + uint8_t address[ADDRESS_LENGTH]; uint8_t token_received[ADDRESS_LENGTH]; char ticker[MAX_TICKER_LEN]; uint8_t decimals; From 5445fd043ce4c83d8841374486ab759d9ae71b7c Mon Sep 17 00:00:00 2001 From: Steven Lin Date: Tue, 21 Jan 2025 12:40:57 +0100 Subject: [PATCH 2/5] feat: unstable method mint and test --- src/handle_finalize.c | 2 +- src/handle_provide_parameter.c | 3 + src/handle_query_contract_ui.c | 8 +- src/plugin.h | 4 +- ...9d9de1e5cf07cd135d059d5a5ed484388.abi.json | 1973 +++++++++++++++++ tests/test_mint.py | 73 + 6 files changed, 2055 insertions(+), 8 deletions(-) create mode 100644 tests/abis/0xb05b8099d9de1e5cf07cd135d059d5a5ed484388.abi.json create mode 100644 tests/test_mint.py diff --git a/src/handle_finalize.c b/src/handle_finalize.c index 0278a2f9..7ab05eb3 100644 --- a/src/handle_finalize.c +++ b/src/handle_finalize.c @@ -11,7 +11,7 @@ void handle_finalize(ethPluginFinalize_t *msg) { msg->numScreens = 1; break; case MINT: - msg->numScreens = 3; + msg->numScreens = 4; break; default: PRINTF("Selector index: %d not supported\n", context->selectorIndex); diff --git a/src/handle_provide_parameter.c b/src/handle_provide_parameter.c index 1411d128..c3564b9a 100644 --- a/src/handle_provide_parameter.c +++ b/src/handle_provide_parameter.c @@ -42,6 +42,9 @@ static void handle_mint(ethPluginProvideParameter_t *msg, context_t *context) { break; case BENEFICIARY: copy_address(context->beneficiary, msg->parameter, sizeof(context->beneficiary)); + context->next_param = BOOLEAN; + break; + case BOOLEAN: context->next_param = NONE; break; case NONE: diff --git a/src/handle_query_contract_ui.c b/src/handle_query_contract_ui.c index 9172a248..a17e7a3b 100644 --- a/src/handle_query_contract_ui.c +++ b/src/handle_query_contract_ui.c @@ -24,7 +24,7 @@ // 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); + strlcpy(msg->title, "Amount", msg->titleLength); uint8_t decimals = context->decimals; const char *ticker = context->ticker; @@ -50,10 +50,8 @@ static bool set_beneficiary_ui(ethQueryContractUI_t *msg, context_t *context) { strlcpy(msg->title, "Address", msg->titleLength); break; case DELEGATE: - strlcpy(msg->title, "Beneficiary", msg->titleLength); - break; case MINT: - strlcpy(msg->title, "To", msg->titleLength); + strlcpy(msg->title, "Beneficiary", msg->titleLength); break; default: PRINTF("Received an invalid selectorIndex\n"); @@ -79,7 +77,7 @@ static bool set_beneficiary_ui(ethQueryContractUI_t *msg, context_t *context) { static bool set_address_ui(ethQueryContractUI_t *msg, context_t *context) { switch (context->selectorIndex) { case MINT: - strlcpy(msg->title, "Core", msg->titleLength); + strlcpy(msg->title, "Address", msg->titleLength); break; default: PRINTF("Received an invalid selectorIndex\n"); diff --git a/src/plugin.h b/src/plugin.h index a9c1b3cb..6a996bef 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -53,6 +53,7 @@ typedef enum { TOKEN_RECEIVED, BENEFICIARY, ADDRESS, + BOOLEAN, PATH_OFFSET, PATH_LENGTH, UNEXPECTED_PARAMETER, @@ -71,13 +72,12 @@ typedef struct context_s { char ticker[MAX_TICKER_LEN]; uint8_t decimals; uint8_t token_found; - + bool boolean; // 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; } context_t; diff --git a/tests/abis/0xb05b8099d9de1e5cf07cd135d059d5a5ed484388.abi.json b/tests/abis/0xb05b8099d9de1e5cf07cd135d059d5a5ed484388.abi.json new file mode 100644 index 00000000..cd79aa9f --- /dev/null +++ b/tests/abis/0xb05b8099d9de1e5cf07cd135d059d5a5ed484388.abi.json @@ -0,0 +1,1973 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AccessControlBadConfirmation", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "neededRole", + "type": "bytes32" + } + ], + "name": "AccessControlUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "AddressEmptyCode", + "type": "error" + }, + { + "inputs": [], + "name": "AmountOutOfRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "AssetIsBadCollateral", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "AssetIsNotBadCollateral", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "AssetNotRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "ERC1967InvalidImplementation", + "type": "error" + }, + { + "inputs": [], + "name": "ERC1967NonPayable", + "type": "error" + }, + { + "inputs": [], + "name": "EnforcedPause", + "type": "error" + }, + { + "inputs": [], + "name": "ExceedGlobalCap", + "type": "error" + }, + { + "inputs": [], + "name": "ExceedRelativeCap", + "type": "error" + }, + { + "inputs": [], + "name": "ExpectedPause", + "type": "error" + }, + { + "inputs": [], + "name": "FailedCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "InsufficientAssets", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InsufficientRecapitalizeAmount", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "LiquidationDisabled", + "type": "error" + }, + { + "inputs": [], + "name": "LiquidationWithReferenceCollateral", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedOwner", + "type": "address" + } + ], + "name": "MismatchedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "NotFactory", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "NotPegged", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "OverOneHundredPercentRate", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "RecapitalizeNotNeeded", + "type": "error" + }, + { + "inputs": [], + "name": "UUPSUnauthorizedCallContext", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "slot", + "type": "bytes32" + } + ], + "name": "UUPSUnsupportedProxiableUUID", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedCaller", + "type": "address" + } + ], + "name": "UnauthorizedCaller", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "UnderNinetyEightPercentRate", + "type": "error" + }, + { + "inputs": [], + "name": "UnexpectedBasketModeStatus", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "VaultAlreadyRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "VaultPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAmount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "ZeroWeight", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "forced", + "type": "bool" + } + ], + "name": "BasketModeForced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "isBadCollateral", + "type": "bool" + } + ], + "name": "CollateralAssetStatusSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "name": "CollectedFeeWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lower", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "upper", + "type": "uint256" + } + ], + "name": "DepegOffsetsSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "feeReceiver", + "type": "address" + } + ], + "name": "FeeReceiverSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "globalCap", + "type": "uint256" + } + ], + "name": "GlobalCapSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assetAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "HoneyMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assetAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "name": "HoneyRedeemed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "badAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "goodAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "Liquidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "LiquidationRateSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "LiquidationStatusSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxFeedDelay", + "type": "uint256" + } + ], + "name": "MaxFeedDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "minShareAmount", + "type": "uint256" + } + ], + "name": "MinSharesToRecapitalizeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "MintRateSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "POLFeeCollectorFeeRateSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "polFeeCollector", + "type": "address" + } + ], + "name": "POLFeeCollectorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "name": "PriceFeedChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "target", + "type": "uint256" + } + ], + "name": "RecapitalizeBalanceThresholdSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "Recapitalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "RedeemRateSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "old", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "ReferenceCollateralSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "relativeCap", + "type": "uint256" + } + ], + "name": "RelativeCapSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "VaultCreated", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MANAGER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "collectedFees", + "outputs": [ + { + "internalType": "uint256", + "name": "collectedFee", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "createVault", + "outputs": [ + { + "internalType": "contract ERC4626", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "feeReceiver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "forcedBasketMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getWeights", + "outputs": [ + { + "internalType": "uint256[]", + "name": "w", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalCap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "honey", + "outputs": [ + { + "internalType": "contract Honey", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_governance", + "type": "address" + }, + { + "internalType": "address", + "name": "_honey", + "type": "address" + }, + { + "internalType": "address", + "name": "_polFeeCollector", + "type": "address" + }, + { + "internalType": "address", + "name": "_feeReceiver", + "type": "address" + }, + { + "internalType": "address", + "name": "_priceOracle", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "isBadCollateralAsset", + "outputs": [ + { + "internalType": "bool", + "name": "badCollateral", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "isMint", + "type": "bool" + } + ], + "name": "isBasketModeEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "basketMode", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "isPegged", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "badCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "goodCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "goodAmount", + "type": "uint256" + } + ], + "name": "liquidate", + "outputs": [ + { + "internalType": "uint256", + "name": "badAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "liquidationEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minSharesToRecapitalize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "bool", + "name": "expectBasketMode", + "type": "bool" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "honeyToMint", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "mintRates", + "outputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numRegisteredAssets", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "pauseVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "polFeeCollector", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "polFeeCollectorFeeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "priceFeedMaxDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "priceOracle", + "outputs": [ + { + "internalType": "contract IPriceOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "recapitalize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "recapitalizeBalanceThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "targetBalance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "honeyAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "bool", + "name": "expectBasketMode", + "type": "bool" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256[]", + "name": "redeemed", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "redeemRates", + "outputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "referenceCollateral", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "registeredAssets", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "relativeCap", + "outputs": [ + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "callerConfirmation", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "bool", + "name": "_isBadCollateral", + "type": "bool" + } + ], + "name": "setCollateralAssetStatus", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "lowerOffset", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "upperOffset", + "type": "uint256" + } + ], + "name": "setDepegOffsets", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_feeReceiver", + "type": "address" + } + ], + "name": "setFeeReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "forced", + "type": "bool" + } + ], + "name": "setForcedBasketMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + } + ], + "name": "setGlobalCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "setLiquidationEnabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "extraRate", + "type": "uint256" + } + ], + "name": "setLiquidationRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxTolerance", + "type": "uint256" + } + ], + "name": "setMaxFeedDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "minSharesAmount", + "type": "uint256" + } + ], + "name": "setMinSharesToRecapitalize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mintRate", + "type": "uint256" + } + ], + "name": "setMintRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_polFeeCollector", + "type": "address" + } + ], + "name": "setPOLFeeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_polFeeCollectorFeeRate", + "type": "uint256" + } + ], + "name": "setPOLFeeCollectorFeeRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "target", + "type": "uint256" + } + ], + "name": "setRecapitalizeBalanceThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemRate", + "type": "uint256" + } + ], + "name": "setRedeemRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "setReferenceCollateral", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + } + ], + "name": "setRelativeCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "unpauseVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "vaults", + "outputs": [ + { + "internalType": "contract CollateralVault", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "withdrawAllFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "withdrawFee", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ] \ No newline at end of file diff --git a/tests/test_mint.py b/tests/test_mint.py new file mode 100644 index 00000000..46731298 --- /dev/null +++ b/tests/test_mint.py @@ -0,0 +1,73 @@ +from pathlib import Path +import json +import os + +from web3 import Web3 +from eth_typing import ChainId + +from ledger_app_clients.ethereum.client import EthAppClient +import ledger_app_clients.ethereum.response_parser as ResponseParser +from ledger_app_clients.ethereum.utils import get_selector_from_data, recover_transaction +from ragger.navigator import NavInsID + +from .utils import get_appname_from_makefile, DERIVATION_PATH + + +ROOT_SCREENSHOT_PATH = Path(__file__).parent +ABIS_FOLDER = "%s/abis" % (os.path.dirname(__file__)) + +PLUGIN_NAME = get_appname_from_makefile() + + +with open("%s/0x289274787baf083c15a45a174b7a8e44f0720660.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_delegate(backend, firmware, navigator, test_name, wallet_addr): + client = EthAppClient(backend) + + data = contract.encode_abi("delegate", [ + bytes.fromhex("0be5debae3edfedd42f420247847d2a6f0fa598f") + ]) + + # first setup the external plugin + client.set_external_plugin(PLUGIN_NAME, + contract.address, + # Extract function selector from the encoded data + get_selector_from_data(data)) + + tx_params = { + "nonce": 20, + "maxFeePerGas": Web3.to_wei(145, "gwei"), + "maxPriorityFeePerGas": Web3.to_wei(1.5, "gwei"), + "gas": 173290, + "to": contract.address, + "value": 0, + "chainId": ChainId.ETH, + "data": data + } + # send the transaction + with client.sign(DERIVATION_PATH, tx_params): + # Validate the on-screen request by performing the navigation appropriate for this device + if firmware.is_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.SWIPE_CENTER_TO_LEFT, + [NavInsID.USE_CASE_REVIEW_CONFIRM, + NavInsID.USE_CASE_STATUS_DISMISS], + "Hold to sign", + ROOT_SCREENSHOT_PATH, + test_name) + # verify signature + vrs = ResponseParser.signature(client.response().data) + addr = recover_transaction(tx_params, vrs) + assert addr == wallet_addr.get() From af0c64a9a1578c37eea51b6eb187bc7908a30153 Mon Sep 17 00:00:00 2001 From: Steven Lin Date: Tue, 21 Jan 2025 16:11:26 +0100 Subject: [PATCH 3/5] test: added test snapshot for mint --- src/handle_provide_parameter.c | 24 +++++--------------- src/handle_query_contract_ui.c | 25 ++++++++++++++++++++- src/plugin.h | 4 ++-- tests/snapshots/flex/test_mint/00000.png | Bin 0 -> 11188 bytes tests/snapshots/flex/test_mint/00001.png | Bin 0 -> 23158 bytes tests/snapshots/flex/test_mint/00002.png | Bin 0 -> 10225 bytes tests/snapshots/flex/test_mint/00003.png | Bin 0 -> 11617 bytes tests/snapshots/flex/test_mint/00004.png | Bin 0 -> 6357 bytes tests/snapshots/flex/test_mint/00005.png | Bin 0 -> 12445 bytes tests/snapshots/nanosp/test_mint/00000.png | Bin 0 -> 414 bytes tests/snapshots/nanosp/test_mint/00001.png | Bin 0 -> 361 bytes tests/snapshots/nanosp/test_mint/00002.png | Bin 0 -> 752 bytes tests/snapshots/nanosp/test_mint/00003.png | Bin 0 -> 371 bytes tests/snapshots/nanosp/test_mint/00004.png | Bin 0 -> 815 bytes tests/snapshots/nanosp/test_mint/00005.png | Bin 0 -> 426 bytes tests/snapshots/nanosp/test_mint/00006.png | Bin 0 -> 457 bytes tests/snapshots/nanosp/test_mint/00007.png | Bin 0 -> 472 bytes tests/snapshots/nanosp/test_mint/00008.png | Bin 0 -> 382 bytes tests/snapshots/nanox/test_mint/00000.png | Bin 0 -> 414 bytes tests/snapshots/nanox/test_mint/00001.png | Bin 0 -> 361 bytes tests/snapshots/nanox/test_mint/00002.png | Bin 0 -> 752 bytes tests/snapshots/nanox/test_mint/00003.png | Bin 0 -> 371 bytes tests/snapshots/nanox/test_mint/00004.png | Bin 0 -> 815 bytes tests/snapshots/nanox/test_mint/00005.png | Bin 0 -> 426 bytes tests/snapshots/nanox/test_mint/00006.png | Bin 0 -> 457 bytes tests/snapshots/nanox/test_mint/00007.png | Bin 0 -> 472 bytes tests/snapshots/nanox/test_mint/00008.png | Bin 0 -> 382 bytes tests/snapshots/stax/test_mint/00000.png | Bin 0 -> 10372 bytes tests/snapshots/stax/test_mint/00001.png | Bin 0 -> 22436 bytes tests/snapshots/stax/test_mint/00002.png | Bin 0 -> 6928 bytes tests/snapshots/stax/test_mint/00003.png | Bin 0 -> 10761 bytes tests/snapshots/stax/test_mint/00004.png | Bin 0 -> 6218 bytes tests/snapshots/stax/test_mint/00005.png | Bin 0 -> 10991 bytes tests/test_mint.py | 11 +++++---- 34 files changed, 38 insertions(+), 26 deletions(-) create mode 100644 tests/snapshots/flex/test_mint/00000.png create mode 100644 tests/snapshots/flex/test_mint/00001.png create mode 100644 tests/snapshots/flex/test_mint/00002.png create mode 100644 tests/snapshots/flex/test_mint/00003.png create mode 100644 tests/snapshots/flex/test_mint/00004.png create mode 100644 tests/snapshots/flex/test_mint/00005.png create mode 100644 tests/snapshots/nanosp/test_mint/00000.png create mode 100644 tests/snapshots/nanosp/test_mint/00001.png create mode 100644 tests/snapshots/nanosp/test_mint/00002.png create mode 100644 tests/snapshots/nanosp/test_mint/00003.png create mode 100644 tests/snapshots/nanosp/test_mint/00004.png create mode 100644 tests/snapshots/nanosp/test_mint/00005.png create mode 100644 tests/snapshots/nanosp/test_mint/00006.png create mode 100644 tests/snapshots/nanosp/test_mint/00007.png create mode 100644 tests/snapshots/nanosp/test_mint/00008.png create mode 100644 tests/snapshots/nanox/test_mint/00000.png create mode 100644 tests/snapshots/nanox/test_mint/00001.png create mode 100644 tests/snapshots/nanox/test_mint/00002.png create mode 100644 tests/snapshots/nanox/test_mint/00003.png create mode 100644 tests/snapshots/nanox/test_mint/00004.png create mode 100644 tests/snapshots/nanox/test_mint/00005.png create mode 100644 tests/snapshots/nanox/test_mint/00006.png create mode 100644 tests/snapshots/nanox/test_mint/00007.png create mode 100644 tests/snapshots/nanox/test_mint/00008.png create mode 100644 tests/snapshots/stax/test_mint/00000.png create mode 100644 tests/snapshots/stax/test_mint/00001.png create mode 100644 tests/snapshots/stax/test_mint/00002.png create mode 100644 tests/snapshots/stax/test_mint/00003.png create mode 100644 tests/snapshots/stax/test_mint/00004.png create mode 100644 tests/snapshots/stax/test_mint/00005.png diff --git a/src/handle_provide_parameter.c b/src/handle_provide_parameter.c index c3564b9a..461010a1 100644 --- a/src/handle_provide_parameter.c +++ b/src/handle_provide_parameter.c @@ -1,21 +1,6 @@ #include "plugin.h" -static void handle_delegate(ethPluginProvideParameter_t *msg, context_t *context) { - switch (context->next_param) { - case BENEFICIARY: - copy_address(context->beneficiary, msg->parameter, sizeof(context->beneficiary)); - context->next_param = NONE; - break; - case NONE: - break; - default: - PRINTF("Param not supported: %d\n", context->next_param); - msg->result = ETH_PLUGIN_RESULT_ERROR; - break; - } -} - -static void handle_create_reward_vault(ethPluginProvideParameter_t *msg, context_t *context) { +static void handle_beneficiary(ethPluginProvideParameter_t *msg, context_t *context) { switch (context->next_param) { case BENEFICIARY: copy_address(context->beneficiary, msg->parameter, sizeof(context->beneficiary)); @@ -45,6 +30,9 @@ static void handle_mint(ethPluginProvideParameter_t *msg, context_t *context) { context->next_param = BOOLEAN; break; case BOOLEAN: + if (!U2BE_from_parameter(msg->parameter, &context->boolean)) { + msg->result = ETH_PLUGIN_RESULT_ERROR; + } context->next_param = NONE; break; case NONE: @@ -71,10 +59,8 @@ void handle_provide_parameter(ethPluginProvideParameter_t *msg) { // EDIT THIS: adapt the cases and the names of the functions. switch (context->selectorIndex) { case CREATE_REWARD_VAULT: - handle_create_reward_vault(msg, context); - break; case DELEGATE: - handle_delegate(msg, context); + handle_beneficiary(msg, context); break; case MINT: handle_mint(msg, context); diff --git a/src/handle_query_contract_ui.c b/src/handle_query_contract_ui.c index a17e7a3b..c2263fec 100644 --- a/src/handle_query_contract_ui.c +++ b/src/handle_query_contract_ui.c @@ -98,6 +98,26 @@ static bool set_address_ui(ethQueryContractUI_t *msg, context_t *context) { chainid); } +static bool set_boolean_ui(ethQueryContractUI_t *msg, context_t *context) { + switch (context->selectorIndex) { + case MINT: + strlcpy(msg->title, "Basket Mode", msg->titleLength); + break; + default: + PRINTF("Received an invalid selectorIndex\n"); + break; + } + + if (context->boolean == 0) { + snprintf(msg->msg, msg->msgLength, "%s", "False"); + return true; + } else { + snprintf(msg->msg, msg->msgLength, "%s", "True"); + return true; + } + return false; +} + void handle_query_contract_ui(ethQueryContractUI_t *msg) { context_t *context = (context_t *) msg->pluginContext; bool ret = false; @@ -128,11 +148,14 @@ void handle_query_contract_ui(ethQueryContractUI_t *msg) { ret = set_address_ui(msg, context); break; case 1: - ret = set_min_amount_received_ui(msg, context); + ret = set_receive_ui(msg, context); break; case 2: ret = set_beneficiary_ui(msg, context); break; + case 3: + ret = set_boolean_ui(msg, context); + break; default: PRINTF("Received an invalid screenIndex\n"); break; diff --git a/src/plugin.h b/src/plugin.h index 6a996bef..981ad280 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -28,7 +28,7 @@ #define SELECTORS_LIST(X) \ X(CREATE_REWARD_VAULT, 0x577ee5c7) \ X(DELEGATE, 0x5c19a95c) \ - X(MINT, 0x0d4d1513) + X(MINT, 0x328ebaf7) // Xmacro helpers to define the enum and map // Do not modify ! @@ -72,7 +72,7 @@ typedef struct context_s { char ticker[MAX_TICKER_LEN]; uint8_t decimals; uint8_t token_found; - bool boolean; + uint16_t boolean; // 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. diff --git a/tests/snapshots/flex/test_mint/00000.png b/tests/snapshots/flex/test_mint/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..0211c7b10a8719dd88b69825704a0bfc1b4a2729 GIT binary patch literal 11188 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/flex/test_mint/00001.png b/tests/snapshots/flex/test_mint/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..acafac2db014653ed77f59ab2e7560ac57feadd2 GIT binary patch literal 23158 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/flex/test_mint/00003.png b/tests/snapshots/flex/test_mint/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..358c869b9a6e27fc675add77eead04701142ebe8 GIT binary patch literal 11617 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 ByZ8VA literal 0 HcmV?d00001 diff --git a/tests/snapshots/flex/test_mint/00004.png b/tests/snapshots/flex/test_mint/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..be51a9d5595cf5ea25f8f90b684306d30395f329 GIT binary patch literal 6357 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 UPsf12D=dzNgdJ`>c;@PV1L0-a-2eap literal 0 HcmV?d00001 diff --git a/tests/snapshots/flex/test_mint/00005.png b/tests/snapshots/flex/test_mint/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..dabe7afea35d5f2c73b04e4e20993035bd748cb3 GIT binary patch literal 12445 zcmeHuc|4Tw*S{^YE0QfKD#=-W#|yk5WG{4@7;->&OE*EQ$7&pGdNytrp{o0Cn5jgF3v zQ(y0vDIFdC3>_VV3@9z1gfEDW&Sjra z%1%eOq^rdkValXPC#my4da>DIe3FiC6;u0b^|A?Hdw~S`mKNiX``xqL)$2!s47C{V zy^+i4dE@P5OCv0tze>+JLz!$*KVv3bG43s^T*m57m$%UhWkr?gn#xI*91dr7DF)hg z$zR#yJQ##JQSCC>!p`s_idWs~$TM8U z_fldY`T^#}U>Uj6p!}T0g!B3IZRv{v{Ex3>M=<}s+4$VTTb14VrkNm+?CFVtJs)Jf ziy{!}9Dl~(O*38IA-ct;p#c8i%iz!D>vT%%?xhSfDMnm_tAAbGoaj1}Pya>t;Gfnt z#e{ZoaQ%yY#42=G>!>>&Wjm^b*oaj+T*CFYiy_wg^ffIYzZd%5A8C!J_rM}8C^~*S#~qnR0XRoPg}vOR)U*weRF$Z9R%{i+U%3JMDB8UsZk$+YfFv7?~`DqPd>e%W~% zI=sckxlbKyQDJ5~W@hHygi}eZIM92Nhb78$Xa*}9?*LV_pQ5tO1lkRwlU*jDs8g2t z$Espe=5Thd_NMCf~igyZbb^2}k0eG}6*y%=~epV*{aZIl8LKvu`5# z(xkaZ#;Hk#Fg2%JCTT8K=`KD;;n^y5?#GxS)g>|OJCzd=O5N%m4M}48^zM!ot#t{W zjlwl89V&{xbVHAvwcM=EvoqZg^BzFPx4(TchXlXf!zs=sJY)?0UM+EMZf!i#17}n_ z6;bknv9rrgk$*hK2gTW1wes!pw`(Nb?2?tuNu#0Jsz)c?4>kpTP>VT2iV@g~^2c=( z8-Xi*fzw;njskZux+Z)&CcQsbHd}ognm8AvG5xh|HnQ<6GH;kUXS&|7c~M{;1m&24 ziRG6G3K^JlSjya5Gl5J|$5Lz_HI+-Ly-I1etG?_KySquH!h9*yKvguBpQ!wTs+Ez1 zoFqc=M}D?8ehAjc6V|@`QT_|XMzra0$vmtZj=3F2npO(mkOq6pbH0D|XcUk+7uVZ( zJJxah8pVW%X=?|HdcvoZf%)vZQ7d(*;l?Sgb&8$=jmJ>*_@-mlm8&BAjtMPx)qYvq zZSBvi0oqu`M0(lUkO_K!|Jv(1(&%!Xe+WHJRpH5AQ^LaUU|FHG8)BuSebx`tfDve1 zOmqqo(_T;&PF{$d(kyO2qBcIb!nRZ>X`=M@bXo4 ziS1ppx8=WZb>6C@zS`U0zoQE*pii>(r>2Y59Zg4KT*bG30jC7ks7}~l^><5X!9)B{ ztb1RN7WE#Y+t5q7Ri&Ej;H@UYMY?2YRGRAj$(^Hvm;ICzarhIxRuYOa-MI9=cvPLV zaPE(tP>rNzldmtprbgR;P{U04aHPgzyX2Cx_L$F!!O&{WghI(gC!DD1SfH7ie##f? zMp&cI(?hAxb96ydeFb9t8eq0#IRm;vMc%43be=?Ct!ugPvk2z*96`AlJPK2r=E{lN zX!|7mG4X~l03$o!0oZ8*)th^EIiNOmy1jCBcX5j|2}}_46(LhYgnPO(0ZhHSn0xx> zg)q?8WK>yC1MHFVy@CoPwe7bAQBH^uWy? zwb-fl0XLc^INB?;?1cU8NFD&VPM+DPlNyN=+S?8*ob;RyM)uzY_Wp(IU+h9fuWW*~ z!DK?=m52JOAwYjmTDj}4=(_>=eyhe~+|8DM0rRr!cdcK~Y&`chbx;(zgl`*3?W6LA zRlMMOLD8*#GGGg6EP2+oJ|z=sP$-YQzN&w8#(PSm3#+uKV;K(-m_o-*TLv;Ck^qh2e zfb{_I#f9-mIt-1(Tp6n5MVFn?40RQFSqlz@jlVz9Z{(FZl=%tI5 z?O2`+hdkIYLCo+zt+{Fi521eeNauehzviinmATosr`_gnBNxtsAyQmuH;laf*gnw^%VZwVd>Gv&s@Z*=tmo6#3_NgiH8zK1kfL zVnlZ&CrS zid>S3c2)G%lC$n=;2eNF>wYq)o2N_JfHbM)VJUnkGlj3ZOP(VMTvnf3JtsAq^6;TS z=J4sq$A<1n8Qu@Me@RWfOT%3~%r%OOLFn&Y{gk~hpNei|pfk04^zxsl>LZ`%8;-g! zoj8Qm^x=Nw4(;wqdp?~eoJ``}@&cn>LPX5t?o0{&b#)*62bWvAhe3; zd4}%wlLQpIUt`@o)}G*st`kku6dF7x5{0Q)V@I|&E_%-5C^5a!ucQz0g_2l`Zc#L1 z8Fh8(FG>r`>aPbK1?;NF=GNTv z^hX2gCirx2aGy~W&o6i=5EE#7Qs+$3>b$;3rbZqXA{;>ci6#SI3hS$tR?b0uQ4#7{ zi>CkDiFoQmz~yMhev@Z0P+t)m zS}qB5XcUn6ST#N@yjCIFXi{jBR7Q9x0W7L7 z5QFUV?0M>JrSzoqm1LZNMeLCRX2dy<01l;ITQ=H$f3vDI7d_(ni^AT-R^cSyz(f1M zTq&@ofuFlM@-whn^=<*!U=a#TeGZIP&ru-JYe~L)Xd~fp_`s<|^^wh~zlMtUUUERI zN(<2=jtGkejs-nG^InWeF}>2~D^j5wS#bJr>G&}#L+FKN7XG-1?jLLPZx$EPw6XoA1(1mv#fJB7)>|PN8FM+HcM=qnYUuWCit~T$UmrAk@0Z zAVimTHlO}~!^Izvvqg-Rm;WqSfD`f>i(0D|A{AUG`RNpSh6wKtW6RAUsj-#7o4TbQ ztvJ%WZ!XbMK%?~toi~#r$gS>*GTo4GiQ}9x0mHW|!6K`0?1Sou=It=`rEktdymt^w9R~!Y+YG6ZL#$Qx%igUwe1-tE?c?4dSCM=^Zpk zHt^q!OH!RP$u8M?{?D9B;@sfg58P`kQ8Tm*M{>1a5<4nt z3*Sca#uV6I);~@Q%_WA1hr`85KU74gmlyn&4X$G;TQoTFA%ek1HlsVPdfX&M0%izf=nmg zWpQ#iwGrp-CTLVTI{W0ex=+Ky%@cm@cACK_j`PQ!=h{dyIlWG6U7L>>U6xoD(MkSV zgm}#nPrC1R`kd5y_)vAAq3A-6iaIvF(A{Bdz5MFn8(bkN z@G5>L=iak@i!_%Ysxr-{-8chNJlyA+pr7JgH_;o8;}rAAo@|{B>+m_*C6G$oA(N|j zVNJLO;p|Gv&eT|d8aXld>)Qh%r^KG3>jt^RbNVAHsQ|VrZyT`uijRv;63;(4!)RD_ z<)<)%V|Z_f?R}LNZ!vf!+hN=$N1|iwIj%FTMJ6Pu1)CPhN(;$oB3XXW&@yI4o6Pnx zMmN8BIh05=RgFPTrn4YxzO_6@FNx%qdvu?=z6=>?B74S2Q97OpZD=~Hq_l+$Z?&O6 ze1=$}PPufQe;`U|6nEff+UPiYG-`}f@2P3gXD8aY_LvJ68QGWer~g_T zwc|j|{&?NZaOG^3C-x~4Bzo@Zw-Sp%(|UbS1798{EWv6w>(r4OLz!uVf$E}y>9H+5 zLjoYnR7teIKJ`(+zr`j+V)=`Te)racATq(^&`TDt6)({C7yPoOwixR7fc4I*Vd$$` ztBSAx`F4NnYoM*!t6vy_Iof`L;q;YNy`T8%OQQQOe<>)C)c?=$P>1x>%&Gp`cjb@g zKcdMjH^h?S3*WA&9%Uduoe)$F*`r6>~XAgy}*o#Un4v_m#q%dee5cuJ@ELX)YJ{YLZri z=O^5&&&fq^uo@erEA)JuE}~8ugu}$U$XeKIO;GkgTMTP}^7hiDkrqOq+{(6JSW9?8 z>idB$4}iUqpS_faH-o)9E~pyY+G9r+{5*Wl9F4+}l+fc%xXL;NmNf2_CZV5#BYoeN z7jR0E$Z~n*7?j(@(s|3|tHxv0%2wGHToX&VfQ`ZFkFP2w&NY+00-(neHLE(Z?Eb6? z3ra#kI{%fc>vwSbV$f>CAF3!^N0q8J>jJNTO+ZA5o)}seI~pY!H$}Cg{R%`I%4NjE zyL3$WdVKkG))N$5=UFy`+b0ov`coglE3Hx_^yeeVG+z1DVR6mIZ*^8E#QL-DFlT`ic)UMLQC7l(gtv^Ov%H1){Z zx07Zw@Y&2*2+Im zZE=#)hth9NPa*n!M0$`p+3)Y<0iTuis&Q2?#xZ1!R44JOWD6>KT^Lf?;`?#Ii4caS z6o+m!y9OKBbv&jCm?5= zZDf5#xHCTVQ`F-M2Sa})Jh0v#EMfKd;2!$nu4QqO^pxJE5HV7!=96-g*z0axQB`53 ze6`q{xCE&Ez+lGu@PD?8{G9H8+2$8ILUbpNgJq)^aaWQE6VE5J1kkAK1OkBsO_d2S zzp17v$~*bwc1rexBGNbWST&1fbw*zEWoKg}LdtP}l4q2vaRc6G4)xxc2+kHyW!JJR zn#H7@7a5b5+tU{IIEnlIhZg6J9>j4l9lq!i5$2SMha+vf8x7xAt)Q%5Vo9@4 z^hN`|tj~Q5wB>sq;0?1IoQBOt;A-}Fr8xbP>qCY^L+&GS%Qn;BKd$DsqTHMuwhHi(zx(kM-^%|3UQ<1p8>%BZ*?VPS*PNp+BvwM-`C$?s0+>YS@p~dYyt?dtua6(s zhCLhc*I@R(!J}7}YhQeW|84o>hKGT&@-GXxv#4HEG9&-Js_CytlZZRra&pD50jb^b zOkpv&U6duk%mBS|OxyIFh@de%2MIrc>ZBY~e;;r08i7*t zR&Vx9&)Dxn=>6t=(~>e{edikCMMM~{phTL)i_q4%!k64QNE4-d4{BXKw$3$8raB7z zLHn#cBfS;!*}Vmyv#4PoH~%~_5T^92Se6lUSFMU@|L20TUz6kGY1gK{bkjlD*?hvl zzDDKBLs$1H5)`Ic+_<(D+^)e_rem^UxOgEi8d~Z6QHm29$-1oBJzuvrAA8U@m%TNj z*>NmH(2igu*d;^usY~-i^CF{tM)r4ck<{sbAj%=nJ>3*J+I(q^UO6c^+bCXhkN2m1 z<^J3<)DUJ2e`WACwpue6YGaJv!1{dRrv<1s97vJ2o%(-2Hn>PsJ2oU|k-k7C`?xiw z?Aai^6qmgIh^#hLth7={vYH4rx0jjk?>tk`y=i0aVO?ns_%EYNYj6A9x+ra3vqL*? zyyXQgsectV&qdtyGjP77gcY^)Buj9BF%el5n zSWqCSJ$ci#I+>6A)S>!H3)j?H144ViHMPVeyCk-2mP&1sWV_xq22Pwhd-GM~=NNL? za1euB8gPXb#B2ApV~(w`Mo(gFVBqwO;qI8+*>pYc4ormx~)8?4_Jn zmE#WD@EUJX`Q>?L)VEpK79C2=4{d8`8k!|jvh4WL{#N_{A zQ3r_9T3yAjbbs>Q9ZGX0S)nCjVi^Bmv-Gv29mj)i;G@lAY^%qh&jJNvNTV9Fsk=iH zPu%J}-?=9&zosLT4_r6u=le9-_$B+wISQ;&Lt5gD&9pQh4wAS0HS$^v z25{r7-t89_>t7Lur`rjQ72iO*Ft;W-;S3{Dv3%-|uaceZW^{`K`NgriggBDa6I>_a zX7}lTPtHRPX%yRaLu$_7n{omim!QIz)k;_Ww+dO8F;#9~Mko9yvY|?%4}Ha`Jz&ZO zN*016bl`3Fk?@NPq1>vhkz@=H+K%`{^ho8ynap)i%+^^$r%f8Dy3={v9 z0TR2_N_K=om-2%E_;1VKnc@B)_vKv4I=_tvJolNqcxOAlX39-=bF#%8KIRED6ag_J zkyuJ8DSonvl(d%l!M4wu*0Hx6Mtc70G<)~Gu}^1sIk*U!g3~iEKs3r&m+KU<*pzn& zL5cQulo|(#z^m?Gq5_!F5rsna0nd6nK(&F_46PVMoFUzmN~!`FT8`c2a#tFLz{!@S>`;>*j0n*M>1 zmpDt^J1Z~~HOFBv7}Z*sQTpkpR&H-*Ep@{lmU>rGs#kG$Au1k(<2oh}%)U*B z*^Z6a|A{&2a`qfD8V-w0!^yJ;g&;vig8RGW46s$DHt2MnRb#qDABZp{{vp$lu=fyx zl@;4iP{?8|n>gTw!lMf%{hBoQZv{f>7lNiWqPu0Mp>fP@t*<$`k>9rL+CE^1Gcy7+ z1CA&D+BEZ%hG|yvHh$lksKLR;{0PSpw&PfxIrL_3zukQq`aLT3LfvOvstdUpa`L@g ziu4RE>@c&#*jJBL>@jdeiNyh$@>fnZzQ>zT)MzkZJMD?*-1lo4C*A(n)4uca8#F zZSNRG+1$_dT;BCSwlzS@m>C|fVjp26@U|%uDTC|66>Fu*7j~}m9jSi_>(fG7OdFGo z%itkbAK%@Q8L|9~&!&wm2FYTTA3Z4VLOdtQh)%(#qd$%h=IL%0RLeUVJrK{QK^;2` zgc@=z@(MM4B#9BMJ{_2av*GLT@EOY~qW6FTN0&lzuwwpI5zOz>z{&5ToJ-wM5WiUG zKsCi03-KDiu@9ZKVBgi&)sqU}QmF4j-wP8EjMjDbZL6v4cWLbA5bWsNqU#R@UNjCW z$5y&4_V2iBVb)0jG=B{lgqdA%+@H3B*D&h-5)O;jMM$KSTe-2}0#K%L_4nNDmiQWf2&+ZFbUIF!Wau8Bs(kHP%o`_Jot!;cvYksd~;US0lf zu8%o2^+=R}WH}y{@I1RQgSB)?9Dp8cb9uRWg&C27aWlp!$?omtqM#&~tt*tz=nMH3 z<)Czm5J{Uw)I~Rhs&mC^r@LHkZIQ+(8X^>W=4uq2i3K0so4#G1RK zS8OIp#tQ_0eoeSu+g?g)bzh@yF3{pjMB(u;e9Ls$X+?6)-SNpzWonzP;iM$z((Nwy z{Nqx1bK~?Fnz2>7ex9|PLGQM9s%?Og#zoF!x&HVuCT?UQ zce;Oqm5^zI0{AW4MjIc3ki(2%F>J#piixi5v#34At`2h@pa8j9L%jX_=yE=-Y7 z=uUG1rBgN7nK4@8#DmgUqhS`zHLporb&}2b`)02c*T;zqf@%fWZBFxN`~lKQkOA}$ zP;3jnI!^)NNS;V!IkJ)6OlXgJ^@t|&WUm#ZvLCtoB`jCCYn`R>`?Z(T`$j%qgq3Xf z9{`xHoxB%xzzGXHP{X|Fr%cJzg&ajv1lu?GIG+YyW4Rkf+k|H`+kGEgP($o|9zyf% z*7aO&i)VE!p-4nKs;Hmr*)AFlDu`>1*r(Avzr1(J>!76=EMVY!5-e`4OC42ZlL-pG zA~0R7_VXH+=_+9^8xN(~TMe)?PBW@a2S4vC&U{-Cncj?UvM2PQDVA*qDK5^*B}X>g zk``7=Hw!8!C^L)Ap^9j={P00y-C&4#Uv(zyUfULNx|i^km(4ZYXnN03xl+FNd+()B zCCIn2(6zVV#NKD5`*+Sa5$Mzgs5xraHcw-;ty7s5IiKApX!&R{c4`{gUN}Ri1qx~Z z7nLt~pP^GEHB~rs6CZl~spwUAheBYfc!)jx{*7JCQFr&639qoQFf>gxzf&6w&%pXK z7i7P70`3{`$*QahaZ^_Zr>$zFF}2cwx`ZFB!pRswLfnCabBV26U5! zgh6A**7sq^2WIFQ18BOS04N)%=U1%^xZY290qqEU`Xe9+Hdf*vtn~tw5?5}v-efi*3CWPscTg5+K9f!}L%20(T zUrDADt~?`x{sk`>x&JAAi_de#o%Q0q0fLl$hdNYEsC|XbX{+f*kEaJ$J-5+vD0ie$qpRMV-fb%3wqsg@68%UkFx#sGV!?goq^FB7mO*y_cWB=<^h^ufr)N?9&r>M<~5pt-y!+WQVajxRkT zoe%Q08b=a#n)3d%G$)#vK%iUv_*^P8uM#mi*hJJ{u=qG;=te$hyoYN{yv_J0%is%^ zSVyLTCY17W5;R03?}888lfzXj5rZn+ZX!LPD?)09q?;hm0cvV-AGuJFum2QFFjh`) z87HM*OLW?~tRk8OijA1s(dAp#EUq^I^X^tO3R)UG>yCe#KByGOF~1ySc8ATP3&huV zqc7EY=Ywkh1ZMV$0O5d@Lo8oG(<$NBH%QZpjaDn0TAg2h*^R~^Rb+X2?Ulgh@cvq_ zeEP|%>HYgAe5RQfJkcZHXM=J>%HF(k5&VFNJjH9XWmH)gIRV;uq#CQVIE(y?QJoI$=pXmlw#eF62$1iMP} zj*bq{E(N$(P;t2hSF+A?-9Iw%CJr zj4>0EBBSgUV+}Uldn0E#jRiQ}JLT2dy0nYL6BPW-Tv>Pq4hw;F_u?X$>54%w!vDYc zf9nu_hUXGpthSaP(a~k^6NBvdbn;}G>GBWzeEt`zLJagUE8GOlA*X*IHi@#QyI7f- zrR1W?v5o>v9};lYE5Yq{m@SGrch{3{1mmA$Lr*Pj#{k+Gj&9{8C;-yFgMh6qs+IP} zUo*VVAao#V3F&|+mpin4P)fW2BhvOagJt4wP8v^Xwz$xtPh53ZcR=AMojIar{90_P z$3P37dIugtq)Z5ihs$96(pxJJ>E+Sp$Z+1P?g_74tgO=4Ek{~vv_J;|&$}^C*0ru# zo}Li0#zIcc3b1=1p*&6?d2_uN*A69Q$iQUhRwr#Q z9gP}X9b&DZ(;g&JPRmE-$bptkpBm7ja8gY)X=`U?^KqVW%9|QVwo78#2wm2(W|sz*e8D!$acV^9P|Gm|OH7Tj5pm;z~^D{xsf`E*iGdHIy1 zgsEGHbvYj5COlLm88#}oOC zh9Ux8-p$Rl+~i-pjHDA)$%Z07pr{FAPrX-fiC1Mu4XkOn$bT%C_}O;~7O`c_Yfc|C z{3$Y)v)(7cW@gX%)AU~o+P`juqE78VR*HZlC7jMBwj7YWYBS%n4e4q*g=Loxy4TC_ z>G;A_9Ngw!AU4a(C!f_`c*jsb%#1LZy5nnRHg`M0!_&)fv|f^}<(;eZ9jNF#nltFM z=z9I{8fm&(+;U#wABCMZKHWQ{_zF(-UvB%8C1Y%f6jJO4g~y`i22B{#^Sdfdhv~wr zgo!6|62tx;ptlps7prhSt`PiCauK0^bG+#2jZmK(R~`=uV7PKC%B3)u1$V_p$ACk^ zQW|lGMB6dfkEC#a@iJSM@W8r;JyV5lP;H5ARZwGLZ=EZ{S?3%I1wyA5aS~|C9S~D1 z0VyGYV2?x30+$jsz`3;b?QAvrjmwNw4(eIMsG@hh-UG7*(M9Qs!!Chtwy4hU{}j7u zKLV|)gRJ>@t&>WbQ&wy9Yx6=Iy=Oe3V+a+{F8t+<(WQBbc zsbDFQ-{*myaB31ME&dF;4jdsSuN8C)-GDn+^C_~Mvhz(h8QJojDd@|;PPCJUe+HcL zx{CgB;RYA0NpX1C2?v3$U%%6!tDwI~ZDcU9Te$9rBJbJ#ELz=Nfr&~tc@_THi0&_M z@H3;ubZC0ebNO#t0lF&#vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*`$-H+J#d7v6A@bh BpD_Rc literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_mint/00002.png b/tests/snapshots/nanosp/test_mint/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..a910d45a1bdb56a7d803b0a836223d653ea9295f GIT binary patch literal 752 zcmV{yA%qY@2>B-4wr$&ne-+e! z9KW*-NX3<}@o5u(vkh=D<6%AxIp@7R=Pc^rC9|0P1PF(Ur$M;JEEJuTI;NvVTU~NL zOFRL>S>W35>*45eFQRuce-B6lHr0F})to+e@0l5ZGV^09*mJtBjI7h3&YJlrrSvm# z>^LWw`=qy>dMkSUO_&fu2qEN~K*vzzjj{Tk85}E3b)k9~1;^6;i&qV^Ez-ms@%lq8 zqE_lU`vIVhb>g)$trGJB zM?CopB|%+^*sQyeChvRi$!3~rvOYE@u3*l~Y>QacZ9Jp}o!ps0?FcmeLIDby7osAZ z5sRPzfXZT%;@Ia$-3r`SO{-Q=5Y%#Df?W|sI@1!aZ4b{hi#00005`^SHS z$`ekUN$Sz`**W3V&$f5wscTowUA6L)ndo2XfU`$FC3nR}uE;wbo-Q94cK)fvVzXZd z4>PE&PP*uJ$J6fS0dKBdc`WrRbbP0l+XkKJ5ihO literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_mint/00004.png b/tests/snapshots/nanosp/test_mint/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..e6348719816590e205d8e9dc126740f01bb14d08 GIT binary patch literal 815 zcmV+~1JL}5P)X8)ATJtt2RSAjFP+lI~0Gq~=R((4X%kF4nX?wQI)=xW^Y6Xl@yax8z+08k|}r z&Xk~%dEmKAHy{4o-Oe>;M+xd#8uy8#c-!7--x|aW^4NGE_qX8=)KE|M;7JR~o~+Wa#d1!LsijBCMQ z!VKuu^YY`G6XxtEM)HioM2e&nz=tQ9)V@?MgjkR%I z_jY(o>!IGY&3GwlkP-cD2%$#wH-j9U1XbuHPLPp5k$_Vk9Mh+P)&Li}H+yecnstS1BTx;rQnS?fk6Y zOBoZTDEG<7by0@=08RoT5+fn_9xJ|cilT}(kq7QgbjR(x`Ix8|SQs-`n}cF6yT};x zH_{+d+_DzL^QjUPtd`~AZ$pESO8V=vwvk}L+?0Ufz`a*n4QkY(ZKx{^iW|g%ZK&8R z=q0!f747$ZBhRQU8^)sYqM-u-00026frtKw43{O0?WQK3_J^sD?7&i6wKm#Sx8+%$ zB}MQ6Wo6XYjq3*`KvP2_*pg~odEU>15|ASDaxZ3ud_FtQEB{IFOVY~w67Z$ymq(SL t_(w@&nv%edz-bWSI+um z{|>(er;o4Cet%!UNkDt=;{Tb-OAnqZ{(M5rCuNa^aot*#91ca>%@#AaB>wfuo#NOR z-oSD8XYrJ8E0Vr^UYAsS@$K8rtKvrT+p`yl^@SgpT5A|F^=5WtOwYvydxY2CPCtIt z=T=jfXL-tOPuuCcjcngW-tM@yd)M7-Pj;}HYQ0l@8D#s(MWxD2-M}Kx`g`>ORW_6R zcOE;wb<>*F{rh=u`oc%Avdov)!~mV&Q@paxZt2ohS^sLI@9assV;jxB{pc%hg&9{b zf2p{h%^))4>+VPGzdl}FQ^%Sy)%tD9=6(HqQ!jmd*D1d@p11Z|!qZB-ovdsBhotYb z-}y}c9{ZV@vrlrokK4If)AWQ({Vb;yo&QqS9Grcl^JZ2~eSuq0K^q#K_4vz{f$7%=w006*pU+bq#DIFhTjJ=lI zV-Ak9-fQ;)JpG}#XFE3_r4(bV4sZBd#Kv;c34hInC#InGo(SjJ@9jtaPBlU~l-O8ZUB3t0HlRu-?a2+DNWD8t z{@lx5)$EJ+U~>wxhxo0H5re2ic31uh4@^O2s>#F$wH~r+oa4)4r0{G12(`b z`n%LAXmDjNDKZ!6%UixIXNFD^YyW>avQ%*ymXY;IwZ5~TjR;DRiT*M|sEPh!?7>cC zp`9**%pOcdcmV(a000000000000000fN6dJclAj7vBj#a00000NkvXXu0mjfw_4RP literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_mint/00007.png b/tests/snapshots/nanosp/test_mint/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~ovpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*`$-H+J#d7v6A@bh BpD_Rc literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_mint/00002.png b/tests/snapshots/nanox/test_mint/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..a910d45a1bdb56a7d803b0a836223d653ea9295f GIT binary patch literal 752 zcmV{yA%qY@2>B-4wr$&ne-+e! z9KW*-NX3<}@o5u(vkh=D<6%AxIp@7R=Pc^rC9|0P1PF(Ur$M;JEEJuTI;NvVTU~NL zOFRL>S>W35>*45eFQRuce-B6lHr0F})to+e@0l5ZGV^09*mJtBjI7h3&YJlrrSvm# z>^LWw`=qy>dMkSUO_&fu2qEN~K*vzzjj{Tk85}E3b)k9~1;^6;i&qV^Ez-ms@%lq8 zqE_lU`vIVhb>g)$trGJB zM?CopB|%+^*sQyeChvRi$!3~rvOYE@u3*l~Y>QacZ9Jp}o!ps0?FcmeLIDby7osAZ z5sRPzfXZT%;@Ia$-3r`SO{-Q=5Y%#Df?W|sI@1!aZ4b{hi#00005`^SHS z$`ekUN$Sz`**W3V&$f5wscTowUA6L)ndo2XfU`$FC3nR}uE;wbo-Q94cK)fvVzXZd z4>PE&PP*uJ$J6fS0dKBdc`WrRbbP0l+XkKJ5ihO literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_mint/00004.png b/tests/snapshots/nanox/test_mint/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..e6348719816590e205d8e9dc126740f01bb14d08 GIT binary patch literal 815 zcmV+~1JL}5P)X8)ATJtt2RSAjFP+lI~0Gq~=R((4X%kF4nX?wQI)=xW^Y6Xl@yax8z+08k|}r z&Xk~%dEmKAHy{4o-Oe>;M+xd#8uy8#c-!7--x|aW^4NGE_qX8=)KE|M;7JR~o~+Wa#d1!LsijBCMQ z!VKuu^YY`G6XxtEM)HioM2e&nz=tQ9)V@?MgjkR%I z_jY(o>!IGY&3GwlkP-cD2%$#wH-j9U1XbuHPLPp5k$_Vk9Mh+P)&Li}H+yecnstS1BTx;rQnS?fk6Y zOBoZTDEG<7by0@=08RoT5+fn_9xJ|cilT}(kq7QgbjR(x`Ix8|SQs-`n}cF6yT};x zH_{+d+_DzL^QjUPtd`~AZ$pESO8V=vwvk}L+?0Ufz`a*n4QkY(ZKx{^iW|g%ZK&8R z=q0!f747$ZBhRQU8^)sYqM-u-00026frtKw43{O0?WQK3_J^sD?7&i6wKm#Sx8+%$ zB}MQ6Wo6XYjq3*`KvP2_*pg~odEU>15|ASDaxZ3ud_FtQEB{IFOVY~w67Z$ymq(SL t_(w@&nv%edz-bWSI+um z{|>(er;o4Cet%!UNkDt=;{Tb-OAnqZ{(M5rCuNa^aot*#91ca>%@#AaB>wfuo#NOR z-oSD8XYrJ8E0Vr^UYAsS@$K8rtKvrT+p`yl^@SgpT5A|F^=5WtOwYvydxY2CPCtIt z=T=jfXL-tOPuuCcjcngW-tM@yd)M7-Pj;}HYQ0l@8D#s(MWxD2-M}Kx`g`>ORW_6R zcOE;wb<>*F{rh=u`oc%Avdov)!~mV&Q@paxZt2ohS^sLI@9assV;jxB{pc%hg&9{b zf2p{h%^))4>+VPGzdl}FQ^%Sy)%tD9=6(HqQ!jmd*D1d@p11Z|!qZB-ovdsBhotYb z-}y}c9{ZV@vrlrokK4If)AWQ({Vb;yo&QqS9Grcl^JZ2~eSuq0K^q#K_4vz{f$7%=w006*pU+bq#DIFhTjJ=lI zV-Ak9-fQ;)JpG}#XFE3_r4(bV4sZBd#Kv;c34hInC#InGo(SjJ@9jtaPBlU~l-O8ZUB3t0HlRu-?a2+DNWD8t z{@lx5)$EJ+U~>wxhxo0H5re2ic31uh4@^O2s>#F$wH~r+oa4)4r0{G12(`b z`n%LAXmDjNDKZ!6%UixIXNFD^YyW>avQ%*ymXY;IwZ5~TjR;DRiT*M|sEPh!?7>cC zp`9**%pOcdcmV(a000000000000000fN6dJclAj7vBj#a00000NkvXXu0mjfw_4RP literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_mint/00007.png b/tests/snapshots/nanox/test_mint/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o-t^S`R|-R&N+X4oT#6QE*NyMQyrPk4(7HiPS9ru&+dfdz^9OR7 zLbW_9#uk}E4Lpj*=9xmJJm=3+I^Egs%rlbLHM4?SiyfZIr0cu(^K&Q6#}=U=TwL|+ zM6@awSGtMkKJ|y~`#ldP9cbs@f8@a_9ucmKd>}5rV~$+?(zRSKjsG3+?|=9=9{#W7 z#h48QiGm;<^7i}HcBFgB*CJ8nTLZxsjA&e^_XkH%G>%l+x1al`S644{hnUbjBJ^PrhE1QcMf9gPp zZl7a3cEb6}J3%DZ%4pb24?m4s>$2P1opWoS#)IY=puUep+L56u~JY4L6#`aPk4(x2^TMeOgKs4e^_Ln z%a|L)g2C?uMrhH>iO+q{cm7lIp7fvvBQ}D}RQsv=#8u%%8-dDd@6I{*wB&ug`sIAw z)McZey8+#EA3%L5$cSdJ=xb14Ma8`A`pKr1c}q-9LOy?4F~R zS53R}hDSB6oN}9%eT`|eR_>LB7W$G1D}2xMy4*I-@*u6rTGZBsAFc>-4%(- z>+3Y|Y*vfc5#JJgI-^!cX0$LyF?
LzwS*qscOH!H;ZX4#+mPPf^I($(SQL6_Nj z`^6y6oAxGmG`vjqc=rcU5uc3c!YiBnXfYbx`|5=aT#A>D?E`7PkHl(rjs4bTBWiBI z>znYT1^97x-=@R}ov_h6E$IVqOn*&LKjZ$+n6Ox2d)3LVAg6%+Eb};kgLxl8d`UuS)wW zMzTiZeqv&=bs2uS6xf`l4aAw(P3%78p$>H`JP?&S;v2Q$7IMri-B&~YY-;>=k&A=C zuA6Pn{utH~HTa}*;4KE;dueyNdITc3vl|MQGt1T=Qp-!jO(pLYflO;glO(#_ypbs2 z1rb7!bc2#k#>otMO%Vpm^6(M8;EZO{^P(%xW~Tj;b# z+Kabn#N_bhj#m5H_?-sjhgT7Q2F=Yq{)us#hWA>@G3MV~43eTDSzcmIri%?iO&17; zNmxc);P#?3jp%i-mBmhki7_7LI4t(J*m%ZXn`z-*_A|LQlr&|yLO(%^v?B{nVD_w3 zpS03x_b*=~8I!UipZ?(J*icsEVcyx-k$dr_ zVugJpr_70^9MZOTNc->hm8ydD8A+eQ$ky09?1i3rnP=zU;2>KWry(SaY=pDtGuIO9 zIePKm@6Q(>d+qRAuQ7BWTuq4$A8Ua()dXtuV2IV}R}Cc*Atx-+Hst28-IxoLCU?Mc zCzV@JMW}M?X~8YRksVo!m^@t9LhsVErkcu%5!P548ljuv!?{tzic>lBzM`VjJL}w2 z+|?rRRTz^6^)X_1A+s!gywNX2aD9UL4!-)BJXWe}zAYi@*) ze?G-tK*bytku?)?^0pIp_xv^mI!nVP+lJzjh(j8h9c*i@FStYXxC2(1KO3AP>oZLlI5Eg$vuNB5-aqYOSGlY_7VFx z2kqlMjf;8H&SDrnUiQL|>8KF3Px|jl6;nHAR^LiEa&MqArTI3uIloy|J-E(&A zq5=#|A0xIEzN{qZtfj?qpzQUHR$d5kmupVD^A;FQq4-mHPOM14<$jD-Qn-iw>c?q7 zFASMD1c`ZCc;b`Z2tS6!bP`V))lJfqerM2d*VA&9oygnFKj}6~mtDeDzX=tep6gug zRac)4n%I<(Oxxp-;}7XkrZ>-i4DH&K*{#uqWl*9VCVIY8ax9iM_2tcG1yGSjOVv#U zfzW1$FuxT`B7i;G#S9P;)D0u@?Bi7jHV<6F?x^)We!3$W47@Mbc@H=ItL zGDW>u#RW2H?D*w+m`5|LTJV>;`&%um+siO!)AbgcV))y(Q5_cwpK0}K*&)Jqe zNnq`rhD_7cnK8l3Qti`pGM?Ua4@TWE02VFCO}GMdF5I>0ET5oH+bGVXe2AQIM*%vt z@F;q8M#ArR-4%)uS*v!c^r!`-W)w=ID`YDij-pReSzB=}f*#GxgPK-!jhIp~n(Ah} z!Y3g5`nkFOOlvKlW3KV{4#4vKK4O;wxmO+P#SzfVgZWA7ms)pqJ6C5=73M1Z*Y3#CNh zMnn5}^p75i9M&B0{xF<~CQv$Bi~9582cvDp8boc! zi>t>R7hm|EH*!|6`JDg_m+xh|o_=VvbC~hLZ(62S{m6RdF|_J|#SCj0m!EBihUJ7F z9c{9F6sce~@+U_L02V`4eW94I;jhkpTSaU&nswX$#Z=$?(@KC+S`!%CiA#UWIB1-S zf>2C~>Oj89im8(x=<|KIT3-u;J-&oJhXM~?a{O}^95c~o&Is6BWx=R~S>~7n=8`QThlFFXU1sjWKP zu^M%`&{~1Bu%Vc0y%+PMd^F(Q=PcCna#WM6Dup@D5r}&F64z@hY~qw_mOUR!AE*Wa zbDiQzYAv8(U5LGPziNCX5Z!ek7AB*G;VAq#;WKWGKmCo_y~3_Xm%i%LPr@ON*vY_1 zcVY#CsLC{)sR?{`FjyvblAuNETKcsg zMzy8E7%ei(gV8ZhP6!=a1jY=uG?4SvjE_C?dhZnGAVAe-{HC5sQ`g<+bv%i+I2qS{ zrM17U=nHL_j}H_RBXe>wz5VJj9bFTXgON8pTXZpL{;#oRq2a{Cz=OER5Yu?_O&Hr; z2LAKq#r;$c#E&K56jp5Be&&>fCR41bV6(0JTD$W}^@pt@tuY6IHtTUP; zXBWVVo7*jVR(8TTl4_rZb~OOn7{b2^=}s4GAGgQx0?Z&x=hI1E*aMt(X_@DXK%v z(3emh@sN;NO{*aav(jR#e&dh_1i8CWS3{`8#Q`~Nqjo%1er8)a)f?;D)VA>06xh5r z1a0@3$CaE_c!Ly_wi^+U>-)D4Q^_hn;(-jd=4#+gJe9;UT-Oh6a}@3jXv}WYE)Ym! z3I7+B$(vOxG5ftZq6yu`{vHr}c|(9|XN4C>n6@~Jc86!53m1o3yXL;T{=^c6UP^-? z4LLG|xR$A)OY1N<0^B!;3?7yGk@aN*It*|bvUaM>ADRCqDulWDz?B07Gx<0ZrM_E< zX6mUWYt*s|B~HHMA5XGqv2D*L0Y*8tL*L}Md@}$2PpijGi|qLbY(p8LFusk9+iRjX z4K9oo9hApmvD?U02r}CJKqR`?O;uF;Nb`EU(UB!*G=bZfu6&Eq#HtaB4#_)bwv`JF zJqz8P%7brhK2B*zE&-pb4=%D+VBDq)8mzjw%(0g*BrWXT4A{19b4Pc85jq*f{Dp&$ z*x{H}ZCwAXPEl>hTgCO(e_V=^$m75Is}4ODKjCOI-U<}R6Ih(je0$#76Ti%5D|WKZu5Ah$8~2*FEMlf@tLsU zm(gnbuiF8o=58=R0$^`w2E%Tczx5;m>uOz=;{qU_Ck{bHlsfMgm06V#=d+;)$Lc?- z>GO;U(>sI8cW{$bQ@CE#F!ZBTQLut`?I4BOIrGln-{c!724}dGkOeR_w#jA64(+;^ zzm_@Gb_y4g+~APBU4x?vq8%|A%Po4*d{4VXGP|Nesjn{j0uuGzP7uy5-Iy_^ zEh&>Rmy`w{xg*|sdMN>afokvk4?rvfsZU!^Rz?P*f5sot?FtPc8$I?CfJGi9wPt{^ zRLAJv!T7E1%P;11qEpJq@8Dbns7hpIML_-dbKm7l<&$b7u$@nj(bOilU$_vOaNA#G=c~Xycw^~kfE=%xoiGs0 z^)(+{RYM2cF2;r?WYvMvN`{jxI&Rbu_u&np4rdc<#6CT3-wIbt47gQ9K{_EO3nLk# z5ac42T3N4h%EV6WNu*eGXi26m&zQ~kj(9-@A}g+1C2KIZFkYg1Xdr7=Qk!qSHE?-6 z>kp825{c-9MB(3$uFgK@tHNQsgDIcUq2Ht;Kb`DQd6+v65BGdNrx}-HevD_E(^~(q zc|d@j1l-Vg`E$nRa)YJj&VZpCH|9(rA4Vj+= zCFYA34ESM)05&a42_oX#v?Q;4TD>96tu*a!ZLLp{Xwh-&i8Su1`F;F-3%4qT+~b-$ zsy042nYR|YlG?N-8nhJVxSL_x1y*F1j>;`JLgi?0ABg=BQG7^VR0w@lYD_p>JQU;d z=TveX$jH!eUefarAE__r+@FDvECd2kfRB-#o6~Ve6K)|CQ)lPq0A<4Bq-D(p^*LJ} zT_6v%VBp4Rc@1@LO_6iEFg)|zQ;~8|U#It3i5aLHu0t^D3F4*e&1QbgqU9y=8-;B5 z$(`y)t?|ZN=~yk(ui=xh4%$GHAUC2=EM~R6{e>x3*J-Z>bCU**uh)mC71;L_U>5ZQ zx4&G=3A>Cv-Ucrs#BX@qQbOo!0>zv8XA<_^O7g>SY`ABOy9b&8fu4%Z2#fy+fXxUj zf1-Wr4{XT71^yGg%#EwFZ1{YvVT!vKejcSCYfEA5s7@Wta=BHs%biHy!fJ0P1d|MJ z-P}3-SG3kVwD12bp}K3&-R*()9bpqUf))Oem)H}p>~nU)27!xUFo1fb`2KFeI zY6WRBwMAwbk5G_F(Z0I$l6!4rBj4k`PQ5#o6{&N-&oi4Hz+f*i!wZiS$Hm9aqR!S9 z0i77smn{8HiDJgw-?m>~0bETr+64o*2PssRa{#ZJWhJPuNbGYPV}W`s=eVPdZ1DOkuFjvdOvhmMwu5f;rM*d*{$c@}or29KYc=XVFH8#tqb2;*HF**L-u4zoK!$ zY9aOGnpQc0Xo{jibrOyvg7ow=PLD+{(Uk={ydt=IRBJYLmhZzYU2X{;r5Wc8(WCW3 zH6SJC-B`<0CRySg9W0G}cZ55qN}JMD)1vF|WG~z~uujDQuTCx5d=;9DjqL1=%S`*o zUAdNJqTfnW7t*RKGs`Xo0X2f!Bw2I&YdAUTJ75u^@y-RCS^A#3 z6{Ft-);Hr}G^jxz&8_K#`AVmj(4s2~=``nue$R+f9y@@B>7u-R?!)Zp?XEmsGa>BP z8Mte*PmDx{>sOl~y>wFnDrAh>`0H!7aOG$KhIrECJH0a#K4DNZ-w$%av$w1O>F~CB zq2Cqq5`F2x-qR!t^nSvzwtP~j^Yfv-HP^;fKX|7hJoia@hkW$=v zX|gl?vEwGs*u{4cBn4|Px6-7V>Rms6kATSB_b%y#+(dL{M~8tA?_1bbbYh!idz|z) zyC1QGd7`G9V;F&cr^uZ}%cz0$SCP2>x|+$Kqnp$10pe}{NKHhGJ(ZtfLc)Yi&X&ffe?zr2%E;;CcZ@j!2 ze|RbSb^Q>ed8MnzsoQvL;Bgyrv>2j&%Q(WyyxYsy38f;qyqZ1NYw%+sCPy_p3BUXB zhM?8U*XV{@-*b?I4Y~+WJ^$ytoJT~sJa0p*vV73R-p_WW|RNU!!_W_h$Il1{UxTVvyDVLLbkT(+LO~O zG5c*O`SyYe1`dHl zyY8`l_BBk}C@p7QY$Grs?6eU9n9P7_V!fjcgm z*nJ%W&mdku`PUWw*B$=X1pi+T19a^rO9KFNw3F)raaWYb7>Pow9!xN|6Atod7C=7w ze|~ZR14yO>R;7ip=M3efiCykOrA5**66K@{0QU8TeAaFfm;eQX(W;$fu&~K79xMD# zd9^ed19-2Z^SbtxU^jx03woexuO)1}0&;r1+TcH+$mILHt`wqs!0*K0CC3)osL9BG zA5bb-Z+sjM2FvXO?7Ct-3JMa9E4(o}6UNuETB9re7w-XtdFV9YrIwg$Q12TWMcgs; z76Cq?@vC{6P6kuI_+xT|+&aDt7Cd8W7sU|Vs+nvs&z=Wn1-jgJ2cFwvM2Y{}xDSJL zsv*b<->*>nMP0vmD6$8{ZS|$1!qCX5Ol~k5_hPh(6jJO~v)5B+dHRo2E@vsZ>ZQLk z7~JSwok0KfZlJwmrj``KAW;`5;b-&ZOz}sEPnd_R6jN3A0ME8#=Jokj=W6+W^^7^- zH*q+ejT7e&_Ft^d=zjakdRAxm`-z|P6)7T&^3GVK?%gpE@{uacr~9v%2?+GZc%W_s zC<&{4Qw!?s613yL@PnZHj(}0x+Z}&0qmNhmjdA-(3>NRsK{O;updhD7C**%|1M)vI z$xe8nxrp`U<4kjaV=&-XtgL?Y#%orNuFTENF`1EAS5=X;g@|S76!7l>mV-bXMJHcc zte<*5GV1~oDK0J^QK?7+B;5(2{<@&Q+HM*Kdo?O=90fkc^H(h}tlpJzTmBDv@^u2x zDX=}bYk;0P9(1=m({Oyi?_z7>Ysl&4(89#q(~YbuEU*1=B(j1U_rWpdxU2!7oQ1?Z znKN<$gY|mu!d{JChlfU5S57CPa!Y|giKxDpEa?&33lGi>7khvA+1{_Um>&&*QVT)$ zT9+@&`>}b>ME-SKJ=UVZo#0L`F>-|awuUQ&8 z(qp8zb3VWCkOu#?$k9rNd^b;s2q2+lT^JT!?HMH(6pyyo#jI>w#hr3jg|>LeDKC+E z0lEG=KfZ!EBGwSU8|jkVb^^yd3|b~UZ)06*AMgX10!1*35=+jAxab>_V6W^1bsLHX zku6Ih723LOzJ4qkHzFOIljPtf7FQ^yG1OG!FX`{@%o%)86?-5zu*KcqNxsqtL&OIA zEC(IlC7v)E`8^ci2?j4%m2;}jznM8_KNqMiol9XrfTihPYAM5&nw7&^~>V-w(^!wQ}y^%vgc|1pz(e3Qt!=< z>gx5LOpjgMtsGI}OO_sDG92({57-IEhC)W=Gkn-km9~s`fE<509EsA%AM4wAu~y94 z-Hql|j+v`%22a~^-(U9t!U#4QcOoUS4(Z;KrBY$>@eIPH$q4kB*$4+DQPHz*CmKQ^X z4(`Fz^SAp!vHaJzS7xGd2E{`i+rz(yy23#eOPB^$W7c}@TlqfqNFmdPf>RUEv=hP z?3x3%TNhT@rji2Q6XL)wFu`Be4%$x+;J1IjFkFwA_aGv8n>~o?zbhZE`(@jI-YIy5 zaIChE%T7eR?G(oZ>k$3*XXN3B+XL}RF^u*IDb9tV&!EJlyJM3HkM_f|q`)z;&IcIZ z&;5F96RA+`-WR8E{#->Vliny7OKAu446V9+3aFJ(K?j%C0+X literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_mint/00001.png b/tests/snapshots/stax/test_mint/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..7d5019d56854b28480ec8384669a283a891964f3 GIT binary patch literal 22436 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 z zCd#blcW63*MRRkmpHIq`3iPUTkd^m6s+fo;dvw=SIIy9v@U?LrxthPSnt`<0@q_GA zpev+^-=9_h33&W*f32#kr*WN3OjQ0rj+b&2pwqr(-&tG(Q&s$XoYe<9I=>6^hP8bV zGSQ4@Qnw+`H?DFTF9>`1qVtvguZOu_;DuCSeB56~uVy6&;H&;yEzH~jUH(JEciof! zZ`{ZKn}HXdEqf1yoOxSQHRXU3lzn&{7%ZOM$h8p%_-r&0Cbh09mq*CL*N>W%^k_hL%M3VXy18 zp|K|@0521dlA6Qp3C#Yr#)Rkmi5~>zv44GZ0eEoPbB)~P3g|`+@^G_hPvgb2)$Y`c z-)B-BB>o+Ptbi|Qmyr?e{t=<0LfZ5Buu!!C@$K*X_6IdWz$FuKHy1_YTdN#0tl!Ei zQ4JIl1Ub@@0aA%r5(1oAtPx+^kG9Tq}+G@O?qIv=(9+Kci= zs(>8yU0e9TEOD+za*UppSMwnjqDN8VH6sw_*6R<{z{EatEA)t@(F^=ge0|`m55~GboAFf>aS82fgSs1tskuPHo zTCK)?bX2_ky4s`&Tr?UYl%rW}}Mdy7?>@@1pyFeRE)l zl9Ke&k9aMtfiLdr>+7!+pw6fiZt&A%VjQ)xtl8*-SMgcnq=V1>C7uZ1UwY(V0HsYW zEZ2F61=wyO6;_rSL^oedH6BSCSf;`m)mIyFLFe5WAw>gWB#{wSnzVgVZ@0f{5_7)V zVzn!ZEpf@P&hs!(lLURItPo>nPJjCsm&Gna7*c0W3K*;8R)7dU7fdw8+TPL8{HcC-8*uZK?=#!`C%`k@I^0GH(>;1rQ169P^3HBL% zC$uIzM|cj`@8?Y!u|-ck>LKA42c`E3-5-Fa0V-h2dm6hi&GH2LhDm*LYw@O%uIe6W zbjB-cRqxMNDnHX3E>&C*_+I8)(Esa*fUXHD`|OwNM-i;duN52;PrfLwk^*BW#kR95C!rKmx^E5Eqsts>;o%B}CNziZ0^q;#02 zH#zHwr&>uP1M5MZnX6zVVuk|rU4oA}>m|Ceb^gtatsf>}2yuOTE9~S4g|9g`Wwuj+ zK|!_4!tV+Sxame&l=EG1xtmzyR?c@Ua*=BYqq5?^D8bXv zxD(XbIq!_b;CwHsoB#aY4A}c!bqgLeRYr!ny{7E1rR@#0Aw2&bhUtVU=(NpIyZ9G+* zpZ;SCm}pi$$@TxXdarv5;R z6|(lCbw2*i#F*gT`Ac9e+e##Wt^NAqyVjDmU;Ejn9Z>x-JgJ0tL7j_>dK@5={)mv1 zn;R#wmS{a&g=Ukw#l4hw2r$si9a(!&8x9fvO|cUib8@+B0NQ61uCLh+?bylcEeIX% z*pni@FPi=4SaI>pN*_mdv~lOa2aF^;idy2W$un(7*76%TqXaLfhX_~C#^p7#Mr;l( z6CEL!hqV8OW7Gmrr8CRHs=;iJLGOWXi-4i`I)2>?2I0XM2QFlx(50ydU6)2)t@Bg= zj#Q$DI{O}{pbx$;YZ~+IGQ#bnGdRa_;Tp;Z0uFJ6-K9cHRWJ=yOb9 zZ{}X!-WH4E6z};H*nR;3g$UD+??!<875V}Dbv`0{_Rbz=}EY$~;^oYpb z&fvSku)!0Od*_v=zUc`O_p1xHHaR;dUm1e}q@R#gkp|CEMdTrbezna3PUDhysw*v( zyld&=4bIudxRq(CrWxRl zcpMQ&?zH{mIr;bW(2eUyVk1Y~Dp|P5a`T5)`U(-_+GFY24?#=atRX4PQR5a@9WrzY z##4b`HuGF==^~aTE#7;*0(~Ilb!&+)5+^yLe^{s1PCsRV?Z( za%;3Vsnj!Dk+Y4SrCtxQjHeDjC==?R6dyW!SScr;vzGY(o0W}D$j;Xq$yVut0WJT- z$o%yU0(RA0br>@eQR-__Jq5V$>GTQx&+(>_Kl(W2`a1Sf#(VgFB4V8sv|g3PYQx#1 z0qeYtE$h@n+?a<-Tnvd|R{rYen}hkWbl|gnB@ICdLU5gVK%FsD;X-d^^jc^k;|)%# ztWes1VDFwvaqGz%S+Bz6vzv?PqXfZHyS|zvM%2>7n!!Vj81chVEo`N3obsW6voVF8 zf~D{>?N>>X)k($#>f+^b{AbadvJYGc20N+?ErRN)~`?X+XvE2}2f;fwhsJsj| zh;DSsP_V|p*zgt6jj71+*z7UYFBiS+(W`CubY50-$~m_#_3Qpw9OUOjYQ7*naUcqL z4j=`!%yHE_;)LH_%pZ4gB4M}^+reW!Prp9i@=LU$ZvL84oR}?%cYp0CYSTlM_A4Hz zt3nRX=!f_pg(}!e17F`tnUTxOYj_x!s0sDD{^a4r4rENJ6tfx%DSY^s;#>j%0xU~J zi`$j^ z$J2~hAFk1#G1v<=ZnHc;|FmSQP_eH_S4_l-miI7 z{TLkKFYVn(;XhC5i}Q!3r&Nwlv%Jf+wzSYrg$V;%k=@tx-8|%H)^RjRRJDC?*&8va z-8g{C*|`WPu8s!}dRnEgUzHeox0}46!wOEK!lzVBLTV62dT^4sxs4}{IM~Y?u2O&c zexGGF>A@mI%hNGqkUq0Goef&}mYnq75y7==V{{MfZs^4qIwkpg8^EGtgaP?v1qdX4Jb@`d*TBCqrtUEsrZQyAT|zAW5roQLxo*&g6c<+QDi% zc{FwZ3tm~ddk3nNBeRU^zl5V1f5E%IBtIdMq6idV=SpH8bZpK;fNPCG*XA8%WtR{2 z@PetE%$Zk#wq)qODkpi6E3_Kf+G@8(Q_+L=e0sonQQVA;BGLDA8N?4Q{<3`5HJ8M@ zWt|S|W*b6iQ@Vkc)DL7SDQf^x``m>Hrz;mbWbNMSH9^oMVVE!WE%+gr^ox-Ff-xaz zfi&QM0nqzj!x)js4|gv!9k661j@w$rLD!K^*yVfv&A5xOd2?$fZ;;2knC!A)e-Z_a zWahy_lDRXfJs*|yLOXE|+~y-pAz-&8kGi_o0i@5K53|tj9KX>8Z3lkQ~>&Cbg zBX3g*9CUac?~+G6w+Hpa#uvmr-T%^^J~> zO7rOgu;UvqFrNnT&&sceHtO|sV1U3X^x4(ss3qjtc2Fl5mD0C&$(G~upEssXsxnLG z9zHIg<75h@qu6*t&WvGW&aDOLnAoLd{U#++11UCm%#4} zzxKmU$GD@>FPIhpfH?b#0Q>grut$Hj71iIUt5Dk8*s{}Y*&EweMROtxYJlgi zjrJ&j*Wb6k|Yb;eAVFH zoJ1WwU>A#-a~Lyq09w_-ci+jPQ(V8OE3e2gW zL?U<}>v7#<=|w+*3n$B`;`-3(TPl-=Z~$SjqqzH!ye%4^;Ru(CHFOp0Ly-Z6}ZUzTSobA=%Zw|>3=38u<-fB}48|8@H{f{9hKQb=@ zq??DQ+qF*(hHdYV)wB0S+-@QUPG!Uug7&_@x9WmDU_m`gWi5gU-DZck%$^#O+(Uq?GI zQ0xFFvTE3VE<3q=@}H*3pG}WdkAUs&M*8%ey39?aa@B)~4G&lS%}de$%#3q0XqCz- z&&69soh+DltP~kw)xQ=kGK?DkZF%lV&mkgCg0hkp%Of)F=Uxs$bY9v`kqm4MclIC=<# z=2_1H7|>TY^{*E8ck$4w+1HC_+oDr6mHcC?u;s!J)hYT@-G3Z+9yoSPUGn8rYOOuI za}M5gbuc}$ndo+_jntEEL%CUG)bx0&Hev`A6y(?KwDfP&?w6mXnIqTYCq^FM}% zd2`Ww3amX7DEe)9&bbpjs6+Z^yxTa7yFhET+6>a=mcH_Qn^aAVv#w!E_l!%X9}6jU zM7>cdi9~47Cpl&SqM=ipumMtYEVH$ixjB>3;P30 z_AeJaY?!^pI!PSM}Mva4t=hU?NE?;;UfvnInLpzR!aOZg$Lg(!*!*9sq`TF z@8sqgdZ$)9efSxYM>Ifmijon#(%Q!qMxKQnv$HGe%A;>UYmQE_J1x`j_Psy3Wd zwJYd10b;H7iB%JN_;^Of_}4bNfstNBb%4E2fReW$FnL#6^*lr!VHK)X^(nY1(wkUV zHkGP$jg}r8(>ycm(KWHE>v+cs)~j4{Hc>7s%U8GU;fq~K3#~7rb-C2Y&Q6gDDo&6L ztyLn9XL&K)4FpaBEdipmIF-887G&~|g5Po0{psAq4FBUEEwX_}W1dPIYJQHI0alej zMtZESO^-iMg&_rM%dU+{heWT3xlhCZ1L|oX<4uTdMVxanVX;@M?p2d%vpqg`yerw+ zHA?W=b(_A)Sgd_Dpj%VOKaz^=+LwQ|6*8y{G`vCTe9sAOQmuERJ9NcPWk(ZM6esDUT{!Z- zidf>>YDVvL{O9m$&E{xkaqpmjpwiwXH96NL=pUY`7B2V*B=j>;v;*eVg=&GxZAZ-w zZ=1b!nJ-{x-Q8TB?Jde^HM`LsUCM{v^=y#@`#;P$_8^HrvQm4Hu+QyW41`C9iB1E@ zJN5kOR&J=F?-SIyZ8H6E++{f}wnih?HZa%EfG?z&I1#NV*zd%m8ulV1fdAMzi%a;h>7l@xi?gbY*qI&4FFZU2fdntKYOk;|ols?#lJA_i+?Y3Ld2)bRG@u z6`z&RMONb4kY*71y)yUQ9 z#!GqCbUQs6UdfD-#<$8iZumOB&C)xEjoGZJ@O%<+n)Y2IRkosXS_rW$WpBu|_R&l$WQ8&yQGSCei;AAa`+oeyQ2aB>OkPBjsZ259Jf>JnSMVUGfb@ zn9TMq(CXZ04}4dKljYTkKLA@Z&^bxV!fC~mnPF@~5NOhTO%x0QO_TgTt9FS<@gBYh z@*(C`J5G<0ZI`W?OPx(bd&z4Eeydt|9=Le4`%w#pBm0u@$=G6n16za4TUl3H^?BVw zyNpJswP;mkn3_Eo67$7IDOk;bBuWdLO3@u`CC1}# z6<;;JHl2e+tPXeKq5M9VH#On61#!zd>%g%karL5r{0*XYWu9<$HGix`JLRK88QqWt z5aFgQ1?+A{L;@r3TJ);0UMstyHP0u#Yt$UgyRSdSMs|ELC6_NgNmQg-)$w|v@onDOPn|DYvgNY1otlHDDXr%0 zd$?x}pH59OH&MuoF25Rnb-Ycn;fl8Hbq~yao6g1W-}$|*`PxN z*LE2|bqZ>ex%F(x@AnX$%0I#au*EdU4{Oum+#;3VWqc5b1hbrVfHUySUT>}_QFh)v zYc+?CeTrzb)*xy2$fNeG5zwjeIB59#qm}O9sMBAr*EK*qyR1xeOW>PaFVMP)i@Ejw zqY>v3p6ck|=uC-R7N}bfUVFh%L{Ssx4CP6t^J0*uUH{=~m+EK#_ghjZgjFdl>uJ6T zI-kAJk+|$fxA=5AGc=UfL@RI4ulMvP1=3+ZYC5x*vSwb~Q!%P^$Jc`jw*F&hID3Sw zVoXYAH88PLHFI+H@`aFY;DZ-L!8bxUSgGSTr1F$I z0V*aw&An!wf9dWUV|s9tB{-2Wo0CfdU{C(;Ha+^UGC=vw6foZ_W)jHU=wgd{*uc?s zfb`Ktmf4i&weAZDwAWSb=&7VdK5b>$P+v8366vM+AJO>yPdr8(<$G5M@a7(Sv|1|l zwa*LE$Ok1bm8L=xSm}sTB)uZs$}Z!uGqmmC(YtCr{jeNiq8>rWrl2ok%>a-!|JaUb zq^9$?JQ(WzTKaoXY;-J(!e~}txE{xx2jOJsoa@H)yI~eh;AmzB@E%Fd@Ix(`)i|2NqeVV2JM(f zGU1tv{9B3AOlzC$5cAP9dVpc$we4Q5r}H3`46hZlTQ@yB1sf*Dw?!h+XoCt~D6l0T z!mBW|6V%_7H{}`uzCXZpJ4j9uV(YJaxXH=wvn8E+cGZ4sRw*t?CCL;;E2qKrl%hgJ z+I*59$#-o>r#-})cYaHOBZL7A#klOQD2+GW*~zn^#+06L!bx|1f5SuoF_KOLM&x$V z6B4IGrz8G=K3@XxImv1Kl`A4Weo!%Z(NhqnLI9KOsm9&_!Q zh4W7rp93>}lBxz-Wl1$UT>`X6bWN;b%sM)W$4Z&1!I1|H8L@=7F@rp)+WK|$4y(66 zD^udzoF&+4BO_qNW_=n%w;bAQzWJQcPv*Shqd36H5&bH?-pls~51sA|mR(RgfOp?; zBp78dm!}O2Z0#GJ#y;8n_=iye8)KXR6~Td|Da5Ndo%FL^)w!Wo+sF4xB+Dis(u$~d zx6Mvu_HJ+6X(JC8A*JENVy@IZMj$UaO=VWjC?4{kE|SG02qXFXTQ@~nETexHvs2sz z%;ZkB>}X;B(+rPx&JqulH>j6KAa-;|V>F&3X0q7`-9Q9B{y7G8QScp=ERIzw6Vp zzPzzzBJ$qDKJ#5FgmS+Qmp(p%)qqkjk+Rh2r)9F_$VF+g)gXhfz*5Z*_Gn8ikQO=i z)R9~BfLy>~;ZU_9ZV_u}T0C8Xq6v=8v4kZdF!Ttpe~zlTkd-VNNB#EunZ2^Vmzl4> zVGINdd0Vfh*c|0p@0b?wpcO1&8GhIfJ0zMvvjU++@Qo$}R4z+(v#P}ZqCP0^` zU_i%p6 zZJDx*pC#2#rBLHYg{Wmz4IODtE^F~OeFERTsd7d&v^^(r@XdS| zbJEG8Z6I06HYmr?oc6=iW|S%Cgm0rOweB!bVZTl~Vz-$3M%?E39ww!b#p;B2MIklZ z{Ga;zFpV`T^D+zI5 z9T1QbcMH1c%X`hZU5?6Y1`qj*t?D+-6(m9fjTw+rr+%TjfHE25g3nFmz+pA9LKl%2 zxY1HbLYO=DJU&Fo;0Qur8wl~%@@fB95@L2JWhmZuP**DIb-={m)1s`&9 zuxKI^2kE0F`{qUO%RQfm%@`bhTUsUK@9J7 zbY`0P^t%rs)Etp~L?zBRfS?j7nxSCm(3L7ykb^ZPoaSF`J+-_;W7C0oq~*rr_oLw~ zP(6<*iBrAw>l}OZ9NYQoNr#lAxo>7}|Nl^02<1Wv5XkY~f1_T}!THGQm2+_Y(72e} zktmX1p?)^eq8WnPCzH`2-y|GU0URx)9;B>Itz6E588Y;C_Zx-$*i!Td&^4K`fopPN zYZ&fd7F#y68Kvw*6kr?gMQ z9h!7yy45Qx&BpX>+|cJ*;fv#a%ja1n_OIHAnPh z{qjC1;A<$B5`-)TNY~~3a8+yV11g;biSGaklRJ|H{Q4b6XX|RsEw89`M~JjnT4V~7 z;!*Y=8PG8f`@@-|I5X`wA5t;Am?3YXOElg}uW1UhSS-KGQbKR+pd{)Of@n?(3Yo*m zR%g!XS*P3+1?BcMhV*5#0d;j}-Hy1}sss;jc01^|OgZ3>g()i5r>i>M*p|Ci-QFdY z{(i8OG~=Z-up&F_e&E)OCHvB%YE0@^NbUvi)0NMCg5rWPE5O`IjS|kW7u@M$a8UBk zg1TX@I>4$!NsXr-%`YG8!=EK6UbbSy?SMkHf=&v<*ukT${=Nbs-0w`nhV>%6rsJS#&RcEnJ0OYUJ!s`lW!w=j{zQdOTgV;qy!>038Z+Cn?s zsgoTq0B>s907_^k5Wmg38dTBC@1In#)h_Opz|m(?q#Hh$35l|GT?yZU0|NttgZI2z zgYRyEe++lIK|ytiC}R?3%X1bq;pH(UgFGaGP)9-hbhs<^+mE7tV{d=1uG~x3dH!Zi z<-WWiDgeLry>O+)9OMSnS2?H>*~6H%c&R^(*l=~3b1}tRT(oXmgpN&1=4+5`iMg;r zH7RkK9$5ZjU9+;&wU#$#oVVLD+%3giAVLc0=1Oa`?sesPSh9v=880p-t>=T?q?JW{2}tu%T6 zg~WrKCh(#^tf{{^kmS=Do;SPzapxt$GhkIUEI41<%Se<{FyiB7tSD0A1iXGh~|Jr0bDE2~8%JAvD&w{g>EK24=UIiIIwwv%yxfYtisW3Z0p6b zch0)V1Gh$114~T~wXuDSg8Y`f&Ktf?~R68>|h{ydE1%g-0nuXNSKdOI^;eLts6hr5Hm zYw0%DoX<;N7SUbVt{y)4m?p}ER(!#j%$rYzK<`X9az>li{|aSyk2wbF1y(ZD3BUlO zHc8k3X6F z_G|sY#fEzJi~LcclOak89-WzJ^CZGUzW6b_;nnxJstN5E5d;WKL2pnyD1bi`3JpyY zx6y~I+(qSY0MW=gK;IS_vMT@iV<4S7Vmu|Uk-RQ;2Ye@if*U!Ehz-;cd{Wp6e4XPT zsVD09C!ZZ4<0QQ=HCjwKm8jx7_IOic$cNaY#|3}aZMDQdGYfM@x4h#8<&I#mVlGq0 zrJ$kt?2O?+X*;In=mJ1%m(u4L(2Xqq!&UmM4dS^Yfs1t_*;y*~h(`#-nY;A0mOp#@+X^DCNENl5RMteVAXLI{^PIY zm;U1{{eTDP1dPWk&1gQNIxxzH;j6hyc(u&H#zVwyvg&Bu+p~Y|%)G8)e-eEQh+PX8 zm!<$2o6p`-rM0jR)Y`-E8`_K;L;;|;d(5DPCYRgC&8NT@OlG_xsQ;sxGY^NlZTtAh z60#*ynMkPyBikgxxN#HN5`!@f)14U+VahgHGRiV_+wYMP3XP?)geV#%Yp9X6k~M3{ zSms7!c`hB#@%;Tf&-=c|@y@@$-!Z@KIC&gRhv+Y)Gb1$<~?#Dnh;Uu216eS*}*>rpX%G^5{NA)w8q3H^G~UgC{s(*KlF)|hT`vXR|5>|Zn@!>&Oae`g|G@{krkr8hz|BwI8B zw3qm1brV+-S$CT=qzpyBTa;qI{9w(bKdhr+S8SOS}v-%5MndTnQq`5Snd;UBA1Me@7H}=;lwe7NNkHhEjU-YQ1-766^|b=KD6osIi8KZ#CvW(@jR73{?=cVmwaJrnNQT;wL_L3t^*(rK zxNtoy{K*bN8mgnRr;kH=B5IEfMrQB12V93Lj}vKh6iT&26v7_GnF~VL(bj?CC(5$b zAvmnI6r-l3x*ZB(@2*b-*q5lRi*to1jqZcV^11&_2b8b_=L1XnRn{k!s$mqfGqpds zTO?+ck7aF*S}89C$Nx{@^WpNVar*Qfc>BsSI;abAxT90i%1#Q%eC!HfrsW!sueKzFY!by`&rtR=;^7LA8fv9fbj877;Ov=Y+i;m~ShGS_Lp&SGfkJ z;XDvmR=yy3D13TsPC?1Fa{Tpb*_N~_pKFpwGTSG*s#G^K=}H6kDAcpPK|0V>2LM0V z1FEKW5GdO=!vVqQGq4$MxT*}e@=w>z&6$IDk`qx%@mCBm)B_U*c=J|^6_ZtNrr6!f zu-(z+O95DwLU09npt3|Jh7fqVk$h(NTL9%2DB>i;b4lY0blNFO7Fz zpNNoB7Vb5$n<^}jw&=L8?^}(@nrb^xFSCSLgB80GbRYz=r|49quw`~8%QiZxTP+ zCv{T1M`p2TV1OL294F%`W9pu zptn&K7Noib%X3^IBB5dnB_E#dtWF2q9`yhPSjRXxZF|UByL)vLB+Ll$2KD%FFbZMn z5_MuRc&8iKT~svbwAU)8S6Pq@qaa7O>@9Oo$wXfUN@u9AL+8J^UJG3ie0)aG7TI1u zNzj;ZNFspSInE>s$t!^DoWu~3+_4r~zJ8$_vC`6Kwm*TL3!{BOL>#BMfD@~SsdUeh z{->2e0Q${=v6g$=k3JV}Nc=M2bM5t|Q$2rh>$dsog&P1d6GkS4s4D`CH!k;9*4RUv zlQqTp-JbKL%@`25Q5%4;_cU^4M|$<{EFgQfZS(E3raWoUK%z3Z9_q@3*ZiFW11-az zs?~HGkuLamYhS2rI28wo)9ul~T4~dIWh9Fi*x!K(5}A#r7Q5Kv#(BZx?^@DTv;dPz zD=U%inKhM%#t1fg^WGT>$;LS=g^~$jR2;vN#HK`xKNTNp3`y@%qEknLNeY{dufJsRmfYQuHC|YYM#dNCqMaZ%rru! zxM+dfFv+p;T4hi%?dh}bhZt2SnGJ(Bc zNCfA1+f__}FlL7~1q-q`x%!5%x#h*HvZIh3%26W!Wv!Wsd0IB~6C1%QZL5^2 zl7mT&#O{E>k%}POcIyk-xGnc=m|tXXn}%1aG}^H7MDtu*=QT|clZ1|^L5u$6CYMfx zsD;3~n1HRTBvOk;)d8=3{gkCc(kl?K+C@=rlX)DbIH1rZYp?m^Hf;=szHD(oD& zbnjPiRTw2NCbq60*kwqiGP2!Je-*~vFY37Jq77O?+&8c~R-_quBWXG2THgfmvTsk% zd78_vbf=15N~(=N{sPFdVT^}LUL0CN0MfDy=+W#3e${Z>pK0i3khe)=hy88a$-Py@ z#1pri4a*KP`P~rr=$8lu(wX|x1!Ho0rRNo`ppj4HH#=Gx)nErU>hC<~HX@`)md}z) z2H`RH*!hQN2oyL@(uYCGQ3SDBVV+R?@XQAEmoyJSOfOPHr0Bq$dqfC9{f!XjF;B6d z-6t}KpEw$^7yX^Rzcl*8Bc^`dfTOVenr|pJviBQ^R@|HS8ZHV8lW!Z#_r12R2wq&? z{B#>mA?BP!s>Kw4E0aQMi_NNzI(1Bm3B~2W0&B5st(3Rr#=MC~1i`HK$4sNYcQz)# z7K4&j#nMX+&%JlpYF8OgG$kz6ZeB;;@NQLbid4Xz7cc7qA7Z>1s2B9L%pIGDL;4mf zi^)gU*b0}~!~7lNG<2m%6!KQ^*-W!rvA4eH#LxIB+2*G6;C0WEg1dS-e>b@gH|>rW z#q*PRbJG(GOznQ3jlDPr99yX9Ik)BkFpnXxn7@#4xkun+a literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_mint/00002.png b/tests/snapshots/stax/test_mint/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..03f350207833a11ec06f55f233d632673820d7a5 GIT binary patch literal 6928 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_mint/00003.png b/tests/snapshots/stax/test_mint/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..c51cec5c595a68462cb1711fb9e8a12b7629de0b GIT binary patch literal 10761 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_mint/00004.png b/tests/snapshots/stax/test_mint/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..392165d4fc71395ae212fb0ca017ebdd204c126b GIT binary patch literal 6218 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_mint/00005.png b/tests/snapshots/stax/test_mint/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..339db1b45cb46ceed041751e09147f0574884fa8 GIT binary patch literal 10991 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 literal 0 HcmV?d00001 diff --git a/tests/test_mint.py b/tests/test_mint.py index 46731298..26b708db 100644 --- a/tests/test_mint.py +++ b/tests/test_mint.py @@ -19,7 +19,7 @@ PLUGIN_NAME = get_appname_from_makefile() -with open("%s/0x289274787baf083c15a45a174b7a8e44f0720660.abi.json" % (ABIS_FOLDER)) as file: +with open("%s/0xb05b8099d9de1e5cf07cd135d059d5a5ed484388.abi.json" % (ABIS_FOLDER)) as file: contract = Web3().eth.contract( abi=json.load(file), # Get address from filename @@ -28,11 +28,14 @@ # EDIT THIS: build your own test -def test_delegate(backend, firmware, navigator, test_name, wallet_addr): +def test_mint(backend, firmware, navigator, test_name, wallet_addr): client = EthAppClient(backend) - data = contract.encode_abi("delegate", [ - bytes.fromhex("0be5debae3edfedd42f420247847d2a6f0fa598f") + data = contract.encode_abi("mint", [ + bytes.fromhex("015fd589F4f1A33ce4487E12714e1B15129c9329"), + Web3.to_wei(1.13, "ether"), + bytes.fromhex("4C368fFE3650379d6318C8d4630bc51f8Ad12bB6"), + False, ]) # first setup the external plugin From d0c21bfb16793fdecbc29e08ae83e8a54ee3abff Mon Sep 17 00:00:00 2001 From: Steven Lin Date: Tue, 21 Jan 2025 16:59:21 +0100 Subject: [PATCH 4/5] fix: fix lint error --- src/handle_provide_parameter.c | 4 +++- src/handle_query_contract_ui.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/handle_provide_parameter.c b/src/handle_provide_parameter.c index 461010a1..cee7f32a 100644 --- a/src/handle_provide_parameter.c +++ b/src/handle_provide_parameter.c @@ -22,7 +22,9 @@ static void handle_mint(ethPluginProvideParameter_t *msg, context_t *context) { context->next_param = MIN_AMOUNT_RECEIVED; break; case MIN_AMOUNT_RECEIVED: - copy_parameter(context->amount_received, msg->parameter, sizeof(context->amount_received)); + copy_parameter(context->amount_received, + msg->parameter, + sizeof(context->amount_received)); context->next_param = BENEFICIARY; break; case BENEFICIARY: diff --git a/src/handle_query_contract_ui.c b/src/handle_query_contract_ui.c index c2263fec..e6c0ec7e 100644 --- a/src/handle_query_contract_ui.c +++ b/src/handle_query_contract_ui.c @@ -23,7 +23,7 @@ // 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) { +static bool set_receive_ui(ethQueryContractUI_t *msg, const context_t *context) { strlcpy(msg->title, "Amount", msg->titleLength); uint8_t decimals = context->decimals; From adbb6c7e3b5392ee9932e0571a144739c4923d23 Mon Sep 17 00:00:00 2001 From: Steven Lin Date: Tue, 21 Jan 2025 18:14:25 +0100 Subject: [PATCH 5/5] fix: remove lint error --- src/handle_provide_parameter.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/handle_provide_parameter.c b/src/handle_provide_parameter.c index cee7f32a..99831ffa 100644 --- a/src/handle_provide_parameter.c +++ b/src/handle_provide_parameter.c @@ -22,8 +22,8 @@ static void handle_mint(ethPluginProvideParameter_t *msg, context_t *context) { context->next_param = MIN_AMOUNT_RECEIVED; break; case MIN_AMOUNT_RECEIVED: - copy_parameter(context->amount_received, - msg->parameter, + copy_parameter(context->amount_received, + msg->parameter, sizeof(context->amount_received)); context->next_param = BENEFICIARY; break;