From 5ade00a5ce7d7f57acedb3f0a07e606882003da3 Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Tue, 22 Aug 2023 15:36:54 +0530 Subject: [PATCH 1/8] ETHx ledger plugin (#17) * ethx deposit changes * ethx deposit fixes * ethx deposit test * ethx request withdraw * ethx claim --- src/handle_finalize.c | 13 +- src/handle_init_contract.c | 15 + src/handle_provide_parameter.c | 42 ++ src/handle_query_contract_id.c | 3 + src/handle_query_contract_ui.c | 75 ++- src/main.c | 21 + src/staderlabs_plugin.h | 9 +- ...491b32dbce587c50c4c43ab303b06478193a7.json | 518 ++++++++++++++++ ...ea1b38380f6af39068375516daf40ed70d299.json | 552 ++++++++++++++++++ tests/networks/ethereum/staderlabs/b2c.json | 27 + .../ethereum_ethx_nanos_claim_eth/00000.png | Bin 0 -> 374 bytes .../ethereum_ethx_nanos_claim_eth/00001.png | Bin 0 -> 340 bytes .../ethereum_ethx_nanos_claim_eth/00002.png | Bin 0 -> 279 bytes .../ethereum_ethx_nanos_claim_eth/00003.png | Bin 0 -> 366 bytes .../ethereum_ethx_nanos_claim_eth/00004.png | Bin 0 -> 476 bytes .../ethereum_ethx_nanos_claim_eth/00005.png | Bin 0 -> 354 bytes .../ethereum_ethx_nanos_claim_eth/00006.png | Bin 0 -> 414 bytes .../ethereum_ethx_nanos_claim_eth/00007.png | Bin 0 -> 349 bytes .../00000.png | Bin 0 -> 374 bytes .../00001.png | Bin 0 -> 362 bytes .../00002.png | Bin 0 -> 396 bytes .../00003.png | Bin 0 -> 494 bytes .../00004.png | Bin 0 -> 473 bytes .../00005.png | Bin 0 -> 366 bytes .../00006.png | Bin 0 -> 366 bytes .../00007.png | Bin 0 -> 480 bytes .../00008.png | Bin 0 -> 349 bytes .../00009.png | Bin 0 -> 414 bytes .../00010.png | Bin 0 -> 349 bytes .../ethereum_ethx_nanos_stake_eth/00000.png | Bin 0 -> 374 bytes .../ethereum_ethx_nanos_stake_eth/00001.png | Bin 0 -> 335 bytes .../ethereum_ethx_nanos_stake_eth/00002.png | Bin 0 -> 319 bytes .../ethereum_ethx_nanos_stake_eth/00003.png | Bin 0 -> 484 bytes .../ethereum_ethx_nanos_stake_eth/00004.png | Bin 0 -> 496 bytes .../ethereum_ethx_nanos_stake_eth/00005.png | Bin 0 -> 409 bytes .../ethereum_ethx_nanos_stake_eth/00006.png | Bin 0 -> 366 bytes .../ethereum_ethx_nanos_stake_eth/00007.png | Bin 0 -> 457 bytes .../ethereum_ethx_nanos_stake_eth/00008.png | Bin 0 -> 353 bytes .../ethereum_ethx_nanos_stake_eth/00009.png | Bin 0 -> 414 bytes .../ethereum_ethx_nanos_stake_eth/00010.png | Bin 0 -> 349 bytes tests/src/eth/ethx/claim.test.js | 41 ++ tests/src/eth/ethx/deposit.test.js | 41 ++ tests/src/eth/ethx/withdraw.test.js | 41 ++ 43 files changed, 1387 insertions(+), 11 deletions(-) create mode 100644 tests/networks/ethereum/staderlabs/abis/0x9f0491b32dbce587c50c4c43ab303b06478193a7.json create mode 100644 tests/networks/ethereum/staderlabs/abis/0xcf5ea1b38380f6af39068375516daf40ed70d299.json create mode 100644 tests/snapshots/ethereum_ethx_nanos_claim_eth/00000.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_claim_eth/00001.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_claim_eth/00002.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_claim_eth/00003.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_claim_eth/00004.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_claim_eth/00005.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_claim_eth/00006.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_claim_eth/00007.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00000.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00001.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00002.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00003.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00004.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00005.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00006.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00007.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00008.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00009.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00010.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00000.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00001.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00002.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00003.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00004.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00005.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00006.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00007.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00008.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00009.png create mode 100644 tests/snapshots/ethereum_ethx_nanos_stake_eth/00010.png create mode 100644 tests/src/eth/ethx/claim.test.js create mode 100644 tests/src/eth/ethx/deposit.test.js create mode 100644 tests/src/eth/ethx/withdraw.test.js diff --git a/src/handle_finalize.c b/src/handle_finalize.c index cb65fd9..ff2f0e0 100644 --- a/src/handle_finalize.c +++ b/src/handle_finalize.c @@ -2,8 +2,19 @@ void handle_finalize(void *parameters) { ethPluginFinalize_t *msg = (ethPluginFinalize_t *) parameters; + context_t *context = (context_t *) msg->pluginContext; + switch (context->selectorIndex) { + case ETHX_DEPOSIT: + case ETHX_REQUEST_WITHDRAW: + msg->numScreens = 2; + break; + + default: + msg->numScreens = 1; + break; + } msg->uiType = ETH_UI_TYPE_GENERIC; - msg->numScreens = 1; + msg->result = ETH_PLUGIN_RESULT_OK; } diff --git a/src/handle_init_contract.c b/src/handle_init_contract.c index 7113870..8ee3a86 100644 --- a/src/handle_init_contract.c +++ b/src/handle_init_contract.c @@ -45,6 +45,21 @@ void handle_init_contract(void *parameters) { // EDIT THIS: Adapt the `cases`, and set the `next_param` to be the first parameter you expect // to parse. switch (context->selectorIndex) { + case ETHX_DEPOSIT: + context->next_param = ACCOUNT_ADDR; + context->ticker = "ETH"; + break; + + case ETHX_REQUEST_WITHDRAW: + context->next_param = UNSTAKE_AMOUNT; + context->ticker = "ETHX"; + break; + + case ETHX_CLAIM: + context->next_param = UNEXPECTED_PARAMETER; + context->ticker = "ETH"; + break; + case ETH_MATICX_SUBMIT: context->next_param = STAKE_AMOUNT; context->ticker = "MATIC"; diff --git a/src/handle_provide_parameter.c b/src/handle_provide_parameter.c index 1f2a7d7..f9b526b 100644 --- a/src/handle_provide_parameter.c +++ b/src/handle_provide_parameter.c @@ -42,6 +42,39 @@ static void handle_unstake(ethPluginProvideParameter_t *msg, context_t *context) } } +static void handle_ethx_deposit(ethPluginProvideParameter_t *msg, context_t *context) { + switch (context->next_param) { + case ACCOUNT_ADDR: + copy_address(context->account_addr, msg->parameter, sizeof(context->account_addr)); + context->next_param = UNEXPECTED_PARAMETER; + break; + + // Keep this + default: + handle_unsupported_param(msg, context); + break; + } +} + +static void handle_ethx_request_withdraw(ethPluginProvideParameter_t *msg, context_t *context) { + switch (context->next_param) { + case UNSTAKE_AMOUNT: + handle_amount_received(msg, context); + context->next_param = ACCOUNT_ADDR; + break; + + case ACCOUNT_ADDR: + copy_address(context->account_addr, msg->parameter, sizeof(context->account_addr)); + context->next_param = UNEXPECTED_PARAMETER; + break; + + // Keep this + default: + handle_unsupported_param(msg, context); + break; + } +} + void handle_provide_parameter(void *parameters) { ethPluginProvideParameter_t *msg = (ethPluginProvideParameter_t *) parameters; context_t *context = (context_t *) msg->pluginContext; @@ -57,6 +90,14 @@ void handle_provide_parameter(void *parameters) { // EDIT THIS: adapt the cases and the names of the functions. switch (context->selectorIndex) { + case ETHX_DEPOSIT: + handle_ethx_deposit(msg, context); + break; + + case ETHX_REQUEST_WITHDRAW: + handle_ethx_request_withdraw(msg, context); + break; + case ETH_MATICX_SUBMIT: handle_stake(msg, context); break; @@ -68,6 +109,7 @@ void handle_provide_parameter(void *parameters) { handle_unstake(msg, context); break; + case ETHX_CLAIM: case ETH_MATICX_CLAIM_WITHDRAWAL: case POLYGON_CHILDPOOL_SWAP_MATIC_FOR_MATICX_VIA_INSTANT_POOL: case POLYGON_CHILDPOOL_CLAIM_MATICX_SWAP: diff --git a/src/handle_query_contract_id.c b/src/handle_query_contract_id.c index e8b6c34..03c0db8 100644 --- a/src/handle_query_contract_id.c +++ b/src/handle_query_contract_id.c @@ -13,6 +13,7 @@ void handle_query_contract_id(void *parameters) { // EDIT THIS: Adapt the cases by modifying the strings you pass to `strlcpy`. switch (context->selectorIndex) { + case ETHX_DEPOSIT: case ETH_MATICX_SUBMIT: case POLYGON_CHILDPOOL_SWAP_MATIC_FOR_MATICX_VIA_INSTANT_POOL: case BSC_STAKEMANAGER_DEPOSIT: @@ -20,6 +21,7 @@ void handle_query_contract_id(void *parameters) { msgVersion = "Stake"; break; + case ETHX_REQUEST_WITHDRAW: case ETH_MATICX_REQUEST_WITHDRAW: case POLYGON_CHILDPOOL_REQUEST_MATICX_SWAP: case BSC_STAKEMANAGER_REQUEST_WITHDRAW: @@ -27,6 +29,7 @@ void handle_query_contract_id(void *parameters) { msgVersion = "Unstake"; break; + case ETHX_CLAIM: case ETH_MATICX_CLAIM_WITHDRAWAL: case POLYGON_CHILDPOOL_CLAIM_MATICX_SWAP: case BSC_STAKEMANAGER_CLAIM_WITHDRAW: diff --git a/src/handle_query_contract_ui.c b/src/handle_query_contract_ui.c index 9173003..e5a9bda 100644 --- a/src/handle_query_contract_ui.c +++ b/src/handle_query_contract_ui.c @@ -53,6 +53,63 @@ static void set_claim_ui(ethQueryContractUI_t *msg, const context_t *context) { strlcpy(msg->msg, context->ticker, msg->msgLength); } +static void set_account_addr_ui(ethQueryContractUI_t *msg, context_t *context) { + // 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` means it works with any chainID :) + uint64_t chainid = 0; + + // Get the string format of the address stored in `context->beneficiary`. Store it in + // `msg->msg`. + getEthAddressStringFromBinary( + context->account_addr, + (uint8_t *) msg->msg + 2, // +2 because we've already prefixed with '0x'. + msg->pluginSharedRW->sha3, // Used by the function to calculate the hash + chainid); +} + +static void handle_ethx_deposit(ethQueryContractUI_t *msg, const context_t *context) { + memset(msg->title, 0, msg->titleLength); + memset(msg->msg, 0, msg->msgLength); + + switch (msg->screenIndex) { + case 0: + set_native_token_stake_ui(msg, context); + break; + case 1: + strlcpy(msg->title, "Receiver", msg->titleLength); + set_account_addr_ui(msg, context); + break; + + default: + PRINTF("Received an invalid screenIndex\n"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + return; + } +} + +static void handle_ethx_request_withdraw(ethQueryContractUI_t *msg, const context_t *context) { + memset(msg->title, 0, msg->titleLength); + memset(msg->msg, 0, msg->msgLength); + switch (msg->screenIndex) { + case 0: + set_unstake_ui(msg, context); + break; + case 1: + strlcpy(msg->title, "Receiver", msg->titleLength); + set_account_addr_ui(msg, context); + break; + + default: + PRINTF("Received an invalid screenIndex\n"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + return; + } +} + void handle_query_contract_ui(void *parameters) { ethQueryContractUI_t *msg = (ethQueryContractUI_t *) parameters; context_t *context = (context_t *) msg->pluginContext; @@ -64,13 +121,7 @@ void handle_query_contract_ui(void *parameters) { memset(msg->title, 0, msg->titleLength); memset(msg->msg, 0, msg->msgLength); - // if value of screenIndex is not 0, then it is invalid as we require only one screen in all - // methods - if (msg->screenIndex) { - PRINTF("Received an invalid screenIndex\n"); - msg->result = ETH_PLUGIN_RESULT_ERROR; - return; - } + msg->result = ETH_PLUGIN_RESULT_OK; switch (context->selectorIndex) { case ETH_MATICX_SUBMIT: @@ -84,6 +135,7 @@ void handle_query_contract_ui(void *parameters) { set_unstake_ui(msg, context); break; + case ETHX_CLAIM: case ETH_MATICX_CLAIM_WITHDRAWAL: case POLYGON_CHILDPOOL_CLAIM_MATICX_SWAP: case BSC_STAKEMANAGER_CLAIM_WITHDRAW: @@ -97,10 +149,17 @@ void handle_query_contract_ui(void *parameters) { set_native_token_stake_ui(msg, context); break; + case ETHX_DEPOSIT: + handle_ethx_deposit(msg, context); + break; + + case ETHX_REQUEST_WITHDRAW: + handle_ethx_request_withdraw(msg, context); + 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/main.c b/src/main.c index 47fa4fc..9bd736b 100644 --- a/src/main.c +++ b/src/main.c @@ -100,6 +100,24 @@ static const uint32_t FTM_UNDELEGATE_SELECTOR = 0x4f864df4; // Selector: 0x441a3e70 static const uint32_t FTM_WITHDRAW_SELECTOR = 0x441a3e70; +// Network: Ethereum +// Contract: StaderStakePoolsManager +// Method: function deposit(address _receiver) +// Selector: 0xf340fa01 +static const uint32_t ETHX_DEPOSIT_SELECTOR = 0xf340fa01; + +// Network: Ethereum +// Contract: UserWithdrawalManager +// Method: function requestWithdraw(uint256 _ethXAmount, address _owner) +// Selector: 0xccc143b8 +static const uint32_t ETHX_REQUEST_WITHDRAW_SELECTOR = 0xccc143b8; + +// Network: Ethereum +// Contract: UserWithdrawalManager +// Method: function claim(uint256 _requestId) +// Selector: 0x379607f5 +static const uint32_t ETHX_CLAIM_SELECTOR = 0x379607f5; + // Array of all the different staderlabs selectors. Make sure this follows the same order as the // enum defined in `staderlabs_plugin.h` const uint32_t STADERLABS_SELECTORS[NUM_SELECTORS] = { @@ -115,6 +133,9 @@ const uint32_t STADERLABS_SELECTORS[NUM_SELECTORS] = { FTM_DEPOSIT_SELECTOR, FTM_UNDELEGATE_SELECTOR, FTM_WITHDRAW_SELECTOR, + ETHX_DEPOSIT_SELECTOR, + ETHX_REQUEST_WITHDRAW_SELECTOR, + ETHX_CLAIM_SELECTOR, }; // Function to dispatch calls from the ethereum app. diff --git a/src/staderlabs_plugin.h b/src/staderlabs_plugin.h index 532fbca..58d3987 100644 --- a/src/staderlabs_plugin.h +++ b/src/staderlabs_plugin.h @@ -5,7 +5,7 @@ #include // Number of selectors defined in this plugin. Should match the enum `selector_t`. -#define NUM_SELECTORS 12 +#define NUM_SELECTORS 15 // Name of the plugin. #define PLUGIN_NAME "Staderlabs" @@ -24,13 +24,17 @@ typedef enum { BSC_STAKEMANAGER_CLAIM_WITHDRAW, FTM_DEPOSIT, FTM_UNDELEGATE, - FTM_WITHDRAW + FTM_WITHDRAW, + ETHX_DEPOSIT, + ETHX_REQUEST_WITHDRAW, + ETHX_CLAIM, } selector_t; // Enumeration used to parse the smart contract data. typedef enum { STAKE_AMOUNT = 0, UNSTAKE_AMOUNT, + ACCOUNT_ADDR, UNEXPECTED_PARAMETER, } parameter; @@ -41,6 +45,7 @@ typedef struct context_t { // For display. uint8_t amount_received[INT256_LENGTH]; char *ticker; + char account_addr[ADDRESS_LENGTH]; // For parsing data. uint8_t next_param; // Set to be the next param we expect to parse. diff --git a/tests/networks/ethereum/staderlabs/abis/0x9f0491b32dbce587c50c4c43ab303b06478193a7.json b/tests/networks/ethereum/staderlabs/abis/0x9f0491b32dbce587c50c4c43ab303b06478193a7.json new file mode 100644 index 0000000..f1d3761 --- /dev/null +++ b/tests/networks/ethereum/staderlabs/abis/0x9f0491b32dbce587c50c4c43ab303b06478193a7.json @@ -0,0 +1,518 @@ +[ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { "inputs": [], "name": "CallerNotAuthorizedToRedeem", "type": "error" }, + { "inputs": [], "name": "CallerNotManager", "type": "error" }, + { "inputs": [], "name": "CannotFindRequestId", "type": "error" }, + { "inputs": [], "name": "ETHTransferFailed", "type": "error" }, + { "inputs": [], "name": "InSufficientBalance", "type": "error" }, + { "inputs": [], "name": "InvalidWithdrawAmount", "type": "error" }, + { + "inputs": [], + "name": "MaxLimitOnWithdrawRequestCountReached", + "type": "error" + }, + { "inputs": [], "name": "ProtocolNotHealthy", "type": "error" }, + { + "inputs": [ + { "internalType": "uint256", "name": "_requestId", "type": "uint256" } + ], + "name": "RequestAlreadyRedeemed", + "type": "error" + }, + { "inputs": [], "name": "UnsupportedOperationInSafeMode", "type": "error" }, + { "inputs": [], "name": "ZeroAddress", "type": "error" }, + { "inputs": [], "name": "ZeroAddressReceived", "type": "error" }, + { + "inputs": [ + { "internalType": "uint256", "name": "_requestId", "type": "uint256" } + ], + "name": "requestIdNotFinalized", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "FinalizedWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "ReceivedETH", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "_oldRecipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_newRecipient", + "type": "address" + } + ], + "name": "RecipientAddressUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_ethTransferred", + "type": "uint256" + } + ], + "name": "RequestRedeemed", + "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": false, + "internalType": "uint256", + "name": "paginationLimit", + "type": "uint256" + } + ], + "name": "UpdatedFinalizationBatchLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staderConfig", + "type": "address" + } + ], + "name": "UpdatedStaderConfig", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_msgSender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_sharesAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_etherAmount", + "type": "uint256" + } + ], + "name": "WithdrawRequestReceived", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_requestId", "type": "uint256" } + ], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ethRequestedForWithdraw", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "finalizationBatchLimit", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "finalizeUserWithdrawalRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_owner", "type": "address" } + ], + "name": "getRequestIdsByUser", + "outputs": [ + { "internalType": "uint256[]", "name": "", "type": "uint256[]" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" } + ], + "name": "getRoleAdmin", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "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": [ + { "internalType": "address", "name": "_admin", "type": "address" }, + { "internalType": "address", "name": "_staderConfig", "type": "address" } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxNonRedeemedUserRequestCount", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nextRequestId", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nextRequestIdToFinalize", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "name": "requestIdsByUserAddress", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_ethXAmount", "type": "uint256" }, + { "internalType": "address", "name": "_owner", "type": "address" } + ], + "name": "requestWithdraw", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "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": [], + "name": "staderConfig", + "outputs": [ + { + "internalType": "contract IStaderConfig", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "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": "uint256", + "name": "_finalizationBatchLimit", + "type": "uint256" + } + ], + "name": "updateFinalizationBatchLimit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_staderConfig", "type": "address" } + ], + "name": "updateStaderConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "userWithdrawRequests", + "outputs": [ + { "internalType": "address payable", "name": "owner", "type": "address" }, + { "internalType": "uint256", "name": "ethXAmount", "type": "uint256" }, + { "internalType": "uint256", "name": "ethExpected", "type": "uint256" }, + { "internalType": "uint256", "name": "ethFinalized", "type": "uint256" }, + { "internalType": "uint256", "name": "requestBlock", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" } +] diff --git a/tests/networks/ethereum/staderlabs/abis/0xcf5ea1b38380f6af39068375516daf40ed70d299.json b/tests/networks/ethereum/staderlabs/abis/0xcf5ea1b38380f6af39068375516daf40ed70d299.json new file mode 100644 index 0000000..612f2aa --- /dev/null +++ b/tests/networks/ethereum/staderlabs/abis/0xcf5ea1b38380f6af39068375516daf40ed70d299.json @@ -0,0 +1,552 @@ +[ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { "inputs": [], "name": "CallerNotManager", "type": "error" }, + { "inputs": [], "name": "CallerNotStaderContract", "type": "error" }, + { "inputs": [], "name": "CooldownNotComplete", "type": "error" }, + { "inputs": [], "name": "InsufficientBalance", "type": "error" }, + { "inputs": [], "name": "InvalidDepositAmount", "type": "error" }, + { "inputs": [], "name": "PoolIdDoesNotExit", "type": "error" }, + { "inputs": [], "name": "TransferFailed", "type": "error" }, + { "inputs": [], "name": "UnsupportedOperation", "type": "error" }, + { "inputs": [], "name": "UnsupportedOperationInSafeMode", "type": "error" }, + { "inputs": [], "name": "ZeroAddress", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "AuctionedEthReceived", + "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": "Deposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "poolId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "validatorCount", + "type": "uint256" + } + ], + "name": "ETHTransferredToPool", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ExecutionLayerRewardsReceived", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint8", + "name": "poolId", + "type": "uint8" + } + ], + "name": "ReceivedExcessEthFromPool", + "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": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TransferredETHToUserWithdrawManager", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "excessETHDepositCoolDown", + "type": "uint256" + } + ], + "name": "UpdatedExcessETHDepositCoolDown", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staderConfig", + "type": "address" + } + ], + "name": "UpdatedStaderConfig", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "WithdrawVaultUserShareReceived", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_shares", "type": "uint256" } + ], + "name": "convertToAssets", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_assets", "type": "uint256" } + ], + "name": "convertToShares", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_receiver", "type": "address" } + ], + "name": "deposit", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "depositETHOverTargetWeight", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "excessETHDepositCoolDown", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getExchangeRate", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" } + ], + "name": "getRoleAdmin", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "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": [ + { "internalType": "address", "name": "_admin", "type": "address" }, + { "internalType": "address", "name": "_staderConfig", "type": "address" } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isVaultHealthy", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastExcessETHDepositBlock", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxDeposit", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minDeposit", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "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": "previewWithdraw", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "receiveEthFromAuction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint8", "name": "_poolId", "type": "uint8" }], + "name": "receiveExcessEthFromPool", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "receiveExecutionLayerRewards", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "receiveWithdrawVaultUserShare", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "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": [], + "name": "staderConfig", + "outputs": [ + { + "internalType": "contract IStaderConfig", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } + ], + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalAssets", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_amount", "type": "uint256" } + ], + "name": "transferETHToUserWithdrawManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_excessETHDepositCoolDown", + "type": "uint256" + } + ], + "name": "updateExcessETHDepositCoolDown", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_staderConfig", "type": "address" } + ], + "name": "updateStaderConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint8", "name": "_poolId", "type": "uint8" }], + "name": "validatorBatchDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" } +] diff --git a/tests/networks/ethereum/staderlabs/b2c.json b/tests/networks/ethereum/staderlabs/b2c.json index 15fe0f8..cc7e506 100644 --- a/tests/networks/ethereum/staderlabs/b2c.json +++ b/tests/networks/ethereum/staderlabs/b2c.json @@ -21,6 +21,33 @@ "plugin": "Staderlabs" } } + }, + { + "address": "0xcf5ea1b38380f6af39068375516daf40ed70d299", + "contractName": "StaderStakePoolsManager", + "selectors": { + "0xf340fa01": { + "erc20OfInterest": [], + "method": "deposit", + "plugin": "Staderlabs" + } + } + }, + { + "address": "0x9f0491b32dbce587c50c4c43ab303b06478193a7", + "contractName": "UserWithdrawalManager", + "selectors": { + "0xccc143b8": { + "erc20OfInterest": [], + "method": "requestWithdraw", + "plugin": "Staderlabs" + }, + "0x379607f5": { + "erc20OfInterest": [], + "method": "claim", + "plugin": "Staderlabs" + } + } } ], "name": "Staderlabs" diff --git a/tests/snapshots/ethereum_ethx_nanos_claim_eth/00000.png b/tests/snapshots/ethereum_ethx_nanos_claim_eth/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..8d84cc70fea8013b7e8b25c0982ce142fa103d5c GIT binary patch literal 374 zcmV-+0g3*JP)K?4J2QqX3 zXn7ePqhBDwvA-|J28LIrjF%tX0z{3v6!_gF&(SYH)S*7TN;1RxW-%}TLH9_+sttDO z-T32w&rL(!1@Vr`jm5G(8dd=Ruu#)JAN?l#rFLU`oQ(r?$33AC7s0}pw!fi~(9k^# zU9aci?pXN=I7A<-f!Mw2untnw9MivqZYw}c5&)gweYhbTnv#2#t$0X2wST7_1F;LR zw?>Da2SkSfG>qWq1mej-6nW@2l+Z=0om5jdB%3o3Qx19_LNUlTqF4R_1Iaj%@^2O= z@;n%h1N>H$2;%-~Dvx1!0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4o Uje8$F8UO$Q07*qoM6N<$g5rpv%m4rY literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_claim_eth/00001.png b/tests/snapshots/ethereum_ethx_nanos_claim_eth/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9a2b3d0e3967e6f3cf3a2a0c40a655ad6583faa6 GIT binary patch literal 340 zcmV-a0jvIrP)S|Nn!1a1UL&S{S1)0tZJf46$ zU}?nZwb0D$TFoQ;{ZdeqZJMD)p`B7M&1z+ixep%3`-Mh`iOcYK0)&juMk}jJZIr`S zs0R^?aIn|p+4vzZ)HmR($WY%5Mrx>U41C}TvXCbu)nVE<9jDF7GsK^K!}hC3x&ajd zx}gHXXAy04mPSG|6zC(1A+`eqOf100000U{+qsm8TK!bXZCN0000yOaI^ literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_claim_eth/00002.png b/tests/snapshots/ethereum_ethx_nanos_claim_eth/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..48d0f868b7dbb5368dc8a50ec9b94fdf1f627c0a GIT binary patch literal 279 zcmV+y0qFjTP)OVB=lI#cMF=^68`WPAuO(Z9iIkcs|nDxoI&HzNm;s6vrmgPbbef~%YA&W}}W z2j#2O?nQ7&mz=$tMZ13}NqZ&y2ZUF`g^Rn&Jv{YRKMA;4I*U0#9wjIk2?*9t3DW*& d5dZ)HO*ZFMU6No<7G?kd002ovPDHLkV1kb?bejMG literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_claim_eth/00003.png b/tests/snapshots/ethereum_ethx_nanos_claim_eth/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..1595331ec79f428bc693d2355f40310a007a155a GIT binary patch literal 366 zcmV-!0g?WRP)x=m}#p4T>jn# zcFDrT4{=P*uQEC{;^F17=e`|;ff3;F)j)hP#Sv4~Y^@$FzG+0BWpW2(Y)$!?(rInE z#J+xB+7Ixh`*DZ&l8{d`F2@Y|lAaZ;6 zNxK7bI!|!l2!hpc|643`8DIO;n1|>)tbbvDJl%UEv00000006AO7a23LaXAb4dH?_b M07*qoM6N<$f{Wdk?*IS* literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_claim_eth/00004.png b/tests/snapshots/ethereum_ethx_nanos_claim_eth/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..80184e08b24ba85b0ec122000b4313703acc31cf GIT binary patch literal 476 zcmV<20VDp2P)!pyOdiH?80c_s1!5EI$Vo9e^P<{ zWZmF}>|+_F*s(OSYt|nQKgR}dK!(CDd|=@lQ?+S%nPB{3jy^a9DYBMyEZJ#ovB)=B zTnj(G?%!lBj_Jn`6oVV6pFFdmGeXNWQMSNMICq2lHd~KXX{cbrKC>6y6C9#U#mLvI zpS%}9vvURYHvvc;>MthNz>|nVp8OYCR6~_yt9nvZYM**#2Bv^=tZdY)t)+UAV%g#g z&c!(2{#@2ltLZN6z-r7%kEKzi%8%Vw->nw#J_)Zpj&5-7mAHNnu&ZA>_tJ1!bh1>W zt7UBqiuan4wF}T%>(5AOv1Ne9487ZykMc6pvL}Twy*qZcL<39GS&hQ2zVztSl&S_n5ClOG1TUT>d0`1W SSF%n30000;K6O0w)Q+m;queo9q8nj$@mdcHNC!7*+?9|jBS)owj=oAxV73LzgpIl%+Sv9pF z>y*5e(2>DyRU(B?jp$$mL}=PoJFGflvYOe!lpcJSMr19G6Ogd=%*QjGtC2_SyU)k_ z1O7y(j@u6t%muCS+Xdb6MQ#&iL|ueqHMIg8D^G1h1%3Ay1F9Qn;!H;5_3j7n1f+Ck zaK952tKt5`AP1gc7V_i`>#%xAAcGy!{}<*dJoXucZvF|+${_avS%y7)9y0;zVX7MM zo&ggeZ(v3SYk)J&F6G;yPWRO}{r~^~006*)9bu5UOJ;qeZvX%Q07*qoM6N<$f{aL$ AQ~&?~ literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_claim_eth/00006.png b/tests/snapshots/ethereum_ethx_nanos_claim_eth/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b GIT binary patch literal 414 zcmV;P0b%}$P)j~f|{k#}B z4)Di%0(GQh%XXzDG$sKK-Q2JkKR-`QsiPFD-4d_!i{fwH;J|_aEL%ZYNu#B0FJ7G| z;=_VQWOA9;dQ4Y9)LpKCV=ri`X({49JagUwO3&5UdSK)wEJxPN%9wG}45n;lzK(aC zKtbL$y*-#9uSql`7 zENOEh^0jsFWbV&<+yj5)WEX_aERLO-`${sQhD#B5ZCio#Fr4qHlr^7X|9DL69eFa= z#kf#}$Pcl(QEE=tNl8Pt$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL07*qo IM6N<$g02I(Gynhq literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_claim_eth/00007.png b/tests/snapshots/ethereum_ethx_nanos_claim_eth/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00000.png b/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..8d84cc70fea8013b7e8b25c0982ce142fa103d5c GIT binary patch literal 374 zcmV-+0g3*JP)K?4J2QqX3 zXn7ePqhBDwvA-|J28LIrjF%tX0z{3v6!_gF&(SYH)S*7TN;1RxW-%}TLH9_+sttDO z-T32w&rL(!1@Vr`jm5G(8dd=Ruu#)JAN?l#rFLU`oQ(r?$33AC7s0}pw!fi~(9k^# zU9aci?pXN=I7A<-f!Mw2untnw9MivqZYw}c5&)gweYhbTnv#2#t$0X2wST7_1F;LR zw?>Da2SkSfG>qWq1mej-6nW@2l+Z=0om5jdB%3o3Qx19_LNUlTqF4R_1Iaj%@^2O= z@;n%h1N>H$2;%-~Dvx1!0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4o Uje8$F8UO$Q07*qoM6N<$g5rpv%m4rY literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00001.png b/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..1d263aad4d46ef0bdb1c12568e0009e9ccaafbc2 GIT binary patch literal 362 zcmV-w0hRuVP)m@xKZPP-0{(?kd%g!u7VKc53*zwCBk(KC6* zEITio%hy`B{0%_?C`l=qzUO6=p*bqew9SpFTXiW1%Gs2bJ0pvau5Wo)HtO9*XLBcF z2b2jbGtRDsrRUIW5$PXSf~sm$-I@&A8TGQvmixHJ;NiR;G)hjKM#K(KDt29dA|MS^$^TbzlX%p8vRJ>o?y{y}&U zG>LVDyZ~;f!mgKTaZ>Xr#MdqmdL_u>Tw0t|FbA{*dk6IBxn{j!$lUt<8 literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00002.png b/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..4c243430c16700de9a151a5c0cee78af361bc82a GIT binary patch literal 396 zcmV;70dxL|P)0NB| zj2?hV@7!so!fF0K*YDOO`mL8}0hFSrpk6Ktc~eyO*a;%{3ef1MGm(3gbGW{8!2ncm zYB6YUdkIm_lzA>&gh|FfPnQ{{r+zamyKy@;_ zKMcXu@cv*BgGi8tBKddnB)oQR&iKZW#7{gi)ut%q#)(c*HjazR_E5#`>{=ba(+=DF zYRkpGtKnBM+>W8MP1)$RVPN*{(@NqFV(mbb@ie4x!cg}Gz_|cVEiF8dVraGVbCWoG zal)q2&JG1 zTDb_;uK;#Fc3pD$9N%D|ZE(%4XZ--6v;Z5sZ@IeoPJTA^Q#1H1J-epo2F}=o;b7D_ zq82LP(k98UPwB>vRP7$@?>_d*4Er@VARTRYjefbz0B8zt9Q~`oggT?YnH+;N$t-jx zpFuvD$MjgHpTm$0>_GntQzRuDBF9AP3pGG-hc&y9;OGJL9cnEVK}!WjstAp#wcDo4 zD@AEmtuY$ZS=B=4m+;&oZFerf8oe$?J*SNW2DqTJ+n_)ECEPwlEi2Jx6IO0795rD! zfmqThD`w2YL&NDD0BRpB$}1MQl3-WHA|Sn@zsriz7IyO(Vofb5Qa_1DzrybSv!Khp zeCB7f`~E!u70V(h^Heur7PE$@#-#p=Z%wExz>+tOxs|%w3d`*lNlFThuh7FHvXeD{ k&9S;YNs=T?E5~T3WNlagH?PM!Dsr6a+yK1YLOCzn?}u?Vbpipg{Sw z-SnP}6N#2__i1OhuU)mP%u!7@+*1CWZtw40i6$(R|1a<@GydQud2O&o^DTW=A-DTV z^q&FneRM;rig`hT^2sD7RzBzY(|-WOvXD2ry{b&`Y?WMw%SLuyEBIP^S~56N_R~I_ za6TBXT!@xZph}x212_C~V;8En9?+GF2=t-pY$u9<5f$T%b_v%P6!b6K_j|1|zM4>s2`bOikDT7MV){ z+jV!m;icF0Q-oGV%9yT)8vte{b%Ep!~nR)MyhRD4C$v=4IQj@ zcqCTagx!4-RuFRmO^@iytgws>EPWd#SpE%j|Fb4S>#%18K@bE%5S)W2n%`KPy#DSd P00000NkvXXu0mjfc2v~s literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00005.png b/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..d00ffb987ac091a0c0367b1df5856e4ae2338ea8 GIT binary patch literal 366 zcmV-!0g?WRP)@BhHN*e+ZcftDY!<>=0rWf7>wwg^&|g%CmrG2#9C{RZ`nKS}aPqCnm{ z-t|myEYUn(Z8d)Er>S<8VAZSj+Mm5ThwVDoAr)0G^AG0#H4tY^)L2073{Mgb;$n2M*B)WT+%Yr2qf` M07*qoM6N<$f*)I<(*OVf literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00006.png b/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..1595331ec79f428bc693d2355f40310a007a155a GIT binary patch literal 366 zcmV-!0g?WRP)x=m}#p4T>jn# zcFDrT4{=P*uQEC{;^F17=e`|;ff3;F)j)hP#Sv4~Y^@$FzG+0BWpW2(Y)$!?(rInE z#J+xB+7Ixh`*DZ&l8{d`F2@Y|lAaZ;6 zNxK7bI!|!l2!hpc|643`8DIO;n1|>)tbbvDJl%UEv00000006AO7a23LaXAb4dH?_b M07*qoM6N<$f{Wdk?*IS* literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00007.png b/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..07b4b292bfb48f482e9e77fd4f1f41d703620693 GIT binary patch literal 480 zcmV<60U!Q}P)U8j`_(D3RAP9oss@!G?KOZTjbose4fwyM;81>sD^6iT&#`CA^JKplHVr^MsmpvM4@QOBQ$&y$T#MZQ;sx@P zn862bV=1NRSYDE6Vh@YI#{nxKQ?^|=Vd08tYFZW(+GZy_xNov^ zE!_83|3~&k9exZ!5j?>AX=fDlj-z>)$lt(2IGe$9n~cY*FqARjoH+}32Zwm3A@cR! zPrC;|)47884*|G3yuX+jgPp`Kw3Gi%X4z0F*lJ!=mBc5%$69QZY!7US6kn27S@iXI z6xOKph}d{ySxcg(E33m(L(1YaW*ziAk56AO1>0|FZN;XW@Yoy8`aA8o8W-M#n~j$C z1o*+kF01JKO7+&L8XxmPMn4RE(@n~5DmKPaQgsAF`&SLXs5J}Ey?X!cnx{?g!y>Ro zIDrftvjTibd(kBCD>Ztt4FFH;*CS8<(m$<87=uE$AZ%5$QhQ&9w?7DiAP9ost9b!} W?Nu-wrfEC?0000fc literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00008.png b/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..095bef49a6d473646060d540ebc791cc108177df GIT binary patch literal 349 zcmV-j0iyniP)?1K0y!psXD zQ*&2AM>j6B(Nfv#!~hwP;BD7jux7^WYVIaeIr*A0@+iR*P_Q-UV@{{F!m+;Diqd#l3$Q3D(0iczz vza-S*oMX?n28EioS000000MxJo%_6-iE0xfO00000NkvXXu0mjft}U2Z literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00009.png b/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b GIT binary patch literal 414 zcmV;P0b%}$P)j~f|{k#}B z4)Di%0(GQh%XXzDG$sKK-Q2JkKR-`QsiPFD-4d_!i{fwH;J|_aEL%ZYNu#B0FJ7G| z;=_VQWOA9;dQ4Y9)LpKCV=ri`X({49JagUwO3&5UdSK)wEJxPN%9wG}45n;lzK(aC zKtbL$y*-#9uSql`7 zENOEh^0jsFWbV&<+yj5)WEX_aERLO-`${sQhD#B5ZCio#Fr4qHlr^7X|9DL69eFa= z#kf#}$Pcl(QEE=tNl8Pt$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL07*qo IM6N<$g02I(Gynhq literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00010.png b/tests/snapshots/ethereum_ethx_nanos_request_withdraw_eth/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_stake_eth/00000.png b/tests/snapshots/ethereum_ethx_nanos_stake_eth/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..8d84cc70fea8013b7e8b25c0982ce142fa103d5c GIT binary patch literal 374 zcmV-+0g3*JP)K?4J2QqX3 zXn7ePqhBDwvA-|J28LIrjF%tX0z{3v6!_gF&(SYH)S*7TN;1RxW-%}TLH9_+sttDO z-T32w&rL(!1@Vr`jm5G(8dd=Ruu#)JAN?l#rFLU`oQ(r?$33AC7s0}pw!fi~(9k^# zU9aci?pXN=I7A<-f!Mw2untnw9MivqZYw}c5&)gweYhbTnv#2#t$0X2wST7_1F;LR zw?>Da2SkSfG>qWq1mej-6nW@2l+Z=0om5jdB%3o3Qx19_LNUlTqF4R_1Iaj%@^2O= z@;n%h1N>H$2;%-~Dvx1!0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4o Uje8$F8UO$Q07*qoM6N<$g5rpv%m4rY literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_stake_eth/00001.png b/tests/snapshots/ethereum_ethx_nanos_stake_eth/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d7ed1c874775abf36c47a1f90864bc9a25ebb8 GIT binary patch literal 335 zcmV-V0kHmwP)DS2S*fONYK&pUA-$0H#QVd z6P9M2TnkBLQ*RdOZ&!kfYEzsF0_}u)NqS2$>T~c?9?vyQPCSOi3ScUJHCwB?2u0(nx&MK)NEVh{YK9WEH8}Zi5n12`VzMC10ssKuu9Rp4boT9aF01Rl=Nj-r z1E5L#+N?aI4RBNaTfb$s>VuX-yN2R8&A#E!5{{a zpbJIv?qs$N9kx^C%bYI!O-St#&C{l3QRR{Rk3=h5t=jDUkFg^4s66xYSS~jSpCvjU zLnmS9n0o1#DKr4i?Bo6VLfpOuMS}nYGs7ET(^j7JH)K6?6_)@20001h2o9C`mo4eT R%dP+b002ovPDHLkV1fkDi6;O6 literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_stake_eth/00003.png b/tests/snapshots/ethereum_ethx_nanos_stake_eth/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2dc64cad7f39b7f0deca6396c306555751e7b4 GIT binary patch literal 484 zcmVyU=pRlT21vjCFdg}r|^2v>*qClhP1lE^|U z`E~L}T&{Lq`G)3JjN8w>?J#FPf(TR)s#CpSLUSPpDb$RDD@ebQqqS{nm4|}(h*5vs z2wUXSQ_UDOg5;zQ987VB66FvEdnN32POE%0^uI1lE1>!et*C@?APZ$`rd%ZpRHb04 zndQ=#gS*{#nYn1?az!(cO?Sy-unKylpyt?G!8#}cdeTvqF8iOU;erPYsU2cpfc;7A zN$iHd43Fq(DMB!$c1UXh$ixT1hIjN!Avqw;z83eyjr~bnFr9v1Kbjr6;E*5)f*=Tj a;KK_dqm{F>Y*`%u0000D)d z_D_8#*0DtMxZ68f?VqXaDt4>3D{hg0ZrA5`PNE4H+K z@(Wp#)LM*?WxAM%uhpj<*0srncz}VL6c8DSRlj zMV=f*@<@wd=y+`20#v0JO&AVrjoG&Wml!%yP}~1ZWC3z-ArAnUl#B|idmGLH)!=U* mTFXiW@IW9C2m}Iw74Qq7g>aFP)!(`R0000@BhHN*e+Zcqd$Ps7Ps?dSyXC)Q$#Gw0ssI2nDBgjekc8$Z%NT4)_|6t zuR4->dLk)aEj4cT-PF5C>eagOSLo@wz5jD3l5yeue_=?)mSYZjr|kA zj>l@3y87HJQ2tcq2W+V^_5moSh5TamuC6Ms$<3*reFh)p$7^^x5b+YugR$#aT%iVC z-Xt64^`2l?2d=@s_Oe&zaKFY1Qt|ey>Mzp-Ky&!R>dyuvHPm+oF^B}SP$b_XuS~J^ zs%vin%>pg*SDUoZlopXyV_GR~m<91)Fb7gMQc+4EH{Li$`m@06OE{MJaVHX#jxI1w zAWQ1ck+qHp0DZ=(1kxN$kBfZ*_C^-HQZL*Cz$&GfCFnqAJ+Lx=m}#p4T>jn# zcFDrT4{=P*uQEC{;^F17=e`|;ff3;F)j)hP#Sv4~Y^@$FzG+0BWpW2(Y)$!?(rInE z#J+xB+7Ixh`*DZ&l8{d`F2@Y|lAaZ;6 zNxK7bI!|!l2!hpc|643`8DIO;n1|>)tbbvDJl%UEv00000006AO7a23LaXAb4dH?_b M07*qoM6N<$f{Wdk?*IS* literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_stake_eth/00007.png b/tests/snapshots/ethereum_ethx_nanos_stake_eth/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..c135a4bf2ba0e8090182811c9eae32903871d429 GIT binary patch literal 457 zcmV;)0XF`LP)Xv8K~nVzDpSTnqQL z&3`Fg9Je1sPy{z{A6D*ydW`1VL|!8PgiDzC-zM`hYa7Z4_|NQxdw@fnIT87L_hIz} zXgXJLe-i|&)BVZh9IPZ)p_O?4!~9ULJR&9KR*ccZ^hTTd5TtL(cJM}xsn%(s(+nj`r@YB%P!%>gE>!h|i8COdti%BHo2y1moi(;>g4jRwN zdWI1I=6wM?(a2vk?zJy9B-Z6E_Fz;qjAF_J49TM4TFe*aA@t~X)Qw+)M&+;^Ytc0Q z=)P%tDf>3Gsg_tGc0eqdukVOVk|arzB)KpjnXai{==?d!00000NkvXXu0mjf{E^Tk literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_stake_eth/00008.png b/tests/snapshots/ethereum_ethx_nanos_stake_eth/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..7b71a4dc60e334fa58cceeeb897445fb5477d717 GIT binary patch literal 353 zcmV-n0iOPeP)Dg zT2>%gCYS@{Rl3oYue)LuDvVrrmfDqlCmJPSJE>_tvc^e;ty4^p1&l==Ke@nuvM{wF zW6s=V=*Z4xR(eieb)tg`$k1z7ov>=f9BLjGlU;m86?v7)2{3Hk^Knn7wC54~?(=E= z0DrPm+wF%7?tL=1jq#-$kCf5 zU;^Y9n8;uaXiT+_^7T-UIm502000000AsQOQH8rvE7&ib00000NkvXXu0mjf-Zq$c literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_stake_eth/00009.png b/tests/snapshots/ethereum_ethx_nanos_stake_eth/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b GIT binary patch literal 414 zcmV;P0b%}$P)j~f|{k#}B z4)Di%0(GQh%XXzDG$sKK-Q2JkKR-`QsiPFD-4d_!i{fwH;J|_aEL%ZYNu#B0FJ7G| z;=_VQWOA9;dQ4Y9)LpKCV=ri`X({49JagUwO3&5UdSK)wEJxPN%9wG}45n;lzK(aC zKtbL$y*-#9uSql`7 zENOEh^0jsFWbV&<+yj5)WEX_aERLO-`${sQhD#B5ZCio#Fr4qHlr^7X|9DL69eFa= z#kf#}$Pcl(QEE=tNl8Pt$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL07*qo IM6N<$g02I(Gynhq literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_stake_eth/00010.png b/tests/snapshots/ethereum_ethx_nanos_stake_eth/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/src/eth/ethx/claim.test.js b/tests/src/eth/ethx/claim.test.js new file mode 100644 index 0000000..e1b1e28 --- /dev/null +++ b/tests/src/eth/ethx/claim.test.js @@ -0,0 +1,41 @@ +import "core-js/stable"; +import "regenerator-runtime"; +import { + waitForAppScreen, + zemu, + nano_models, + serializeTx, + txFromEtherscan, +} from "../../test.fixture"; + +const contractAddr = "0xcf5ea1b38380f6af39068375516daf40ed70d299"; +const pluginName = "staderlabs"; +const testNetwork = "ethereum"; +const chainID = 1; +// Test from replayed transaction: https://etherscan.io/tx/0x6a9c6ec076057ece2cd2201376e889fd58aed440ced33b769e78f86d0043a9a5 +const inputData = + "0x02f8910156850680edd7ec850680edd7ec83015d09949f0491b32dbce587c50c4c43ab303b06478193a780a4379607f50000000000000000000000000000000000000000000000000000000000000042c080a0ef4bce4226c5f12be27b95257456c6f51268d46a4d34c5eee583dbe41266fb51a02ca1ee59d5ddfd731edeccc0599e6f76a9012420412c98008cd05bdc3bf52668"; + +nano_models.forEach(function (model) { + test( + "[Nano " + model.letter + "] Claim ETH", + zemu(model, async (sim, eth) => { + const serializedTx = txFromEtherscan(inputData); + + const tx = eth.signTransaction("44'/60'/0'/0", serializedTx); + + const right_clicks = model.letter === "S" ? 6 : 4; + + // Wait for the application to actually load and parse the transaction + await waitForAppScreen(sim); + // Navigate the display by pressing the right button `right_clicks` times, then pressing both buttons to accept the transaction. + await sim.navigateAndCompareSnapshots( + ".", + testNetwork + "_ethx_" + model.name + "_claim_eth", + [right_clicks, 0] + ); + + await tx; + }) + ); +}); diff --git a/tests/src/eth/ethx/deposit.test.js b/tests/src/eth/ethx/deposit.test.js new file mode 100644 index 0000000..9f51e9c --- /dev/null +++ b/tests/src/eth/ethx/deposit.test.js @@ -0,0 +1,41 @@ +import "core-js/stable"; +import "regenerator-runtime"; +import { + waitForAppScreen, + zemu, + nano_models, + serializeTx, + txFromEtherscan, +} from "../../test.fixture"; + +const contractAddr = "0xcf5ea1b38380f6af39068375516daf40ed70d299"; +const pluginName = "staderlabs"; +const testNetwork = "ethereum"; +const chainID = 1; +// Test from replayed transaction: https://etherscan.io/tx/0x4e771017864ff34176c8c9fa62fe1950852933345f921dc5316c63554c9bc453 +const inputData = + "0x02f8980113850550de54dd850550de54dd8301c88a94cf5ea1b38380f6af39068375516daf40ed70d29987038d7ea4c68000a4f340fa01000000000000000000000000ad345b348bd84a4b42a5fde63feb7a29ef2af4e9c080a0a3adf22f4ce9fead664befb0ca33730f3bb8edb1a1d65a7f5275ac9a8622d29ea01a99e171740d723ee61049d7f0465f4e219fca86aaddf06bab02d3400f554242"; + +nano_models.forEach(function (model) { + test( + "[Nano " + model.letter + "] Deposit ETH", + zemu(model, async (sim, eth) => { + const serializedTx = txFromEtherscan(inputData); + + const tx = eth.signTransaction("44'/60'/0'/0", serializedTx); + + const right_clicks = model.letter === "S" ? 9 : 4; + + // Wait for the application to actually load and parse the transaction + await waitForAppScreen(sim); + // Navigate the display by pressing the right button `right_clicks` times, then pressing both buttons to accept the transaction. + await sim.navigateAndCompareSnapshots( + ".", + testNetwork + "_ethx_" + model.name + "_stake_eth", + [right_clicks, 0] + ); + + await tx; + }) + ); +}); diff --git a/tests/src/eth/ethx/withdraw.test.js b/tests/src/eth/ethx/withdraw.test.js new file mode 100644 index 0000000..2e05734 --- /dev/null +++ b/tests/src/eth/ethx/withdraw.test.js @@ -0,0 +1,41 @@ +import "core-js/stable"; +import "regenerator-runtime"; +import { + waitForAppScreen, + zemu, + nano_models, + serializeTx, + txFromEtherscan, +} from "../../test.fixture"; + +const contractAddr = "0xcf5ea1b38380f6af39068375516daf40ed70d299"; +const pluginName = "staderlabs"; +const testNetwork = "ethereum"; +const chainID = 1; +// Test from replayed transaction: https://etherscan.io/tx/0xa7b2f78c84bc5528629d37b56856d47601c42f4d7f1505fa6767bcd090fb5044 +const inputData = + "0x02f8b30182059585053f837bd185053f837bd18304d7be949f0491b32dbce587c50c4c43ab303b06478193a780b844ccc143b80000000000000000000000000000000000000000000000056a30e2758fb0a40000000000000000000000000087bc2f2ba8c83f412fed5c3151de0ffbdc959984c080a01bf62d962c7e2d888df40f0a61dd9eb6c60ed01e1291ce15b9acbad154e0cf619fc470d4477df1e52cb4030e2f976dc13856d09010d164dd97a5532d59b9d413"; + +nano_models.forEach(function (model) { + test( + "[Nano " + model.letter + "] Request Withdraw ETH", + zemu(model, async (sim, eth) => { + const serializedTx = txFromEtherscan(inputData); + + const tx = eth.signTransaction("44'/60'/0'/0", serializedTx); + + const right_clicks = model.letter === "S" ? 9 : 4; + + // Wait for the application to actually load and parse the transaction + await waitForAppScreen(sim); + // Navigate the display by pressing the right button `right_clicks` times, then pressing both buttons to accept the transaction. + await sim.navigateAndCompareSnapshots( + ".", + testNetwork + "_ethx_" + model.name + "_request_withdraw_eth", + [right_clicks, 0] + ); + + await tx; + }) + ); +}); From b0b7f5e86f8033d410d5c0f60dc008fca0ff46e7 Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Wed, 23 Aug 2023 08:16:20 +0530 Subject: [PATCH 2/8] fix ci (#22) * ethx deposit changes * ethx deposit fixes * ethx deposit test * ethx request withdraw * ethx claim * fix ci (#21) * bump plugin version * update wfs * upgrade deps * upgrade deps * fix test suite --------- Co-authored-by: Adrien Lacombe --- .github/workflows/check_sdk.yml | 40 ++++++++++++++++++ .github/workflows/ci-workflow.yml | 21 +++++++++ .github/workflows/guidelines_enforcer.yml | 23 ++++++++++ Makefile | 4 +- tests/package.json | 30 ++++++------- .../bsc_bnbx_nanox_claim_withdraw/00001.png | Bin 412 -> 406 bytes .../bsc_bnbx_nanox_claim_withdraw/00004.png | Bin 435 -> 433 bytes .../bsc_bnbx_nanox_claim_withdraw/00006.png | Bin 382 -> 381 bytes .../bsc_bnbx_nanox_deposit/00001.png | Bin 418 -> 415 bytes .../bsc_bnbx_nanox_deposit/00002.png | Bin 383 -> 378 bytes .../bsc_bnbx_nanox_deposit/00004.png | Bin 435 -> 433 bytes .../bsc_bnbx_nanox_deposit/00006.png | Bin 382 -> 381 bytes .../bsc_bnbx_nanox_request_withdraw/00001.png | Bin 434 -> 430 bytes .../bsc_bnbx_nanox_request_withdraw/00002.png | Bin 452 -> 451 bytes .../bsc_bnbx_nanox_request_withdraw/00004.png | Bin 435 -> 433 bytes .../bsc_bnbx_nanox_request_withdraw/00006.png | Bin 382 -> 381 bytes .../ethereum_ethx_nanosp_claim_eth/00000.png | Bin 0 -> 414 bytes .../ethereum_ethx_nanosp_claim_eth/00001.png | Bin 0 -> 412 bytes .../ethereum_ethx_nanosp_claim_eth/00002.png | Bin 0 -> 303 bytes .../ethereum_ethx_nanosp_claim_eth/00003.png | Bin 0 -> 601 bytes .../ethereum_ethx_nanosp_claim_eth/00004.png | Bin 0 -> 472 bytes .../ethereum_ethx_nanosp_claim_eth/00005.png | Bin 0 -> 382 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 434 bytes .../00002.png | Bin 0 -> 450 bytes .../00003.png | Bin 0 -> 789 bytes .../00004.png | Bin 0 -> 599 bytes .../00005.png | Bin 0 -> 472 bytes .../00006.png | Bin 0 -> 382 bytes .../ethereum_ethx_nanosp_stake_eth/00000.png | Bin 0 -> 414 bytes .../ethereum_ethx_nanosp_stake_eth/00001.png | Bin 0 -> 418 bytes .../ethereum_ethx_nanosp_stake_eth/00002.png | Bin 0 -> 355 bytes .../ethereum_ethx_nanosp_stake_eth/00003.png | Bin 0 -> 823 bytes .../ethereum_ethx_nanosp_stake_eth/00004.png | Bin 0 -> 599 bytes .../ethereum_ethx_nanosp_stake_eth/00005.png | Bin 0 -> 472 bytes .../ethereum_ethx_nanosp_stake_eth/00006.png | Bin 0 -> 382 bytes .../ethereum_ethx_nanox_claim_eth/00000.png | Bin 0 -> 414 bytes .../ethereum_ethx_nanox_claim_eth/00001.png | Bin 0 -> 406 bytes .../ethereum_ethx_nanox_claim_eth/00002.png | Bin 0 -> 303 bytes .../ethereum_ethx_nanox_claim_eth/00003.png | Bin 0 -> 599 bytes .../ethereum_ethx_nanox_claim_eth/00004.png | Bin 0 -> 472 bytes .../ethereum_ethx_nanox_claim_eth/00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 430 bytes .../00002.png | Bin 0 -> 453 bytes .../00003.png | Bin 0 -> 789 bytes .../00004.png | Bin 0 -> 597 bytes .../00005.png | Bin 0 -> 472 bytes .../00006.png | Bin 0 -> 381 bytes .../ethereum_ethx_nanox_stake_eth/00000.png | Bin 0 -> 414 bytes .../ethereum_ethx_nanox_stake_eth/00001.png | Bin 0 -> 415 bytes .../ethereum_ethx_nanox_stake_eth/00002.png | Bin 0 -> 353 bytes .../ethereum_ethx_nanox_stake_eth/00003.png | Bin 0 -> 823 bytes .../ethereum_ethx_nanox_stake_eth/00004.png | Bin 0 -> 598 bytes .../ethereum_ethx_nanox_stake_eth/00005.png | Bin 0 -> 472 bytes .../ethereum_ethx_nanox_stake_eth/00006.png | Bin 0 -> 381 bytes .../00001.png | Bin 412 -> 406 bytes .../00003.png | Bin 601 -> 600 bytes .../00005.png | Bin 382 -> 381 bytes .../00001.png | Bin 418 -> 415 bytes .../00002.png | Bin 451 -> 448 bytes .../00003.png | Bin 557 -> 555 bytes .../00005.png | Bin 382 -> 381 bytes .../00001.png | Bin 434 -> 430 bytes .../00002.png | Bin 471 -> 468 bytes .../00003.png | Bin 577 -> 575 bytes .../00005.png | Bin 382 -> 381 bytes .../fantom_ftmx_nanox_deposit/00001.png | Bin 418 -> 415 bytes .../fantom_ftmx_nanox_deposit/00002.png | Bin 370 -> 367 bytes .../fantom_ftmx_nanox_deposit/00004.png | Bin 423 -> 421 bytes .../fantom_ftmx_nanox_deposit/00006.png | Bin 382 -> 381 bytes .../fantom_ftmx_nanox_undelegate/00001.png | Bin 434 -> 430 bytes .../fantom_ftmx_nanox_undelegate/00002.png | Bin 433 -> 433 bytes .../fantom_ftmx_nanox_undelegate/00004.png | Bin 423 -> 421 bytes .../fantom_ftmx_nanox_undelegate/00006.png | Bin 382 -> 381 bytes .../fantom_ftmx_nanox_withdraw/00001.png | Bin 412 -> 406 bytes .../fantom_ftmx_nanox_withdraw/00004.png | Bin 423 -> 421 bytes .../fantom_ftmx_nanox_withdraw/00006.png | Bin 382 -> 381 bytes .../00001.png | Bin 412 -> 406 bytes .../00004.png | Bin 449 -> 447 bytes .../00006.png | Bin 382 -> 381 bytes .../00001.png | Bin 434 -> 430 bytes .../00002.png | Bin 458 -> 453 bytes .../00004.png | Bin 449 -> 447 bytes .../00006.png | Bin 382 -> 381 bytes .../00001.png | Bin 418 -> 415 bytes .../00002.png | Bin 397 -> 392 bytes .../00004.png | Bin 449 -> 447 bytes .../00006.png | Bin 382 -> 381 bytes tests/src/bsc/claim_withdraw.test.js | 3 +- tests/src/bsc/deposit.test.js | 3 +- tests/src/bsc/request_withdraw.test.js | 3 +- tests/src/eth/ethx/claim.test.js | 3 +- tests/src/eth/ethx/deposit.test.js | 5 ++- tests/src/eth/ethx/withdraw.test.js | 5 ++- tests/src/eth/maticx/claim_withdrawal.test.js | 3 +- tests/src/eth/maticx/request_withdraw.test.js | 3 +- tests/src/eth/maticx/submit.test.js | 3 +- tests/src/fantom/deposit.test.js | 3 +- tests/src/fantom/undelegate.test.js | 3 +- tests/src/fantom/withdraw.test.js | 3 +- tests/src/polygon/claim_maticx_swap.test.js | 3 +- tests/src/polygon/request_maticx_swap.test.js | 3 +- ...p_matic_for_maticx_via_instantpool.test.js | 3 +- 104 files changed, 133 insertions(+), 34 deletions(-) create mode 100644 .github/workflows/check_sdk.yml create mode 100644 .github/workflows/guidelines_enforcer.yml create mode 100644 tests/snapshots/ethereum_ethx_nanosp_claim_eth/00000.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_claim_eth/00001.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_claim_eth/00002.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_claim_eth/00003.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_claim_eth/00004.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_claim_eth/00005.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_request_withdraw_eth/00000.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_request_withdraw_eth/00001.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_request_withdraw_eth/00002.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_request_withdraw_eth/00003.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_request_withdraw_eth/00004.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_request_withdraw_eth/00005.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_request_withdraw_eth/00006.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_stake_eth/00000.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_stake_eth/00001.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_stake_eth/00002.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_stake_eth/00003.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_stake_eth/00004.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_stake_eth/00005.png create mode 100644 tests/snapshots/ethereum_ethx_nanosp_stake_eth/00006.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_claim_eth/00000.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_claim_eth/00001.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_claim_eth/00002.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_claim_eth/00003.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_claim_eth/00004.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_claim_eth/00005.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00000.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00001.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00002.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00003.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00004.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00005.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00006.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_stake_eth/00000.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_stake_eth/00001.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_stake_eth/00002.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_stake_eth/00003.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_stake_eth/00004.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_stake_eth/00005.png create mode 100644 tests/snapshots/ethereum_ethx_nanox_stake_eth/00006.png diff --git a/.github/workflows/check_sdk.yml b/.github/workflows/check_sdk.yml new file mode 100644 index 0000000..2f9f754 --- /dev/null +++ b/.github/workflows/check_sdk.yml @@ -0,0 +1,40 @@ +name: Check SDK submodule version + +on: + workflow_dispatch: + push: + branches: + - master + - develop + pull_request: + +jobs: + job_check_SDK: + name: Check Ethereum plugin SDK submodule is up-to-date + runs-on: ubuntu-latest + steps: + - name: Clone plugin + uses: actions/checkout@v3 + with: + submodules: recursive + - name: Clone SDK + uses: actions/checkout@v3 + with: + repository: LedgerHQ/ethereum-plugin-sdk + path: plugin-sdk + ref: ${{ github.base_ref || github.ref_name }} + - name: Comparing the SDK hash values + run: | + git config --global --add safe.directory "$GITHUB_WORKSPACE" + REPO_SDK_HASH=$(git submodule status | grep sdk | cut -d ' ' -f2) + echo "SDK submodule hash: ${REPO_SDK_HASH} (checked out from '${{ github.base_ref || github.ref_name }}')" + CURRENT_SDK_HASH=$(cd ./plugin-sdk/ && git rev-parse HEAD) + echo "SDK submodule hash: ${CURRENT_SDK_HASH}" + if [ ${REPO_SDK_HASH} = ${CURRENT_SDK_HASH} ] + then + echo "SDK versions match!" + exit 0 + else + echo "SDK versions mismatch!" + exit 1 + fi diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index 1b82da9..bae98db 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -38,6 +38,27 @@ jobs: run: | make BOLOS_SDK=${{ matrix.sdk }} -j + job_scan_build: + name: Clang Static Analyzer + runs-on: ubuntu-latest + container: + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-lite:latest + + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Build with Clang Static Analyzer + run: | + scan-build --use-cc=clang -analyze-headers -enable-checker security -enable-checker unix -enable-checker valist -o scan-build --status-bugs make default + + - uses: actions/upload-artifact@v3 + if: failure() + with: + name: scan-build + path: scan-build + job_build_debug_plugin: name: Build debug plugin strategy: diff --git a/.github/workflows/guidelines_enforcer.yml b/.github/workflows/guidelines_enforcer.yml new file mode 100644 index 0000000..fdaf9f2 --- /dev/null +++ b/.github/workflows/guidelines_enforcer.yml @@ -0,0 +1,23 @@ +name: Ensure compliance with Ledger guidelines + +# This workflow is mandatory in all applications +# It calls a reusable workflow guidelines_enforcer developed by Ledger's internal developer team. +# The successful completion of the reusable workflow is a mandatory step for an app to be available on the Ledger +# application store. +# +# More information on the guidelines can be found in the repository: +# LedgerHQ/ledger-app-workflows/ + +on: + workflow_dispatch: + push: + branches: + - master + - main + - develop + pull_request: + +jobs: + guidelines_enforcer: + name: Call Ledger guidelines_enforcer + uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_guidelines_enforcer.yml@v1 diff --git a/Makefile b/Makefile index 4c0af6d..821d113 100755 --- a/Makefile +++ b/Makefile @@ -32,8 +32,8 @@ APP_LOAD_PARAMS += --appFlags 0x800 --path "44'/60'" --curve secp256k1 APP_LOAD_PARAMS += $(COMMON_LOAD_PARAMS) APPVERSION_M = 1 -APPVERSION_N = 0 -APPVERSION_P = 1 +APPVERSION_N = 1 +APPVERSION_P = 0 APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" ifeq ($(TARGET_NAME), TARGET_NANOS) diff --git a/tests/package.json b/tests/package.json index 4eb78c0..803b72f 100644 --- a/tests/package.json +++ b/tests/package.json @@ -11,30 +11,30 @@ "author": "", "license": "ISC", "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@ledgerhq/hw-app-eth": "^6.18.0", - "@ledgerhq/hw-transport-http": "^6.15.0", - "@ledgerhq/logs": "^5.50.0", - "@zondax/zemu": "^0.32.0", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@ledgerhq/hw-app-eth": "^6.33.7", + "@ledgerhq/hw-transport-http": "^6.28.0", + "@ledgerhq/logs": "^6.2.0", + "@zondax/zemu": "^0.43.1", "bip32-path": "^0.4.2", - "core-js": "^3.7.0", + "core-js": "^3.31.1", "ethereum-tx-decoder": "^3.0.0", - "ethers": "^5.4.7", + "ethers": "^5.6.3", "fs-extra": "^10.0.0", "google-protobuf": "^3.11.0", - "jest-serial-runner": "^1.1.0", + "jest-serial-runner": "^1.2.1", "js-sha256": "^0.9.0", - "regenerator-runtime": "^0.13.7", + "regenerator-runtime": "^0.13.9", "secp256k1": "^3.7.1" }, "devDependencies": { - "@babel/cli": "^7.7.0", - "@babel/core": "^7.7.2", - "@babel/preset-env": "^7.7.1", - "@babel/preset-flow": "^7.0.0", + "@babel/cli": "^7.22.6", + "@babel/core": "^7.22.8", + "@babel/preset-env": "^7.22.7", + "@babel/preset-flow": "^7.22.5", "@babel/preset-stage-0": "^7.0.0", - "@babel/register": "^7.7.0", + "@babel/register": "^7.22.5", "flow-bin": "^0.112.0", - "jest": "^26.6.3" + "jest": "29.6.1" } } diff --git a/tests/snapshots/bsc_bnbx_nanox_claim_withdraw/00001.png b/tests/snapshots/bsc_bnbx_nanox_claim_withdraw/00001.png index 8d2714a1fff72ec7d077c583dbe9c16f0c1a82c0..b9c50034da66e53c2e7b74933fa58499a453b04b 100644 GIT binary patch delta 379 zcmV->0fhdX1C|4jB!68=L_t(|obA|Aa)clZfMK@Nn|S{tahEiK>?{H6|2;Vv zQ3#-t5&!@I5bhOuvz)UWAII^=wb!re#*bDw$#>YD$_8)J1#876z>wJ>X{gN)UG5g1 z!8vEC#3Z#b^W>CNQj47AE8rfQY4CY)9v{Dwm!7hcT5!p&*?&An8UI%MhQ-YQ8J_1* zEd$E#Yma^R?8Tbh7`ZlbZ48|OriGdr)E8^hL%U|E=I+w>anVcAklOk%^DCLl~7xq+ZU$4?@xCback}tKK%0x007{*vLYpo;Hc+%2Ho$vaLL2Wvuro?itcW{ z4wKCsbE@3_+jPp-3210+E19$IfA2o-nt*LPbkx?Hac#l7W|M54fPXX08*BphX|t@| z?&nadd?szK^T4-j&mC1encffMbTz#nj2x`QDzp;s;g#rK0000000000000000001B ZnjfGo^U_+)E)oC$002ovPDHLkV1hylyKw*j delta 385 zcmV-{0e=3L1DpepB!6Q`L_t(|obB0da)clZfMK@Nn|S{tahLvZnn^%DWsNjkgtGuXr{sY#eTj0N?v%%LTZ^yZhy(98fE@V?K>@Q2FUQ- zhiaLj?7sHcckdo7+07%*My`#aGr+V^GlTkIX?keaoGQ7y^nF}V0IoHrwm!UFoz}Y| z*Pj&m8S3tDdP}IS&g}=&-~H2FM%1R+R5~O7^kc0{b0mkCRU-D*oSALdjS9d0000000000 f00000fMI?BLIn0{fhO1+00000NkvXXu0mjfT9Lem diff --git a/tests/snapshots/bsc_bnbx_nanox_claim_withdraw/00004.png b/tests/snapshots/bsc_bnbx_nanox_claim_withdraw/00004.png index 3af63335853f2382e7acc40454dcf792d07a51dc..02dee0efa2cd99bbf872994510964dd3a3edd933 100644 GIT binary patch delta 407 zcmV;I0cifS1F-{;B!75GL_t(|obB0La>F1DKvCN1PT2pF*h@b=W(bIfv5`n}&zFl` zNFuRE@GrY2r-)RAJcxs#&pmH-+!iK#}ZVo33tx@T0Y`4 zSr2JfVq*7@&JR&^VqO zxixoD>+t?=ynoGLCoG`laRm&ob|5Z35B?n}+pR1m&Ta_^_t0JB-_k zN#e~Cu-lu!YT4x_=-JQF4sn))#>4T+vP_k?=31P}OQ;jxt)}Fsss@?ps}Vv?^p%kV zOH?6CogkBgr3fzo000000000000000006MeKkigK`w-s3NudA$002ovPDHLkV1ms~ B!a4u| delta 409 zcmV;K0cQTO1G58=B!7BIL_t(|obB0Lmck$mfMN8w6ZXF(_TocNISAp>3kmA~J#{Dp zPD0ZGodW;>0MtG7rwk!%7vB3?%jq#Mj-&5o{Q>UuMRAWT6A(i1-e-%~eJ_URgxlACEg!K@ zHbOd-*qGhb&w*J2vSL!MTvv(I(OKekt#)OzE9bzt1dWIIP-4U&HX>_Pf82s4C@nRS z_@ZuyEE{L*EH>J{gaH5m{?o+MQ1OH^`}Z;a*gei{>{QEJCtAd9n$`CB9<^hD?(sn5 zcy8p@xr^F>*ME28Z3a7G@dR{1Itzd9PWaF_E!V%6`9^aSkXG0UU0#Cj{T%HOXE|tejy=mVRo*(+;#6Kjo$xNTB!5*k$V6X_5Ne{Y zj2u{^3R&s|nH)?-cmV(a000000000000000fN9=kITAnnIP}TK00000NkvXXu0mjf Dzj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M BtU2UxaSLj z3FKueHzfc703h5e@?kk=IX;f#!oA~nb>n9nT;wcZR|X`B#n5Hi~IyUqf~YHJUEY!w`5I^Zo~`L%zu`v*U<5o`Zq0Z2gvd~ zm#PlX!`EK>=GDQL%^0~iGB<|qfU1Y3YEciiRxWMNRLkAe_wS-p&=fB}EPYmF{z;KP zL(T77`AP7ybNj~h`TaE0h}m-Y!2x>IM6nS-SmUH||900000 i0000000000V3|MsMi#?@^zG&V0000Q;x6;U*s!z(beGD+_xWYC zqI{d05&!@I5bh`PVL4|x-nQ++z2kRv2-x@q#t8R`!cjNBW!HipiCs)nU%P!EsgWO zPm25uHTSo2OYm0b_KoTH{%I~FX35=?5C1#^004Ndd>9O#{XWk!n3)*7x~$u>p=U`R zDK%54$;#^J7=QHX#b+cpSH^U+q$^l=2ABy3;dMsiPXI152eLldm;oz`{vk7)PUj$F`?!+o|r%of&2UF3!00000 m00000000000002MG#{QF8Cnd)!1@3H002ovPDHLkU;%0{Q}wB!59kL_t(|obB0B4uc>JfMK@mCf@%@++}Zsw53BLQ0M8E$3X0kK^dSr1RuBKD!5C(4o9(aC<~dfKX;bNrOK>M79Pd(@GIb zPzjj`q95xz(4tWv#}RP`lxIBWY{pB(+Uy~zsS{Jg1SB^H&VN(y^fqCP*Ld$9z{Mh0 z8&l{tAX#gvScH=bx>!PjFTwx-0ME4fHMI3YDR$zV%?90Dt6f~BH$0xG4o$st&}ug? ztXs@)gHZmo2?{${;j{QJi(f@YA3{xU|WiT+~bU?-~3 xPCtT74yGc!0000000000000000002MG+zc;^I^E~wHW{a002ovPDHLkV1f|hov;7^ delta 356 zcmV-q0h|8%0{;S#B!5OpL_t(|obB0B4uc>JfMK@mCf@%@++`0-h-piQY(Uljdon~B zwo;U(1ONa4O!rtl09($v9BT5hd$JO5_AU%dR|7C|-0M1LA1)I@(W za?iUH||9000000000000000V3;>MTlM(dqfnv%0000F1DKvCN1PT2pF*h@b=W(bIfv5`n}&zFl` zNFuRE@GrY2r-)RAJcxs#&pmH-+!iK#}ZVo33tx@T0Y`4 zSr2JfVq*7@&JR&^VqO zxixoD>+t?=ynoGLCoG`laRm&ob|5Z35B?n}+pR1m&Ta_^_t0JB-_k zN#e~Cu-lu!YT4x_=-JQF4sn))#>4T+vP_k?=31P}OQ;jxt)}Fsss@?ps}Vv?^p%kV zOH?6CogkBgr3fzo000000000000000006MeKkigK`w-s3NudA$002ovPDHLkV1ms~ B!a4u| delta 409 zcmV;K0cQTO1G58=B!7BIL_t(|obB0Lmck$mfMN8w6ZXF(_TocNISAp>3kmA~J#{Dp zPD0ZGodW;>0MtG7rwk!%7vB3?%jq#Mj-&5o{Q>UuMRAWT6A(i1-e-%~eJ_URgxlACEg!K@ zHbOd-*qGhb&w*J2vSL!MTvv(I(OKekt#)OzE9bzt1dWIIP-4U&HX>_Pf82s4C@nRS z_@ZuyEE{L*EH>J{gaH5m{?o+MQ1OH^`}Z;a*gei{>{QEJCtAd9n$`CB9<^hD?(sn5 zcy8p@xr^F>*ME28Z3a7G@dR{1Itzd9PWaF_E!V%6`9^aSkXG0UU0#Cj{T%HOXE|tejy=mVRo*(+;#6Kjo$xNTB!5*k$V6X_5Ne{Y zj2u{^3R&s|nH)?-cmV(a000000000000000fN9=kITAnnIP}TK00000NkvXXu0mjf Dzj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M Btz1Fi#*BuRBiL_t(|obB0dl7k=&fMK??H}U>Q;x7Hclwm^x=t`jN`}}e= zLJeO^LjV8(0Nnj}Ru*H-$H#G8xOe=nZv5E-C;4@&sea&*Z6bdj4t12o1E+&@e7pp$ zdFn!};F?;p_!)KlrRO`%Zv^D-nYwBnP^Yim_tmR|C95&{UeCGFbp(hfEQwA%SX$Y& zEvHKEPJOrYo`O!X=7*_udCot<^EFgm-^wMynw{G>hQI5lI*q6$cTax#>lpw5z~>Wh zgg1Tx`Fu?M$JT!zVk7oXaoe)p&=G^*Zr%OVpl$WkG2hFYg39yO9^A-=-AFmBY&`-j zQ;x7AxS%!uL&`O}~`}}e= zVhLYLLjV8(0Ng!19~NWG$H#G8xOe=nZv5E-C;4@IQeEMZZ6beu9G+1U6;21~`1lvJ z=BW#@f@^BY;%C(Hm+E(#-w4RvGj-KEpiW=A@2gh_OIBm@y`FQU>j)4vEQwA%SX$Y& zEvHKEPJOp?YJh8%vF3-De@^RJp7T%ed<|9Cw{l6aX6N>e;d%X3rxCT}?#VBIJp%v$ z_ z)+4|&zMrZFZ<6}t{TiVB`=xQUJR^d)nt9%J5w17y?h1A$M}XC{rfRRBLcN4GHa^?W z@~>$pz1wz^PhuvS?7LA?P4=D91}iZOt<*^}Z7>z-1pp-g0000000000000000H*l^ X5YrucCj{#o00000NkvXXu0mjf5&EI+$W^3PZ|J~cGMWi zf$5Cw#>`Wln}S?5X*@Xa3h$m>Ub{QsPljqQ7s_Rnu+%cGvA<(P=A11IR0BtvtJH1Gdn8zwLSHwRPMQ_w2K6dlRxcE z+T0LR8;`A63x86tpaU!S9O7oJIITVI$pb3}KqgjsF*d~qm3tZ=)7_cPS|6|&S4N^g zW!YnclG0|K0M;*1Z(fdm7S^#HsM}j+0zCjTIuVChje-4iCBJ+HkDaa80~-#4EZ2Z8_(Zk_0!UR1zgaeYPCbDRPM_ zvrhLjFSG9(P};zzr<6*%oUK#jSiKp|pS{d0ZTbc{)F0WNa(}3B@6dgHQUj=NN3}uS zFoTf|?0Lk#T~L#B8W%1++_xvnPjm&^gP|H%n}e{rTn)m93A#U|Kl)4n001~KeHz-E z8rCyE`Druva@xY1>oRrIUS?JDSItoChw1G+H}?i?qFvvPtawMR>eXj~u$8b~H~Bex zdvo{AD|y6*ujuyp#E~L;t$kN^Mx07*qoM6N<$f)we=7ytkO diff --git a/tests/snapshots/bsc_bnbx_nanox_request_withdraw/00004.png b/tests/snapshots/bsc_bnbx_nanox_request_withdraw/00004.png index 3af63335853f2382e7acc40454dcf792d07a51dc..02dee0efa2cd99bbf872994510964dd3a3edd933 100644 GIT binary patch delta 407 zcmV;I0cifS1F-{;B!75GL_t(|obB0La>F1DKvCN1PT2pF*h@b=W(bIfv5`n}&zFl` zNFuRE@GrY2r-)RAJcxs#&pmH-+!iK#}ZVo33tx@T0Y`4 zSr2JfVq*7@&JR&^VqO zxixoD>+t?=ynoGLCoG`laRm&ob|5Z35B?n}+pR1m&Ta_^_t0JB-_k zN#e~Cu-lu!YT4x_=-JQF4sn))#>4T+vP_k?=31P}OQ;jxt)}Fsss@?ps}Vv?^p%kV zOH?6CogkBgr3fzo000000000000000006MeKkigK`w-s3NudA$002ovPDHLkV1ms~ B!a4u| delta 409 zcmV;K0cQTO1G58=B!7BIL_t(|obB0Lmck$mfMN8w6ZXF(_TocNISAp>3kmA~J#{Dp zPD0ZGodW;>0MtG7rwk!%7vB3?%jq#Mj-&5o{Q>UuMRAWT6A(i1-e-%~eJ_URgxlACEg!K@ zHbOd-*qGhb&w*J2vSL!MTvv(I(OKekt#)OzE9bzt1dWIIP-4U&HX>_Pf82s4C@nRS z_@ZuyEE{L*EH>J{gaH5m{?o+MQ1OH^`}Z;a*gei{>{QEJCtAd9n$`CB9<^hD?(sn5 zcy8p@xr^F>*ME28Z3a7G@dR{1Itzd9PWaF_E!V%6`9^aSkXG0UU0#Cj{T%HOXE|tejy=mVRo*(+;#6Kjo$xNTB!5*k$V6X_5Ne{Y zj2u{^3R&s|nH)?-cmV(a000000000000000fN9=kITAnnIP}TK00000NkvXXu0mjf Dzj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M BtvpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*@Q2FUQ-hiaLj?7sHcckdo7+07%*My`#aGr+V^ zGlTkIX?keaoGQ7y^nF}V0IoHrwm!UFoz}Y|*Pj&m8S3tDdP}IS&g}=&-~H2FM%p7xV8mc1R-u{Lhi9UD0RR9100000000000001hVSWHY1omlxCfFMQ0000%HTW9*|^;0B|&6UxdzT@@uQz8#i%;RmD?ZnRA&Tu>^qHtpuLuUWmdj(sjsecUrU#%;P4(M4Z_%S0sWok=TMQyw!NW|0C&t;ucLK6TZb%V74 literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanosp_claim_eth/00003.png b/tests/snapshots/ethereum_ethx_nanosp_claim_eth/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..d989a8118f1670bb1b449ab793b146697c1c752b GIT binary patch literal 601 zcmV-f0;c_mP)7Wt(!CNHfKp1%ncTeT^LD;8ZKsHRx^O$Xaf{96d^`KIkZ;nh4%bCg zs+3aItQ}iBVq@#{53c5c9a9jW6Y0M9d-15}5DTp-v61}hAA_&}kYvK|+|*HO)Jr|? z+AsyRsiq=6sCCJRo$F+=G4>%000000@IMKthEAXt zaN0)l=7nYD8hUSD`s>2`7ikA}EXMsSwtExqVXQ(Qao4vT698j27preOgA^1D0uT%h zz_!!2+(ZxL6%XS-{ql~WD>Bq~Ly#KkJA)WRf-DpXp2LxFc?YVY%FY@76KT;43A~Ca z_T`OAFVX3vWs5KIT86H724zlD z=3L{M*Fn3zCpDV#7T(KZ+1QJqcz-nF8UUl>;@7V9In&7}Fn*Avv`$b&*E1Dyq0000`Ib&}qVXo=`)?leY9t8FU1#`^SM4fX}(2)V)IcL=$yZt#Y0K1h-UxH^q nFy}2pjm1#_0000006>>t?9>YFgBi9R00000NkvXXu0mjf=}!-^ literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanosp_claim_eth/00004.png b/tests/snapshots/ethereum_ethx_nanosp_claim_eth/00004.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*3AN zP6z4u_!qS1sSB}!Yih~jXVmeR>UWyo2*}+tb=5kcPG7t4t5*k0R%7zLo^zw?2oNF$=BKNiuCP73l>4000000000000000 c005@>0}#_4dM5>zWdHyG literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanosp_request_withdraw_eth/00002.png b/tests/snapshots/ethereum_ethx_nanosp_request_withdraw_eth/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..d89b812b22ef90524da1dc5ddfc9b9172083255c GIT binary patch literal 450 zcmV;z0X_bSP)Q31IlGsZ>EFm;6BOE-qz30mr1Hlj;CdUB)008_qwbojzzFzbd8~VUpS0-+2#6oDz7-J7y~FhNrVbF(j_8BFV+LC`apr0Eoq|kl(wNA2grg_RS9S&L z#ZauP<{~Vzi$(ZQjUF%QAAKeO003N=--haKoVN??H+k)lM+bG`BFz!L00)WVs_MP3 zmn%q4#+RY|QegSLhjaaLK-o)W! zaYQHWr0I52!4dx4l9-Skzf;H875q2xu}P!;@jeqL#tW5FEKQ8q+NhkBVwFb zXt?SkLZI_Q*QVOZf%@hM{S-qph1j{f;uB~BkW3oVI#JSfobHfDTHJrX7&wLti6A3w#khj93ubmU31P^+!2c6y!BO*wvoI%PNC^M{00000cYgd;mQs!%IcKS5 zSmv8@{CPzWU?v;cy%OnwQcBL5EZ+2gIUhD{w}^ea^m26J7Maueb=GGgpQO_|y8TVBzcN3N{W}&xO^)1^tz!=Th?Ayv91O)>J1VbIL z?6xf@(F1vli}CM1y)6)p4C}kWm>Sl120n-cQ796e!;$pnwPr(=vYGx7X;CWFECp-2 zoK~q`Y$|<=ztv09sLW_WMph|l>L1x(W~-(Y?Rtw+ZZ#}l?`5p|(t}FOO?Yma-aqd@ zQKMfn?sCvlOd!36zq*XY1a?%nH0m#}k`2`lgR$jCI6P)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*41i&FGB@%5N8&E?!`QI21$39n#P|7Sw4!{Qni2p201)mc@?kk=Io`JI!oA~n zb>q(#ILSNgNxH&|G{L>%I-nx6LAt@4ALV)TR`!cjNBW!HipiCs)nU% zP!EsgWOPm25uHTSo2OYm0b_KoTH{%I~FX35=? z5C1#^004Ndd>9O#{XWk!n3)*7x~$u>p=U`RDK%54$;#^J81(7IXCyaQ#&ol!D_D01 zmMgEbg1o;a@yz|Rk>k|L&RC~XtvC6uvGb+e zMyB<{7)?#<2cr+}#42>BP9xI?Q_;Kt000000000000000006)=AD$fBFejj#@vnzOS-1{7w-79%w^%gdu9-Z$e-Zl8U{Q9~r_p|-XnjL-NW$ZF$ zQ|hJeNQw$C_;T~YWr6ejQ`hpVUG@^4zCg}M^oYf^-wvy1f7{j9WxSxjP_Xdv(xkWB zE}Xfta%B=z)QskYE9`6MUO0ZgBCXuvchQ!xxZIef-y5F2U797Fr}iR?TXP>LGXuk& z;9G`Q=JC0=dxuW7*7)9yy&~ChAgK>+D)11a~CkTFJEwP%I}`rbp>%&w-3t4=C|r*NTe*< w-y@v0XupKzi6dH5I%_S2AF=|yiwyiev#k(%)pR;>&0UbNr>mdKI;Vst0ELQ~ApigX literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanosp_stake_eth/00003.png b/tests/snapshots/ethereum_ethx_nanosp_stake_eth/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..1d2f308805845dfc05d23ef013fd432cddd8e1b1 GIT binary patch literal 823 zcmV-71IYY|P)ojTb;Ud9G-xC?cYhDC{LfADECF}QFrNQr64slvJi=2 zk#oRS`#C=WMLJG@=DQr(@UN`RJGYLsA|rB21A;!on~vbTDhXSkegcheP}hfA_Z0Z zR$Z)fR=`L)D$?cnH8tH}ha)^7%@dH^v4-@?9X4IhP7N8P9T-bX>?2dlEv3Rf4@5@)?4UxA`tQxBVZ z62Oyi%-)`yTX`b0uDCus$eK{8Pk?oJvreibj$<6OQ&g5NaQekK^mzS; zdLqwH>gpKqD@%^t%GcJ-Oug|0Y@}A)tHG&EK$EiQtAq0L@m=5GOJUY~qM#i)B6aCh ztyLzVDZN;g)rKPi>RSLNhW-@P6u3N%T6!UP1MsEFR4Bzu#J<`MeD`6M?0Gm!2qA}(7zSC{&o&Zo_@t<)z7SuY3ntMtdd_)SW(ygaX zd|0%I-4kFvN0Wt4LrYH`>B&QG34{*;1}HWvy`~EN?QN`002ovPDHLkV1kg& BgQWlf literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanosp_stake_eth/00004.png b/tests/snapshots/ethereum_ethx_nanosp_stake_eth/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..e5979a2340b519cb2145f69a572e2391e817e2c6 GIT binary patch literal 599 zcmV-d0;v6oP)#Z7V=3twZruy zYO0h{wOKp1a>T-R&=;QOf*oBDe<#wp_IviIZHRn z^Z-sN%Merz?Jov4@C07S6YRsDaP^v^p-RpSuOcO42*Hvb zst>A+sFci=FLuA|dmAO6iC5if%&UxzdAgOJfc27mj@Vc466_?*L;Q0i{v-0AT|f8) z<1SrL%~pGG!P4tXMiggd)Sx(jF@g2c1uc35$ozOF8Ywy2i@DRru}I&!xo<{kmZw-@ zfGJml)faQ8JcSYYBYj_YL9;Gq-@fb}k^lNdbZ>L#Rbu0cy_Z-bPCzVKFaJSH00000 z01%8@-;`i7Jj7@TI&Mp_Xz2eVOlqQnCFr;;cZi_={4D lc()aI4*&oF0002MfnQ=qJ|p9#2qFLg002ovPDHLkV1fqn4YU9N literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanosp_stake_eth/00005.png b/tests/snapshots/ethereum_ethx_nanosp_stake_eth/00005.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*;FAD7*PnIk`e#_01)mKd9$3e93RK=#c)>&ILUX|oyrDp(gkb9CBTr`AZe)04_)pSp20b1sl+6;G4teanVcAklOk%^DCLl~7xq+ZU$4?@xCback}tKK%0x z007{*vLYpo;Hc+%2Ho$vaLL2Wvuro?itcW{4wKCsbE@3_+sf7nXlQIJnX~SH?>_FD zfNeW;)YhAEZNa-{lWd)Ue>2P*Yy$Rav#j0j=TNGACT*_sz_)A99aTG--Vft+HN78< z9IV7Dv=Z;(mFQjo000000000000000003Z`AD}Js(pt?f5&!@I07*qoM6N<$f(m`T A+yDRo literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanox_claim_eth/00002.png b/tests/snapshots/ethereum_ethx_nanox_claim_eth/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..62fd4e7582a9d6dff3a816a0088573cdfd98c524 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qr|pX978JRyuA^a*KEMU5McIJ zZRh`qMbm2+xJ_Yl4efsWcJF$VrIWISm2G?(7z%c-f5EWr>%HTW9*|^;0B|&6UxdzT@@uQz8#i%;RmD?ZnRA&Tu>^qHtpuLuUWmdj(sjsecUrU#%;P4(M4Z_%S0sWok=TMQyw!NW|0C&t;ucLK6TZb%V74 literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanox_claim_eth/00003.png b/tests/snapshots/ethereum_ethx_nanox_claim_eth/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab0e925cf0a9e06ebcd543f0d99960dec9a6e6b GIT binary patch literal 599 zcmV-d0;v6oP)7Wt(!CNHfKp1%ncTeT^LD;8ZKsHRx^O$Xaf{96d^`KIkZ;nh4%bCg zs+3aItQ}iBVq@#{53c5c9a9jW6Y0M9d-15hAr@LwVk0^0AA_&}kYvK|+|*HO)Jr|? z+AsyRsirb96^NZnU$HUvAq)Tj008hm38;onpcio3 zM)Kx`W#t-r?*aPj!uuC#2X-vR{VTS66YgQGLLYJ0w;U4yV>TD7Z##n&6bu3o3=P1x z)3)4159AdO<3IiKj-V?t)OSOW8tOZP7({|B6bYWgk#Knjs-eox8Geei=!FDc#T5JU zMx~eN^wF}#mv}8h*E@r+3{*Du*G z0OFIDYbr_*NG~L-5}H#0_=wN_c)NDA^UF{&2a|1CmZY@EO^JOii_XU^JnBo&PD4vo z0000008lw&Zzy4|>HyYYsX-nD_5}rV%+^Gmb5qcf0pK}j)gQb4IWGXal}lfOXFxFL lEkljPQ2+n{0000$mtS@M2kn=!6N&%;002ovPDHLkV1m;D4QT)X literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanox_claim_eth/00004.png b/tests/snapshots/ethereum_ethx_nanox_claim_eth/00004.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 O0000U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00000.png b/tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*O!pGnp(2>8Fl=n=R3`B1my0Sx@sLzr?1`j)vJRgt1S$|b>?o!d8tzw4(uji@DePk#C9 z82|vl=M!&)H+}*6d`$hv)*oUc_D^x!vfa=TgWqo5{nVgs_0%!n%bJ49^VS~R$cEiW zIjd|v0xaYEscP^hsZZXo0m{E$8du9RB6zEr=Uo@!dh_nCU}tg!SUqd1_WCK*OK4-` zvt5_}lXlX(Z8!NOW|GOi8zt3b-x+PN60^`sog~u+Q;}W(000000000000000003Z` YCvN;2;~T>V`~Uy|07*qoM6N<$f`RwRrvLx| literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00002.png b/tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..30f0cec80e926fecaf34a62e53c032a360d726fa GIT binary patch literal 453 zcmV;$0XqJPP)m|+-6$chslZtwYWWFQ#A!z3jD007{>DW#NB^!22#IMDa* z3cTg;#*O&dT>)DuCFk54H|Jb~EkS>`Ui6WcMU>gc{lv?hI|6DS=y=Y##@pRK(yqnG zFh7nGuXN}LaEKqWzU2_jeZuthqz(|%j_8BFV}dQaapq~xoq|kl(zuZ^xua*7uiX`} z7eleGnv1Z=E*9aW8r@&gKl)4n006jfa~rDnaHB0?zr$-MJUVEWFOntq1=vaK*H-U+ zN4cCdt2eTvSIx)?jCm1Erqf3fJGow}TaEa2e$}3%2=RvX6f@0C793X$z!%jp09ytO= z|3hiFcVPWj=v}Ew?b000000000000000fN6dK_Vkx|4#+RY|QegSLhjaaLK-o)W! zaYQHWr0I52!4dx4l9-Skzf;H875q2xu}P!;@jeqL#tW5FEKQ8q+NhkBVwFb zXt?SkLZI_Q*QVOZf%@hM{S-qph1j{f;uB~BkW3oVI#JSfobHfDTHJrX7&wLti6A3w#khj93ubmU31P^+!2c6y!BO*wvoIIqP)%PNC^M{00000cYgd;mQs!%IcKS5 zSmv8@{CPzWU?v;cy%OnwQcBL5EZ+2gIUhD{w}^ea^m26J7Maueb=GGgpQO_|yCJ1+hAL$<{Ug$%RH#`B)^s_o zQoYzz`WAnym!wgd(S(ewQqt5vvcJq$O)1*-7Ny*3SiauNSoNg`m6)6G+%&y^-hZM- zzhvCyprx2VdJTVd8H)+*sBUT0UtT2}svibp%Z+qoKc)4;Exjalq{T9RCkM>hv+TLY zR(4u6URs~+!fIp}kcCxtz!*|2ddT{U#$ikjsP)7B4EslYiv{DK!eN2zs4kV-=Q4f# z000000H4hswV@SzLKHlUJt4X{A5s^DweL!wP-EM-;6rx6zHD{~Cm|u)f>`t{w>~be j4?++C000000N=+SSC0It5SR!F00000NkvXXu0mjfq00wE literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00005.png b/tests/snapshots/ethereum_ethx_nanox_request_withdraw_eth/00005.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 O0000U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanox_stake_eth/00000.png b/tests/snapshots/ethereum_ethx_nanox_stake_eth/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*`A)An+(Cd;wGRXyFsSG+aKk5^W+(vbCyP`Np0*rxg?Evk&FBUJfl=~ z_&hj|kGEt^k8Z>Z*36cx*U<5o`Zq0Z2gvd~m#PlX!`EK>=GDQL%^0~iGB<|qfU1Y3 zYEciiRxWMNRLkAe_wS-p&=fB}EPYmF{z;KPL(T77`AP7ybNj~h`TaE0h}m-Y{1ouC?=}+(Bma z!x%%&=m%pC?nD;4Q)iHwgQXZ=0000000000000000001BnLqqS7Q=${?dAXg002ov JPDHLkV1k9Wz(W84 literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanox_stake_eth/00002.png b/tests/snapshots/ethereum_ethx_nanox_stake_eth/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..41f278ca76cb703370dce9ea69f5d64b0439df62 GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hnba4!+nDh2Vv{17Gk3-Tv@&|&(C;k{e0ojTb;Ud9G-xC?cYhDC{LfADECF}QFrNQr64slvJi=2 zk#oRS`#C=WMLJG@=DQr(@UN`RJGYLsA|rB21A;!on~vbTDhXSkegcheP}hfA_Z0Z zR$Z)fR=`L)D$?cnH8tH}ha)^7%@dH^v4-@?9X4IhP7N8P9T-bX>?2dlEv3Rf4@5@)?4UxA`tQxBVZ z62Oyi%-)`yTX`b0uDCus$eK{8Pk?oJvreibj$<6OQ&g5NaQekK^mzS; zdLqwH>gpKqD@%^t%GcJ-Oug|0Y@}A)tHG&EK$EiQtAq0L@m=5GOJUY~qM#i)B6aCh ztyLzVDZN;g)rKPi>RSLNhW-@P6u3N%T6!UP1MsEFR4Bzu#J<`MeD`6M?0Gm!2qA}(7zSC{&o&Zo_@t<)z7SuY3ntMtdd_)SW(ygaX zd|0%I-4kFvN0Wt4LrYH`>B&QG34{*;1}HWvy`~EN?QN`002ovPDHLkV1kg& BgQWlf literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanox_stake_eth/00004.png b/tests/snapshots/ethereum_ethx_nanox_stake_eth/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..e4e5c5da7fa164aed1477b8109b07b03ffed3c3a GIT binary patch literal 598 zcmV-c0;&CpP)#Z7V=3twZruy zYO0h{wOKp1a>T-R&=;QOf*oBDUlZwk_j~rJZHR4@1+}iG@?a?tIfs75Lf=go00000;4^WEhCVK;#wc`%x4tEe0gT>UjK1v*T#z#`fHTwp z+b-L3;ysZeF6JNo@j}p5GPJ)8LDkUyVqgPL;DtQFKI{osuPGX;8 zpvs6!$z1tj_shPwQSzC1)vd<7%Gj8vTj>c{FUjYKef2KEPQpCIKR4n(BLCU-gHJH- z(goFQwFeh0y}o2baaKkRit`r}ST9}Bq7^{q$1~AL$g|`p(ULGfJ~O#R>yV zxf-m#m^()(8&~YT#1e4=V##{>4_X2M0001h zVBGqq1e4(*MoZ9fTY^PH{~uve6BR5$$88B|0KNf;{|^X3JOl76gwS9Qa3;oIlv>2Q kt+;yt00000000jB0_$NrBee%$@&Et;07*qoM6N<$f+5!z8vp6P)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 O0000U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_maticx_nanox_claim_matic/00001.png b/tests/snapshots/ethereum_maticx_nanox_claim_matic/00001.png index 8d2714a1fff72ec7d077c583dbe9c16f0c1a82c0..b9c50034da66e53c2e7b74933fa58499a453b04b 100644 GIT binary patch delta 379 zcmV->0fhdX1C|4jB!68=L_t(|obA|Aa)clZfMK@Nn|S{tahEiK>?{H6|2;Vv zQ3#-t5&!@I5bhOuvz)UWAII^=wb!re#*bDw$#>YD$_8)J1#876z>wJ>X{gN)UG5g1 z!8vEC#3Z#b^W>CNQj47AE8rfQY4CY)9v{Dwm!7hcT5!p&*?&An8UI%MhQ-YQ8J_1* zEd$E#Yma^R?8Tbh7`ZlbZ48|OriGdr)E8^hL%U|E=I+w>anVcAklOk%^DCLl~7xq+ZU$4?@xCback}tKK%0x007{*vLYpo;Hc+%2Ho$vaLL2Wvuro?itcW{ z4wKCsbE@3_+jPp-3210+E19$IfA2o-nt*LPbkx?Hac#l7W|M54fPXX08*BphX|t@| z?&nadd?szK^T4-j&mC1encffMbTz#nj2x`QDzp;s;g#rK0000000000000000001B ZnjfGo^U_+)E)oC$002ovPDHLkV1hylyKw*j delta 385 zcmV-{0e=3L1DpepB!6Q`L_t(|obB0da)clZfMK@Nn|S{tahLvZnn^%DWsNjkgtGuXr{sY#eTj0N?v%%LTZ^yZhy(98fE@V?K>@Q2FUQ- zhiaLj?7sHcckdo7+07%*My`#aGr+V^GlTkIX?keaoGQ7y^nF}V0IoHrwm!UFoz}Y| z*Pj&m8S3tDdP}IS&g}=&-~H2FM%1R+R5~O7^kc0{b0mkCRU-D*oSALdjS9d0000000000 f00000fMI?BLIn0{fhO1+00000NkvXXu0mjfT9Lem diff --git a/tests/snapshots/ethereum_maticx_nanox_claim_matic/00003.png b/tests/snapshots/ethereum_maticx_nanox_claim_matic/00003.png index 8a5e3f00445dcfd7d3f7bf3bd4e274595e2501c4..da9e1b27a2ba2808f86e63738c2a6ecf692f36f2 100644 GIT binary patch delta 529 zcmV+s0`C3U1lRXDBMQx`$asNwlFa3BE$BL3`VnCaFzTOxf zDkzDOO)-CN5q!HyJ-Tv4=XAb}`$LEa;joUhOVd&*rEJao$5KzTvF!AL*_^Oq2$Fju z9BaSlk1SJZC{;BZtEcupaC1NvOytT99ZQY&l7IJNSJk_*51c~~ZsH-wG>xcO)+_#m z1w&97YBCqLLZ#IXf{+Sn~{%nVMVf;Z|KR$Mx^}hbW~vJDsrX_Ak0 zVX%KvYE*62uI%H}QR$MnendD}o`j#v&fih%erI5mjBCy_m!yrF0LhGkGM9sDFD{MF z#lJc_h;i%FXa;&v1~iZymC~Z1HnaZF zs2&A!fDG1o#PSgy*_)EhYR+)>QCNX|IO1LZl`Y5|!R`nlgb+gB$sV<#B}m4USTLG* zTocv>k*ib}06Q-KjR7xq)@REQXDBMQx`$asNwlFa3BE$10L*VnCaFzTOxf zDj1@XO)-DIBKYgl>d}=WI;Zn(+#fUm{ z#bn&8Sned;1I$8ivFb~ zjn2itIyyAt)~6u`dQb*5P&+E6MbU%oXe=C1#c16M&&34s`#-TNw9SLI@#*5JKL-FV%?% UPmaOxV*mgE07*qoM6N<$g5&7zj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M BtU2UxaSLj z3FKueHzfc703h5e@?kk=IX;f#!oA~nb>n9nT;wcZR|X`B#n5Hi~IyUqf~YHJUEY!w`5I^Zo~`L%zu`v*U<5o`Zq0Z2gvd~ zm#PlX!`EK>=GDQL%^0~iGB<|qfU1Y3YEciiRxWMNRLkAe_wS-p&=fB}EPYmF{z;KP zL(T77`AP7ybNj~h`TaE0h}m-Y!2x>IM6nS-SmUH||900000 i0000000000V3|MsMi#?@^zG&V0000Q;x6;U*s!z(beGD+_xWYC zqI{d05&!@I5bh`PVL4|x-nQ++z2kRv2-x@q#t8R`!cjNBW!HipiCs)nU%P!EsgWO zPm25uHTSo2OYm0b_KoTH{%I~FX35=?5C1#^004Ndd>9O#{XWk!n3)*7x~$u>p=U`R zDK%54$;#^J7=QHX#b+cpSH^U+q$^l=2ABy3;dMsiPXI152eLldm;oz`{vk7)PUj$F`?!+o|r%of&2UF3!00000 m00000000000002MG#{QF8Cnd)!1@3H002ovPDHLkU;%g zm&Na%z1x#*zD+$dDDR6_(m$D!f5s;`^@#Jtq6ayZ1k_)Sv5WtI?NiSvPyvF5}1Z&7Ovy{B!=|@fU0} ztzYOTx6FE>@5cA;Nbn0k|0W;4WlDP(P{9F{|NkmI*01nr6aYzhy85}Sb4q9e0M7Sb AN&o-= delta 208 zcmX@We3*HH3S-wq)ovCCDVensH-*&SonBCQ{7TcqZ51x@6B-^LPtX6Iv#Rz|Pt13h zufGa@E!w?vcH!G&-&A~0^~SlLnXf$k!qxa&yd^P{8_YQWgyu;K))rU37rpl9Rr9j- zjJKWlocfVbyV%#E;#eM+(E=|CYZb z?kd;_|4r=)5dM4g#KE~0Tz6l3PB?imq(z(o70h@hZ`|eW=9{5@79`>6>gTe~DWM4f Dn2urX diff --git a/tests/snapshots/ethereum_maticx_nanox_stake_matic/00003.png b/tests/snapshots/ethereum_maticx_nanox_stake_matic/00003.png index 3d80533a20eca1419f15e89521d898cd96ecf7f8..a4d0243c148c77b6601959241118efc04e569860 100644 GIT binary patch delta 52 zcmZ3>vYKUr3gf4Vs{1(390^(RCg)e##J5sRvI{nIG72z?*lm2^dh43!UIrlWboFyt I=akR{087gh%>V!Z delta 54 zcmZ3@vX*6n3gefFs{6QnzB{k=4!e1it9;^XDW<1OH?uPeFp6w#f9%@KGR2Sq2s~Z= KT-G@yGywoth!isb diff --git a/tests/snapshots/ethereum_maticx_nanox_stake_matic/00005.png b/tests/snapshots/ethereum_maticx_nanox_stake_matic/00005.png index a58590b988714545e7960f7f400f360ffc5de41f..657887225857cf48be8a8daed2cb3e89d4b29ece 100644 GIT binary patch delta 354 zcmeyz^p|OZO1+Dxi(^Q|oVPcl`3@-vI0Po$;rtyhRQ<8JMIk?%eObZz=}8L@T*!1t zWzj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M Btz1Fi#*BuRBiL_t(|obB0dl7k=&fMK??H}U>Q;x7Hclwm^x=t`jN`}}e= zLJeO^LjV8(0Nnj}Ru*H-$H#G8xOe=nZv5E-C;4@&sea&*Z6bdj4t12o1E+&@e7pp$ zdFn!};F?;p_!)KlrRO`%Zv^D-nYwBnP^Yim_tmR|C95&{UeCGFbp(hfEQwA%SX$Y& zEvHKEPJOrYo`O!X=7*_udCot<^EFgm-^wMynw{G>hQI5lI*q6$cTax#>lpw5z~>Wh zgg1Tx`Fu?M$JT!zVk7oXaoe)p&=G^*Zr%OVpl$WkG2hFYg39yO9^A-=-AFmBY&`-j zQ;x7AxS%!uL&`O}~`}}e= zVhLYLLjV8(0Ng!19~NWG$H#G8xOe=nZv5E-C;4@IQeEMZZ6beu9G+1U6;21~`1lvJ z=BW#@f@^BY;%C(Hm+E(#-w4RvGj-KEpiW=A@2gh_OIBm@y`FQU>j)4vEQwA%SX$Y& zEvHKEPJOp?YJh8%vF3-De@^RJp7T%ed<|9Cw{l6aX6N>e;d%X3rxCT}?#VBIJp%v$ z_ z)+4|&zMrZFZ<6}t{TiVB`=xQUJR^d)nt9%J5w17y?h1A$M}XC{rfRRBLcN4GHa^?W z@~>$pz1wz^PhuvS?7LA?P4=D91}iZOt<*^}Z7>z-1pp-g0000000000000000H*l^ X5YrucCj{#o00000NkvXXu0mjf5&E8}fKv6pCPT2pF*vouGLdZ6bOA?^!Jzp6D zDPzK;Zb|?E0Kl&)rIb?i^+O-Ap}*A~xMcI-M!Z*dz*b7hIoIIkoR7j zc3^^$UAXd8`z}GIx@ZhEOz!Mi<+Zv4_GT#dRdW*-&BZ31RM7n`{nq~p0000d29Kfo zKy8-j3ROJ|_L4KYc|5&y+A&?te_#q9h0`254Jk^FYyFM1m!dKAntslp_Yr2pNc!Po zAI}FOidv^Fvi> z_%(x1&^+Pggfo+=eKc(Zjg!oG)Ab2{xf8Z!Ah(`E3pr+M0f!J00000 k00000000000D#B*1NHN*B&pwmBLDyZ07*qoM6N<$f?^odkpKVy delta 445 zcmV;u0Yd)N1J?tPB!8YsL_t(|obB0La>F1DKvB}^PT2pF*h@c{VTdGTip?YKJzp*X zmk1*;2>}2A0QhfGN+~6MJ?UQ@=xcWeZaF--J-&B$z?M>qF_z%Q7;|B%P=A^)>XOn# z+_NtCD=%~I49H`k%VUhWynI@hlxs0F%s*R|S2}bCIK+djKYwzFaG#LAK4}0%+7V+= z4@_rdH)fvV+!SOgNn@a4aA(ghuiYK67eleGnv1Y#E*9aSg6=QrkA5cr003MV+=l86 zwOOJo6lE{iI-JqXoj0%Wz8}5pXBavxy4(kcW%MzmD9P9QjkI+{W1ed|X9lhNo2`1z z9&T11cF<9Tet&|*ieLyZqWoh8KS@gdCd`&GthrM2N3YEx!F>7q{Mvx!ATuQbkS zow-W2DvN5v58tf;a8kr0v%!pDPyGR%;ePyinspjl|2ER;=9n#>YO{1k!Q8#{?0lRb zs#3+T+0$Hi&nyvN#Jr*34Rin2a#8cNRrF742ASwDV>X1E=r6_?>_isYiFJ4V;00000NkvXXu0mjf=jhF{ diff --git a/tests/snapshots/ethereum_maticx_nanox_unstake_maticx/00003.png b/tests/snapshots/ethereum_maticx_nanox_unstake_maticx/00003.png index 386c82070262de4bd7421f26c467f792e1eb9489..f9d64d1802c517386d19e9001b3e3a350ec5916e 100644 GIT binary patch delta 360 zcmV-u0hj*41iu83BmoAICBT2jP!M)r`W6dqCt&~p0D#ZLARF32JAsoHij@~XE9X#K z2eg+9;|u8p?3j%ED7IS(*HC7mkLdL&$2dS4&5PN$ogoAng9D6_4%l|sh70S43~|%` z(?9PBsv@KQG73_o{$lWfB}5@hn1?ON<<(|G8^>nyTcV_KLak=7eQbYJW4~zaQEN3N zn#U$&WE)4C@>`7y@mB4CRO8^3vN1Jl9gS?aq3_`oo0V{_Q_RiaAF&^>C>f{8W!Cf( z134aK6Aw?^jkyg|uJlF9e63)G1B#*Z>FZI@{9=&2Rk?jpqC9J@VV88Ym=&IiTbyY% z)&@JrIJ-Dt?q2ReJHuQm2jpQl9gMdzx-U4^-mT36-5(w7TQk200000pNT;>w1aj6CoL2!FMd|e zp|r;+#fHImFvu`^?2r>o-7$Y69?XV3O)(sir zrv0aX-VszqM*U?Jq(=S4-~&sDLY6QOTawGG&4xCP&E&U4N#lfC&0v4~*r>*S(b}Wd zYDzSZO~}YLjx^=B8W-ZN+5xG?!6{{9YSua$*=|GM!znf^;aaDdo54R~KVVTZPLs>5 z=_LkoJjf;U?8i^|Z>1Z)4JQcS% z(`u{@c8+m&alqWY+=E_rhE)#8!)`hlZ)0>{aIC#sn*+K(MA+{u(dYmG0001yGtPz< z;jcx;yvNoB=YotO1i>&z$09zj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M BtU2UxaSLj z3FKueHzfc703h5e@?kk=IX;f#!oA~nb>n9nT;wcZR|X`B#n5Hi~IyUqf~YHJUEY!w`5I^Zo~`L%zu`v*U<5o`Zq0Z2gvd~ zm#PlX!`EK>=GDQL%^0~iGB<|qfU1Y3YEciiRxWMNRLkAe_wS-p&=fB}EPYmF{z;KP zL(T77`AP7ybNj~h`TaE0h}m-Y!2x>IM6nS-SmUH||900000 i0000000000V3|MsMi#?@^zG&V0000Q;x6;U*s!z(beGD+_xWYC zqI{d05&!@I5bh`PVL4|x-nQ++z2kRv2-x@q#t8R`!cjNBW!HipiCs)nU%P!EsgWO zPm25uHTSo2OYm0b_KoTH{%I~FX35=?5C1#^004Ndd>9O#{XWk!n3)*7x~$u>p=U`R zDK%54$;#^J7=QHX#b+cpSH^U+q$^l=2ABy3;dMsiPXI152eLldm;oz`{vk7)PUj$F`?!+o|r%of&2UF3!00000 m00000000000002MG#{QF8Cnd)!1@3H002ovPDHLkU;%owWAACXGaZ_&oxxFG{?FqHJ|4C3 zL=Y1L14CPNW%&U$rJog%)Bbr|`S(43e3#K#@|0)uZRI4UDK=6?QnwyEr@lUrAf@?8 zWQy~$rW<`<%`U9kXw#?sh~vch9UU`125mHZKcQ=(aPSe9C24&1QvS7%^TfY=l*xb3 zH%I4FPBK?4^Q2JkP(eS}3!$8xaV?At4D(J_N=E5vl$VQa6MvV-GBZ9!FSq}H+sdnP zsiC_&-fVla`b_mTzq0bx<_{(1pJWPcm^(LXc1iB1%NdgA>y7iyggHKb-?&_Tf&Gh0 zfio6YulN|V-ks{_Fk$P#NZ)O#$y43WTg~g6I{E+a;upzt7D}ZovhNYhT4XO_`QeDp klTNEQogYAcM+Vb>GM#dG%>KT%ZZSyM)78&qol`;+0EX(AJOBUy delta 343 zcmV-d0jU1(0`dZoB!4+cL_t(|obB0d4uc>JfMK@mCf@%@y~}=>5mO2hKWLfn^UFAO ztObfJB>(^bV7Qle18gFakC$cXzoqlyI6mGDFqEO3G`Kw?CP2xfA*Z1|K2)|245pDH zPC+?jDv0e^Zv(APmd9~K909qHi-;L76>IYesTevjMNB|y=6|5k>l;tIp^evgdpAHk z*;^yeHm1-uAX&9k72#9_U6qjFMHm18;F+A4q2+>dcSm7+zRP|@K@{`VG}u&qpI;H# zoYn>}poIVc005YK*gsN4j*A#$Yvgjw598Q-dVhdBeNo;M&jN@@jIo%!;dMG6In9^I z{BqH8`oU*n-tN!%c{AcEoY~QNsb)$C~q~% zg{4r$Ir3W_^!+0Y008it7M_Oc6UyqDrQU+JHl>}->P(Q~NOh;?wL`u^>*Za);}1td z_aH&vx^~eD_(b`Jykp11xP2H*{4EOLdm7_w?NP)x?(&Uiz}f=Lf0MKbeCzacr=eSM z>3-!3*tP}hC6Yd>zIAOR-0|-LeS`EaeczL40V@;-Dk#kjXz5A-0000xy%0OltIFmwIn#c&#w-3 zQ%xWWvmpQg008D5_Ky^i<08h`8o3je(;%?xBD}G-i&w(XLfX6s+kgzl+E;qd7SEC{?G-VW`AJE7NpliIOl$=9_ckj zggjJru()eq1GfSc%|y@K(8$!gPf6FU-c>x^xCYKGXgp<*g>E zeo^;RR>V18TpjfN5(WSO_)QB>L-h$|^~_RlL0g;B&SrHc$Z({(Q}fy(-=MW!(!cSC zBcXecpl@BfXhsG6d_&%`<6+!B3?}{-1@JwM@wN6S;v0AQ#xr1T0p>qRS_Hmz`nl84 zt+;f*as_PLg7p$fZ&lyAHWKdm_kg}ZdYAs*lV$-c6n+3J&6iQNUH||907*qoM6N<$ Ef@|Kf^8f$< diff --git a/tests/snapshots/fantom_ftmx_nanox_deposit/00006.png b/tests/snapshots/fantom_ftmx_nanox_deposit/00006.png index a58590b988714545e7960f7f400f360ffc5de41f..657887225857cf48be8a8daed2cb3e89d4b29ece 100644 GIT binary patch delta 354 zcmeyz^p|OZO1+Dxi(^Q|oVPcl`3@-vI0Po$;rtyhRQ<8JMIk?%eObZz=}8L@T*!1t zWzj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M Btz1Fi#*BuRBiL_t(|obB0dl7k=&fMK??H}U>Q;x7Hclwm^x=t`jN`}}e= zLJeO^LjV8(0Nnj}Ru*H-$H#G8xOe=nZv5E-C;4@&sea&*Z6bdj4t12o1E+&@e7pp$ zdFn!};F?;p_!)KlrRO`%Zv^D-nYwBnP^Yim_tmR|C95&{UeCGFbp(hfEQwA%SX$Y& zEvHKEPJOrYo`O!X=7*_udCot<^EFgm-^wMynw{G>hQI5lI*q6$cTax#>lpw5z~>Wh zgg1Tx`Fu?M$JT!zVk7oXaoe)p&=G^*Zr%OVpl$WkG2hFYg39yO9^A-=-AFmBY&`-j zQ;x7AxS%!uL&`O}~`}}e= zVhLYLLjV8(0Ng!19~NWG$H#G8xOe=nZv5E-C;4@IQeEMZZ6beu9G+1U6;21~`1lvJ z=BW#@f@^BY;%C(Hm+E(#-w4RvGj-KEpiW=A@2gh_OIBm@y`FQU>j)4vEQwA%SX$Y& zEvHKEPJOp?YJh8%vF3-De@^RJp7T%ed<|9Cw{l6aX6N>e;d%X3rxCT}?#VBIJp%v$ z_ z)+4|&zMrZFZ<6}t{TiVB`=xQUJR^d)nt9%J5w17y?h1A$M}XC{rfRRBLcN4GHa^?W z@~>$pz1wz^PhuvS?7LA?P4=D91}iZOt<*^}Z7>z-1pp-g0000000000000000H*l^ X5YrucCj{#o00000NkvXXu0mjf5&E(^b z;J;B-RrTAGPH~{m-52mHhX;4W*X|2wQ&kZu!4;8QSSr+e^G01#nwVqO<#FX@&V2)N zANX<+$>n8lT~fBqo6-E)tGv>oZ$Q92$bMJAg!_c_^-djN(tnQWgSuk|BfBy46z8U( zrjj&nG)&>!v&+Zs3uq69W?XF!!lt({HQxvkH2^M9UziEqG~1Ztw=mlyq9LE*SGK!h6C$M32`EGSOeA5o)5p7=5r4S!kz=Akzm^ s5nccQ0000000000000000AQML?c!Kg-_P)`00000Ne4wvM6N<$g461~_5c6? delta 398 zcmV;90dfAZ1F-{;Eq_6B!ypVmQPSy6xc`y3OBYNSMv`UX22h;;RxSn?iy#O|2><{9 z_%@}KQi{Hw^e+PX+1-JE2_D=Lzq>nNE2ZR|TX1vEwXjv_@79aHq%{%G?92Vi%fy`l zbqsWQ&bgMiyM0N!7Bj>A^QiJlL1%zNe311mhX{9s^z}&tAb--17=wOb1|z#M^E7c& zkf|k&3k{PydvuI24iZ(*BM^}+J%#j&8In!8tKeP^Vvt%AyUva_xPO3 z6cp;Mbb>a214z%zqgQNmS9R diff --git a/tests/snapshots/fantom_ftmx_nanox_undelegate/00004.png b/tests/snapshots/fantom_ftmx_nanox_undelegate/00004.png index 764e442461255ab813c44b94faba53eeae4026d1..7c6b3b56309f64b9376b3870821e7183a9cdd1f7 100644 GIT binary patch delta 356 zcmV-q0h|7(1Em9yB!6s4L_t(|obB3eZo?o9fMGiICfxr>zRP|@K@{`VG}u&qpI;H# zoYn>}poIVc005YK*gsN4j*A#$Yvgjw598Q-dVhdBeNo;M&jN@@jIo%!;dMG6In9^I z{BqH8`oU*n-tN!%c{AcEoY~QNsb)$C~q~% zg{4r$Ir3W_^!+0Y008it7M_Oc6UyqDrQU+JHl>}->P(Q~NOh;?wL`u^>*Za);}1td z_aH&vx^~eD_(b`Jykp11xP2H*{4EOLdm7_w?NP)x?(&Uiz}f=Lf0MKbeCzacr=eSM z>3-!3*tP}hC6Yd>zIAOR-0|-LeS`EaeczL40V@;-Dk#kjXz5A-0000xy%0OltIFmwIn#c&#w-3 zQ%xWWvmpQg008D5_Ky^i<08h`8o3je(;%?xBD}G-i&w(XLfX6s+kgzl+E;qd7SEC{?G-VW`AJE7NpliIOl$=9_ckj zggjJru()eq1GfSc%|y@K(8$!gPf6FU-c>x^xCYKGXgp<*g>E zeo^;RR>V18TpjfN5(WSO_)QB>L-h$|^~_RlL0g;B&SrHc$Z({(Q}fy(-=MW!(!cSC zBcXecpl@BfXhsG6d_&%`<6+!B3?}{-1@JwM@wN6S;v0AQ#xr1T0p>qRS_Hmz`nl84 zt+;f*as_PLg7p$fZ&lyAHWKdm_kg}ZdYAs*lV$-c6n+3J&6iQNUH||907*qoM6N<$ Ef@|Kf^8f$< diff --git a/tests/snapshots/fantom_ftmx_nanox_undelegate/00006.png b/tests/snapshots/fantom_ftmx_nanox_undelegate/00006.png index a58590b988714545e7960f7f400f360ffc5de41f..657887225857cf48be8a8daed2cb3e89d4b29ece 100644 GIT binary patch delta 354 zcmeyz^p|OZO1+Dxi(^Q|oVPcl`3@-vI0Po$;rtyhRQ<8JMIk?%eObZz=}8L@T*!1t zWzj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M Bt0fhdX1C|4jB!68=L_t(|obA|Aa)clZfMK@Nn|S{tahEiK>?{H6|2;Vv zQ3#-t5&!@I5bhOuvz)UWAII^=wb!re#*bDw$#>YD$_8)J1#876z>wJ>X{gN)UG5g1 z!8vEC#3Z#b^W>CNQj47AE8rfQY4CY)9v{Dwm!7hcT5!p&*?&An8UI%MhQ-YQ8J_1* zEd$E#Yma^R?8Tbh7`ZlbZ48|OriGdr)E8^hL%U|E=I+w>anVcAklOk%^DCLl~7xq+ZU$4?@xCback}tKK%0x007{*vLYpo;Hc+%2Ho$vaLL2Wvuro?itcW{ z4wKCsbE@3_+jPp-3210+E19$IfA2o-nt*LPbkx?Hac#l7W|M54fPXX08*BphX|t@| z?&nadd?szK^T4-j&mC1encffMbTz#nj2x`QDzp;s;g#rK0000000000000000001B ZnjfGo^U_+)E)oC$002ovPDHLkV1hylyKw*j delta 385 zcmV-{0e=3L1DpepB!6Q`L_t(|obB0da)clZfMK@Nn|S{tahLvZnn^%DWsNjkgtGuXr{sY#eTj0N?v%%LTZ^yZhy(98fE@V?K>@Q2FUQ- zhiaLj?7sHcckdo7+07%*My`#aGr+V^GlTkIX?keaoGQ7y^nF}V0IoHrwm!UFoz}Y| z*Pj&m8S3tDdP}IS&g}=&-~H2FM%1R+R5~O7^kc0{b0mkCRU-D*oSALdjS9d0000000000 f00000fMI?BLIn0{fhO1+00000NkvXXu0mjfT9Lem diff --git a/tests/snapshots/fantom_ftmx_nanox_withdraw/00004.png b/tests/snapshots/fantom_ftmx_nanox_withdraw/00004.png index 764e442461255ab813c44b94faba53eeae4026d1..7c6b3b56309f64b9376b3870821e7183a9cdd1f7 100644 GIT binary patch delta 356 zcmV-q0h|7(1Em9yB!6s4L_t(|obB3eZo?o9fMGiICfxr>zRP|@K@{`VG}u&qpI;H# zoYn>}poIVc005YK*gsN4j*A#$Yvgjw598Q-dVhdBeNo;M&jN@@jIo%!;dMG6In9^I z{BqH8`oU*n-tN!%c{AcEoY~QNsb)$C~q~% zg{4r$Ir3W_^!+0Y008it7M_Oc6UyqDrQU+JHl>}->P(Q~NOh;?wL`u^>*Za);}1td z_aH&vx^~eD_(b`Jykp11xP2H*{4EOLdm7_w?NP)x?(&Uiz}f=Lf0MKbeCzacr=eSM z>3-!3*tP}hC6Yd>zIAOR-0|-LeS`EaeczL40V@;-Dk#kjXz5A-0000xy%0OltIFmwIn#c&#w-3 zQ%xWWvmpQg008D5_Ky^i<08h`8o3je(;%?xBD}G-i&w(XLfX6s+kgzl+E;qd7SEC{?G-VW`AJE7NpliIOl$=9_ckj zggjJru()eq1GfSc%|y@K(8$!gPf6FU-c>x^xCYKGXgp<*g>E zeo^;RR>V18TpjfN5(WSO_)QB>L-h$|^~_RlL0g;B&SrHc$Z({(Q}fy(-=MW!(!cSC zBcXecpl@BfXhsG6d_&%`<6+!B3?}{-1@JwM@wN6S;v0AQ#xr1T0p>qRS_Hmz`nl84 zt+;f*as_PLg7p$fZ&lyAHWKdm_kg}ZdYAs*lV$-c6n+3J&6iQNUH||907*qoM6N<$ Ef@|Kf^8f$< diff --git a/tests/snapshots/fantom_ftmx_nanox_withdraw/00006.png b/tests/snapshots/fantom_ftmx_nanox_withdraw/00006.png index a58590b988714545e7960f7f400f360ffc5de41f..657887225857cf48be8a8daed2cb3e89d4b29ece 100644 GIT binary patch delta 354 zcmeyz^p|OZO1+Dxi(^Q|oVPcl`3@-vI0Po$;rtyhRQ<8JMIk?%eObZz=}8L@T*!1t zWzj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M Bt0fhdX1C|4jB!68=L_t(|obA|Aa)clZfMK@Nn|S{tahEiK>?{H6|2;Vv zQ3#-t5&!@I5bhOuvz)UWAII^=wb!re#*bDw$#>YD$_8)J1#876z>wJ>X{gN)UG5g1 z!8vEC#3Z#b^W>CNQj47AE8rfQY4CY)9v{Dwm!7hcT5!p&*?&An8UI%MhQ-YQ8J_1* zEd$E#Yma^R?8Tbh7`ZlbZ48|OriGdr)E8^hL%U|E=I+w>anVcAklOk%^DCLl~7xq+ZU$4?@xCback}tKK%0x007{*vLYpo;Hc+%2Ho$vaLL2Wvuro?itcW{ z4wKCsbE@3_+jPp-3210+E19$IfA2o-nt*LPbkx?Hac#l7W|M54fPXX08*BphX|t@| z?&nadd?szK^T4-j&mC1encffMbTz#nj2x`QDzp;s;g#rK0000000000000000001B ZnjfGo^U_+)E)oC$002ovPDHLkV1hylyKw*j delta 385 zcmV-{0e=3L1DpepB!6Q`L_t(|obB0da)clZfMK@Nn|S{tahLvZnn^%DWsNjkgtGuXr{sY#eTj0N?v%%LTZ^yZhy(98fE@V?K>@Q2FUQ- zhiaLj?7sHcckdo7+07%*My`#aGr+V^GlTkIX?keaoGQ7y^nF}V0IoHrwm!UFoz}Y| z*Pj&m8S3tDdP}IS&g}=&-~H2FM%1R+R5~O7^kc0{b0mkCRU-D*oSALdjS9d0000000000 f00000fMI?BLIn0{fhO1+00000NkvXXu0mjfT9Lem diff --git a/tests/snapshots/polygon_maticx_nanox_claim_maticx_swap/00004.png b/tests/snapshots/polygon_maticx_nanox_claim_maticx_swap/00004.png index ca6fa96bb2b552bb03ad9168a479be7834e9ea27..867739543c8a9aa8a1bd4a15f3c62fb541332901 100644 GIT binary patch delta 421 zcmV;W0b2gS1HS{1B!7lUL_t(|obB0dl7k=&fMIs0H{t$A;x7BcF+(9BDkeDlKEE7n zgAE@74FLcE05JDsUu8;ZyNEHiN-oE|8OPqo`vGQpQQn1T1EiESxwa9gA?kZ|GZUg5jXgtNI8b(cGC$nDjPgrmY%BLD} zVJH-Fw*0DvzAs?_0D%8#+G%LLlT=I8ozX@Xg`IPoevM}zreC6N+`Kl-$JE7peGjz&Am29gnME)EW_9&4vhwL1e5Q0<8F$;O(J?x3}0ssI20000003HAU000000FU_tOg(ckka}(e P00000NkvXXu0mjf&D6!} delta 423 zcmV;Y0a*UO1Hl83B!7rWL_t(|obB0dl7k=&fMIs0H{t$A;x7Bck)aSGDkeDlKEE7n zgAK@6LjV8(0L=Z^SD8}UE@F(mlFKn~#HhEE~oZIL%o_!d-MBKP}ZJ3XVi}&^< zKtFm5-vityXXbHzdtXnco>(h*3q7Lo|z5cd#LhKMsGlF5AhFxl|9{) zCZ7f6{PyO|cQJU6?dE{;ZSbi*qa1vuf>>iO&f$`5q@-8-oo;dP z-8YUBuhUI3**7Dkn(P~+4LmUld14;+M0x=L0000003ZMW00000004l;`~kxgb}>Ms RgA4!w002ovPDHLkV1l5U%IW|B diff --git a/tests/snapshots/polygon_maticx_nanox_claim_maticx_swap/00006.png b/tests/snapshots/polygon_maticx_nanox_claim_maticx_swap/00006.png index a58590b988714545e7960f7f400f360ffc5de41f..657887225857cf48be8a8daed2cb3e89d4b29ece 100644 GIT binary patch delta 354 zcmeyz^p|OZO1+Dxi(^Q|oVPcl`3@-vI0Po$;rtyhRQ<8JMIk?%eObZz=}8L@T*!1t zWzj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M Btz1Fi#*BuRBiL_t(|obB0dl7k=&fMK??H}U>Q;x7Hclwm^x=t`jN`}}e= zLJeO^LjV8(0Nnj}Ru*H-$H#G8xOe=nZv5E-C;4@&sea&*Z6bdj4t12o1E+&@e7pp$ zdFn!};F?;p_!)KlrRO`%Zv^D-nYwBnP^Yim_tmR|C95&{UeCGFbp(hfEQwA%SX$Y& zEvHKEPJOrYo`O!X=7*_udCot<^EFgm-^wMynw{G>hQI5lI*q6$cTax#>lpw5z~>Wh zgg1Tx`Fu?M$JT!zVk7oXaoe)p&=G^*Zr%OVpl$WkG2hFYg39yO9^A-=-AFmBY&`-j zQ;x7AxS%!uL&`O}~`}}e= zVhLYLLjV8(0Ng!19~NWG$H#G8xOe=nZv5E-C;4@IQeEMZZ6beu9G+1U6;21~`1lvJ z=BW#@f@^BY;%C(Hm+E(#-w4RvGj-KEpiW=A@2gh_OIBm@y`FQU>j)4vEQwA%SX$Y& zEvHKEPJOp?YJh8%vF3-De@^RJp7T%ed<|9Cw{l6aX6N>e;d%X3rxCT}?#VBIJp%v$ z_ z)+4|&zMrZFZ<6}t{TiVB`=xQUJR^d)nt9%J5w17y?h1A$M}XC{rfRRBLcN4GHa^?W z@~>$pz1wz^PhuvS?7LA?P4=D91}iZOt<*^}Z7>z-1pp-g0000000000000000H*l^ X5YrucCj{#o00000NkvXXu0mjf5&E^nJPke{y+nNBo>_fG_8qQj*}NluDsgsP~qQxCzDpP!F=*6@O6SzG3?MPaUA99n}YQ z#|%dH;LIcLoq}94X}mb_2}jQk{sP!Pjz7d3qY- z>Qsb%%G9S>w}1ZqW~L(IT+JzEB#k#_bIUi40J$qWm9G{rEicT?p-%3AV2YU1Zi(aT zUW~h;d)isODE4JT>wilI-H@+eO^<*T^Mg9);4D}#l7(mIbF(C&Nf zxK5it;fXu08DyfrjT363zZrdS60^`rogmW(OA%fG03-ka00000000000001BnO~nv VSyQ#rHK+gp002ovPDHLkV1icA$fy7S delta 432 zcmV;h0Z;zL1Ih!CB!7`fL_t(|obB0La>F1DKvB2Tov{BUv6p@@qoI0Dw=EbIv*2<4Ip}pzqxs_?N?j+v8_<2Yfl_l#&EDrBn)~LVdOz)FpC> zYO^knD=%~I3@Bq@%Tr3FT+Y@da;#>C`>|Ddr9)>xK>d*Isegb9_X*3_I}LzZcGMWu z1JfDVjVq5hcL{RIqVeFuE1W&MeC_Ul|1ea~RrevRE>{oX%LF}sqz}C(0002o7`6?y zTWq()RuHl~Y^7`L<-xny^>>FF^veCN{+l|5O-!nia%|sGTS*%?(-~wDTJ5`61+U6M z$VPq;I&ed#Drcr-S)^~f+43HbMOZimsbLD~I3Dm&@5G)Zx zx-Ox7Hj42u+_pJt6l?3Uq4mEdoleNt&!%USxwa9gA?kZ|GZUg5jXgtNI8b(cGC$nDjPgrmY%BLD} zVJH-Fw*0DvzAs?_0D%8#+G%LLlT=I8ozX@Xg`IPoevM}zreC6N+`Kl-$JE7peGjz&Am29gnME)EW_9&4vhwL1e5Q0<8F$;O(J?x3}0ssI20000003HAU000000FU_tOg(ckka}(e P00000NkvXXu0mjf&D6!} delta 423 zcmV;Y0a*UO1Hl83B!7rWL_t(|obB0dl7k=&fMIs0H{t$A;x7Bck)aSGDkeDlKEE7n zgAK@6LjV8(0L=Z^SD8}UE@F(mlFKn~#HhEE~oZIL%o_!d-MBKP}ZJ3XVi}&^< zKtFm5-vityXXbHzdtXnco>(h*3q7Lo|z5cd#LhKMsGlF5AhFxl|9{) zCZ7f6{PyO|cQJU6?dE{;ZSbi*qa1vuf>>iO&f$`5q@-8-oo;dP z-8YUBuhUI3**7Dkn(P~+4LmUld14;+M0x=L0000003ZMW00000004l;`~kxgb}>Ms RgA4!w002ovPDHLkV1l5U%IW|B diff --git a/tests/snapshots/polygon_maticx_nanox_request_maticx_swap/00006.png b/tests/snapshots/polygon_maticx_nanox_request_maticx_swap/00006.png index a58590b988714545e7960f7f400f360ffc5de41f..657887225857cf48be8a8daed2cb3e89d4b29ece 100644 GIT binary patch delta 354 zcmeyz^p|OZO1+Dxi(^Q|oVPcl`3@-vI0Po$;rtyhRQ<8JMIk?%eObZz=}8L@T*!1t zWzj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M BtU2UxaSLj z3FKueHzfc703h5e@?kk=IX;f#!oA~nb>n9nT;wcZR|X`B#n5Hi~IyUqf~YHJUEY!w`5I^Zo~`L%zu`v*U<5o`Zq0Z2gvd~ zm#PlX!`EK>=GDQL%^0~iGB<|qfU1Y3YEciiRxWMNRLkAe_wS-p&=fB}EPYmF{z;KP zL(T77`AP7ybNj~h`TaE0h}m-Y!2x>IM6nS-SmUH||900000 i0000000000V3|MsMi#?@^zG&V0000Q;x6;U*s!z(beGD+_xWYC zqI{d05&!@I5bh`PVL4|x-nQ++z2kRv2-x@q#t8R`!cjNBW!HipiCs)nU%P!EsgWO zPm25uHTSo2OYm0b_KoTH{%I~FX35=?5C1#^004Ndd>9O#{XWk!n3)*7x~$u>p=U`R zDK%54$;#^J7=QHX#b+cpSH^U+q$^l=2ABy3;dMsiPXI152eLldm;oz`{vk7)PUj$F`?!+o|r%of&2UF3!00000 m00000000000002MG#{QF8Cnd)!1@3H002ovPDHLkU;%J(fv(g4dqM(i zw%ZD84FCWDNOzmvfj$w@<89lqf{bofv%8r%^T6JY3U&@{yJ!({7=$&{($ z5~LwBL5yR)541VykL##719XgwNH<<4*4-yGH+5>Nn1B}MAb%M3!P742<2mlLJ8-hf zt4&ww8qj*R)D+?7f^JGk@gfWW0PvquUqeTB+02*M(HrOBR!_W#VeaxQ%3b=WJK_2hdP<}SYl^52Mv z38*=vU%&pw@TY&Ezbw4qw25KLeF^_nGFq1y$fFam|582LYa2tJk~0GongN;*zuE9{ z+mkSxwa9gA?kZ|GZUg5jXgtNI8b(cGC$nDjPgrmY%BLD} zVJH-Fw*0DvzAs?_0D%8#+G%LLlT=I8ozX@Xg`IPoevM}zreC6N+`Kl-$JE7peGjz&Am29gnME)EW_9&4vhwL1e5Q0<8F$;O(J?x3}0ssI20000003HAU000000FU_tOg(ckka}(e P00000NkvXXu0mjf&D6!} delta 423 zcmV;Y0a*UO1Hl83B!7rWL_t(|obB0dl7k=&fMIs0H{t$A;x7Bck)aSGDkeDlKEE7n zgAK@6LjV8(0L=Z^SD8}UE@F(mlFKn~#HhEE~oZIL%o_!d-MBKP}ZJ3XVi}&^< zKtFm5-vityXXbHzdtXnco>(h*3q7Lo|z5cd#LhKMsGlF5AhFxl|9{) zCZ7f6{PyO|cQJU6?dE{;ZSbi*qa1vuf>>iO&f$`5q@-8-oo;dP z-8YUBuhUI3**7Dkn(P~+4LmUld14;+M0x=L0000003ZMW00000004l;`~kxgb}>Ms RgA4!w002ovPDHLkV1l5U%IW|B diff --git a/tests/snapshots/polygon_maticx_nanox_swap_matic_via_ipool/00006.png b/tests/snapshots/polygon_maticx_nanox_swap_matic_via_ipool/00006.png index a58590b988714545e7960f7f400f360ffc5de41f..657887225857cf48be8a8daed2cb3e89d4b29ece 100644 GIT binary patch delta 354 zcmeyz^p|OZO1+Dxi(^Q|oVPcl`3@-vI0Po$;rtyhRQ<8JMIk?%eObZz=}8L@T*!1t zWzj4-;J5hht#0pj z^#9@1sLK;CE54XuefJROGCRgZUbWXBk9~WeThLU0Q`4iWuO>iVr1K`D#hTWitG2LJbl{xH#~Rq+?=K-+vfC})E&6F z@5lAeSDtRMVcZx!aqGa5zhIs*He8&r_HtpZV5M#|^ ydh?e5zlAMgw-$Yhy2~hY*m8O9PiA<4-2TmASuS-mz3kmhkeH{dpUXO@geCwORjDih delta 355 zcmV-p0i6E*0{#M!B!5LoL_t(|obB0Lj>8}fKv7h6C+vSo*-Jl=BFejIj2*b=t7QrS z431!&0{{R30000000000t2mD1&x+StxcuCugjtw2gZ3x=t=)mIIr82&3gasIFTM9k ztvJ}>Yq8eI6W5XNfa2$NVK)~Iw$m+~VCoJy*I=?9Z*2eG27f1*or0w2C%&Rd-3tH!000000001BFCQGdAO*0P-ogL?002ovPDHLkV1g;M Bt Date: Thu, 31 Aug 2023 12:51:20 +0530 Subject: [PATCH 3/8] updated icons --- icons/nanos_app_staderlabs.gif | Bin 3350 -> 335 bytes icons/nanox_app_staderlabs.gif | Bin 5141 -> 333 bytes icons/stax_app_staderlabs.gif | Bin 374 -> 0 bytes icons/stax_app_staderlabs_32.png | Bin 0 -> 434 bytes icons/stax_app_staderlabs_64.png | Bin 0 -> 806 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 icons/stax_app_staderlabs.gif create mode 100644 icons/stax_app_staderlabs_32.png create mode 100644 icons/stax_app_staderlabs_64.png diff --git a/icons/nanos_app_staderlabs.gif b/icons/nanos_app_staderlabs.gif index 34ea6c628cad0812c6a5e306d0fb4c4e4e464802..c6a156c7eaf79f9bb1a55a79fddd229108ce24d4 100644 GIT binary patch literal 335 zcmZ?wbhEHb6krfw_^QqT0W2&mY;0_Ne0==;{1Orp($dn3ii#>KDw>*_hK7bFCMM?Q z=5}^=etv!d0RcflLDA9CMMXuWrKRQNn46nuYoKRh3W5weASEClGqCwNGzbW2NOd26SXe1yG@tSL#0fhiq&MvNm3wj~H|eHP0MtUTo3ypj%0Tqh3*}o>yKv!6jXxyQkiB Kf{(K!gEatgPhsK! literal 3350 zcmZ?wbhEHb6krfw_{zXwVq#)$Zf;{^F@6!8X6iI85tE7m7JWM zo}OM_US3gAQBzY>UtizU)YRPE+|tt0*4Eb1(b3)A-P_wcVZwyjvuDqlGiUz%`3n{- zShQ%-^5x4{tXQ#T&6>4q*REf`e#ed-yLRn5aNxj+6DQ7`IdksZxyzR?U%h(u+O=yp zZ{ECf=g!@`ckkW1cmMwV2M-=Rdi3b=r5%(GR0zk9#BLS~Asdbp{tfp39xYDT6Ge1uOWMpDeerbuVx;hus;F8QV zgvoiudSHj@CFkdYB=r9q>KW(*4O39C0r9Q;i!xJzc7RN?Gqll176S9*)yk4ojh^;*wG`0 z4;?(Pf8X9cyLau}v3=XtEt@xO+^~M#+BK_Jtz5Bu*|Mce7B5=3VE(+hb7s$)Ib-_N zDU&BnoY3Fb+tc0E+0owC+S1(A*ic_rTT@+CSy5hAT2fq8SdgEWo0FZDnUS8Bnv$H9 zm=GTq8xtKB84(^98WJ277~t>c>*MX^>EZ6?>f-F==wNSWYh!I?X<=?=YGQ0;XrQmB ztD~)@siCf>s-moDIqQu&}VPv9YtWb8v9*^70A`3yX+| zNJ~r0%gbwNX=!U~>*(kh7#J8D8X6fH857M7Nlwzs!Wn>Ow6;lsy|A3u5W*N@uE_c4#;UBS2D2qI5ZeI=m@nsFaE?4;3dc7yfM?ICrIhUr4^BD zb)p|BAJI%aG)YK(gGY|&68{B)d=gux1uvDGu)>U^R8m7OI)qzYp)G_>DA6Ot+ryE; F8UVn{R$>4E literal 5141 zcmdT|33L-x6m2QCQfLsmAw>QH*C;z|q{=N6#_kYh6 zmlhdKlqyCQvoA*aiH(gNH*Q>9TwHv7d}3l^Qc{virJ6i>a&mHVN=iy40EuG8rVf*?sUH#fJmw6v_OZ2tWD<>lp-m6c1DEUBuhTE2XFb#*n% zvM!g4<2X?iYinzpnwpxMo7b#a)6&w?+S=OI*4EzMzG>5@j*gDb&d#o`uI}#cZQHi> z^z`)h_U_!dQwBKH$ISiX<>{G$iKQIn1UAaa(k_*g;yB8JYY2n%8v|$koL9|IA_e~j z=K8%9?E<3O4xFsVg6!?xg{WD^f-E)IaGN(D)UYLuKCrm4yn=3Y(Iy6&YfUu!Ntnxt zl-kd^Jp$>sAQZ#f0STWuAW|5jmLo)$1(BhUWTBsRRPel8t<`A=9Dy}_jDuWMP!uWw zzgdtPQS_1+R$pJQsn=_GpA*xXOc<`ibUG9UphANOqDDQ!ELb2>Ete<&0_|hHBFlT! zQc23r*NPSdNemTc=)St%TAy34%Fq~abHF1C0ZgmWVz8Q8ZDwfF!TUH$w6c8<2U`!tO(>pSp(RM%MC!GfxPjE;W=t6<0(pP?hIpUkL~9nR_|b3(CXOGX?yfFXnEqLZTP)z<(| z#FG8{B3M91jJM1XoFy)|jB8Nb=fHE+I!^qGyY;*xyTe&$=RilNH8a|?~SCThyK*JAP z-$9!80C}U-4PGCMgFX#=J7Qz$WPrXd?e8;Lh=0IX&=EX9s|i9>pY z5%V7=oBxYUW5s`XG97%CMuGpqCow#+2aF2yA9E68zQDgbnZo=B6sOMM(uIbRv4WBs4X!l=|f?K!TApgJ9^?jAYl%_qX8cHUZx(tfQb$K z_2(bI|F-|vUw+>A(~m!V|J~kizxn#BFTeQwvrj+y_@fU$c>le3-+BA3H{W>uwO3zx z`K1?Mc>cL(pLzPJJx@OI`0mFZedOVXc0IWBf!_P?yZ4?QJMO-#XZxLZY`eYtwys-m z*?RL$H{P)2`s=Rk?6_w0)mLr0@`{a@U)H|i(zf-jmt5R((Yg!QUa;o;=JT3XpS$Xu zv(IX5@YmPXih^&Ym-ldP*9x}A=>QCEr_Ma1dim*9r=7ZN>5|Hd#fwf^xS-rNzwG4F zlH#Jmg8Y;6=FPQQ%(K|OWJzzjr1y3)@#XVYdrPvWuP@rOwrM<0Y)PLa z%vfD8X`QRmxDjuwT*uDXJg;>MM;KQ*wifR$)TCu^SJ9Qoie(uIsk0{(r)1%3^;BEJ P^l1sU4ej}PF}Z&O#1qZ~ diff --git a/icons/stax_app_staderlabs.gif b/icons/stax_app_staderlabs.gif deleted file mode 100644 index 11a2f1daa6e7329453c94476301481bc9915b577..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmZ?wbhEHbRA5kG_{;zTY;0`Y+}vVfVupr>adB}|rc7D4Zr!2lO>oLSd0uLPG)Jwygko&$Z_H19u_;tMwiK~L2EB4hE=cP zYh9L85Ft71pdzc|k5cFRk&PCC5*$$t$D@t6SQdu#>1{R^QStE8bmd_y72-?{Wy^7G zukGwMWnl}n%4DeHa<>nd(J?)uvbUxvDL3DaF2Wn)tfj!mqlYZYuJ z8?mrfw{>Xi<{f5W72aobz$(&?MR@%-MVpJerU~7>EY3YQbUqLFP3_>Q#Od6e50@Eb z3v-{byCo6Kkdg0004bNkl@=x#;2)YIcPJ-?Y|k2k73Q>V%eRnDcP z2;#fc8sJ3*Jc)9&KEe!9+$&`OF9qu`R zoFPAC$g0=|l$Eo>T+op%K#a;C$2;q-dS+K}(lm3#TQ}VX>>vmi>W%0CFi(S3OKbtW cfB!pw1CjPgSFejUcK`qY07*qoM6N<$g2MW=fdBvi literal 0 HcmV?d00001 diff --git a/icons/stax_app_staderlabs_64.png b/icons/stax_app_staderlabs_64.png new file mode 100644 index 0000000000000000000000000000000000000000..388c355a02442775b87731ccaf191e46bfc922d9 GIT binary patch literal 806 zcmV+>1KIqEP)1BU*kz;0s16ZSR1_5yNRe4V z2O*RSr5CioNG~QtFBZM38?6UDl)KYm7nSwdXXbf!W`puKhh1cz=kxd3nR(`UU^f4I zlHxe_Bt8KAjNoU45&V%B{x+s^lGHc~SReV!CVSdng9P|VfB*r8Xrea`L6SPg5t8=8 z91p3qNelQUJ4v!@K7~?prM+5RpI?$(jw$>AK{lAcJ#3**iVFk-Wa#IMxuk>(1cyk` zi>Ff0fHEIqm0rG_R%Kiu=wiM;+`~~mIpPI-;+SJmSxP$-4*79Pbn%6BJH!QoR=j%n zOzybg1-td|P~(apX00CH%X?P^w2-L=$j0eL3SAZ6rM4T87qHag7;9t9NV55?B^>2L8HzBa(TokMkL>0OkqQpG)+m9p8ybJ0`^xyq33ouY?@rf?4j z8MMU(g4g7jz*DH?CBLP-V8BEHUd|9yzy*TGEYQv8b6*h`2+lKCFQ3N~2fSdLUOt_h zj`%k$)>}Zm(!iT)4SHWrELYy3huZ_PbnG{?98JDfnbp1X7+jV kRP&u?%Kr{Nn}0ih045WYw2&ZDt^fc407*qoM6N<$g42 Date: Mon, 4 Sep 2023 00:04:27 +0530 Subject: [PATCH 4/8] audit warning fixes --- README.md | 14 ++++++++------ src/handle_query_contract_id.c | 2 +- src/handle_query_contract_ui.c | 6 +++--- src/staderlabs_plugin.h | 4 ++-- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 24f01d8..f5b1264 100644 --- a/README.md +++ b/README.md @@ -25,12 +25,14 @@ Need more information about the interface, the architecture, or general stuff ab Smart contracts covered by this plugin are: -| Network | Contract Name | Smart Contract | -| -------- | ------------- | -------------------------------------------- | -| Ethereum | MaticX | `0xf03a7eb46d01d9ecaa104558c732cf82f6b6b645` | -| Polygon | ChildPool | `0xfd225c9e6601c9d38d8f98d8731bf59efcf8c0e3` | -| BSC | StakeManager | `0x7276241a669489E4BBB76f63d2A43Bfe63080F2F` | -| Fantom | FTMStaking | `0xb458bfc855ab504a8a327720fcef98886065529b` | +| Network | Contract Name | Smart Contract | +| -------- | ----------------------- | -------------------------------------------- | +| Ethereum | MaticX | `0xf03a7eb46d01d9ecaa104558c732cf82f6b6b645` | +| Polygon | ChildPool | `0xfd225c9e6601c9d38d8f98d8731bf59efcf8c0e3` | +| BSC | StakeManager | `0x7276241a669489E4BBB76f63d2A43Bfe63080F2F` | +| Fantom | FTMStaking | `0xb458bfc855ab504a8a327720fcef98886065529b` | +| Ethereum | StaderStakePoolsManager | `0xcf5ea1b38380f6af39068375516daf40ed70d299` | +| Ethereum | UserWithdrawalManager | `0x9f0491b32dbce587c50c4c43ab303b06478193a7` | ## Build diff --git a/src/handle_query_contract_id.c b/src/handle_query_contract_id.c index 03c0db8..0bb30a7 100644 --- a/src/handle_query_contract_id.c +++ b/src/handle_query_contract_id.c @@ -9,7 +9,7 @@ void handle_query_contract_id(void *parameters) { // For the first screen, display the plugin name. strlcpy(msg->name, PLUGIN_NAME, msg->nameLength); - char *msgVersion; + const char *msgVersion; // EDIT THIS: Adapt the cases by modifying the strings you pass to `strlcpy`. switch (context->selectorIndex) { diff --git a/src/handle_query_contract_ui.c b/src/handle_query_contract_ui.c index e5a9bda..6f3760c 100644 --- a/src/handle_query_contract_ui.c +++ b/src/handle_query_contract_ui.c @@ -66,12 +66,12 @@ static void set_account_addr_ui(ethQueryContractUI_t *msg, context_t *context) { // `msg->msg`. getEthAddressStringFromBinary( context->account_addr, - (uint8_t *) msg->msg + 2, // +2 because we've already prefixed with '0x'. + (char *) msg->msg + 2, // +2 because we've already prefixed with '0x'. msg->pluginSharedRW->sha3, // Used by the function to calculate the hash chainid); } -static void handle_ethx_deposit(ethQueryContractUI_t *msg, const context_t *context) { +static void handle_ethx_deposit(ethQueryContractUI_t *msg, context_t *context) { memset(msg->title, 0, msg->titleLength); memset(msg->msg, 0, msg->msgLength); @@ -91,7 +91,7 @@ static void handle_ethx_deposit(ethQueryContractUI_t *msg, const context_t *cont } } -static void handle_ethx_request_withdraw(ethQueryContractUI_t *msg, const context_t *context) { +static void handle_ethx_request_withdraw(ethQueryContractUI_t *msg, context_t *context) { memset(msg->title, 0, msg->titleLength); memset(msg->msg, 0, msg->msgLength); switch (msg->screenIndex) { diff --git a/src/staderlabs_plugin.h b/src/staderlabs_plugin.h index 58d3987..f51c0d6 100644 --- a/src/staderlabs_plugin.h +++ b/src/staderlabs_plugin.h @@ -44,8 +44,8 @@ extern const uint32_t STADERLABS_SELECTORS[NUM_SELECTORS]; typedef struct context_t { // For display. uint8_t amount_received[INT256_LENGTH]; - char *ticker; - char account_addr[ADDRESS_LENGTH]; + const char *ticker; + uint8_t account_addr[ADDRESS_LENGTH]; // For parsing data. uint8_t next_param; // Set to be the next param we expect to parse. From 5b2c077b19885bf8360ad53eb2da38104528d762 Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Mon, 4 Sep 2023 18:56:53 +0530 Subject: [PATCH 5/8] updated makefile --- Makefile | 256 +++++++++++++++++++++++-------------------------------- 1 file changed, 108 insertions(+), 148 deletions(-) diff --git a/Makefile b/Makefile index 821d113..15a85fe 100755 --- a/Makefile +++ b/Makefile @@ -1,19 +1,19 @@ -#******************************************************************************* -# Ledger App -# (c) 2017 Ledger +# **************************************************************************** +# Ledger App Boilerplate +# (c) 2023 Ledger SAS. # -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#******************************************************************************* +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# **************************************************************************** ifeq ($(BOLOS_SDK),) $(error Environment variable BOLOS_SDK is not set) @@ -21,150 +21,110 @@ endif include $(BOLOS_SDK)/Makefile.defines +######################################## +# Mandatory configuration # +######################################## +# Application name APPNAME = "Staderlabs" -ifeq ($(ETHEREUM_PLUGIN_SDK),) -ETHEREUM_PLUGIN_SDK=ethereum-plugin-sdk -endif - -APP_LOAD_PARAMS += --appFlags 0x800 --path "44'/60'" --curve secp256k1 - -APP_LOAD_PARAMS += $(COMMON_LOAD_PARAMS) - -APPVERSION_M = 1 -APPVERSION_N = 1 -APPVERSION_P = 0 -APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" - -ifeq ($(TARGET_NAME), TARGET_NANOS) -ICONNAME=icons/nanos_app_staderlabs.gif -else ifeq ($(TARGET_NAME), TARGET_STAX) -ICONNAME=icons/stax_app_staderlabs.gif -DEFINES += ICONGLYPH=C_stax_staderlabs_64px -DEFINES += ICONBITMAP=C_stax_staderlabs_64px_bitmap -GLYPH_FILES += $(ICONNAME) -else -ICONNAME=icons/nanox_app_staderlabs.gif -endif - -################ -# Default rule # -################ -all: default - -############ -# Platform # -############ - -DEFINES += OS_IO_SEPROXYHAL -DEFINES += HAVE_SPRINTF -DEFINES += LEDGER_MAJOR_VERSION=$(APPVERSION_M) LEDGER_MINOR_VERSION=$(APPVERSION_N) LEDGER_PATCH_VERSION=$(APPVERSION_P) -DEFINES += IO_HID_EP_LENGTH=64 - -DEFINES += UNUSED\(x\)=\(void\)x -DEFINES += APPVERSION=\"$(APPVERSION)\" -CFLAGS += -DAPPNAME=\"$(APPNAME)\" - -ifneq (,$(filter $(TARGET_NAME),TARGET_NANOX TARGET_STAX)) -DEFINES += HAVE_BLE BLE_COMMAND_TIMEOUT_MS=2000 -DEFINES += HAVE_BLE_APDU # basic ledger apdu transport over BLE -endif - -ifeq ($(TARGET_NAME),TARGET_NANOS) -DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=128 -else -DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=300 -endif - -ifneq ($(TARGET_NAME),TARGET_STAX) -DEFINES += HAVE_BAGL -ifneq ($(TARGET_NAME),TARGET_NANOS) -DEFINES += HAVE_GLO096 -DEFINES += HAVE_BAGL BAGL_WIDTH=128 BAGL_HEIGHT=64 -DEFINES += HAVE_BAGL_ELLIPSIS # long label truncation feature -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_REGULAR_11PX -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_EXTRABOLD_11PX -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_LIGHT_16PX -DEFINES += HAVE_UX_FLOW -endif -endif +# Application version +APPVERSION_M = 1 +APPVERSION_N = 1 +APPVERSION_P = 0 +APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" -# Enabling debug PRINTF -ifneq ($(DEBUG),0) - DEFINES += HAVE_STACK_OVERFLOW_CHECK - SDK_SOURCE_PATH += lib_stusb lib_stusb_impl - DEFINES += HAVE_IO_USB HAVE_L4_USBLIB IO_USB_MAX_ENDPOINTS=4 IO_HID_EP_LENGTH=64 HAVE_USB_APDU - - ifeq ($(DEBUG),10) - $(warning Using semihosted PRINTF. Only run with speculos!) - CFLAGS += -include src/dbg/debug.h - DEFINES += HAVE_PRINTF PRINTF=semihosted_printf - else - ifeq ($(TARGET_NAME),TARGET_NANOS) - DEFINES += HAVE_PRINTF PRINTF=screen_printf - else - DEFINES += HAVE_PRINTF PRINTF=mcu_usb_printf - endif - - endif -else - DEFINES += PRINTF\(...\)= -endif - -############## -# Compiler # -############## -ifneq ($(BOLOS_ENV),) -$(info BOLOS_ENV=$(BOLOS_ENV)) -CLANGPATH := $(BOLOS_ENV)/clang-arm-fropi/bin/ -GCCPATH := $(BOLOS_ENV)/gcc-arm-none-eabi-5_3-2016q1/bin/ -else -$(info BOLOS_ENV is not set: falling back to CLANGPATH and GCCPATH) -endif -ifeq ($(CLANGPATH),) -$(info CLANGPATH is not set: clang will be used from PATH) -endif -ifeq ($(GCCPATH),) -$(info GCCPATH is not set: arm-none-eabi-* will be used from PATH) -endif - -CC := $(CLANGPATH)clang - -AS := $(GCCPATH)arm-none-eabi-gcc - -LD := $(GCCPATH)arm-none-eabi-gcc -LDLIBS += -lm -lgcc -lc - -# import rules to compile glyphs(/pone) -include $(BOLOS_SDK)/Makefile.glyphs - -### variables processed by the common makefile.rules of the SDK to grab source files and include dirs -APP_SOURCE_PATH += src $(ETHEREUM_PLUGIN_SDK) -ifneq ($(TARGET_NAME), TARGET_STAX) -SDK_SOURCE_PATH += lib_ux -endif -ifneq (,$(findstring HAVE_BLE,$(DEFINES))) -SDK_SOURCE_PATH += lib_blewbxx lib_blewbxx_impl -endif - -### initialize plugin SDK submodule if needed +# Initialize plugin SDK submodule if needed ifneq ($(shell git submodule status | grep '^[-+]'),) $(info INFO: Need to reinitialize git submodules) $(shell git submodule update --init) endif -load: all - python3 -m ledgerblue.loadApp $(APP_LOAD_PARAMS) - -delete: - python3 -m ledgerblue.deleteApp $(COMMON_DELETE_PARAMS) +ifeq ($(ETHEREUM_PLUGIN_SDK),) +ETHEREUM_PLUGIN_SDK=ethereum-plugin-sdk +endif -# import generic rules from the sdk -include $(BOLOS_SDK)/Makefile.rules +# Application source files +APP_SOURCE_PATH += src $(ETHEREUM_PLUGIN_SDK) +# Application icons following guidelines: +# https://developers.ledger.com/docs/embedded-app/design-requirements/#device-icon +ICON_ID = $(shell echo -n "$(APPNAME)" | tr " " "_" | tr "[:upper:]" "[:lower:]") +ICON_NANOS = icons/nanos_app_$(ICON_ID).gif +ICON_NANOX = icons/nanox_app_$(ICON_ID).gif +ICON_NANOSP = $(ICON_NANOX) +ICON_STAX = icons/stax_app_$(ICON_ID).gif -#add dependency on custom makefile filename -dep/%.d: %.c Makefile +ifeq ($(TARGET_NAME),TARGET_STAX) + DEFINES += ICONGLYPH=C_stax_$(ICON_ID)_64px + DEFINES += ICONBITMAP=C_stax_$(ICON_ID)_64px_bitmap +endif -listvariants: - @echo VARIANTS NONE staderlabs +# Application allowed derivation curves. +# Possibles curves are: secp256k1, secp256r1, ed25519 and bls12381g1 +# If your app needs it, you can specify multiple curves by using: +# `CURVE_APP_LOAD_PARAMS = ` +CURVE_APP_LOAD_PARAMS = secp256k1 + +# Application allowed derivation paths. +# You should request a specific path for your app. +# This serve as an isolation mechanism. +# Most application will have to request a path according to the BIP-0044 +# and SLIP-0044 standards. +# If your app needs it, you can specify multiple path by using: +# `PATH_APP_LOAD_PARAMS = "44'/1'" "45'/1'"` +PATH_APP_LOAD_PARAMS = "44'/60'" # purpose=coin(44) / coin_type=Testnet(1) + +# Setting to allow building variant applications +# - is the name of the parameter which should be set +# to specify the variant that should be build. +# - a list of variant that can be build using this app code. +# * It must at least contains one value. +# * Values can be the app ticker or anything else but should be unique. +VARIANT_PARAM = COIN +VARIANT_VALUES = pbol + +# Enabling DEBUG flag will enable PRINTF and disable optimizations +#DEBUG = 1 + +######################################## +# Application custom permissions # +######################################## +# See SDK `include/appflags.h` for the purpose of each permission +#HAVE_APPLICATION_FLAG_DERIVE_MASTER = 1 +#HAVE_APPLICATION_FLAG_GLOBAL_PIN = 1 +#HAVE_APPLICATION_FLAG_BOLOS_SETTINGS = 1 +HAVE_APPLICATION_FLAG_LIBRARY = 1 + +######################################## +# Application communication interfaces # +######################################## +#ENABLE_BLUETOOTH = 1 +#ENABLE_NFC = 1 + +######################################## +# NBGL custom features # +######################################## +#ENABLE_NBGL_QRCODE = 1 +#ENABLE_NBGL_KEYBOARD = 1 +#ENABLE_NBGL_KEYPAD = 1 + +######################################## +# Features disablers # +######################################## +# These advanced settings allow to disable some feature that are by +# default enabled in the SDK `Makefile.standard_app`. + +DISABLE_STANDARD_APP_FILES = 1 + +# To allow custom size declaration +#DISABLE_DEFAULT_IO_SEPROXY_BUFFER_SIZE = 1 + +# Will set all the following disablers +#DISABLE_STANDARD_APP_DEFINES = 1 + +DISABLE_STANDARD_SNPRINTF = 1 +#DISABLE_STANDARD_USB = 1 +DISABLE_STANDARD_WEBUSB = 1 +DISABLE_STANDARD_BAGL_UX_FLOW = 1 + +include $(BOLOS_SDK)/Makefile.standard_app \ No newline at end of file From ca6017d8d657152254858bbd37a7a1ed67255c81 Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Mon, 4 Sep 2023 18:59:30 +0530 Subject: [PATCH 6/8] minor changes --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 15a85fe..e31fc9b 100755 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # **************************************************************************** -# Ledger App Boilerplate +# Ledger App # (c) 2023 Ledger SAS. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -127,4 +127,4 @@ DISABLE_STANDARD_SNPRINTF = 1 DISABLE_STANDARD_WEBUSB = 1 DISABLE_STANDARD_BAGL_UX_FLOW = 1 -include $(BOLOS_SDK)/Makefile.standard_app \ No newline at end of file +include $(BOLOS_SDK)/Makefile.standard_app From 34cc08931b9a0129e95b9dc382014d0d815ab2d5 Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Tue, 5 Sep 2023 13:45:52 +0530 Subject: [PATCH 7/8] icon and makefile fixes (#23) * icon and makefile fixes * updated icons --- Makefile | 2 +- icons/stax_app_staderlabs.gif | Bin 0 -> 445 bytes icons/stax_app_staderlabs_32.png | Bin 434 -> 0 bytes icons/stax_app_staderlabs_64.png | Bin 806 -> 0 bytes icons/stax_app_staderlabs_64px.gif | Bin 0 -> 1376 bytes 5 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 icons/stax_app_staderlabs.gif delete mode 100644 icons/stax_app_staderlabs_32.png delete mode 100644 icons/stax_app_staderlabs_64.png create mode 100644 icons/stax_app_staderlabs_64px.gif diff --git a/Makefile b/Makefile index e31fc9b..f0d0e64 100755 --- a/Makefile +++ b/Makefile @@ -81,7 +81,7 @@ PATH_APP_LOAD_PARAMS = "44'/60'" # purpose=coin(44) / coin_type=Testnet(1) # * It must at least contains one value. # * Values can be the app ticker or anything else but should be unique. VARIANT_PARAM = COIN -VARIANT_VALUES = pbol +VARIANT_VALUES = staderlabs # Enabling DEBUG flag will enable PRINTF and disable optimizations #DEBUG = 1 diff --git a/icons/stax_app_staderlabs.gif b/icons/stax_app_staderlabs.gif new file mode 100644 index 0000000000000000000000000000000000000000..fee9e22150e0efeed33293ddbcc169e3feb54578 GIT binary patch literal 445 zcmZ?wbhEHbRA5kG_-eoa1gxyATwGjye0;*f!m_fmYHDg)T3UK~dWMFE78VvZHa1R9 zPVVmR-rn9mK0Xl<5wWqc$;rtnDJl8+`9(!VWo2cxwYAO7%^e*beSLkCCQX_(;G1ckVoT^yt~MXD?p7c>DJ4 zr%#{0fB*jb_wWDz|AX8_G*JA>0#>W|pW8DxF+J5cF+DRmn=d^vH#gDNK+nV!1Q~Qd zYCt|_VB6!+P~f2>)qi41(aALjVzef6Y}sit!^@fb*xN%9H}a)r+7;Ki_^mSoT~M)+RXXVts2?#WlHsm4D2fWWy(d`f@Q9kdg0004bNkl@=x#;2)YIcPJ-?Y|k2k73Q>V%eRnDcP z2;#fc8sJ3*Jc)9&KEe!9+$&`OF9qu`R zoFPAC$g0=|l$Eo>T+op%K#a;C$2;q-dS+K}(lm3#TQ}VX>>vmi>W%0CFi(S3OKbtW cfB!pw1CjPgSFejUcK`qY07*qoM6N<$g2MW=fdBvi diff --git a/icons/stax_app_staderlabs_64.png b/icons/stax_app_staderlabs_64.png deleted file mode 100644 index 388c355a02442775b87731ccaf191e46bfc922d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 806 zcmV+>1KIqEP)1BU*kz;0s16ZSR1_5yNRe4V z2O*RSr5CioNG~QtFBZM38?6UDl)KYm7nSwdXXbf!W`puKhh1cz=kxd3nR(`UU^f4I zlHxe_Bt8KAjNoU45&V%B{x+s^lGHc~SReV!CVSdng9P|VfB*r8Xrea`L6SPg5t8=8 z91p3qNelQUJ4v!@K7~?prM+5RpI?$(jw$>AK{lAcJ#3**iVFk-Wa#IMxuk>(1cyk` zi>Ff0fHEIqm0rG_R%Kiu=wiM;+`~~mIpPI-;+SJmSxP$-4*79Pbn%6BJH!QoR=j%n zOzybg1-td|P~(apX00CH%X?P^w2-L=$j0eL3SAZ6rM4T87qHag7;9t9NV55?B^>2L8HzBa(TokMkL>0OkqQpG)+m9p8ybJ0`^xyq33ouY?@rf?4j z8MMU(g4g7jz*DH?CBLP-V8BEHUd|9yzy*TGEYQv8b6*h`2+lKCFQ3N~2fSdLUOt_h zj`%k$)>}Zm(!iT)4SHWrELYy3huZ_PbnG{?98JDfnbp1X7+jV kRP&u?%Kr{Nn}0ih045WYw2&ZDt^fc407*qoM6N<$g426ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui06+jh000R8009UbNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#2|75&?|&YG}Rmr1sE|N+sLxzKYr}CE!(wVaY4eJp;rZB#_3M*`EGf zs5OWK)?1>)8q6JN0MNL*MArz|3jl;Iet>)0dqFrvvBX4SMcBI_6=b4l2!FZUQyq=H z5xjBcX$s|BDx-O-Av|idsVVR_a$~%g+U0Ou8~~`Z5mef}?Gp3T{FFn9RuPOrqEY3)Qt2C19<9L?Fxd2lb4@h z*U}%O4-b97iY@>y_r^y4DDy)B4k=)VIUDg&-37nI^M`2+C6L53{;>4TP0PU$olPh!?MDP9DQ^m7?75QxVCE~80u0CyS$lUfwqB~VIg+ibvH8dHw;hID(GVB2W9 z=vEyb9dh;z3fyrZ3}^lrlY)3fum>4CkLbx=8<5pgOAhcEP)TCPh#_MHcD)4-9~bCY z0hnf8@|lhRP+*H!y&QoassK1WfJ#&3h;byW0ts*kQT0rc0j>pY=2AVp)BvnOHK@~) iGnyW25Cf)c^i3gFI%^OY=#YYgwcK{=?YC+L1OPiG$%91z literal 0 HcmV?d00001 From 7c2a6cc4950fb15553be1387f78a4fd607505dc2 Mon Sep 17 00:00:00 2001 From: Manoj Patra Date: Fri, 8 Sep 2023 11:15:09 +0530 Subject: [PATCH 8/8] update icons (#25) --- icons/nanos_app_staderlabs.gif | Bin 335 -> 3134 bytes icons/nanox_app_staderlabs.gif | Bin 333 -> 3129 bytes icons/stax_app_staderlabs.gif | Bin 445 -> 1162 bytes icons/stax_app_staderlabs_64px.gif | Bin 1376 -> 1561 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/nanos_app_staderlabs.gif b/icons/nanos_app_staderlabs.gif index c6a156c7eaf79f9bb1a55a79fddd229108ce24d4..db8b785227181b15fd3528a5a4421e7886540b6a 100644 GIT binary patch literal 3134 zcmZ?wbhEHb6krfw_`tyM|Nnmm1_s5SEI<-S|L2bI4N!1NEJ*~?Hue<-iOJciB??KY z>6v-9>hE{&S69ePu~iQ@^)>JYllY>8Vy$t`(VSA^G_^3Wi2{CI;$2 zLyA(;tb$zJphf_Bw(1!rB?VUc`sL;2dgaD?`9=P7{9OiaozEwNQs=Td+gU6PrGFgveU5A0OE1N{AbeZ0LqJ>1<~U7Vd99qjFF zZLF;rGMq=w~Tii1DUc8Up+7N&NoqYB7a2Ns&EDdYXJ17 BKuG`q literal 335 zcmZ?wbhEHb6krfw_^QqT0W2&mY;0_Ne0==;{1Orp($dn3ii#>KDw>*_hK7bFCMM?Q z=5}^=etv!d0RcflLDA9CMMXuWrKRQNn46nuYoKRh3W5weASEClGqCwNGzbW2NOd26SXe1yG@tSL#0fhiq&MvNm3wj~H|eHP0MtUTo3ypj%0Tqh3*}o>yKv!6jXxyQkiB Kf{(K!gEatgPhsK! diff --git a/icons/nanox_app_staderlabs.gif b/icons/nanox_app_staderlabs.gif index c82e2990956582652d72adcffc743a38156f7944..73f2f3216745f239cdd23a65074d6187492e7827 100644 GIT binary patch literal 3129 zcmZ?wbhEHb6v-9>hE{&S69ePu~iQ@^)>JYllY>8Vy$t`(VSA^G_^3Wi2{CI;$2 zLyA(;tb$zJphf_Bw(1!rB?VUc`sL;2dgaD?`9=P7{9OiaozEwNQs=Td+gU6PrGFgveU5A0OE1N{AbeZ0LqJ>1<~U7Vd99qjFF zZLF;0T=`r&r!dmJjFrI}0D%NPumAu6 literal 333 zcmZ?wbhEHb*J2+S=MWIywdh28M=)Mn*=)#>N&F7B)6E_V)HJE-oG(9>KxEF)=Y285vnwS%rm# zrKP3q?d{X1O*?$}@bTlvPo6w^?%cT>H*Va%ef!z7XRlws{_x?$|NsA?jv$Lt{K>)y z(x~{K+cP&YJ=HfcJu^9*FFi3gH__HW&%_i28FWBOKt5(*^Kob}aL^HIbzc05Bfv|J z$9ZF>OHYu}iAyUY*Xl$+Qa+-YcxaN4`Ua02(Ix&11oAje(hgfq{X6Au+kQ zz%d}ehk=2CAum5Kl>rqnGBA9*#=ywHz`$@>*U`nvm4P(Cnp{v+!oa|AfPsO*C?&Nx znSp`f3j+f~dU;7f2?GOT30VMWM0VphQ*SlgXI>h9&0P>JvK|WX>8xv z!`XLpC~H|R}nWdfeHOb0Z#>?!s0Ly zG%I%hf-(#ku$gcLZZ5+Tm>80Rf8_|1gg;^`I4_4}Rs4Sp1*cK`vjIcFT?=G+*)MPf zFkdV?0hiS_VQ}R}D26KZfD45De`J5`KZX@9P-&?hs38YePymrH`28P;g5wGd3=I0` zpds=XQ^EfQ3=F+c<};&2EDC;>oq#a@HZe0WoWN870~=)+7#J85aVfa&0CBA9Ppk^Q zWy1nP;59Y{XNBRRrTY&ih!jQVEq}q;4vbh5j5$Ir|9vcuT#k@u+Jhw={)fZmogVzh zra&Jmt+*A%<8TFE6d4#87#LXFQ3D3a1TzK(28Qt0|8XivU|=vffi8`#U=!CQOzHps c87a=)04K&cpBn>v8vp(;G1ckVoT^yt~MXD?p7c>DJ4 zr%#{0fB*jb_wWDz|AX8_G*JA>0#>W|pW8DxF+J5cF+DRmn=d^vH#gDNK+nV!1Q~Qd zYCt|_VB6!+P~f2>)qi41(aALjVzef6Y}sit!^@fb*xN%9H}a)r+7;Ki_^mSoT~M)+RXXVts2?#WlHsm4D2fWWy(d`f@Q9Aje(hgfq{X6Au+kQ zz%d}ehk=2CAum5Kl>rqnGBA9*#=ywHz`$@>*U`nvm4P(Cnp{v+!oa|AfPsO*C?&Nx znSp`f3j+f~dU;7f2?GOT30VMWM0VphQ*SlgXI>h9&0P>JvK|WX>8xv z!`XLpC~=dz*}MzDmKqEOjir636ug20TT zwLv{q6h8P+p;2THNrZtE3BL3YK}1qPBm@aov=Gb))X0H_Ei5;io8DfQdC%{A?mfeo z9=cE4@BTiYd(OGPbM~8N(88{)1@ixZV3FnB#;ZiSTX(y4UDw^ZzBp6C3nCgHCn6$; zbE(tm^aRSp9K-7B$Q9Ge#T08nvPKjv7gH=3aVGpl4ArqDi|3D>V>8Hlu0DmtLq8vr zFQzQ$KY=E7F{LO-w)+sTyd#3`0MNJ)o(4RGV#?t zHaHhF&%=vb6Sh1P3}nyohhN*{Trhhyjc>R+CENl#2?&fq7ZH(mW<-dO?B6Yhu)t^| z(kgnU&B54}BBB;G!Pw6H3&O66cl$LW^1e|L7;nXQ7e16;my<~)fpC3n$^Y|ST>Y5~ z;TwzGUVQ3;=xNkB z?D)dFXj|JB`o>%h{-g`zonXmamy{Q1Dzd=|?Z(bD zUfm~qbvAX-=O!X5y{&>n!OwakZxcVflm$kYr=eF7Hw^9ne`op)y|W1N5&;v*00000 LNkvXXu0mjfjIiXt literal 1376 zcmV-m1)usyNk%w1VL$*t0Qdg@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui06+jh000R8009UbNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#2|75&?|&YG}Rmr1sE|N+sLxzKYr}CE!(wVaY4eJp;rZB#_3M*`EGf zs5OWK)?1>)8q6JN0MNL*MArz|3jl;Iet>)0dqFrvvBX4SMcBI_6=b4l2!FZUQyq=H z5xjBcX$s|BDx-O-Av|idsVVR_a$~%g+U0Ou8~~`Z5mef}?Gp3T{FFn9RuPOrqEY3)Qt2C19<9L?Fxd2lb4@h z*U}%O4-b97iY@>y_r^y4DDy)B4k=)VIUDg&-37nI^M`2+C6L53{;>4TP0PU$olPh!?MDP9DQ^m7?75QxVCE~80u0CyS$lUfwqB~VIg+ibvH8dHw;hID(GVB2W9 z=vEyb9dh;z3fyrZ3}^lrlY)3fum>4CkLbx=8<5pgOAhcEP)TCPh#_MHcD)4-9~bCY z0hnf8@|lhRP+*H!y&QoassK1WfJ#&3h;byW0ts*kQT0rc0j>pY=2AVp)BvnOHK@~) iGnyW25Cf)c^i3gFI%^OY=#YYgwcK{=?YC+L1OPiG$%91z