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 | | 0xb77fc84a549ecc0b410d6fa15159C2df207545a3 |
0xCf85FF1c37c594a10195F7A9Ab85CBb0a03f69dE |
0x764594F8e9757edE877B75716f8077162B251460 |
0xbCb167bDCF14a8F791d6f4A6EDd964aed2F8813B |
|Yearn Vault | | Yearn Vault | [Token json](./tokens.json) |
+| Angle Protocol | | 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 | | | |
| 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 | | |
+| Lido stETH Withdrawal NFT | WithdrawalQueueERC721 | | 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));
+});