diff --git a/Makefile b/Makefile index 49954bc..42da5ad 100644 --- a/Makefile +++ b/Makefile @@ -84,7 +84,18 @@ VARIANT_PARAM = COIN VARIANT_VALUES = stakekit # Enabling DEBUG flag will enable PRINTF and disable optimizations -#DEBUG = 1 +DEBUG := 0 +DISABLE_DEBUG_LEDGER_ASSERT = 1 +DISABLE_DEBUG_THROW = 1 +ifneq ($(DEBUG),0) + ifneq ($(TARGET_NAME),TARGET_NANOS) + DEFINES += HAVE_PRINTF PRINTF=mcu_usb_printf + else + DEFINES += HAVE_PRINTF PRINTF=screen_printf + endif +else + DEFINES += PRINTF\(...\)= +endif ######################################## # Application custom permissions # diff --git a/README.md b/README.md index 8af0917..54fb0d3 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,9 @@ Smart contracts covered by this plugin are: | Avalanche Liquid Staking | Avalanche | TransparentUpgradeableProxy | 0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be| StakedAvax | 0x0CE7F620Eb645a4FbF688a1C1937bC6CB0CbDd29 | |Aave v3 Lending DAI |
Optimism
Polygon
Arbitrum
Avalanche
|InitializableImmutableAdminUpgradeabilityProxy | 0x794a61358d6845594f94dc1db02a252b5b4814ad |
Pool
Pool
L2Pool
L2Pool
|
0xb77fc84a549ecc0b410d6fa15159C2df207545a3
0xCf85FF1c37c594a10195F7A9Ab85CBb0a03f69dE
0x764594F8e9757edE877B75716f8077162B251460
0xbCb167bDCF14a8F791d6f4A6EDd964aed2F8813B
|Yearn Vault |
Ethereum
Optimism
Fantom
| Yearn Vault | [Token json](./tokens.json) | +| Angle Protocol |
Ethereum
Arbitrum
| TransparentUpgradeableProxy | 0x004626A008B1aCdC4c74ab51644093b155e59A23| Savings | 0xfD2cCc920d498db30FBE9c13D5705aE2C72670F9 | +| Lido stETH Withdrawal NFT | Ethereum | OssifiableProxy | 0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1| WithdrawalQueueERC721 | 0xE42C659Dc09109566720EA8b2De186c2Be7D94D9 | +| VIC Native Staking | Viction | TomoValidator | 0x0000000000000000000000000000000000000088| X | X | ## Methods @@ -68,6 +71,9 @@ Methods covered by this plugin are: | Aave v3 Lending DAI |
L2Pool
Pool
|
0x617ba037
0x69328dec
|
supply
withdraw
| | Avalanche Liquid Staking | StakedAvax |
0x5bcb2fc6
0xc9d2ff9d
0xdb006a75
0xbe040fb0
0x0d10d32c
0x0f7e2048
|
submit
requestUnlock
redeem
redeem
redeemOverdueShares
redeemOverdueShares
| | Yearn Vault | Yearn Vault |
0xd0e30db0
0xb6b55f25
0x6e553f65
0x3ccfd60b
0x2e1a7d4d
0x00f714ce
|
deposit
deposit
deposit
withdraw
withdraw
withdraw
| +| Angle Protocol | Savings |
0x6e553f65
0xb460af94
|
deposit
withdraw
| +| Lido stETH Withdrawal NFT | WithdrawalQueueERC721 |
0xd6681042
0xe3afe0a3
|
requestWithdrawals
claimWithdrawals
| +| VIC Native Staking | TomoValidator |
0x6dd7d8ea
0x02aa9be2
0xae6e43f5
0x441a3e70
|
vote
unvote
resign
withdraw
| ## Build diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index b9777e7..3b7e7ad 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit b9777e7a81a9c33b3f8997ffa23396fa2b3f861d +Subproject commit 3b7e7adf4f7e512434779cc7dbd9d0ede6d6c132 diff --git a/ledger_app.toml b/ledger_app.toml new file mode 100644 index 0000000..376e254 --- /dev/null +++ b/ledger_app.toml @@ -0,0 +1,7 @@ +[app] +build_directory = "./" +sdk = "C" +devices = ["nanos", "nanox", "nanos+", "stax"] + +[tests] +pytest_directory = "./tests/" \ No newline at end of file diff --git a/src/contract.c b/src/contract.c index 6234969..b980921 100644 --- a/src/contract.c +++ b/src/contract.c @@ -89,6 +89,20 @@ static const uint8_t STAKEKIT_YEARN_VAULT_WITHDRAW_3_SELECTOR[SELECTOR_SIZE] = { 0xf7, 0x14, 0xce}; +static const uint8_t STAKEKIT_ANGLE_WITHDRAW_SELECTOR[SELECTOR_SIZE] = {0xb4, 0x60, 0xaf, 0x94}; +static const uint8_t STAKEKIT_LIDO_REQUEST_WITHDRAWALS_SELECTOR[SELECTOR_SIZE] = {0xd6, + 0x68, + 0x10, + 0x42}; +static const uint8_t STAKEKIT_LIDO_CLAIM_WITHDRAWALS_SELECTOR[SELECTOR_SIZE] = {0xe3, + 0xaf, + 0xe0, + 0xa3}; +static const uint8_t STAKEKIT_VIC_VOTE_SELECTOR[SELECTOR_SIZE] = {0x6d, 0xd7, 0xd8, 0xea}; + +static const uint8_t STAKEKIT_VIC_RESIGN_SELECTOR[SELECTOR_SIZE] = {0xae, 0x6e, 0x43, 0xf5}; +static const uint8_t STAKEKIT_VIC_UNVOTE_SELECTOR[SELECTOR_SIZE] = {0x02, 0xaa, 0x9b, 0xe2}; +static const uint8_t STAKEKIT_VIC_WITHDRAW_SELECTOR[SELECTOR_SIZE] = {0x44, 0x1a, 0x3e, 0x70}; // Array of all the different StakeKit selectors. const uint8_t *const STAKEKIT_SELECTORS[NUM_STAKEKIT_SELECTORS] = { @@ -140,6 +154,13 @@ const uint8_t *const STAKEKIT_SELECTORS[NUM_STAKEKIT_SELECTORS] = { STAKEKIT_YEARN_VAULT_WITHDRAW_1_SELECTOR, STAKEKIT_YEARN_VAULT_WITHDRAW_2_SELECTOR, STAKEKIT_YEARN_VAULT_WITHDRAW_3_SELECTOR, + STAKEKIT_ANGLE_WITHDRAW_SELECTOR, + STAKEKIT_LIDO_REQUEST_WITHDRAWALS_SELECTOR, + STAKEKIT_LIDO_CLAIM_WITHDRAWALS_SELECTOR, + STAKEKIT_VIC_VOTE_SELECTOR, + STAKEKIT_VIC_RESIGN_SELECTOR, + STAKEKIT_VIC_UNVOTE_SELECTOR, + STAKEKIT_VIC_WITHDRAW_SELECTOR, }; // Null address @@ -1750,4 +1771,14 @@ const tokenSymbolAndDecimals_t STAKEKIT_SUPPORTED_YEARN_VAULT[NUM_SUPPORTED_SMAR "3poolV2-f", "yvCurve-MIM", 18}, + {{0x00, 0x46, 0x26, 0xA0, 0x08, 0xB1, 0xaC, 0xdC, 0x4c, 0x74, + 0xab, 0x51, 0x64, 0x40, 0x93, 0xb1, 0x55, 0xe5, 0x9A, 0x23}, + "stEUR", + "stEUR", + 18}, + {{0x88, 0x9e, 0xdC, 0x2e, 0xDa, 0xb5, 0xf4, 0x0e, 0x90, 0x2b, + 0x86, 0x4a, 0xD4, 0xd7, 0xAd, 0xE8, 0xE4, 0x12, 0xF9, 0xB1}, + "unstETH", + "unstETH", + 18}, }; \ No newline at end of file diff --git a/src/handle_finalize.c b/src/handle_finalize.c index a0a1825..cd02915 100644 --- a/src/handle_finalize.c +++ b/src/handle_finalize.c @@ -188,16 +188,54 @@ void handle_finalize(void *parameters) { case PARASPACE_WITHDRAW: case YEARN_VAULT_WITHDRAW_2: case YEARN_VAULT_WITHDRAW_3: + case ANGLE_WITHDRAW: msg->numScreens = 1; if (context->selectorIndex == YEARN_VAULT_WITHDRAW_3) { msg->numScreens++; } + if (context->selectorIndex == ANGLE_WITHDRAW) { + msg->numScreens += 2; + } + if (set_ticker_withdraw_for_mapped_token(context, msg)) { + msg->result = ETH_PLUGIN_RESULT_OK; + } else { + msg->result = ETH_PLUGIN_RESULT_ERROR; + } + break; + case LIDO_REQUEST_WITHDRAWALS: + msg->numScreens = 2; if (set_ticker_withdraw_for_mapped_token(context, msg)) { msg->result = ETH_PLUGIN_RESULT_OK; } else { msg->result = ETH_PLUGIN_RESULT_ERROR; } break; + case LIDO_CLAIM_WITHDRAWALS: + msg->numScreens = 2; + if (context->nb_requests >= 2) { + msg->numScreens += 2; + } + context->decimals_sent = 0; + context->decimals_received = 0; + // No ticker to display + msg->result = ETH_PLUGIN_RESULT_OK; + break; + case VIC_VOTE: + case VIC_RESIGN: + msg->numScreens = 1; + msg->result = ETH_PLUGIN_RESULT_OK; + break; + case VIC_UNVOTE: + msg->numScreens = 2; + strlcpy(context->ticker_sent, VIC_TICKER, sizeof(context->ticker_sent)); + msg->result = ETH_PLUGIN_RESULT_OK; + break; + case VIC_WITHDRAW: + msg->numScreens = 2; + context->decimals_sent = 0; + context->decimals_received = 0; + msg->result = ETH_PLUGIN_RESULT_OK; + break; default: msg->numScreens = 1; msg->result = ETH_PLUGIN_RESULT_OK; diff --git a/src/handle_init_contract.c b/src/handle_init_contract.c index 8f3a81c..04bf657 100644 --- a/src/handle_init_contract.c +++ b/src/handle_init_contract.c @@ -52,9 +52,11 @@ void handle_init_contract(void *parameters) { case YEARN_VAULT_DEPOSIT_3: case YEARN_VAULT_WITHDRAW_2: case YEARN_VAULT_WITHDRAW_3: + case ANGLE_WITHDRAW: context->next_param = AMOUNT_SENT; break; case WITHDRAW_SELF_APECOIN: + case VIC_WITHDRAW: context->next_param = AMOUNT_RECEIVED; break; case CLAIM_SELF_APECOIN: @@ -67,6 +69,8 @@ void handle_init_contract(void *parameters) { case AVALANCHE_REDEEM_OVERDUE_SHARES_1: case YEARN_VAULT_DEPOSIT_1: case YEARN_VAULT_WITHDRAW_1: + case VIC_VOTE: + case VIC_RESIGN: context->next_param = NONE; break; case SUBMIT_ETH_LIDO: @@ -77,6 +81,7 @@ void handle_init_contract(void *parameters) { case COMET_CLAIM: case VOTE: case REVOKE_ACTIVE: + case VIC_UNVOTE: context->next_param = RECIPIENT; break; case MORPHO_SUPPLY_1: @@ -100,6 +105,16 @@ void handle_init_contract(void *parameters) { case UNSTAKE_CLAIM_TOKENS_NEW: context->next_param = UNBOUND_NONCE; break; + case LIDO_REQUEST_WITHDRAWALS: + // Skipping the _amounts parameter offset (constant) + context->skip = 1; + context->next_param = RECIPIENT; + break; + case LIDO_CLAIM_WITHDRAWALS: + // Skipping the _requestIds parameter offset (constant) + context->skip = 1; + context->next_param = SAVE_OFFSET; + break; default: PRINTF("Missing selectorIndex\n"); msg->result = ETH_PLUGIN_RESULT_ERROR; diff --git a/src/handle_provide_parameter.c b/src/handle_provide_parameter.c index ed73d8b..900f325 100644 --- a/src/handle_provide_parameter.c +++ b/src/handle_provide_parameter.c @@ -1,5 +1,15 @@ #include "stakekit_plugin.h" +// Add two hex numbers and save the result in the first number. +static void hex_addition(uint8_t a[INT256_LENGTH], const uint8_t b[INT256_LENGTH]) { + uint16_t carry = 0; + for (int i = INT256_LENGTH - 1; i >= 0; i--) { + uint16_t sum = a[i] + b[i] + carry; + a[i] = (uint8_t) (sum & 0xFF); // Keep only the lower 8 bits + carry = (sum > 0xFF) ? 1 : 0; // Update carry for the next iteration + } +} + // Save two amounts in the context. // The first amount is the amount received saved in amount_received. // The second amount is the amount sent saved in amount_sent. @@ -39,6 +49,32 @@ static void handle_amount_recipient(ethPluginProvideParameter_t *msg, } } +// Save 1 amount and 2 addresses in the context. +// The amount_sent param is the asset amount saved in amount_sent. +// The recipient param is the recipient saved in recipient. +// The recipient_2 param is the owner saved in contract_address. +static void handle_angle_withdraw(ethPluginProvideParameter_t *msg, plugin_parameters_t *context) { + switch (context->next_param) { + case AMOUNT_SENT: + copy_parameter(context->amount_sent, msg->parameter, INT256_LENGTH); + context->next_param = RECIPIENT; + break; + case RECIPIENT: + copy_address(context->recipient, msg->parameter, ADDRESS_LENGTH); + context->next_param = RECIPIENT_2; + break; + case RECIPIENT_2: + copy_address(context->contract_address, msg->parameter, ADDRESS_LENGTH); + context->next_param = NONE; + break; + case NONE: + default: + PRINTF("Param not supported\n"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + break; + } +} + // Save 1 amount and 1 recipient in the context. // The first param is the recipient saved in recipient. // The second param is the amount sent saved in amount_sent. @@ -250,6 +286,117 @@ static void handle_aave_supply(ethPluginProvideParameter_t *msg, plugin_paramete } } +static void handle_lido_request_withdrawal(ethPluginProvideParameter_t *msg, + plugin_parameters_t *context) { + switch (context->next_param) { + case RECIPIENT: + copy_address(context->recipient, msg->parameter, ADDRESS_LENGTH); + context->next_param = ARRAY_LENGTH; + break; + case ARRAY_LENGTH: + // Storing the number of elements in _amounts[] in nb_requests and unbound_nonce. + if (!U2BE_from_parameter(msg->parameter, &(context->unbound_nonce))) { + msg->result = ETH_PLUGIN_RESULT_ERROR; + break; + } + context->nb_requests = context->unbound_nonce; + context->next_param = AMOUNT_SENT; + break; + case AMOUNT_SENT: + copy_parameter(context->amount_sent, msg->parameter, INT256_LENGTH); + context->unbound_nonce--; + if (context->unbound_nonce >= 1) { + context->next_param = ADD_AMOUNT; + } else { + context->next_param = NONE; + } + break; + // saves the following amounts in amount received and add it to the amount sent + case ADD_AMOUNT: + copy_parameter(context->amount_received, msg->parameter, INT256_LENGTH); + hex_addition(context->amount_sent, context->amount_received); + context->unbound_nonce--; + if (context->unbound_nonce >= 1) { + context->next_param = ADD_AMOUNT; + } else { + context->next_param = NONE; + } + break; + case NONE: + break; + default: + PRINTF("Param not supported\n"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + break; + } +} + +static void handle_lido_claim_withdrawal(ethPluginProvideParameter_t *msg, + plugin_parameters_t *context) { + switch (context->next_param) { + case SAVE_OFFSET: + // Storing the offset of the _hints[] array in unbound_nonce. + if (!U2BE_from_parameter(msg->parameter, &(context->unbound_nonce))) { + msg->result = ETH_PLUGIN_RESULT_ERROR; + break; + } + context->next_param = ARRAY_LENGTH; + break; + case ARRAY_LENGTH: + // Storing the number of elements in _hints[] array in nb_requests. + context->nb_requests = msg->parameter[PARAMETER_LENGTH - sizeof(uint8_t)]; + context->next_param = AMOUNT_SENT; + break; + case AMOUNT_SENT: + // Saving the first requestId in amount_sent. + copy_parameter(context->amount_sent, msg->parameter, INT256_LENGTH); + // If there are more than 1 requestId, we need to parse the next one. (max 2) + if (context->nb_requests >= 2) { + context->next_param = AMOUNT_SENT_2; + } else { + // Else go to _hints[] array. + context->next_param = SKIP; + context->offset = context->unbound_nonce; + } + break; + case AMOUNT_SENT_2: + // Saving the second requestId in contract_address. + copy_address(context->contract_address, msg->parameter, ADDRESS_LENGTH); + // Go to _hints[] array. + context->next_param = SKIP; + context->offset = context->unbound_nonce; + break; + case SKIP: + // Skipping the number of elements in _hints[] array + // The tx is reverted if _requestIds[] length is not the same as _hints[] length. + context->next_param = AMOUNT_RECEIVED; + break; + case AMOUNT_RECEIVED: + // Saving the first hint in amount_received. + copy_parameter(context->amount_received, msg->parameter, INT256_LENGTH); + // If there are more than 1 hint, we need to parse the next one. (max 2) + if (context->nb_requests >= 2) { + context->next_param = AMOUNT_RECEIVED_2; + } else { + // Else go to NONE. + context->next_param = NONE; + } + break; + case AMOUNT_RECEIVED_2: + // Saving the second hint in recipient. + copy_address(context->recipient, msg->parameter, ADDRESS_LENGTH); + // Ignore the next hints + context->next_param = NONE; + break; + case NONE: + break; + default: + PRINTF("Param not supported\n"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + break; + } +} + void handle_provide_parameter(void *parameters) { ethPluginProvideParameter_t *msg = (ethPluginProvideParameter_t *) parameters; plugin_parameters_t *context = (plugin_parameters_t *) msg->pluginContext; @@ -266,6 +413,11 @@ void handle_provide_parameter(void *parameters) { // Skip this step and decrease skipping counter. context->skip--; } else { + if ((context->offset) && msg->parameterOffset != context->offset + SELECTOR_SIZE) { + PRINTF("offset: %d, parameterOffset: %d\n", context->offset, msg->parameterOffset); + return; + } + context->offset = 0; switch (context->selectorIndex) { case DEPOSIT_SELF_APECOIN: case CLAIM_TOKENS: @@ -327,6 +479,7 @@ void handle_provide_parameter(void *parameters) { handle_amount_recipient(msg, context); break; case SWAP_FROM: + case VIC_WITHDRAW: handle_swap_from(msg, context); break; case MORPHO_SUPPLY_1: @@ -348,6 +501,7 @@ void handle_provide_parameter(void *parameters) { case PARASPACE_DEPOSIT: case GRT_DELEGATE: case GRT_UNDELEGATE: + case VIC_UNVOTE: handle_recipient_amount_sent(msg, context); break; case COMET_CLAIM: @@ -360,6 +514,20 @@ void handle_provide_parameter(void *parameters) { case AAVE_SUPPLY: handle_aave_supply(msg, context); break; + case ANGLE_WITHDRAW: + handle_angle_withdraw(msg, context); + break; + case LIDO_REQUEST_WITHDRAWALS: + handle_lido_request_withdrawal(msg, context); + break; + case LIDO_CLAIM_WITHDRAWALS: + handle_lido_claim_withdrawal(msg, context); + break; + case VIC_VOTE: + case VIC_RESIGN: + // Only save the recipient to the context. + copy_address(context->recipient, msg->parameter, ADDRESS_LENGTH); + break; default: PRINTF("Selector Index %d not supported\n", context->selectorIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; diff --git a/src/handle_query_contract_id.c b/src/handle_query_contract_id.c index db542f0..22db01d 100644 --- a/src/handle_query_contract_id.c +++ b/src/handle_query_contract_id.c @@ -57,6 +57,7 @@ void handle_query_contract_id(void *parameters) { case YEARN_VAULT_WITHDRAW_1: case YEARN_VAULT_WITHDRAW_2: case YEARN_VAULT_WITHDRAW_3: + case VIC_WITHDRAW: strlcpy(msg->version, "Withdraw", msg->versionLength); break; case PARASPACE_DEPOSIT: @@ -96,6 +97,7 @@ void handle_query_contract_id(void *parameters) { strlcpy(msg->version, "Unlock", msg->versionLength); break; case VOTE: + case VIC_VOTE: strlcpy(msg->version, "Vote", msg->versionLength); break; case REVOKE_ACTIVE: @@ -118,6 +120,21 @@ void handle_query_contract_id(void *parameters) { case AVALANCHE_REDEEM_OVERDUE_SHARES_2: strlcpy(msg->version, "Redeem Overdue Shares", msg->versionLength); break; + case ANGLE_WITHDRAW: + strlcpy(msg->version, "Withdraw", msg->versionLength); + break; + case LIDO_REQUEST_WITHDRAWALS: + strlcpy(msg->version, "Request Withdrawals", msg->versionLength); + break; + case LIDO_CLAIM_WITHDRAWALS: + strlcpy(msg->version, "Claim Withdrawals", msg->versionLength); + break; + case VIC_RESIGN: + strlcpy(msg->version, "Resign", msg->versionLength); + break; + case VIC_UNVOTE: + strlcpy(msg->version, "Unvote", msg->versionLength); + break; default: PRINTF("Selector Index :%d not supported\n", context->selectorIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; diff --git a/src/handle_query_contract_ui.c b/src/handle_query_contract_ui.c index e48d8d6..b4866b5 100644 --- a/src/handle_query_contract_ui.c +++ b/src/handle_query_contract_ui.c @@ -42,8 +42,25 @@ static void set_send_ui(ethQueryContractUI_t *msg, plugin_parameters_t *context) break; case AVALANCHE_REDEEM_2: case AVALANCHE_REDEEM_OVERDUE_SHARES_2: + case VIC_WITHDRAW: strlcpy(msg->title, "Index", msg->titleLength); break; + case ANGLE_WITHDRAW: + strlcpy(msg->title, "Assets", msg->titleLength); + break; + case LIDO_REQUEST_WITHDRAWALS: + if (context->nb_requests >= 2) { + strlcpy(msg->title, "Total Amounts", msg->titleLength); + } else { + strlcpy(msg->title, "Amount", msg->titleLength); + } + break; + case LIDO_CLAIM_WITHDRAWALS: + strlcpy(msg->title, "Request ID", msg->titleLength); + break; + case VIC_UNVOTE: + strlcpy(msg->title, "Cap", msg->titleLength); + break; default: PRINTF("Unhandled selector Index: %d\n", context->selectorIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; @@ -82,6 +99,25 @@ static void set_send_value_ui(ethQueryContractUI_t *msg, plugin_parameters_t *co PRINTF("AMOUNT SENT: %s\n", msg->msg); } +static void set_send_2_ui(ethQueryContractUI_t *msg, plugin_parameters_t *context) { + switch (context->selectorIndex) { + case LIDO_CLAIM_WITHDRAWALS: + strlcpy(msg->title, "Request ID", msg->titleLength); + break; + default: + PRINTF("Unhandled selector Index: %d\n", context->selectorIndex); + msg->result = ETH_PLUGIN_RESULT_ERROR; + return; + } + + amountToString(context->contract_address, // Location of the 2nd request ID. + ADDRESS_LENGTH, + context->decimals_sent, + context->ticker_sent, + msg->msg, + msg->msgLength); +} + // Set UI for "Receive" screen. // Each methods sets the title and the message to be displayed on the screen. static void set_receive_ui(ethQueryContractUI_t *msg, plugin_parameters_t *context) { @@ -94,6 +130,12 @@ static void set_receive_ui(ethQueryContractUI_t *msg, plugin_parameters_t *conte case COMET_WITHDRAW: strlcpy(msg->title, "Receive", msg->titleLength); break; + case LIDO_CLAIM_WITHDRAWALS: + strlcpy(msg->title, "Hint", msg->titleLength); + break; + case VIC_WITHDRAW: + strlcpy(msg->title, "Block Number", msg->titleLength); + break; default: PRINTF("Unhandled selector Index: %d\n", context->selectorIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; @@ -110,6 +152,25 @@ static void set_receive_ui(ethQueryContractUI_t *msg, plugin_parameters_t *conte PRINTF("AMOUNT RECEIVED: %s\n", msg->msg); } +static void set_receive_2_ui(ethQueryContractUI_t *msg, plugin_parameters_t *context) { + switch (context->selectorIndex) { + case LIDO_CLAIM_WITHDRAWALS: + strlcpy(msg->title, "Hint", msg->titleLength); + break; + default: + PRINTF("Unhandled selector Index: %d\n", context->selectorIndex); + msg->result = ETH_PLUGIN_RESULT_ERROR; + return; + } + + amountToString(context->recipient, // Location of the 2nd hint. + ADDRESS_LENGTH, + context->decimals_sent, + context->ticker_sent, + msg->msg, + msg->msgLength); +} + // Utility function to print an address to the UI. static void print_address(ethQueryContractUI_t *msg, uint8_t *address) { // Prefix the address with `0x`. @@ -142,6 +203,7 @@ static void set_recipient_ui(ethQueryContractUI_t *msg, plugin_parameters_t *con case AAVE_SUPPLY: case YEARN_VAULT_DEPOSIT_3: case YEARN_VAULT_WITHDRAW_3: + case ANGLE_WITHDRAW: strlcpy(msg->title, "Recipient", msg->titleLength); break; case MORPHO_SUPPLY_1: @@ -159,12 +221,18 @@ static void set_recipient_ui(ethQueryContractUI_t *msg, plugin_parameters_t *con strlcpy(msg->title, "From", msg->titleLength); break; case COMET_CLAIM: + case LIDO_REQUEST_WITHDRAWALS: strlcpy(msg->title, "Owner", msg->titleLength); break; case VOTE: case REVOKE_ACTIVE: strlcpy(msg->title, "Validator Group", msg->titleLength); break; + case VIC_VOTE: + case VIC_RESIGN: + case VIC_UNVOTE: + strlcpy(msg->title, "Candidate", msg->titleLength); + break; default: PRINTF("Unhandled selector Index: %d\n", context->selectorIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; @@ -186,6 +254,9 @@ static void set_recipient_2_ui(ethQueryContractUI_t *msg, plugin_parameters_t *c case REVOKE_ACTIVE: strlcpy(msg->title, "Lesser Group", msg->titleLength); break; + case ANGLE_WITHDRAW: + strlcpy(msg->title, "Owner", msg->titleLength); + break; default: PRINTF("Unhandled selector Index: %d\n", context->selectorIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; @@ -450,6 +521,37 @@ static screens_t get_screen_unstake_claim(ethQueryContractUI_t *msg, } } +static screens_t get_screen_angle_withdraw(ethQueryContractUI_t *msg, + plugin_parameters_t *context __attribute__((unused))) { + switch (msg->screenIndex) { + case 0: + return SEND_SCREEN; + case 1: + return RECIPIENT_SCREEN; + case 2: + return RECIPIENT_2_SCREEN; + default: + return ERROR; + } +} + +static screens_t get_screen_lido_claim_withdrawal(ethQueryContractUI_t *msg, + plugin_parameters_t *context + __attribute__((unused))) { + switch (msg->screenIndex) { + case 0: + return SEND_SCREEN; + case 1: + return RECEIVE_SCREEN; + case 2: + return SEND_2_SCREEN; + case 3: + return RECEIVE_2_SCREEN; + default: + return ERROR; + } +} + // Helper function that returns the enum corresponding to the screen that should be displayed. static screens_t get_screen(ethQueryContractUI_t *msg, plugin_parameters_t *context __attribute__((unused))) { @@ -472,6 +574,8 @@ static screens_t get_screen(ethQueryContractUI_t *msg, case GRT_UNDELEGATE: case GRT_WITHDRAW_DELEGATED: case SUBMIT_ETH_LIDO: + case VIC_VOTE: + case VIC_RESIGN: return get_screen_recipient(msg, context); case SUBMIT_MATIC_LIDO: case REQUEST_WITHDRAW: @@ -482,6 +586,8 @@ static screens_t get_screen(ethQueryContractUI_t *msg, case YEARN_VAULT_DEPOSIT_3: case YEARN_VAULT_WITHDRAW_2: case YEARN_VAULT_WITHDRAW_3: + case LIDO_REQUEST_WITHDRAWALS: + case VIC_UNVOTE: return get_screen_amount_sent_recipient(msg, context); case MORPHO_SUPPLY_1: case MORPHO_SUPPLY_2: @@ -491,6 +597,7 @@ static screens_t get_screen(ethQueryContractUI_t *msg, case AAVE_SUPPLY: return get_screen_supply(msg, context); case SWAP_FROM: + case VIC_WITHDRAW: return get_screen_amount_sent_receive(msg, context); case STAKE: return get_screen_value_sent(msg, context); @@ -514,6 +621,10 @@ static screens_t get_screen(ethQueryContractUI_t *msg, return get_screen_vote_revoke(msg, context); case UNSTAKE_CLAIM_TOKENS_NEW: return get_screen_unstake_claim(msg, context); + case ANGLE_WITHDRAW: + return get_screen_angle_withdraw(msg, context); + case LIDO_CLAIM_WITHDRAWALS: + return get_screen_lido_claim_withdrawal(msg, context); default: return ERROR; } @@ -553,6 +664,12 @@ void handle_query_contract_ui(void *parameters) { case UNBOUND_NONCE_SCREEN: set_unbound_nonce_ui(msg, context); break; + case SEND_2_SCREEN: + set_send_2_ui(msg, context); + break; + case RECEIVE_2_SCREEN: + set_receive_2_ui(msg, context); + break; case WARN_SCREEN: set_warning_ui(msg, context); break; diff --git a/src/stakekit_plugin.h b/src/stakekit_plugin.h index 33331cc..f68eade 100644 --- a/src/stakekit_plugin.h +++ b/src/stakekit_plugin.h @@ -6,14 +6,14 @@ #define PLUGIN_NAME "StakeKit" -#define NUM_STAKEKIT_SELECTORS 48u +#define NUM_STAKEKIT_SELECTORS 55u #define TICKER_LEN 30u #define TOKEN_SENT_FOUND 1u #define TOKEN_RECEIVED_FOUND 1u << 1u -#define NUM_SUPPORTED_SMART_CONTRACT 320u +#define NUM_SUPPORTED_SMART_CONTRACT 322u typedef struct tokenSymbolAndDecimals_t { uint8_t smart_contract[ADDRESS_LENGTH]; char token_symbol_deposit[TICKER_LEN]; @@ -81,6 +81,13 @@ typedef enum { YEARN_VAULT_WITHDRAW_1, YEARN_VAULT_WITHDRAW_2, YEARN_VAULT_WITHDRAW_3, + ANGLE_WITHDRAW, + LIDO_REQUEST_WITHDRAWALS, + LIDO_CLAIM_WITHDRAWALS, + VIC_VOTE, + VIC_RESIGN, + VIC_UNVOTE, + VIC_WITHDRAW, } selector_t; extern const uint8_t *const STAKEKIT_SELECTORS[NUM_STAKEKIT_SELECTORS]; @@ -95,18 +102,27 @@ typedef enum { SMART_CONTRACT_SCREEN, UNBOUND_NONCE_SCREEN, WARN_SCREEN, + SEND_2_SCREEN, + RECEIVE_2_SCREEN, ERROR, } screens_t; -#define AMOUNT_SENT 0 // Amount sent by the user to the contract. -#define AMOUNT_RECEIVED 1 // Amount received by the contract to the user. -#define TOKEN_SENT 2 // Token sent by the contract to the user. -#define TOKEN_RECEIVED 3 // Token received by the contract to the user. -#define RECIPIENT 4 // Recipient address receiving the funds. -#define RECIPIENT_2 5 // Recipient address receiving the funds. -#define RECIPIENT_3 6 // Recipient address receiving the funds. -#define UNBOUND_NONCE 7 // Unbond nonce. -#define NONE 8 // Placeholder variant to be set when parsing is done. +#define AMOUNT_SENT 0 // Amount sent by the user to the contract. +#define AMOUNT_SENT_2 1 // Second amount sent by the user to the contract. +#define AMOUNT_RECEIVED 2 // Amount received by the contract to the user. +#define AMOUNT_RECEIVED_2 3 // Second amount received by the contract to the user. +#define TOKEN_SENT 4 // Token sent by the contract to the user. +#define TOKEN_RECEIVED 5 // Token received by the contract to the user. +#define RECIPIENT 6 // Recipient address receiving the funds. +#define RECIPIENT_2 7 // Recipient address receiving the funds. +#define RECIPIENT_3 8 // Recipient address receiving the funds. +#define UNBOUND_NONCE 9 // Unbond nonce. +#define ARRAY_LENGTH 10 // Length of the array parameter. +#define ARRAY_LENGTH_2 11 // Length of the array parameter. +#define ADD_AMOUNT 12 // Amount to add to the current amount. +#define SAVE_OFFSET 13 // Offset of the array parameter. +#define SKIP 14 // To use when skipping a parameter after an offset skip. +#define NONE 15 // Placeholder variant to be set when parsing is done. // Number of decimals used when the token wasn't found in the CAL. #define DEFAULT_DECIMAL WEI_TO_ETHER @@ -147,6 +163,9 @@ typedef enum { // Ticker used for Staked AVAX. #define STAKED_AVAX_TICKER "sAVAX" +// Ticker used for Viction native token. +#define VIC_TICKER "VIC" + // Shared global memory with Ethereum app. Must be at most 5 * 32 bytes. typedef struct plugin_parameters_t { uint8_t amount_sent[INT256_LENGTH]; @@ -156,6 +175,7 @@ typedef struct plugin_parameters_t { char ticker_sent[TICKER_LEN]; char ticker_received[MAX_TICKER_LEN]; + uint16_t offset; uint16_t unbound_nonce; uint8_t next_param; uint8_t tokens_found; @@ -164,11 +184,12 @@ typedef struct plugin_parameters_t { uint8_t decimals_received; uint8_t selectorIndex; uint8_t skip; + uint8_t nb_requests; bool is_token_sent; } plugin_parameters_t; // 32*2 + 2*20 + 11*1 + 30*1 = 145 -// 1*8 + 1*2 = 10 -// 10+145 = 155 +// 1*9 + 2*2 = 13 +// 13+145 = 158 // Piece of code that will check that the above structure is not bigger than 5 * 32. // Do not remove this check. diff --git a/tests/networks/arbitrum/stakekit/abis/0x004626a008b1acdc4c74ab51644093b155e59a23.abi.json b/tests/networks/arbitrum/stakekit/abis/0x004626a008b1acdc4c74ab51644093b155e59a23.abi.json new file mode 100644 index 0000000..1982262 --- /dev/null +++ b/tests/networks/arbitrum/stakekit/abis/0x004626a008b1acdc4c74ab51644093b155e59a23.abi.json @@ -0,0 +1,963 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidRate", + "type": "error" + }, + { + "inputs": [], + "name": "NotGovernor", + "type": "error" + }, + { + "inputs": [], + "name": "NotGovernorOrGuardian", + "type": "error" + }, + { + "inputs": [], + "name": "Paused", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "interest", + "type": "uint256" + } + ], + "name": "Accrued", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxRate", + "type": "uint256" + } + ], + "name": "MaxRateUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newRate", + "type": "uint256" + } + ], + "name": "RateUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint128", + "name": "pauseStatus", + "type": "uint128" + } + ], + "name": "ToggledPause", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "accessControlManager", + "outputs": [ + { + "internalType": "contract IAccessControlManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "asset", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_totalAssets", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "exp", + "type": "uint256" + } + ], + "name": "computeUpdatedAssets", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "convertToAssets", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "name": "convertToShares", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "estimatedAPR", + "outputs": [ + { + "internalType": "uint256", + "name": "apr", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IAccessControlManager", + "name": "_accessControlManager", + "type": "address" + }, + { + "internalType": "contract IERC20MetadataUpgradeable", + "name": "asset_", + "type": "address" + }, + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint256", + "name": "divizer", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "isGovernorOrGuardian", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastUpdate", + "outputs": [ + { + "internalType": "uint40", + "name": "", + "type": "uint40" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "maxDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "maxMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "maxRedeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "maxWithdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "name": "previewDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "previewMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "previewRedeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "name": "previewWithdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rate", + "outputs": [ + { + "internalType": "uint208", + "name": "", + "type": "uint208" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMaxRate", + "type": "uint256" + } + ], + "name": "setMaxRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint208", + "name": "newRate", + "type": "uint208" + } + ], + "name": "setRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "togglePause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "totalAssets", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/tests/networks/arbitrum/stakekit/b2c.json b/tests/networks/arbitrum/stakekit/b2c.json index 3917fdf..37556ba 100644 --- a/tests/networks/arbitrum/stakekit/b2c.json +++ b/tests/networks/arbitrum/stakekit/b2c.json @@ -1,22 +1,42 @@ { - "chainId": 42161, - "contracts": [ - { - "address": "0x794a61358d6845594f94dc1db02a252b5b4814ad", - "contractName": "InitializableImmutableAdminUpgradeabilityProxy", - "selectors": { - "0x617ba037": { - "erc20OfInterest": ["asset"], - "method": "supply", - "plugin": "StakeKit" - }, - "0x69328dec": { - "erc20OfInterest": ["asset"], - "method": "withdraw", - "plugin": "StakeKit" - } - } - } - ], - "name": "StakeKit" + "chainId": 42161, + "contracts": [ + { + "address": "0x794a61358d6845594f94dc1db02a252b5b4814ad", + "contractName": "InitializableImmutableAdminUpgradeabilityProxy", + "selectors": { + "0x617ba037": { + "erc20OfInterest": [ + "asset" + ], + "method": "supply", + "plugin": "StakeKit" + }, + "0x69328dec": { + "erc20OfInterest": [ + "asset" + ], + "method": "withdraw", + "plugin": "StakeKit" + } + } + }, + { + "address": "0x004626a008b1acdc4c74ab51644093b155e59a23", + "contractName": "TransparentUpgradeableProxy", + "selectors": { + "0x6e553f65": { + "erc20OfInterest": [], + "method": "deposit", + "plugin": "StakeKit" + }, + "0xb460af94": { + "erc20OfInterest": [], + "method": "withdraw", + "plugin": "StakeKit" + } + } + } + ], + "name": "StakeKit" } \ No newline at end of file diff --git a/tests/networks/ethereum/stakekit/abis/0x004626a008b1acdc4c74ab51644093b155e59a23.abi.json b/tests/networks/ethereum/stakekit/abis/0x004626a008b1acdc4c74ab51644093b155e59a23.abi.json new file mode 100644 index 0000000..1982262 --- /dev/null +++ b/tests/networks/ethereum/stakekit/abis/0x004626a008b1acdc4c74ab51644093b155e59a23.abi.json @@ -0,0 +1,963 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidRate", + "type": "error" + }, + { + "inputs": [], + "name": "NotGovernor", + "type": "error" + }, + { + "inputs": [], + "name": "NotGovernorOrGuardian", + "type": "error" + }, + { + "inputs": [], + "name": "Paused", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "interest", + "type": "uint256" + } + ], + "name": "Accrued", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxRate", + "type": "uint256" + } + ], + "name": "MaxRateUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newRate", + "type": "uint256" + } + ], + "name": "RateUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint128", + "name": "pauseStatus", + "type": "uint128" + } + ], + "name": "ToggledPause", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "accessControlManager", + "outputs": [ + { + "internalType": "contract IAccessControlManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "asset", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_totalAssets", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "exp", + "type": "uint256" + } + ], + "name": "computeUpdatedAssets", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "convertToAssets", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "name": "convertToShares", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "estimatedAPR", + "outputs": [ + { + "internalType": "uint256", + "name": "apr", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IAccessControlManager", + "name": "_accessControlManager", + "type": "address" + }, + { + "internalType": "contract IERC20MetadataUpgradeable", + "name": "asset_", + "type": "address" + }, + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint256", + "name": "divizer", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "isGovernorOrGuardian", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastUpdate", + "outputs": [ + { + "internalType": "uint40", + "name": "", + "type": "uint40" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "maxDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "maxMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "maxRedeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "maxWithdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "name": "previewDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "previewMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "previewRedeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "name": "previewWithdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rate", + "outputs": [ + { + "internalType": "uint208", + "name": "", + "type": "uint208" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMaxRate", + "type": "uint256" + } + ], + "name": "setMaxRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint208", + "name": "newRate", + "type": "uint208" + } + ], + "name": "setRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "togglePause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "totalAssets", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/tests/networks/ethereum/stakekit/abis/0x889edc2edab5f40e902b864ad4d7ade8e412f9b1.abi.json b/tests/networks/ethereum/stakekit/abis/0x889edc2edab5f40e902b864ad4d7ade8e412f9b1.abi.json new file mode 100644 index 0000000..d8dccac --- /dev/null +++ b/tests/networks/ethereum/stakekit/abis/0x889edc2edab5f40e902b864ad4d7ade8e412f9b1.abi.json @@ -0,0 +1,2027 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_wstETH", + "type": "address" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AdminZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ApprovalToOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ApproveToCaller", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_firstArrayLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_secondArrayLength", + "type": "uint256" + } + ], + "name": "ArraysLengthMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "BatchesAreNotSorted", + "type": "error" + }, + { + "inputs": [], + "name": "CantSendValueRecipientMayHaveReverted", + "type": "error" + }, + { + "inputs": [], + "name": "EmptyBatches", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidContractVersionIncrement", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_hint", + "type": "uint256" + } + ], + "name": "InvalidHint", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "InvalidOwnerAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidReportTimestamp", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + } + ], + "name": "InvalidRequestId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "startId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endId", + "type": "uint256" + } + ], + "name": "InvalidRequestIdRange", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidState", + "type": "error" + }, + { + "inputs": [], + "name": "NonZeroContractVersionOnInit", + "type": "error" + }, + { + "inputs": [], + "name": "NotEnoughEther", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "NotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "NotOwnerOrApproved", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "NotOwnerOrApprovedForAll", + "type": "error" + }, + { + "inputs": [], + "name": "PauseUntilMustBeInFuture", + "type": "error" + }, + { + "inputs": [], + "name": "PausedExpected", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + } + ], + "name": "RequestAlreadyClaimed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amountOfStETH", + "type": "uint256" + } + ], + "name": "RequestAmountTooLarge", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amountOfStETH", + "type": "uint256" + } + ], + "name": "RequestAmountTooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "RequestIdsNotSorted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + } + ], + "name": "RequestNotFoundOrNotFinalized", + "type": "error" + }, + { + "inputs": [], + "name": "ResumedExpected", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxExpected", + "type": "uint256" + } + ], + "name": "TooMuchEtherToFinalize", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "realOwner", + "type": "address" + } + ], + "name": "TransferFromIncorrectOwner", + "type": "error" + }, + { + "inputs": [], + "name": "TransferFromZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "TransferToNonIERC721Receiver", + "type": "error" + }, + { + "inputs": [], + "name": "TransferToThemselves", + "type": "error" + }, + { + "inputs": [], + "name": "TransferToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "received", + "type": "uint256" + } + ], + "name": "UnexpectedContractVersion", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAmountOfETH", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroMetadata", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroPauseDuration", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroRecipient", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroShareRate", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroTimestamp", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "baseURI", + "type": "string" + } + ], + "name": "BaseURISet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_fromTokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_toTokenId", + "type": "uint256" + } + ], + "name": "BatchMetadataUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "BunkerModeDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_sinceTimestamp", + "type": "uint256" + } + ], + "name": "BunkerModeEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "version", + "type": "uint256" + } + ], + "name": "ContractVersionSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "name": "InitializedV1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "MetadataUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "nftDescriptorAddress", + "type": "address" + } + ], + "name": "NftDescriptorAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Resumed", + "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": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOfETH", + "type": "uint256" + } + ], + "name": "WithdrawalClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "requestor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOfStETH", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOfShares", + "type": "uint256" + } + ], + "name": "WithdrawalRequested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "from", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "to", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOfETHLocked", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sharesToBurn", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "WithdrawalsFinalized", + "type": "event" + }, + { + "inputs": [], + "name": "BUNKER_MODE_DISABLED_TIMESTAMP", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FINALIZE_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MANAGE_TOKEN_URI_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_BATCHES_LENGTH", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_STETH_WITHDRAWAL_AMOUNT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_STETH_WITHDRAWAL_AMOUNT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ORACLE_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSE_INFINITELY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSE_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RESUME_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "STETH", + "outputs": [ + { + "internalType": "contract IStETH", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WSTETH", + "outputs": [ + { + "internalType": "contract IWstETH", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bunkerModeSinceTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxShareRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxRequestsPerCall", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "remainingEthBudget", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "finished", + "type": "bool" + }, + { + "internalType": "uint256[36]", + "name": "batches", + "type": "uint256[36]" + }, + { + "internalType": "uint256", + "name": "batchesLength", + "type": "uint256" + } + ], + "internalType": "struct WithdrawalQueueBase.BatchesCalculationState", + "name": "_state", + "type": "tuple" + } + ], + "name": "calculateFinalizationBatches", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "remainingEthBudget", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "finished", + "type": "bool" + }, + { + "internalType": "uint256[36]", + "name": "batches", + "type": "uint256[36]" + }, + { + "internalType": "uint256", + "name": "batchesLength", + "type": "uint256" + } + ], + "internalType": "struct WithdrawalQueueBase.BatchesCalculationState", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + } + ], + "name": "claimWithdrawal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_requestIds", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_hints", + "type": "uint256[]" + } + ], + "name": "claimWithdrawals", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_requestIds", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_hints", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "claimWithdrawalsTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lastRequestIdToBeFinalized", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxShareRate", + "type": "uint256" + } + ], + "name": "finalize", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_requestIds", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "_firstIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_lastIndex", + "type": "uint256" + } + ], + "name": "findCheckpointHints", + "outputs": [ + { + "internalType": "uint256[]", + "name": "hintIds", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBaseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_requestIds", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_hints", + "type": "uint256[]" + } + ], + "name": "getClaimableEther", + "outputs": [ + { + "internalType": "uint256[]", + "name": "claimableEthValues", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getContractVersion", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastCheckpointIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastFinalizedRequestId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastRequestId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLockedEtherAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNFTDescriptorAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getResumeSinceTimestamp", + "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": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "getWithdrawalRequests", + "outputs": [ + { + "internalType": "uint256[]", + "name": "requestsIds", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_requestIds", + "type": "uint256[]" + } + ], + "name": "getWithdrawalStatus", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "amountOfStETH", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOfShares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isFinalized", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isClaimed", + "type": "bool" + } + ], + "internalType": "struct WithdrawalQueueBase.WithdrawalRequestStatus[]", + "name": "statuses", + "type": "tuple[]" + } + ], + "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" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isBunkerModeActive", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_isBunkerModeNow", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "_bunkerStartTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_currentReportTimestamp", + "type": "uint256" + } + ], + "name": "onOracleReport", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_duration", + "type": "uint256" + } + ], + "name": "pauseFor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_pauseUntilInclusive", + "type": "uint256" + } + ], + "name": "pauseUntil", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_batches", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "_maxShareRate", + "type": "uint256" + } + ], + "name": "prefinalize", + "outputs": [ + { + "internalType": "uint256", + "name": "ethToLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sharesToBurn", + "type": "uint256" + } + ], + "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": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "requestWithdrawals", + "outputs": [ + { + "internalType": "uint256[]", + "name": "requestIds", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct WithdrawalQueue.PermitInput", + "name": "_permit", + "type": "tuple" + } + ], + "name": "requestWithdrawalsWithPermit", + "outputs": [ + { + "internalType": "uint256[]", + "name": "requestIds", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "requestWithdrawalsWstETH", + "outputs": [ + { + "internalType": "uint256[]", + "name": "requestIds", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct WithdrawalQueue.PermitInput", + "name": "_permit", + "type": "tuple" + } + ], + "name": "requestWithdrawalsWstETHWithPermit", + "outputs": [ + { + "internalType": "uint256[]", + "name": "requestIds", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "resume", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "_approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_baseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_nftDescriptorAddress", + "type": "address" + } + ], + "name": "setNFTDescriptorAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_requestId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unfinalizedRequestNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unfinalizedStETH", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/tests/networks/ethereum/stakekit/b2c.json b/tests/networks/ethereum/stakekit/b2c.json index c49fcec..dada330 100644 --- a/tests/networks/ethereum/stakekit/b2c.json +++ b/tests/networks/ethereum/stakekit/b2c.json @@ -112,27 +112,37 @@ "contractName": "TransparentUpgradeableProxy", "selectors": { "0x0c0a769b": { - "erc20OfInterest": ["_poolToken"], + "erc20OfInterest": [ + "_poolToken" + ], "method": "supply", "plugin": "StakeKit" }, "0xf2b9fdb8": { - "erc20OfInterest": ["_poolToken"], + "erc20OfInterest": [ + "_poolToken" + ], "method": "supply", "plugin": "StakeKit" }, "0xf62256c7": { - "erc20OfInterest": ["_poolToken"], + "erc20OfInterest": [ + "_poolToken" + ], "method": "supply", "plugin": "StakeKit" }, "0xf3fef3a3": { - "erc20OfInterest": ["_poolToken"], + "erc20OfInterest": [ + "_poolToken" + ], "method": "withdraw", "plugin": "StakeKit" }, "0x69328dec": { - "erc20OfInterest": ["_poolToken"], + "erc20OfInterest": [ + "_poolToken" + ], "method": "withdraw", "plugin": "StakeKit" } @@ -196,12 +206,16 @@ "contractName": "TransparentUpgradeableProxy", "selectors": { "0xf2b9fdb8": { - "erc20OfInterest": ["asset"], + "erc20OfInterest": [ + "asset" + ], "method": "supply", "plugin": "StakeKit" }, "0xf3fef3a3": { - "erc20OfInterest": ["to"], + "erc20OfInterest": [ + "to" + ], "method": "withdraw", "plugin": "StakeKit" } @@ -8065,6 +8079,38 @@ "plugin": "StakeKit" } } + }, + { + "address": "0x004626a008b1acdc4c74ab51644093b155e59a23", + "contractName": "TransparentUpgradeableProxy", + "selectors": { + "0x6e553f65": { + "erc20OfInterest": [], + "method": "deposit", + "plugin": "StakeKit" + }, + "0xb460af94": { + "erc20OfInterest": [], + "method": "withdraw", + "plugin": "StakeKit" + } + } + }, + { + "address": "0x889edc2edab5f40e902b864ad4d7ade8e412f9b1", + "contractName": "OssifiableProxy", + "selectors": { + "0xd6681042": { + "erc20OfInterest": [], + "method": "requestWithdrawals", + "plugin": "StakeKit" + }, + "0xe3afe0a3": { + "erc20OfInterest": [], + "method": "claimWithdrawals", + "plugin": "StakeKit" + } + } } ], "name": "StakeKit" diff --git a/tests/networks/tomochain/stakekit/abis/0x0000000000000000000000000000000000000088.abi.json b/tests/networks/tomochain/stakekit/abis/0x0000000000000000000000000000000000000088.abi.json new file mode 100644 index 0000000..ddcf5b1 --- /dev/null +++ b/tests/networks/tomochain/stakekit/abis/0x0000000000000000000000000000000000000088.abi.json @@ -0,0 +1,473 @@ +[ + { + "constant": false, + "inputs": [ + { + "name": "_candidate", + "type": "address" + } + ], + "name": "propose", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_candidate", + "type": "address" + }, + { + "name": "_cap", + "type": "uint256" + } + ], + "name": "unvote", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getCandidates", + "outputs": [ + { + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_blockNumber", + "type": "uint256" + } + ], + "name": "getWithdrawCap", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_candidate", + "type": "address" + } + ], + "name": "getVoters", + "outputs": [ + { + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getWithdrawBlockNumbers", + "outputs": [ + { + "name": "", + "type": "uint256[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_candidate", + "type": "address" + }, + { + "name": "_voter", + "type": "address" + } + ], + "name": "getVoterCap", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "uint256" + } + ], + "name": "candidates", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_blockNumber", + "type": "uint256" + }, + { + "name": "_index", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_candidate", + "type": "address" + } + ], + "name": "getCandidateCap", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_candidate", + "type": "address" + } + ], + "name": "vote", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "candidateCount", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "voterWithdrawDelay", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_candidate", + "type": "address" + } + ], + "name": "resign", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_candidate", + "type": "address" + } + ], + "name": "getCandidateOwner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "maxValidatorNumber", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "candidateWithdrawDelay", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_candidate", + "type": "address" + } + ], + "name": "isCandidate", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "minCandidateCap", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "minVoterCap", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "_candidates", + "type": "address[]" + }, + { + "name": "_caps", + "type": "uint256[]" + }, + { + "name": "_firstOwner", + "type": "address" + }, + { + "name": "_minCandidateCap", + "type": "uint256" + }, + { + "name": "_minVoterCap", + "type": "uint256" + }, + { + "name": "_maxValidatorNumber", + "type": "uint256" + }, + { + "name": "_candidateWithdrawDelay", + "type": "uint256" + }, + { + "name": "_voterWithdrawDelay", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "_voter", + "type": "address" + }, + { + "indexed": false, + "name": "_candidate", + "type": "address" + }, + { + "indexed": false, + "name": "_cap", + "type": "uint256" + } + ], + "name": "Vote", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "_voter", + "type": "address" + }, + { + "indexed": false, + "name": "_candidate", + "type": "address" + }, + { + "indexed": false, + "name": "_cap", + "type": "uint256" + } + ], + "name": "Unvote", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "_owner", + "type": "address" + }, + { + "indexed": false, + "name": "_candidate", + "type": "address" + }, + { + "indexed": false, + "name": "_cap", + "type": "uint256" + } + ], + "name": "Propose", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "_owner", + "type": "address" + }, + { + "indexed": false, + "name": "_candidate", + "type": "address" + } + ], + "name": "Resign", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "_owner", + "type": "address" + }, + { + "indexed": false, + "name": "_blockNumber", + "type": "uint256" + }, + { + "indexed": false, + "name": "_cap", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + } +] \ No newline at end of file diff --git a/tests/networks/tomochain/stakekit/b2c.json b/tests/networks/tomochain/stakekit/b2c.json new file mode 100644 index 0000000..f887b5c --- /dev/null +++ b/tests/networks/tomochain/stakekit/b2c.json @@ -0,0 +1,32 @@ +{ + "chainId": 88, + "contracts": [ + { + "address": "0x0000000000000000000000000000000000000088", + "contractName": "TomoValidator", + "selectors": { + "0x6dd7d8ea": { + "erc20OfInterest": [], + "method": "vote", + "plugin": "StakeKit" + }, + "0xae6e43f5": { + "erc20OfInterest": [], + "method": "resign", + "plugin": "StakeKit" + }, + "0x02aa9be2": { + "erc20OfInterest": [], + "method": "unvote", + "plugin": "StakeKit" + }, + "0x441a3e70": { + "erc20OfInterest": [], + "method": "withdraw", + "plugin": "StakeKit" + } + } + } + ], + "name": "StakeKit" +} \ No newline at end of file diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00000.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00000.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00001.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00001.png new file mode 100644 index 0000000..c0165df Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00001.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00002.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00002.png new file mode 100644 index 0000000..890f044 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00002.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00003.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00003.png new file mode 100644 index 0000000..efd2ff4 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00003.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00004.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00004.png new file mode 100644 index 0000000..7c5b882 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00004.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00005.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00005.png new file mode 100644 index 0000000..abed35c Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00005.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00006.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00006.png new file mode 100644 index 0000000..96ea784 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00006.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00007.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00007.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00007.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00008.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00008.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00008.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00009.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00009.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_deposit/00009.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00000.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00000.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00001.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00001.png new file mode 100644 index 0000000..ea580f5 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00001.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00002.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00002.png new file mode 100644 index 0000000..7154c0a Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00002.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00003.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00003.png new file mode 100644 index 0000000..efd2ff4 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00003.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00004.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00004.png new file mode 100644 index 0000000..7c5b882 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00004.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00005.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00005.png new file mode 100644 index 0000000..abed35c Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00005.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00006.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00006.png new file mode 100644 index 0000000..afd0c11 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00006.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00007.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00007.png new file mode 100644 index 0000000..00c1e69 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00007.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00008.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00008.png new file mode 100644 index 0000000..4dd997f Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00008.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00009.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00009.png new file mode 100644 index 0000000..96ea784 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00009.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00010.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00010.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00010.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00011.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00011.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00011.png differ diff --git a/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00012.png b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00012.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/arbitrum_nanos_arbitrum_angle_withdraw/00012.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00000.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00000.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00001.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00001.png new file mode 100644 index 0000000..ff41955 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00001.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00002.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00002.png new file mode 100644 index 0000000..22b404c Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00002.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00003.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00003.png new file mode 100644 index 0000000..0526b22 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00003.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00004.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00004.png new file mode 100644 index 0000000..af17584 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00004.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00005.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00005.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00005.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00006.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00006.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00006.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00007.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00007.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_deposit/00007.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00000.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00000.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00001.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00001.png new file mode 100644 index 0000000..8860d96 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00001.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00002.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00002.png new file mode 100644 index 0000000..a1e4c47 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00002.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00003.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00003.png new file mode 100644 index 0000000..0526b22 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00003.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00004.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00004.png new file mode 100644 index 0000000..3d57b47 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00004.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00005.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00005.png new file mode 100644 index 0000000..af17584 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00005.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00006.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00006.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00006.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00007.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00007.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00007.png differ diff --git a/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00008.png b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00008.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/arbitrum_nanosp_arbitrum_angle_withdraw/00008.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00000.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00000.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00001.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00001.png new file mode 100644 index 0000000..3e25831 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00001.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00002.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00002.png new file mode 100644 index 0000000..5ed7ce7 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00002.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00003.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00003.png new file mode 100644 index 0000000..0526b22 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00003.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00004.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00004.png new file mode 100644 index 0000000..af17584 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00004.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00005.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00005.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00005.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00006.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00006.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00006.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00007.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00007.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_deposit/00007.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00000.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00000.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00001.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00001.png new file mode 100644 index 0000000..a0cfb03 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00001.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00002.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00002.png new file mode 100644 index 0000000..a1e4c47 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00002.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00003.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00003.png new file mode 100644 index 0000000..0526b22 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00003.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00004.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00004.png new file mode 100644 index 0000000..3d57b47 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00004.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00005.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00005.png new file mode 100644 index 0000000..af17584 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00005.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00006.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00006.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00006.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00007.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00007.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00007.png differ diff --git a/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00008.png b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00008.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/arbitrum_nanox_arbitrum_angle_withdraw/00008.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00000.png b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00000.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00001.png b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00001.png new file mode 100644 index 0000000..c0165df Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00001.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00002.png b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00002.png new file mode 100644 index 0000000..890f044 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00002.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00003.png b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00003.png new file mode 100644 index 0000000..efd2ff4 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00003.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00004.png b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00004.png new file mode 100644 index 0000000..7c5b882 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00004.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00005.png b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00005.png new file mode 100644 index 0000000..abed35c Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00005.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00006.png b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00006.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00006.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00007.png b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00007.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00007.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00008.png b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00008.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_deposit/00008.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00000.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00000.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00001.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00001.png new file mode 100644 index 0000000..ea580f5 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00001.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00002.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00002.png new file mode 100644 index 0000000..c2d3b96 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00002.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00003.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00003.png new file mode 100644 index 0000000..efd2ff4 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00003.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00004.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00004.png new file mode 100644 index 0000000..7c5b882 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00004.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00005.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00005.png new file mode 100644 index 0000000..abed35c Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00005.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00006.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00006.png new file mode 100644 index 0000000..afd0c11 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00006.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00007.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00007.png new file mode 100644 index 0000000..00c1e69 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00007.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00008.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00008.png new file mode 100644 index 0000000..4dd997f Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00008.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00009.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00009.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00009.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00010.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00010.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00010.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00011.png b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00011.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_angle_withdraw/00011.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00000.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00000.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00001.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00001.png new file mode 100644 index 0000000..417a506 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00001.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00002.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00002.png new file mode 100644 index 0000000..d866c74 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00002.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00003.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00003.png new file mode 100644 index 0000000..b6dca17 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00003.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00004.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00004.png new file mode 100644 index 0000000..ca97f6e Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00004.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00005.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00005.png new file mode 100644 index 0000000..b6dca17 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00005.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00006.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00006.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00006.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00007.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00007.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00007.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00008.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00008.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_1/00008.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00000.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00000.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00001.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00001.png new file mode 100644 index 0000000..417a506 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00001.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00002.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00002.png new file mode 100644 index 0000000..6130a0f Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00002.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00003.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00003.png new file mode 100644 index 0000000..43b9f8a Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00003.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00004.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00004.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00004.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00005.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00005.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00005.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00006.png b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00006.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_claim_withdrawals_2/00006.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00000.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00000.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00001.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00001.png new file mode 100644 index 0000000..87fbde6 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00001.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00002.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00002.png new file mode 100644 index 0000000..9929db1 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00002.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00003.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00003.png new file mode 100644 index 0000000..d992a1d Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00003.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00004.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00004.png new file mode 100644 index 0000000..852fe79 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00004.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00005.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00005.png new file mode 100644 index 0000000..0d8fb15 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00005.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00006.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00006.png new file mode 100644 index 0000000..2161829 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00006.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00007.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00007.png new file mode 100644 index 0000000..2e0fd66 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00007.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00008.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00008.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00008.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00009.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00009.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00009.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00010.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00010.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_1/00010.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00000.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00000.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00001.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00001.png new file mode 100644 index 0000000..87fbde6 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00001.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00002.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00002.png new file mode 100644 index 0000000..97c1cb7 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00002.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00003.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00003.png new file mode 100644 index 0000000..c01ee59 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00003.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00004.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00004.png new file mode 100644 index 0000000..1e05d77 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00004.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00005.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00005.png new file mode 100644 index 0000000..ab93a70 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00005.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00006.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00006.png new file mode 100644 index 0000000..c73bfa0 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00006.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00007.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00007.png new file mode 100644 index 0000000..b94dbcb Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00007.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00008.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00008.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00008.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00009.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00009.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00009.png differ diff --git a/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00010.png b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00010.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/ethereum_nanos_ethereum_lido_request_withdrawals_2/00010.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00000.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00000.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00001.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00001.png new file mode 100644 index 0000000..ff41955 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00001.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00002.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00002.png new file mode 100644 index 0000000..22b404c Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00002.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00003.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00003.png new file mode 100644 index 0000000..0526b22 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00003.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00004.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00004.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00004.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00005.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00005.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00006.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00006.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_deposit/00006.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00000.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00000.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00001.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00001.png new file mode 100644 index 0000000..8860d96 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00001.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00002.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00002.png new file mode 100644 index 0000000..4a8572b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00002.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00003.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00003.png new file mode 100644 index 0000000..0526b22 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00003.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00004.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00004.png new file mode 100644 index 0000000..3d57b47 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00004.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00005.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00005.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00005.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00006.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00006.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00006.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00007.png b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00007.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_angle_withdraw/00007.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00000.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00000.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00001.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00001.png new file mode 100644 index 0000000..e47328a Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00001.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00002.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00002.png new file mode 100644 index 0000000..e8e81cd Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00002.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00003.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00003.png new file mode 100644 index 0000000..553ff6f Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00003.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00004.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00004.png new file mode 100644 index 0000000..8097259 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00004.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00005.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00005.png new file mode 100644 index 0000000..553ff6f Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00005.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00006.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00006.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00006.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00007.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00007.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00007.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00008.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00008.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_1/00008.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00000.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00000.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00001.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00001.png new file mode 100644 index 0000000..e47328a Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00001.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00002.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00002.png new file mode 100644 index 0000000..d52d02d Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00002.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00003.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00003.png new file mode 100644 index 0000000..ed3f4b5 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00003.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00004.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00004.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00004.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00005.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00005.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00006.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00006.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_claim_withdrawals_2/00006.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00000.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00000.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00001.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00001.png new file mode 100644 index 0000000..05d318b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00001.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00002.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00002.png new file mode 100644 index 0000000..7a1d248 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00002.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00003.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00003.png new file mode 100644 index 0000000..0a8827b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00003.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00004.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00004.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00004.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00005.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00005.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00006.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00006.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_1/00006.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00000.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00000.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00001.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00001.png new file mode 100644 index 0000000..05d318b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00001.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00002.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00002.png new file mode 100644 index 0000000..24c5ece Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00002.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00003.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00003.png new file mode 100644 index 0000000..90b9b40 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00003.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00004.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00004.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00004.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00005.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00005.png differ diff --git a/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00006.png b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00006.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/ethereum_nanosp_ethereum_lido_request_withdrawals_2/00006.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00000.png b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00000.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00001.png b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00001.png new file mode 100644 index 0000000..3e25831 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00001.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00002.png b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00002.png new file mode 100644 index 0000000..5ed7ce7 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00002.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00003.png b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00003.png new file mode 100644 index 0000000..0526b22 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00003.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00004.png b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00004.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00004.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00005.png b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00005.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00006.png b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00006.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_deposit/00006.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00000.png b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00000.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00001.png b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00001.png new file mode 100644 index 0000000..a0cfb03 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00001.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00002.png b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00002.png new file mode 100644 index 0000000..4a8572b Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00002.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00003.png b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00003.png new file mode 100644 index 0000000..0526b22 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00003.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00004.png b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00004.png new file mode 100644 index 0000000..3d57b47 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00004.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00005.png b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00005.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00005.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00006.png b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00006.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00006.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00007.png b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00007.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_angle_withdraw/00007.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00000.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00000.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00001.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00001.png new file mode 100644 index 0000000..69a001f Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00001.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00002.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00002.png new file mode 100644 index 0000000..c5dad59 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00002.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00003.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00003.png new file mode 100644 index 0000000..553ff6f Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00003.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00004.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00004.png new file mode 100644 index 0000000..23fb633 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00004.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00005.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00005.png new file mode 100644 index 0000000..553ff6f Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00005.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00006.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00006.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00006.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00007.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00007.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00007.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00008.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00008.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_1/00008.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00000.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00000.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00001.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00001.png new file mode 100644 index 0000000..69a001f Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00001.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00002.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00002.png new file mode 100644 index 0000000..4c2f7e9 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00002.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00003.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00003.png new file mode 100644 index 0000000..ed3f4b5 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00003.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00004.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00004.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00004.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00005.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00005.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00006.png b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00006.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_claim_withdrawals_2/00006.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00000.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00000.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00001.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00001.png new file mode 100644 index 0000000..d733794 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00001.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00002.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00002.png new file mode 100644 index 0000000..7a1d248 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00002.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00003.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00003.png new file mode 100644 index 0000000..0a8827b Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00003.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00004.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00004.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00004.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00005.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00005.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00006.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00006.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_1/00006.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00000.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00000.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00001.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00001.png new file mode 100644 index 0000000..d733794 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00001.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00002.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00002.png new file mode 100644 index 0000000..24c5ece Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00002.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00003.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00003.png new file mode 100644 index 0000000..90b9b40 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00003.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00004.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00004.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00004.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00005.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00005.png differ diff --git a/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00006.png b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00006.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/ethereum_nanox_ethereum_lido_request_withdrawals_2/00006.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00000.png b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00001.png b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00001.png new file mode 100644 index 0000000..ffa88f5 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00002.png b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00002.png new file mode 100644 index 0000000..efb9940 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00003.png b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00003.png new file mode 100644 index 0000000..17ddc72 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00004.png b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00004.png new file mode 100644 index 0000000..6e80c0e Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00005.png b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00005.png new file mode 100644 index 0000000..267b908 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00006.png b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00006.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00007.png b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00007.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00007.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00008.png b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00008.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_resign_1/00008.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00000.png b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00001.png b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00001.png new file mode 100644 index 0000000..bb01116 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00002.png b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00002.png new file mode 100644 index 0000000..0bb3439 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00003.png b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00003.png new file mode 100644 index 0000000..a2d07f9 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00004.png b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00004.png new file mode 100644 index 0000000..875b30a Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00005.png b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00005.png new file mode 100644 index 0000000..9ba4aa6 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00006.png b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00006.png new file mode 100644 index 0000000..267b908 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00007.png b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00007.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00007.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00008.png b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00008.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00008.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00009.png b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00009.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_unvote_1/00009.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00000.png b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00001.png b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00001.png new file mode 100644 index 0000000..873ae39 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00002.png b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00002.png new file mode 100644 index 0000000..bbceaab Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00003.png b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00003.png new file mode 100644 index 0000000..65dc123 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00004.png b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00004.png new file mode 100644 index 0000000..d00a556 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00005.png b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00005.png new file mode 100644 index 0000000..267b908 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00006.png b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00006.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00007.png b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00007.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00007.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00008.png b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00008.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_vote_1/00008.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00000.png b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00001.png b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00001.png new file mode 100644 index 0000000..ea580f5 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00002.png b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00002.png new file mode 100644 index 0000000..7117555 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00003.png b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00003.png new file mode 100644 index 0000000..ea37a47 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00004.png b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00004.png new file mode 100644 index 0000000..267b908 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00005.png b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00005.png new file mode 100644 index 0000000..eeec632 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00006.png b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00006.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00007.png b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00007.png new file mode 100644 index 0000000..ce795f3 Binary files /dev/null and b/tests/snapshots/tomochain_nanos_tomochain_vic_withdraw_1/00007.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00000.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00001.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00001.png new file mode 100644 index 0000000..c73641e Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00002.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00002.png new file mode 100644 index 0000000..4abdfb3 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00003.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00003.png new file mode 100644 index 0000000..452a7b4 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00004.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00004.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00005.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00006.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00006.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_resign_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00000.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00001.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00001.png new file mode 100644 index 0000000..46c3455 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00002.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00002.png new file mode 100644 index 0000000..71edaaf Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00003.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00003.png new file mode 100644 index 0000000..01ef393 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00004.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00004.png new file mode 100644 index 0000000..452a7b4 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00005.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00005.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00006.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00006.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00007.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00007.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_unvote_1/00007.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00000.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00001.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00001.png new file mode 100644 index 0000000..b2a8dde Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00002.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00002.png new file mode 100644 index 0000000..f559373 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00003.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00003.png new file mode 100644 index 0000000..452a7b4 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00004.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00004.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00005.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00006.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00006.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_vote_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00000.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00001.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00001.png new file mode 100644 index 0000000..8860d96 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00002.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00002.png new file mode 100644 index 0000000..ebad707 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00003.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00003.png new file mode 100644 index 0000000..5758112 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00004.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00004.png new file mode 100644 index 0000000..452a7b4 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00005.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00005.png new file mode 100644 index 0000000..89bfa0b Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00006.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00006.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00007.png b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00007.png new file mode 100644 index 0000000..a58590b Binary files /dev/null and b/tests/snapshots/tomochain_nanosp_tomochain_vic_withdraw_1/00007.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00000.png b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00001.png b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00001.png new file mode 100644 index 0000000..fbcc548 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00002.png b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00002.png new file mode 100644 index 0000000..4abdfb3 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00003.png b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00003.png new file mode 100644 index 0000000..452a7b4 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00004.png b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00004.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00005.png b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00006.png b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00006.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_resign_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00000.png b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00001.png b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00001.png new file mode 100644 index 0000000..898687c Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00002.png b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00002.png new file mode 100644 index 0000000..71edaaf Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00003.png b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00003.png new file mode 100644 index 0000000..01ef393 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00004.png b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00004.png new file mode 100644 index 0000000..452a7b4 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00005.png b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00005.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00006.png b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00006.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00007.png b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00007.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_unvote_1/00007.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00000.png b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00001.png b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00001.png new file mode 100644 index 0000000..6d883ea Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00002.png b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00002.png new file mode 100644 index 0000000..f559373 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00003.png b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00003.png new file mode 100644 index 0000000..452a7b4 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00004.png b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00004.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00005.png b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00006.png b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00006.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_vote_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00000.png b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00000.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00001.png b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00001.png new file mode 100644 index 0000000..a0cfb03 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00001.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00002.png b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00002.png new file mode 100644 index 0000000..ebad707 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00002.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00003.png b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00003.png new file mode 100644 index 0000000..a3d1eb4 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00003.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00004.png b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00004.png new file mode 100644 index 0000000..452a7b4 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00004.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00005.png b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00005.png new file mode 100644 index 0000000..b2401b2 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00005.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00006.png b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00006.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00006.png differ diff --git a/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00007.png b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00007.png new file mode 100644 index 0000000..6578872 Binary files /dev/null and b/tests/snapshots/tomochain_nanox_tomochain_vic_withdraw_1/00007.png differ diff --git a/tests/src/arbitrum/arbitrum_angle_deposit.test.js b/tests/src/arbitrum/arbitrum_angle_deposit.test.js new file mode 100644 index 0000000..7e45811 --- /dev/null +++ b/tests/src/arbitrum/arbitrum_angle_deposit.test.js @@ -0,0 +1,39 @@ +import { processTest, populateTransaction } from "../test.fixture"; + +const contractName = "TransparentUpgradeableProxy"; // <= Name of the smart contract + +const testLabel = "arbitrum_angle_deposit"; // <= Name of the test +const testDirSuffix = "arbitrum_angle_deposit"; // <= directory to compare device snapshots to +const testNetwork = "arbitrum"; +const signedPlugin = false; + +const contractAddr = "0x004626a008b1acdc4c74ab51644093b155e59a23"; // <= Address of the smart contract +const chainID = 42161; + +// From : https://arbiscan.io/tx/0xdccdf29e8cbea34fc2435ffe58cca33453c0cc7329303a1c4ee73273a8bd15f1 +const inputData = "0x6e553f650000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000b6c5273e79e2add234ebc07d87f3824e0f94b2f7"; + +// Create serializedTx and remove the "0x" prefix +const serializedTx = populateTransaction(contractAddr, inputData, chainID); + +const devices = [ + { + name: "nanos", + label: "Nano S", + steps: 8, // <= Define the number of steps for this test case and this device + }, + { + name: "nanox", + label: "Nano X", + steps: 6, // <= Define the number of steps for this test case and this device + }, + { + name: "nanosp", + label: "Nano S+", + steps: 6, // <= Define the number of steps for this test case and this device + } +]; + +devices.forEach((device) => + processTest(device, contractName, testLabel, testDirSuffix, "", signedPlugin, serializedTx, testNetwork) +); diff --git a/tests/src/arbitrum/arbitrum_angle_withdraw.test.js b/tests/src/arbitrum/arbitrum_angle_withdraw.test.js new file mode 100644 index 0000000..dd62cea --- /dev/null +++ b/tests/src/arbitrum/arbitrum_angle_withdraw.test.js @@ -0,0 +1,39 @@ +import { processTest, populateTransaction } from "../test.fixture"; + +const contractName = "TransparentUpgradeableProxy"; // <= Name of the smart contract + +const testLabel = "arbitrum_angle_withdraw"; // <= Name of the test +const testDirSuffix = "arbitrum_angle_withdraw"; // <= directory to compare device snapshots to +const testNetwork = "arbitrum"; +const signedPlugin = false; + +const contractAddr = "0x004626a008b1acdc4c74ab51644093b155e59a23"; // <= Address of the smart contract +const chainID = 42161; + +// From : https://arbiscan.io/tx/0x9f7cfc79d3c2b83e40c8c16240aea03430dadbed3d4cfa683b49b7f1669e9952 +const inputData = "0xb460af9400000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000b6c5273e79e2add234ebc07d87f3824e0f94b2f7000000000000000000000000b6c5273e79e2add234ebc07d87f3824e0f94b2f7"; + +// Create serializedTx and remove the "0x" prefix +const serializedTx = populateTransaction(contractAddr, inputData, chainID); + +const devices = [ + { + name: "nanos", + label: "Nano S", + steps: 11, // <= Define the number of steps for this test case and this device + }, + { + name: "nanox", + label: "Nano X", + steps: 7, // <= Define the number of steps for this test case and this device + }, + { + name: "nanosp", + label: "Nano S+", + steps: 7, // <= Define the number of steps for this test case and this device + } +]; + +devices.forEach((device) => + processTest(device, contractName, testLabel, testDirSuffix, "", signedPlugin, serializedTx, testNetwork) +); diff --git a/tests/src/ethereum/ethereum_angle_deposit.test.js b/tests/src/ethereum/ethereum_angle_deposit.test.js new file mode 100644 index 0000000..913ac86 --- /dev/null +++ b/tests/src/ethereum/ethereum_angle_deposit.test.js @@ -0,0 +1,39 @@ +import { processTest, populateTransaction } from "../test.fixture"; + +const contractName = "TransparentUpgradeableProxy"; // <= Name of the smart contract + +const testLabel = "ethereum_angle_deposit"; // <= Name of the test +const testDirSuffix = "ethereum_angle_deposit"; // <= directory to compare device snapshots to +const testNetwork = "ethereum"; +const signedPlugin = false; + +const contractAddr = "0x004626a008b1acdc4c74ab51644093b155e59a23"; // <= Address of the smart contract +const chainID = 1; + +// From : https://etherscan.io/tx/0xf6dbe09dc5140e190aec3d3a50e79e5d400e0a3b24cd115cdaa9c15917864032 +const inputData = "0x6e553f650000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000b6c5273e79e2add234ebc07d87f3824e0f94b2f7"; + +// Create serializedTx and remove the "0x" prefix +const serializedTx = populateTransaction(contractAddr, inputData, chainID); + +const devices = [ + { + name: "nanos", + label: "Nano S", + steps: 7, // <= Define the number of steps for this test case and this device + }, + { + name: "nanox", + label: "Nano X", + steps: 5, // <= Define the number of steps for this test case and this device + }, + { + name: "nanosp", + label: "Nano S+", + steps: 5, // <= Define the number of steps for this test case and this device + } +]; + +devices.forEach((device) => + processTest(device, contractName, testLabel, testDirSuffix, "", signedPlugin, serializedTx, testNetwork) +); diff --git a/tests/src/ethereum/ethereum_angle_withdraw.test.js b/tests/src/ethereum/ethereum_angle_withdraw.test.js new file mode 100644 index 0000000..3055fc5 --- /dev/null +++ b/tests/src/ethereum/ethereum_angle_withdraw.test.js @@ -0,0 +1,39 @@ +import { processTest, populateTransaction } from "../test.fixture"; + +const contractName = "TransparentUpgradeableProxy"; // <= Name of the smart contract + +const testLabel = "ethereum_angle_withdraw"; // <= Name of the test +const testDirSuffix = "ethereum_angle_withdraw"; // <= directory to compare device snapshots to +const testNetwork = "ethereum"; +const signedPlugin = false; + +const contractAddr = "0x004626a008b1acdc4c74ab51644093b155e59a23"; // <= Address of the smart contract +const chainID = 1; + +// From : https://etherscan.io/tx/0x3138aa710234da85b449405d0f9f98eab204332ce76cd8a4421ddcebd64ba73b +const inputData = "0xb460af94000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000b6c5273e79e2add234ebc07d87f3824e0f94b2f7000000000000000000000000b6c5273e79e2add234ebc07d87f3824e0f94b2f7"; + +// Create serializedTx and remove the "0x" prefix +const serializedTx = populateTransaction(contractAddr, inputData, chainID); + +const devices = [ + { + name: "nanos", + label: "Nano S", + steps: 10, // <= Define the number of steps for this test case and this device + }, + { + name: "nanox", + label: "Nano X", + steps: 6, // <= Define the number of steps for this test case and this device + }, + { + name: "nanosp", + label: "Nano S+", + steps: 6, // <= Define the number of steps for this test case and this device + } +]; + +devices.forEach((device) => + processTest(device, contractName, testLabel, testDirSuffix, "", signedPlugin, serializedTx, testNetwork) +); diff --git a/tests/src/ethereum/ethereum_lido_claim_withdrawals.test.js b/tests/src/ethereum/ethereum_lido_claim_withdrawals.test.js new file mode 100644 index 0000000..5a6a1cf --- /dev/null +++ b/tests/src/ethereum/ethereum_lido_claim_withdrawals.test.js @@ -0,0 +1,54 @@ +import { processTest, populateTransaction } from "../test.fixture"; + +const contractName = "OssifiableProxy"; // <= Name of the smart contract + +const testLabel = "ethereum_lido_claim_withdrawals"; // <= Name of the test +const testNetwork = "ethereum"; +const signedPlugin = false; + +const contractAddr = "0x889edc2edab5f40e902b864ad4d7ade8e412f9b1"; // <= Address of the smart contract +const chainID = 1; + +const transactions = [ + { + // From : https://etherscan.io/tx/0x9b55ea0772d02e277664583741e14d1f103b3a06666728d36093cbbc12cef8dd + inputData: "0xe3afe0a3000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000004ff70000000000000000000000000000000000000000000000000000000000004ff8000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000e300000000000000000000000000000000000000000000000000000000000000e3", + nanoStep: 7, + nanoSPtep: 7, + nanoXtep: 7, + index: 1, + }, + { + // From : https://etherscan.io/tx/0xa3f20cdfaa0cad18482585e7617b700df470d06f3f2b6f871791510becc48417 + inputData: "0xe3afe0a30000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000004dfd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e0", + nanoStep: 5, + nanoSPtep: 5, + nanoXtep: 5, + index: 2, + }, +]; + +transactions.forEach((tx) => { + const devices = [ + { + name: 'nanos', + label: 'Nano S', + steps: tx.nanoStep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanox', + label: 'Nano X', + steps: tx.nanoSPtep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanosp', + label: 'Nano S+', + steps: tx.nanoXtep, // <= Define the number of steps for this test case and this device + }, + ]; + + const testDirSuffix = `${testLabel}_${tx.index}`; // <= directory to compare device snapshots to + const serializedTx = populateTransaction(contractAddr, tx.inputData, chainID); + + devices.forEach((device) => processTest(device, contractName, testDirSuffix, testDirSuffix, '', signedPlugin, serializedTx, testNetwork)); +}); diff --git a/tests/src/ethereum/ethereum_lido_request_withdrawals.test.js b/tests/src/ethereum/ethereum_lido_request_withdrawals.test.js new file mode 100644 index 0000000..2c1a643 --- /dev/null +++ b/tests/src/ethereum/ethereum_lido_request_withdrawals.test.js @@ -0,0 +1,54 @@ +import { processTest, populateTransaction } from "../test.fixture"; + +const contractName = "OssifiableProxy"; // <= Name of the smart contract + +const testLabel = "ethereum_lido_request_withdrawals"; // <= Name of the test +const testNetwork = "ethereum"; +const signedPlugin = false; + +const contractAddr = "0x889edc2edab5f40e902b864ad4d7ade8e412f9b1"; // <= Address of the smart contract +const chainID = 1; + +const transactions = [ + { + // From : https://etherscan.io/tx/0xf04b7649c40848f55e3fae8f6b511badb4af3ae7eefdec7609bc6cadd90495ab + inputData: "0xd66810420000000000000000000000000000000000000000000000000000000000000040000000000000000000000000e7dbe6aa7edcc38cb5007b87153d236ad879309b000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000003635c9adc5dea000000000000000000000000000000000000000000000000000128c5671c0043f210f", + nanoStep: 9, + nanoSPtep: 5, + nanoXtep: 5, + index: 1, + }, + { + // From : https://etherscan.io/tx/0xa15406c00339f694bd34f4c123bea678bfa2ef908f66ca73e65a2199641a3ec1 + inputData: '0xd66810420000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a7e157be40806e2dc73fff09100739649ae6b4d4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000005c2c45740144fda', + nanoStep: 9, + nanoSPtep: 5, + nanoXtep: 5, + index: 2, + } +]; + +transactions.forEach((tx) => { + const devices = [ + { + name: 'nanos', + label: 'Nano S', + steps: tx.nanoStep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanox', + label: 'Nano X', + steps: tx.nanoSPtep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanosp', + label: 'Nano S+', + steps: tx.nanoXtep, // <= Define the number of steps for this test case and this device + }, + ]; + + const testDirSuffix = `${testLabel}_${tx.index}`; // <= directory to compare device snapshots to + const serializedTx = populateTransaction(contractAddr, tx.inputData, chainID); + + devices.forEach((device) => processTest(device, contractName, testDirSuffix, testDirSuffix, '', signedPlugin, serializedTx, testNetwork)); +}); diff --git a/tests/src/tomochain/tomochain_vic_resign.test.js b/tests/src/tomochain/tomochain_vic_resign.test.js new file mode 100644 index 0000000..218206d --- /dev/null +++ b/tests/src/tomochain/tomochain_vic_resign.test.js @@ -0,0 +1,46 @@ +import { processTest, populateTransaction } from "../test.fixture"; + +const contractName = "TomoValidator"; // <= Name of the smart contract + +const testLabel = "tomochain_vic_resign"; // <= Name of the test +const testNetwork = "tomochain"; +const signedPlugin = false; + +const contractAddr = "0x0000000000000000000000000000000000000088"; // <= Address of the smart contract +const chainID = 88; + +const transactions = [ + { + // From : https://tomoscan.io/tx/0x820b57ef79a067c3b7d2c9e99b46a63a1a8cafb8c4b51ca23d01928efe66a3d7 + inputData: "0xae6e43f5000000000000000000000000d3cac70664429382db8f59ca1eac89634edd23c8", + nanoStep: 7, + nanoSPtep: 5, + nanoXtep: 5, + index: 1, + }, +]; + +transactions.forEach((tx) => { + const devices = [ + { + name: 'nanos', + label: 'Nano S', + steps: tx.nanoStep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanox', + label: 'Nano X', + steps: tx.nanoSPtep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanosp', + label: 'Nano S+', + steps: tx.nanoXtep, // <= Define the number of steps for this test case and this device + }, + ]; + + const testDirSuffix = `${testLabel}_${tx.index}`; // <= directory to compare device snapshots to + const serializedTx = populateTransaction(contractAddr, tx.inputData, chainID); + + devices.forEach((device) => processTest(device, contractName, testDirSuffix, testDirSuffix, '', signedPlugin, serializedTx, testNetwork)); +}); diff --git a/tests/src/tomochain/tomochain_vic_unvote.test.js b/tests/src/tomochain/tomochain_vic_unvote.test.js new file mode 100644 index 0000000..b8eaa6f --- /dev/null +++ b/tests/src/tomochain/tomochain_vic_unvote.test.js @@ -0,0 +1,46 @@ +import { processTest, populateTransaction } from "../test.fixture"; + +const contractName = "TomoValidator"; // <= Name of the smart contract + +const testLabel = "tomochain_vic_unvote"; // <= Name of the test +const testNetwork = "tomochain"; +const signedPlugin = false; + +const contractAddr = "0x0000000000000000000000000000000000000088"; // <= Address of the smart contract +const chainID = 88; + +const transactions = [ + { + // From : https://tomoscan.io/tx/0x497a6c4e1af6a1aeb9956f91d5c428de96d5b54eb72406c3401605125e567847 + inputData: "0x02aa9be200000000000000000000000095a512dba9e93814a2cf0925abf2f720c39c2bb700000000000000000000000000000000000000000000000e5d9d1ff846840000", + nanoStep: 8, + nanoSPtep: 6, + nanoXtep: 6, + index: 1, + }, +]; + +transactions.forEach((tx) => { + const devices = [ + { + name: 'nanos', + label: 'Nano S', + steps: tx.nanoStep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanox', + label: 'Nano X', + steps: tx.nanoSPtep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanosp', + label: 'Nano S+', + steps: tx.nanoXtep, // <= Define the number of steps for this test case and this device + }, + ]; + + const testDirSuffix = `${testLabel}_${tx.index}`; // <= directory to compare device snapshots to + const serializedTx = populateTransaction(contractAddr, tx.inputData, chainID); + + devices.forEach((device) => processTest(device, contractName, testDirSuffix, testDirSuffix, '', signedPlugin, serializedTx, testNetwork)); +}); diff --git a/tests/src/tomochain/tomochain_vic_vote.test.js b/tests/src/tomochain/tomochain_vic_vote.test.js new file mode 100644 index 0000000..5e15f1e --- /dev/null +++ b/tests/src/tomochain/tomochain_vic_vote.test.js @@ -0,0 +1,46 @@ +import { processTest, populateTransaction } from "../test.fixture"; + +const contractName = "TomoValidator"; // <= Name of the smart contract + +const testLabel = "tomochain_vic_vote"; // <= Name of the test +const testNetwork = "tomochain"; +const signedPlugin = false; + +const contractAddr = "0x0000000000000000000000000000000000000088"; // <= Address of the smart contract +const chainID = 88; + +const transactions = [ + { + // From : https://tomoscan.io/tx/0xd2b87e71d3c3a2a48985608736649851c67f8764c117a8cd19bb58464c0f70f6 + inputData: "0x6dd7d8ea000000000000000000000000fe66acfe4d132780fdbedbf3f113eb869d19db58", + nanoStep: 7, + nanoSPtep: 5, + nanoXtep: 5, + index: 1, + }, +]; + +transactions.forEach((tx) => { + const devices = [ + { + name: 'nanos', + label: 'Nano S', + steps: tx.nanoStep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanox', + label: 'Nano X', + steps: tx.nanoSPtep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanosp', + label: 'Nano S+', + steps: tx.nanoXtep, // <= Define the number of steps for this test case and this device + }, + ]; + + const testDirSuffix = `${testLabel}_${tx.index}`; // <= directory to compare device snapshots to + const serializedTx = populateTransaction(contractAddr, tx.inputData, chainID); + + devices.forEach((device) => processTest(device, contractName, testDirSuffix, testDirSuffix, '', signedPlugin, serializedTx, testNetwork)); +}); diff --git a/tests/src/tomochain/tomochain_vic_withdraw.test.js b/tests/src/tomochain/tomochain_vic_withdraw.test.js new file mode 100644 index 0000000..8a4c249 --- /dev/null +++ b/tests/src/tomochain/tomochain_vic_withdraw.test.js @@ -0,0 +1,46 @@ +import { processTest, populateTransaction } from "../test.fixture"; + +const contractName = "TomoValidator"; // <= Name of the smart contract + +const testLabel = "tomochain_vic_withdraw"; // <= Name of the test +const testNetwork = "tomochain"; +const signedPlugin = false; + +const contractAddr = "0x0000000000000000000000000000000000000088"; // <= Address of the smart contract +const chainID = 88; + +const transactions = [ + { + // From : https://tomoscan.io/tx/0x18a68417e99b419c9b16c20474ca3df78ce9767ca4059385d0a5b75648e56c44 + inputData: "0x441a3e7000000000000000000000000000000000000000000000000000000000046648e00000000000000000000000000000000000000000000000000000000000000000", + nanoStep: 6, + nanoSPtep: 6, + nanoXtep: 6, + index: 1, + }, +]; + +transactions.forEach((tx) => { + const devices = [ + { + name: 'nanos', + label: 'Nano S', + steps: tx.nanoStep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanox', + label: 'Nano X', + steps: tx.nanoSPtep, // <= Define the number of steps for this test case and this device + }, + { + name: 'nanosp', + label: 'Nano S+', + steps: tx.nanoXtep, // <= Define the number of steps for this test case and this device + }, + ]; + + const testDirSuffix = `${testLabel}_${tx.index}`; // <= directory to compare device snapshots to + const serializedTx = populateTransaction(contractAddr, tx.inputData, chainID); + + devices.forEach((device) => processTest(device, contractName, testDirSuffix, testDirSuffix, '', signedPlugin, serializedTx, testNetwork)); +});