From 254c70e95a3db7febaa832531b9de60d89d7b413 Mon Sep 17 00:00:00 2001 From: defi_wind Date: Thu, 4 Jul 2024 19:13:07 +0530 Subject: [PATCH] Kelp withdrawals (#32) * remove fantom support * remove legacy code * add kelp unstake * add kelp claim * update sdk * update app version number --------- Co-authored-by: apaillier-ledger <94451027+apaillier-ledger@users.noreply.github.com> --- Makefile | 4 +- PLUGIN_SPECIFICATION.md | 19 +- ethereum-plugin-sdk | 2 +- src/handle_finalize.c | 8 +- src/handle_init_contract.c | 24 +- src/handle_provide_parameter.c | 39 +- src/handle_provide_token.c | 2 + src/handle_query_contract_id.c | 19 +- src/handle_query_contract_ui.c | 43 +- src/staderlabs_plugin.h | 9 +- ...e59c08eb5dae4b7e6f7a8cad3006d6965ec16.json | 774 +++++++++++++++ tests/networks/ethereum/staderlabs/b2c.json | 30 +- ...8bfc855ab504a8a327720fcef98886065529b.json | 929 ------------------ tests/networks/fantom/staderlabs/b2c.json | 27 - .../00001.png | Bin 362 -> 0 bytes .../00002.png | Bin 396 -> 0 bytes .../00003.png | Bin 494 -> 0 bytes .../00004.png | Bin 473 -> 0 bytes .../00005.png | Bin 366 -> 0 bytes .../00007.png | Bin 480 -> 0 bytes .../00008.png | Bin 349 -> 0 bytes .../00001.png | Bin 335 -> 0 bytes .../00002.png | Bin 319 -> 0 bytes .../00003.png | Bin 484 -> 0 bytes .../00004.png | Bin 496 -> 0 bytes .../00005.png | Bin 409 -> 0 bytes .../00007.png | Bin 457 -> 0 bytes .../00008.png | Bin 353 -> 0 bytes .../00001.png | Bin 430 -> 0 bytes .../00002.png | Bin 453 -> 0 bytes .../00003.png | Bin 789 -> 0 bytes .../00004.png | Bin 597 -> 0 bytes .../00001.png | Bin 415 -> 0 bytes .../00002.png | Bin 353 -> 0 bytes .../00003.png | Bin 823 -> 0 bytes .../00004.png | Bin 598 -> 0 bytes .../00001.png | Bin 430 -> 0 bytes .../00002.png | Bin 453 -> 0 bytes .../00003.png | Bin 789 -> 0 bytes .../00004.png | Bin 597 -> 0 bytes .../00001.png | Bin 415 -> 0 bytes .../00002.png | Bin 353 -> 0 bytes .../00003.png | Bin 823 -> 0 bytes .../00004.png | Bin 598 -> 0 bytes .../00000.png | Bin .../ethereum_kelp_claim_eth_nanos/00001.png | Bin 0 -> 298 bytes .../ethereum_kelp_claim_eth_nanos/00002.png | Bin 0 -> 279 bytes .../00003.png} | Bin .../ethereum_kelp_claim_eth_nanos/00004.png | Bin 0 -> 465 bytes .../ethereum_kelp_claim_eth_nanos/00005.png | Bin 0 -> 360 bytes .../00006.png} | Bin .../00007.png} | Bin .../00000.png | Bin .../ethereum_kelp_claim_eth_nanosp/00001.png | Bin 0 -> 339 bytes .../ethereum_kelp_claim_eth_nanosp/00002.png | Bin 0 -> 303 bytes .../ethereum_kelp_claim_eth_nanosp/00003.png | Bin 0 -> 591 bytes .../00004.png} | Bin .../00005.png} | Bin .../00000.png | Bin .../ethereum_kelp_claim_eth_nanox/00001.png | Bin 0 -> 339 bytes .../ethereum_kelp_claim_eth_nanox/00002.png | Bin 0 -> 303 bytes .../ethereum_kelp_claim_eth_nanox/00003.png | Bin 0 -> 591 bytes .../00004.png} | Bin .../00005.png} | Bin .../00000.png | Bin .../ethereum_kelp_claim_lst_nanos/00001.png | Bin 0 -> 298 bytes .../ethereum_kelp_claim_lst_nanos/00002.png | Bin 0 -> 326 bytes .../00003.png} | Bin .../ethereum_kelp_claim_lst_nanos/00004.png | Bin 0 -> 465 bytes .../ethereum_kelp_claim_lst_nanos/00005.png | Bin 0 -> 348 bytes .../00006.png} | Bin .../00007.png} | Bin .../00000.png | Bin .../ethereum_kelp_claim_lst_nanosp/00001.png | Bin 0 -> 339 bytes .../ethereum_kelp_claim_lst_nanosp/00002.png | Bin 0 -> 357 bytes .../ethereum_kelp_claim_lst_nanosp/00003.png | Bin 0 -> 575 bytes .../00004.png} | Bin .../00005.png} | Bin .../00000.png | Bin .../ethereum_kelp_claim_lst_nanox/00001.png | Bin 0 -> 339 bytes .../ethereum_kelp_claim_lst_nanox/00002.png | Bin 0 -> 357 bytes .../ethereum_kelp_claim_lst_nanox/00003.png | Bin 0 -> 575 bytes .../00004.png} | Bin .../00005.png} | Bin .../00000.png | Bin .../ethereum_kelp_unstake_eth_nanos/00001.png | Bin 0 -> 335 bytes .../ethereum_kelp_unstake_eth_nanos/00002.png | Bin 0 -> 374 bytes .../ethereum_kelp_unstake_eth_nanos/00003.png | Bin 0 -> 372 bytes .../ethereum_kelp_unstake_eth_nanos/00004.png | Bin 0 -> 366 bytes .../ethereum_kelp_unstake_eth_nanos/00005.png | Bin 0 -> 466 bytes .../ethereum_kelp_unstake_eth_nanos/00006.png | Bin 0 -> 351 bytes .../00007.png} | Bin .../00008.png} | Bin .../00000.png | Bin .../00001.png | Bin 0 -> 378 bytes .../00002.png | Bin 0 -> 417 bytes .../00003.png | Bin 0 -> 428 bytes .../00004.png | Bin 0 -> 588 bytes .../00005.png | Bin .../00006.png | Bin .../00000.png | Bin .../ethereum_kelp_unstake_eth_nanox/00001.png | Bin 0 -> 378 bytes .../ethereum_kelp_unstake_eth_nanox/00002.png | Bin 0 -> 417 bytes .../ethereum_kelp_unstake_eth_nanox/00003.png | Bin 0 -> 428 bytes .../ethereum_kelp_unstake_eth_nanox/00004.png | Bin 0 -> 588 bytes .../00005.png | Bin .../00006.png | Bin .../00000.png | Bin .../ethereum_kelp_unstake_lst_nanos/00001.png | Bin 0 -> 335 bytes .../ethereum_kelp_unstake_lst_nanos/00002.png | Bin 0 -> 389 bytes .../ethereum_kelp_unstake_lst_nanos/00003.png | Bin 0 -> 375 bytes .../ethereum_kelp_unstake_lst_nanos/00004.png | Bin 0 -> 366 bytes .../ethereum_kelp_unstake_lst_nanos/00005.png | Bin 0 -> 463 bytes .../ethereum_kelp_unstake_lst_nanos/00006.png | Bin 0 -> 337 bytes .../00007.png} | Bin .../00008.png} | Bin .../00000.png | Bin .../00001.png | Bin 0 -> 378 bytes .../00002.png | Bin 0 -> 440 bytes .../00003.png | Bin 0 -> 435 bytes .../00004.png | Bin 0 -> 567 bytes .../00005.png | Bin .../00006.png | Bin .../00000.png | Bin .../ethereum_kelp_unstake_lst_nanox/00001.png | Bin 0 -> 378 bytes .../ethereum_kelp_unstake_lst_nanox/00002.png | Bin 0 -> 440 bytes .../ethereum_kelp_unstake_lst_nanox/00003.png | Bin 0 -> 435 bytes .../ethereum_kelp_unstake_lst_nanox/00004.png | Bin 0 -> 567 bytes .../00005.png | Bin .../00006.png | Bin .../fantom_ftmx_nanos_deposit/00001.png | Bin 335 -> 0 bytes .../fantom_ftmx_nanos_deposit/00002.png | Bin 338 -> 0 bytes .../fantom_ftmx_nanos_deposit/00003.png | Bin 330 -> 0 bytes .../fantom_ftmx_nanos_deposit/00004.png | Bin 363 -> 0 bytes .../fantom_ftmx_nanos_undelegate/00001.png | Bin 362 -> 0 bytes .../fantom_ftmx_nanos_undelegate/00002.png | Bin 393 -> 0 bytes .../fantom_ftmx_nanos_undelegate/00003.png | Bin 330 -> 0 bytes .../fantom_ftmx_nanos_undelegate/00004.png | Bin 363 -> 0 bytes .../fantom_ftmx_nanos_withdraw/00000.png | Bin 374 -> 0 bytes .../fantom_ftmx_nanos_withdraw/00001.png | Bin 340 -> 0 bytes .../fantom_ftmx_nanos_withdraw/00002.png | Bin 285 -> 0 bytes .../fantom_ftmx_nanos_withdraw/00003.png | Bin 330 -> 0 bytes .../fantom_ftmx_nanos_withdraw/00004.png | Bin 363 -> 0 bytes .../fantom_ftmx_nanos_withdraw/00005.png | Bin 414 -> 0 bytes .../fantom_ftmx_nanos_withdraw/00006.png | Bin 349 -> 0 bytes .../fantom_ftmx_nanosp_deposit/00001.png | Bin 415 -> 0 bytes .../fantom_ftmx_nanosp_deposit/00002.png | Bin 367 -> 0 bytes .../fantom_ftmx_nanosp_deposit/00003.png | Bin 373 -> 0 bytes .../fantom_ftmx_nanosp_deposit/00004.png | Bin 421 -> 0 bytes .../fantom_ftmx_nanosp_undelegate/00001.png | Bin 430 -> 0 bytes .../fantom_ftmx_nanosp_undelegate/00002.png | Bin 433 -> 0 bytes .../fantom_ftmx_nanosp_undelegate/00003.png | Bin 373 -> 0 bytes .../fantom_ftmx_nanosp_undelegate/00004.png | Bin 421 -> 0 bytes .../fantom_ftmx_nanosp_withdraw/00001.png | Bin 406 -> 0 bytes .../fantom_ftmx_nanosp_withdraw/00002.png | Bin 308 -> 0 bytes .../fantom_ftmx_nanosp_withdraw/00003.png | Bin 373 -> 0 bytes .../fantom_ftmx_nanosp_withdraw/00004.png | Bin 421 -> 0 bytes .../fantom_ftmx_nanox_deposit/00001.png | Bin 415 -> 0 bytes .../fantom_ftmx_nanox_deposit/00002.png | Bin 367 -> 0 bytes .../fantom_ftmx_nanox_deposit/00003.png | Bin 373 -> 0 bytes .../fantom_ftmx_nanox_deposit/00004.png | Bin 421 -> 0 bytes .../fantom_ftmx_nanox_undelegate/00000.png | Bin 414 -> 0 bytes .../fantom_ftmx_nanox_undelegate/00001.png | Bin 430 -> 0 bytes .../fantom_ftmx_nanox_undelegate/00002.png | Bin 433 -> 0 bytes .../fantom_ftmx_nanox_undelegate/00003.png | Bin 373 -> 0 bytes .../fantom_ftmx_nanox_undelegate/00004.png | Bin 421 -> 0 bytes .../fantom_ftmx_nanox_undelegate/00005.png | Bin 472 -> 0 bytes .../fantom_ftmx_nanox_undelegate/00006.png | Bin 381 -> 0 bytes .../fantom_ftmx_nanox_withdraw/00000.png | Bin 414 -> 0 bytes .../fantom_ftmx_nanox_withdraw/00001.png | Bin 406 -> 0 bytes .../fantom_ftmx_nanox_withdraw/00002.png | Bin 308 -> 0 bytes .../fantom_ftmx_nanox_withdraw/00003.png | Bin 373 -> 0 bytes .../fantom_ftmx_nanox_withdraw/00004.png | Bin 421 -> 0 bytes .../fantom_ftmx_nanox_withdraw/00005.png | Bin 472 -> 0 bytes .../fantom_ftmx_nanox_withdraw/00006.png | Bin 381 -> 0 bytes .../claimETH.test.js} | 13 +- .../claimLST.test.js} | 13 +- .../eth/kelp/initiateWithdrawalETH.test.js | 39 + .../eth/kelp/initiateWithdrawalLST.test.js | 39 + tests/src/fantom/deposit.test.js | 47 - tests/src/fantom/undelegate.test.js | 47 - tests/src/fantom/withdraw.test.js | 47 - 182 files changed, 985 insertions(+), 1189 deletions(-) create mode 100644 tests/networks/ethereum/staderlabs/abis/0x62de59c08eb5dae4b7e6f7a8cad3006d6965ec16.json delete mode 100644 tests/networks/fantom/staderlabs/abis/0xb458bfc855ab504a8a327720fcef98886065529b.json delete mode 100644 tests/networks/fantom/staderlabs/b2c.json delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00001.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00002.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00003.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00004.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00005.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00007.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00008.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00001.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00002.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00003.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00004.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00005.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00007.png delete mode 100644 tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00008.png delete mode 100644 tests/snapshots/ethereum_ethx_nanosp_legacy_request_withdraw_eth/00001.png delete mode 100644 tests/snapshots/ethereum_ethx_nanosp_legacy_request_withdraw_eth/00002.png delete mode 100644 tests/snapshots/ethereum_ethx_nanosp_legacy_request_withdraw_eth/00003.png delete mode 100644 tests/snapshots/ethereum_ethx_nanosp_legacy_request_withdraw_eth/00004.png delete mode 100644 tests/snapshots/ethereum_ethx_nanosp_legacy_stake_eth/00001.png delete mode 100644 tests/snapshots/ethereum_ethx_nanosp_legacy_stake_eth/00002.png delete mode 100644 tests/snapshots/ethereum_ethx_nanosp_legacy_stake_eth/00003.png delete mode 100644 tests/snapshots/ethereum_ethx_nanosp_legacy_stake_eth/00004.png delete mode 100644 tests/snapshots/ethereum_ethx_nanox_legacy_request_withdraw_eth/00001.png delete mode 100644 tests/snapshots/ethereum_ethx_nanox_legacy_request_withdraw_eth/00002.png delete mode 100644 tests/snapshots/ethereum_ethx_nanox_legacy_request_withdraw_eth/00003.png delete mode 100644 tests/snapshots/ethereum_ethx_nanox_legacy_request_withdraw_eth/00004.png delete mode 100644 tests/snapshots/ethereum_ethx_nanox_legacy_stake_eth/00001.png delete mode 100644 tests/snapshots/ethereum_ethx_nanox_legacy_stake_eth/00002.png delete mode 100644 tests/snapshots/ethereum_ethx_nanox_legacy_stake_eth/00003.png delete mode 100644 tests/snapshots/ethereum_ethx_nanox_legacy_stake_eth/00004.png rename tests/snapshots/{ethereum_ethx_nanos_legacy_request_withdraw_eth => ethereum_kelp_claim_eth_nanos}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_claim_eth_nanos/00001.png create mode 100644 tests/snapshots/ethereum_kelp_claim_eth_nanos/00002.png rename tests/snapshots/{ethereum_ethx_nanos_legacy_request_withdraw_eth/00006.png => ethereum_kelp_claim_eth_nanos/00003.png} (100%) create mode 100644 tests/snapshots/ethereum_kelp_claim_eth_nanos/00004.png create mode 100644 tests/snapshots/ethereum_kelp_claim_eth_nanos/00005.png rename tests/snapshots/{ethereum_ethx_nanos_legacy_request_withdraw_eth/00009.png => ethereum_kelp_claim_eth_nanos/00006.png} (100%) rename tests/snapshots/{ethereum_ethx_nanos_legacy_request_withdraw_eth/00010.png => ethereum_kelp_claim_eth_nanos/00007.png} (100%) rename tests/snapshots/{ethereum_ethx_nanosp_legacy_request_withdraw_eth => ethereum_kelp_claim_eth_nanosp}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_claim_eth_nanosp/00001.png create mode 100644 tests/snapshots/ethereum_kelp_claim_eth_nanosp/00002.png create mode 100644 tests/snapshots/ethereum_kelp_claim_eth_nanosp/00003.png rename tests/snapshots/{ethereum_ethx_nanosp_legacy_request_withdraw_eth/00005.png => ethereum_kelp_claim_eth_nanosp/00004.png} (100%) rename tests/snapshots/{ethereum_ethx_nanosp_legacy_request_withdraw_eth/00006.png => ethereum_kelp_claim_eth_nanosp/00005.png} (100%) rename tests/snapshots/{ethereum_ethx_nanosp_legacy_stake_eth => ethereum_kelp_claim_eth_nanox}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_claim_eth_nanox/00001.png create mode 100644 tests/snapshots/ethereum_kelp_claim_eth_nanox/00002.png create mode 100644 tests/snapshots/ethereum_kelp_claim_eth_nanox/00003.png rename tests/snapshots/{ethereum_ethx_nanosp_legacy_stake_eth/00005.png => ethereum_kelp_claim_eth_nanox/00004.png} (100%) rename tests/snapshots/{ethereum_ethx_nanosp_legacy_stake_eth/00006.png => ethereum_kelp_claim_eth_nanox/00005.png} (100%) rename tests/snapshots/{ethereum_ethx_nanos_legacy_stake_eth => ethereum_kelp_claim_lst_nanos}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_claim_lst_nanos/00001.png create mode 100644 tests/snapshots/ethereum_kelp_claim_lst_nanos/00002.png rename tests/snapshots/{ethereum_ethx_nanos_legacy_stake_eth/00006.png => ethereum_kelp_claim_lst_nanos/00003.png} (100%) create mode 100644 tests/snapshots/ethereum_kelp_claim_lst_nanos/00004.png create mode 100644 tests/snapshots/ethereum_kelp_claim_lst_nanos/00005.png rename tests/snapshots/{ethereum_ethx_nanos_legacy_stake_eth/00009.png => ethereum_kelp_claim_lst_nanos/00006.png} (100%) rename tests/snapshots/{ethereum_ethx_nanos_legacy_stake_eth/00010.png => ethereum_kelp_claim_lst_nanos/00007.png} (100%) rename tests/snapshots/{ethereum_ethx_nanox_legacy_request_withdraw_eth => ethereum_kelp_claim_lst_nanosp}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_claim_lst_nanosp/00001.png create mode 100644 tests/snapshots/ethereum_kelp_claim_lst_nanosp/00002.png create mode 100644 tests/snapshots/ethereum_kelp_claim_lst_nanosp/00003.png rename tests/snapshots/{ethereum_ethx_nanox_legacy_request_withdraw_eth/00005.png => ethereum_kelp_claim_lst_nanosp/00004.png} (100%) rename tests/snapshots/{ethereum_ethx_nanox_legacy_request_withdraw_eth/00006.png => ethereum_kelp_claim_lst_nanosp/00005.png} (100%) rename tests/snapshots/{ethereum_ethx_nanox_legacy_stake_eth => ethereum_kelp_claim_lst_nanox}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_claim_lst_nanox/00001.png create mode 100644 tests/snapshots/ethereum_kelp_claim_lst_nanox/00002.png create mode 100644 tests/snapshots/ethereum_kelp_claim_lst_nanox/00003.png rename tests/snapshots/{ethereum_ethx_nanox_legacy_stake_eth/00005.png => ethereum_kelp_claim_lst_nanox/00004.png} (100%) rename tests/snapshots/{ethereum_ethx_nanox_legacy_stake_eth/00006.png => ethereum_kelp_claim_lst_nanox/00005.png} (100%) rename tests/snapshots/{fantom_ftmx_nanos_deposit => ethereum_kelp_unstake_eth_nanos}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanos/00001.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanos/00002.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanos/00003.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanos/00004.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanos/00005.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanos/00006.png rename tests/snapshots/{fantom_ftmx_nanos_deposit/00005.png => ethereum_kelp_unstake_eth_nanos/00007.png} (100%) rename tests/snapshots/{fantom_ftmx_nanos_deposit/00006.png => ethereum_kelp_unstake_eth_nanos/00008.png} (100%) rename tests/snapshots/{fantom_ftmx_nanosp_deposit => ethereum_kelp_unstake_eth_nanosp}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanosp/00001.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanosp/00002.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanosp/00003.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanosp/00004.png rename tests/snapshots/{fantom_ftmx_nanosp_deposit => ethereum_kelp_unstake_eth_nanosp}/00005.png (100%) rename tests/snapshots/{fantom_ftmx_nanosp_deposit => ethereum_kelp_unstake_eth_nanosp}/00006.png (100%) rename tests/snapshots/{fantom_ftmx_nanosp_undelegate => ethereum_kelp_unstake_eth_nanox}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanox/00001.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanox/00002.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanox/00003.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_eth_nanox/00004.png rename tests/snapshots/{fantom_ftmx_nanosp_undelegate => ethereum_kelp_unstake_eth_nanox}/00005.png (100%) rename tests/snapshots/{fantom_ftmx_nanosp_undelegate => ethereum_kelp_unstake_eth_nanox}/00006.png (100%) rename tests/snapshots/{fantom_ftmx_nanos_undelegate => ethereum_kelp_unstake_lst_nanos}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanos/00001.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanos/00002.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanos/00003.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanos/00004.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanos/00005.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanos/00006.png rename tests/snapshots/{fantom_ftmx_nanos_undelegate/00005.png => ethereum_kelp_unstake_lst_nanos/00007.png} (100%) rename tests/snapshots/{fantom_ftmx_nanos_undelegate/00006.png => ethereum_kelp_unstake_lst_nanos/00008.png} (100%) rename tests/snapshots/{fantom_ftmx_nanosp_withdraw => ethereum_kelp_unstake_lst_nanosp}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00001.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00002.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00003.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00004.png rename tests/snapshots/{fantom_ftmx_nanosp_withdraw => ethereum_kelp_unstake_lst_nanosp}/00005.png (100%) rename tests/snapshots/{fantom_ftmx_nanosp_withdraw => ethereum_kelp_unstake_lst_nanosp}/00006.png (100%) rename tests/snapshots/{fantom_ftmx_nanox_deposit => ethereum_kelp_unstake_lst_nanox}/00000.png (100%) create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanox/00001.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanox/00002.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanox/00003.png create mode 100644 tests/snapshots/ethereum_kelp_unstake_lst_nanox/00004.png rename tests/snapshots/{fantom_ftmx_nanox_deposit => ethereum_kelp_unstake_lst_nanox}/00005.png (100%) rename tests/snapshots/{fantom_ftmx_nanox_deposit => ethereum_kelp_unstake_lst_nanox}/00006.png (100%) delete mode 100644 tests/snapshots/fantom_ftmx_nanos_deposit/00001.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_deposit/00002.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_deposit/00003.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_deposit/00004.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_undelegate/00001.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_undelegate/00002.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_undelegate/00003.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_undelegate/00004.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_withdraw/00000.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_withdraw/00001.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_withdraw/00002.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_withdraw/00003.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_withdraw/00004.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_withdraw/00005.png delete mode 100644 tests/snapshots/fantom_ftmx_nanos_withdraw/00006.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_deposit/00001.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_deposit/00002.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_deposit/00003.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_deposit/00004.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_undelegate/00001.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_undelegate/00002.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_undelegate/00003.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_undelegate/00004.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_withdraw/00001.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_withdraw/00002.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_withdraw/00003.png delete mode 100644 tests/snapshots/fantom_ftmx_nanosp_withdraw/00004.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_deposit/00001.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_deposit/00002.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_deposit/00003.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_deposit/00004.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_undelegate/00000.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_undelegate/00001.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_undelegate/00002.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_undelegate/00003.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_undelegate/00004.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_undelegate/00005.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_undelegate/00006.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_withdraw/00000.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_withdraw/00001.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_withdraw/00002.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_withdraw/00003.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_withdraw/00004.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_withdraw/00005.png delete mode 100644 tests/snapshots/fantom_ftmx_nanox_withdraw/00006.png rename tests/src/eth/{ethx/deposit_legacy.test.js => kelp/claimETH.test.js} (52%) rename tests/src/eth/{ethx/withdraw_legacy.test.js => kelp/claimLST.test.js} (50%) create mode 100644 tests/src/eth/kelp/initiateWithdrawalETH.test.js create mode 100644 tests/src/eth/kelp/initiateWithdrawalLST.test.js delete mode 100644 tests/src/fantom/deposit.test.js delete mode 100644 tests/src/fantom/undelegate.test.js delete mode 100644 tests/src/fantom/withdraw.test.js diff --git a/Makefile b/Makefile index 116af20..5b85898 100755 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ APPNAME = "Staderlabs" # Application version APPVERSION_M = 1 -APPVERSION_N = 1 -APPVERSION_P = 3 +APPVERSION_N = 2 +APPVERSION_P = 0 include ethereum-plugin-sdk/standard_plugin.mk \ No newline at end of file diff --git a/PLUGIN_SPECIFICATION.md b/PLUGIN_SPECIFICATION.md index 06e9d0a..4d97f2b 100644 --- a/PLUGIN_SPECIFICATION.md +++ b/PLUGIN_SPECIFICATION.md @@ -34,19 +34,6 @@ Functions covered by above contract/s : |StakeManager | requestWithdraw(uint256 \_amountInBnbX) | `0x745400c9`| `_amountInBnbX` | |StakeManager | claimWithdraw(uint256 \_idx) | `0xb13acedd`| | -#### FTMx - -| Network | Contract Name | Smart Contract | -| ------- | ------------- | -------------------------------------------- | -| Fantom | FTMStaking | `0xb458bfc855ab504a8a327720fcef98886065529b` | - -Functions covered by above contract/s : -|Contract | Function | Selector | Displayed Parameters | -| --- | --- | --- | --- | -|FTMStaking | deposit() | `0xd0e30db0`| native_token_amount (ftm) | -|FTMStaking | undelegate(uint256 wrID, uint256 amountFTMx, uint256 minAmountFTM) | `0x4f864df4`| `amountFTMx` | -|FTMStaking | withdraw(uint256 wrID, uint256 bitmaskToSkip) | `0x441a3e70`| | - #### ETHx | Network | Contract Name | Smart Contract | @@ -60,17 +47,19 @@ Functions covered by above contract/s : |StaderStakePoolsManager | deposit(address \_receiver, string calldata \_referralId) | `0xb7482509`| `_receiver`, native_token_amount (eth) | |UserWithdrawalManager | requestWithdraw(uint256 \_ethXAmount, address \_owner, string calldata \_referralId) | `0x1f7ec122`| `_ethXAmount`, `_owner` | |UserWithdrawalManager | claim(uint256 \_requestId) | `0x379607f5`| | -|StaderStakePoolsManager | deposit(address \_receiver) | `0xf340fa01`| `_receiver`, native_token_amount (eth) | -|UserWithdrawalManager | requestWithdraw(uint256 \_ethXAmount, address \_owner) | `0xccc143b8`| `_ethXAmount`, `_owner` | #### KELP | Network | Contract Name | Smart Contract | | ------- | ------------- | -------------------------------------------- | | Ethereum | LRTDepositPool | `0x036676389e48133B63a802f8635AD39E752D375D` | +| Ethereum | LRTWithdrawalManager | `0x62de59c08eb5dae4b7e6f7a8cad3006d6965ec16` | + Functions covered by above contract/s : |Contract | Function | Selector | Displayed Parameters | | --- | --- | --- | --- | |LRTDepositPool | depositETH(uint256 minRSETHAmountExpected, string calldata referralId) | `0x72c51c0b`| native_token_amount (eth) | |LRTDepositPool | depositAsset(address asset, uint256 depositAmount, uint256 minRSETHAmountExpected, string calldata referralId) | `0xc3ae1766`| `asset`, `depositAmount` | +|LRTWithdrawalManager | initiateWithdrawal(address asset, uint256 rsETHUnstaked) | `0xc8393ba9`| `asset`, `rsETHUnstaked` | +|LRTWithdrawalManager | completeWithdrawal(address asset) | `0x6dbaf9ee`| `asset` | diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 6d4cb4f..0eaa25a 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 6d4cb4fdbb50c7b47869d472cff417b9afde58e3 +Subproject commit 0eaa25ad0ebaaeb99c52d034c79e4c4c92e191ae diff --git a/src/handle_finalize.c b/src/handle_finalize.c index e5b0fb3..db7acd5 100644 --- a/src/handle_finalize.c +++ b/src/handle_finalize.c @@ -5,17 +5,21 @@ void handle_finalize(ethPluginFinalize_t *msg) { switch (context->selectorIndex) { case ETHX_DEPOSIT: - case ETHX_DEPOSIT_LEGACY: case ETHX_REQUEST_WITHDRAW: - case ETHX_REQUEST_WITHDRAW_LEGACY: msg->numScreens = 2; break; case KELP_LST_DEPOSIT: + case KELP_CLAIM_WITHDRAW: msg->numScreens = 1; msg->tokenLookup1 = context->token_addr; break; + case KELP_INITIATE_WITHDRAW: + msg->numScreens = 2; + msg->tokenLookup1 = context->token_addr; + break; + default: msg->numScreens = 1; break; diff --git a/src/handle_init_contract.c b/src/handle_init_contract.c index 33ef1d7..5856a73 100644 --- a/src/handle_init_contract.c +++ b/src/handle_init_contract.c @@ -41,12 +41,10 @@ void handle_init_contract(ethPluginInitContract_t *msg) { // EDIT THIS: Adapt the `cases`, and set the `next_param` to be the first parameter you expect // to parse. switch (context->selectorIndex) { - case ETHX_DEPOSIT_LEGACY: case ETHX_DEPOSIT: context->next_param = ACCOUNT_ADDR; break; - case ETHX_REQUEST_WITHDRAW_LEGACY: case ETHX_REQUEST_WITHDRAW: context->next_param = UNSTAKE_AMOUNT; strlcpy(context->ticker, "ETHX", sizeof(context->ticker)); @@ -67,7 +65,6 @@ void handle_init_contract(ethPluginInitContract_t *msg) { break; case BSC_STAKEMANAGER_DEPOSIT: - // case FTM_DEPOSIT: // the selector matches with `BSC_STAKEMANAGER_DEPOSIT` context->next_param = UNEXPECTED_PARAMETER; break; @@ -79,12 +76,6 @@ void handle_init_contract(ethPluginInitContract_t *msg) { strlcpy(context->ticker, "MATICX", sizeof(context->ticker)); break; - case FTM_UNDELEGATE: - context->next_param = UNSTAKE_AMOUNT; - strlcpy(context->ticker, "FTMX", sizeof(context->ticker)); - context->skip_next_param = true; - break; - case ETH_MATICX_CLAIM_WITHDRAWAL: case POLYGON_CHILDPOOL_CLAIM_MATICX_SWAP: context->next_param = UNEXPECTED_PARAMETER; @@ -96,11 +87,6 @@ void handle_init_contract(ethPluginInitContract_t *msg) { strlcpy(context->ticker, "BNB", sizeof(context->ticker)); break; - case FTM_WITHDRAW: - context->next_param = UNEXPECTED_PARAMETER; - strlcpy(context->ticker, "FTM", sizeof(context->ticker)); - break; - case KELP_LST_DEPOSIT: context->next_param = TOKEN_ADDR; break; @@ -109,6 +95,16 @@ void handle_init_contract(ethPluginInitContract_t *msg) { context->next_param = UNEXPECTED_PARAMETER; break; + case KELP_INITIATE_WITHDRAW: + context->next_param = TOKEN_ADDR; + strlcpy(context->ticker, "ETH", sizeof(context->ticker)); + break; + + case KELP_CLAIM_WITHDRAW: + context->next_param = TOKEN_ADDR; + strlcpy(context->ticker, "ETH", sizeof(context->ticker)); + break; + // Keep this default: PRINTF("Missing selectorIndex: %d\n", context->selectorIndex); diff --git a/src/handle_provide_parameter.c b/src/handle_provide_parameter.c index 692d914..1fabd84 100644 --- a/src/handle_provide_parameter.c +++ b/src/handle_provide_parameter.c @@ -29,11 +29,6 @@ static void handle_stake(ethPluginProvideParameter_t *msg, context_t *context) { } static void handle_unstake(ethPluginProvideParameter_t *msg, context_t *context) { - if (context->skip_next_param) { // this is currently only useful in ftm_undelegate - context->skip_next_param = false; - return; - } - switch (context->next_param) { case UNSTAKE_AMOUNT: handle_amount_received(msg, context); @@ -110,6 +105,23 @@ static void handle_kelp_lst_deposit(ethPluginProvideParameter_t *msg, context_t break; } } + +static void handle_kelp_initiate_withdraw(ethPluginProvideParameter_t *msg, context_t *context) { + switch (context->next_param) { + case TOKEN_ADDR: + copy_address(context->token_addr, msg->parameter, sizeof(context->token_addr)); + context->next_param = UNSTAKE_AMOUNT; + break; + case UNSTAKE_AMOUNT: + handle_amount_received(msg, context); + context->next_param = UNEXPECTED_PARAMETER; + break; + default: + handle_unsupported_param(msg); + break; + } +} + void handle_provide_parameter(ethPluginProvideParameter_t *msg) { context_t *context = (context_t *) msg->pluginContext; // We use `%.*H`: it's a utility function to print bytes. You first give @@ -124,12 +136,10 @@ void handle_provide_parameter(ethPluginProvideParameter_t *msg) { // EDIT THIS: adapt the cases and the names of the functions. switch (context->selectorIndex) { - case ETHX_DEPOSIT_LEGACY: case ETHX_DEPOSIT: handle_ethx_deposit(msg, context); break; - case ETHX_REQUEST_WITHDRAW_LEGACY: case ETHX_REQUEST_WITHDRAW: handle_ethx_request_withdraw(msg, context); break; @@ -138,11 +148,10 @@ void handle_provide_parameter(ethPluginProvideParameter_t *msg) { handle_stake(msg, context); break; - case ETH_MATICX_REQUEST_WITHDRAW: - case POLYGON_CHILDPOOL_REQUEST_MATICX_SWAP: // case BSC_STAKEMANAGER_REQUEST_WITHDRAW: // the selector matches with `ETH_MATICX_REQUEST_WITHDRAW` - case FTM_UNDELEGATE: + case ETH_MATICX_REQUEST_WITHDRAW: + case POLYGON_CHILDPOOL_REQUEST_MATICX_SWAP: handle_unstake(msg, context); break; @@ -152,14 +161,20 @@ void handle_provide_parameter(ethPluginProvideParameter_t *msg) { case POLYGON_CHILDPOOL_SWAP_MATIC_FOR_MATICX_VIA_INSTANT_POOL: case POLYGON_CHILDPOOL_CLAIM_MATICX_SWAP: case BSC_STAKEMANAGER_DEPOSIT: - // case FTM_DEPOSIT: // the selector matches with `BSC_STAKEMANAGER_DEPOSIT` case BSC_STAKEMANAGER_CLAIM_WITHDRAW: - case FTM_WITHDRAW: context->next_param = UNEXPECTED_PARAMETER; break; case KELP_LST_DEPOSIT: handle_kelp_lst_deposit(msg, context); break; + case KELP_INITIATE_WITHDRAW: + handle_kelp_initiate_withdraw(msg, context); + break; + + case KELP_CLAIM_WITHDRAW: + copy_address(context->token_addr, msg->parameter, sizeof(context->token_addr)); + context->next_param = UNEXPECTED_PARAMETER; + break; default: PRINTF("Selector Index not supported: %d\n", context->selectorIndex); diff --git a/src/handle_provide_token.c b/src/handle_provide_token.c index 77658ed..3ff25ef 100644 --- a/src/handle_provide_token.c +++ b/src/handle_provide_token.c @@ -6,6 +6,8 @@ void handle_provide_token(ethPluginProvideInfo_t *msg) { context_t *context = (context_t *) msg->pluginContext; + // FOR KELP_INITIATE_WITHDRAW, assign the ticker if available, + // else it will be ETH, already set during init_contract if (msg->item1) { strlcpy(context->ticker, (char *) msg->item1->token.ticker, sizeof(context->ticker)); } diff --git a/src/handle_query_contract_id.c b/src/handle_query_contract_id.c index 3bcc0ef..af50989 100644 --- a/src/handle_query_contract_id.c +++ b/src/handle_query_contract_id.c @@ -13,21 +13,17 @@ void handle_query_contract_id(ethQueryContractID_t *msg) { // EDIT THIS: Adapt the cases by modifying the strings you pass to `strlcpy`. switch (context->selectorIndex) { case ETHX_DEPOSIT: - case ETHX_DEPOSIT_LEGACY: case ETH_MATICX_SUBMIT: case POLYGON_CHILDPOOL_SWAP_MATIC_FOR_MATICX_VIA_INSTANT_POOL: - // case FTM_DEPOSIT: // the selector matches with `BSC_STAKEMANAGER_DEPOSIT` case BSC_STAKEMANAGER_DEPOSIT: msgVersion = "Stake"; break; + // case BSC_STAKEMANAGER_REQUEST_WITHDRAW: + // the selector matches with `ETH_MATICX_REQUEST_WITHDRAW` case ETHX_REQUEST_WITHDRAW: - case ETHX_REQUEST_WITHDRAW_LEGACY: case ETH_MATICX_REQUEST_WITHDRAW: case POLYGON_CHILDPOOL_REQUEST_MATICX_SWAP: - // case BSC_STAKEMANAGER_REQUEST_WITHDRAW: - // the selector matches with `ETH_MATICX_REQUEST_WITHDRAW` - case FTM_UNDELEGATE: msgVersion = "Unstake"; break; @@ -35,7 +31,6 @@ void handle_query_contract_id(ethQueryContractID_t *msg) { case ETH_MATICX_CLAIM_WITHDRAWAL: case POLYGON_CHILDPOOL_CLAIM_MATICX_SWAP: case BSC_STAKEMANAGER_CLAIM_WITHDRAW: - case FTM_WITHDRAW: msgVersion = "Claim"; break; @@ -48,6 +43,16 @@ void handle_query_contract_id(ethQueryContractID_t *msg) { msgVersion = "Native Restake"; break; + case KELP_INITIATE_WITHDRAW: + strlcpy(msg->name, "Kelp", msg->nameLength); + msgVersion = "Unstake"; + break; + + case KELP_CLAIM_WITHDRAW: + strlcpy(msg->name, "Kelp", msg->nameLength); + msgVersion = "Claim"; + 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 b13605d..69bf438 100644 --- a/src/handle_query_contract_ui.c +++ b/src/handle_query_contract_ui.c @@ -108,6 +108,35 @@ static bool handle_ethx_request_withdraw(ethQueryContractUI_t *msg, context_t *c return ret; } +static bool handle_kelp_initiate_withdraw(ethQueryContractUI_t *msg, context_t *context) { + bool ret = false; + + memset(msg->title, 0, msg->titleLength); + memset(msg->msg, 0, msg->msgLength); + + switch (msg->screenIndex) { + case 0: + strlcpy(msg->title, "Unstake", msg->titleLength); + ret = amountToString(context->amount_received, + sizeof(context->amount_received), + WEI_TO_ETHER, + "RSETH", + msg->msg, + msg->msgLength); + break; + + case 1: + strlcpy(msg->title, "Asset Expected", msg->titleLength); + strlcpy(msg->msg, context->ticker, msg->msgLength); + ret = true; + break; + + default: + PRINTF("Received an invalid screenIndex\n"); + } + return ret; +} + void handle_query_contract_ui(ethQueryContractUI_t *msg) { context_t *context = (context_t *) msg->pluginContext; bool ret = false; @@ -125,11 +154,10 @@ void handle_query_contract_ui(ethQueryContractUI_t *msg) { ret = set_stake_ui(msg, context); break; - case ETH_MATICX_REQUEST_WITHDRAW: - case POLYGON_CHILDPOOL_REQUEST_MATICX_SWAP: // case BSC_STAKEMANAGER_REQUEST_WITHDRAW: // the selector matches with `ETH_MATICX_REQUEST_WITHDRAW` - case FTM_UNDELEGATE: + case ETH_MATICX_REQUEST_WITHDRAW: + case POLYGON_CHILDPOOL_REQUEST_MATICX_SWAP: ret = set_unstake_ui(msg, context); break; @@ -137,27 +165,28 @@ void handle_query_contract_ui(ethQueryContractUI_t *msg) { case ETH_MATICX_CLAIM_WITHDRAWAL: case POLYGON_CHILDPOOL_CLAIM_MATICX_SWAP: case BSC_STAKEMANAGER_CLAIM_WITHDRAW: - case FTM_WITHDRAW: + case KELP_CLAIM_WITHDRAW: ret = set_claim_ui(msg, context); break; case KELP_ETH_DEPOSIT: case POLYGON_CHILDPOOL_SWAP_MATIC_FOR_MATICX_VIA_INSTANT_POOL: - // case FTM_DEPOSIT: // the selector matches with `BSC_STAKEMANAGER_DEPOSIT` case BSC_STAKEMANAGER_DEPOSIT: ret = set_native_token_stake_ui(msg); break; case ETHX_DEPOSIT: - case ETHX_DEPOSIT_LEGACY: ret = handle_ethx_deposit(msg, context); break; case ETHX_REQUEST_WITHDRAW: - case ETHX_REQUEST_WITHDRAW_LEGACY: ret = handle_ethx_request_withdraw(msg, context); break; + case KELP_INITIATE_WITHDRAW: + ret = handle_kelp_initiate_withdraw(msg, context); + break; + default: PRINTF("Selector index: %d not supported\n", context->selectorIndex); } diff --git a/src/staderlabs_plugin.h b/src/staderlabs_plugin.h index eb6db57..adb2f0d 100644 --- a/src/staderlabs_plugin.h +++ b/src/staderlabs_plugin.h @@ -35,16 +35,13 @@ X(BSC_STAKEMANAGER_DEPOSIT, 0xd0e30db0) \ X(BSC_STAKEMANAGER_REQUEST_WITHDRAW, 0x745400c9) \ X(BSC_STAKEMANAGER_CLAIM_WITHDRAW, 0xb13acedd) \ - X(FTM_DEPOSIT, 0xd0e30db0) \ - X(FTM_UNDELEGATE, 0x4f864df4) \ - X(FTM_WITHDRAW, 0x441a3e70) \ X(ETHX_DEPOSIT, 0xb7482509) \ X(ETHX_REQUEST_WITHDRAW, 0x1f7ec122) \ X(ETHX_CLAIM, 0x379607f5) \ - X(ETHX_DEPOSIT_LEGACY, 0xf340fa01) \ - X(ETHX_REQUEST_WITHDRAW_LEGACY, 0xccc143b8) \ X(KELP_LST_DEPOSIT, 0xc3ae1766) \ - X(KELP_ETH_DEPOSIT, 0x72c51c0b) + X(KELP_ETH_DEPOSIT, 0x72c51c0b) \ + X(KELP_INITIATE_WITHDRAW, 0xc8393ba9) \ + X(KELP_CLAIM_WITHDRAW, 0x6dbaf9ee) // Xmacro helpers to define the enum and map // Do not modify ! diff --git a/tests/networks/ethereum/staderlabs/abis/0x62de59c08eb5dae4b7e6f7a8cad3006d6965ec16.json b/tests/networks/ethereum/staderlabs/abis/0x62de59c08eb5dae4b7e6f7a8cad3006d6965ec16.json new file mode 100644 index 0000000..116b4f0 --- /dev/null +++ b/tests/networks/ethereum/staderlabs/abis/0x62de59c08eb5dae4b7e6f7a8cad3006d6965ec16.json @@ -0,0 +1,774 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AmountMustBeGreaterThanZero", + "type": "error" + }, + { + "inputs": [], + "name": "AssetNotSupported", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assetPrice", + "type": "uint256" + } + ], + "name": "AssetPriceMustBeGreaterMinimum", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotLRTConfigAdmin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "role", + "type": "string" + } + ], + "name": "CallerNotLRTConfigAllowedRole", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotLRTConfigOperator", + "type": "error" + }, + { + "inputs": [], + "name": "EthTransferFailed", + "type": "error" + }, + { + "inputs": [], + "name": "ExceedAmountToWithdraw", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAmountToWithdraw", + "type": "error" + }, + { + "inputs": [], + "name": "NoPendingWithdrawals", + "type": "error" + }, + { + "inputs": [], + "name": "QueueEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "QueueFull", + "type": "error" + }, + { + "inputs": [], + "name": "QueueOutOfBounds", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rsEthPrice", + "type": "uint256" + } + ], + "name": "RsETHPriceMustBeGreaterMinimum", + "type": "error" + }, + { + "inputs": [], + "name": "StrategyNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TokenTransferFailed", + "type": "error" + }, + { + "inputs": [], + "name": "ValueAlreadyInUse", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalDelayNotPassed", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalDelayTooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalLocked", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddressNotAllowed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rsEthAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assetAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rsEThPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assetPrice", + "type": "uint256" + } + ], + "name": "AssetUnlocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "withdrawer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountBurned", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountReceived", + "type": "uint256" + } + ], + "name": "AssetWithdrawalFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "withdrawer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rsETHUnstaked", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "userNonce", + "type": "uint256" + } + ], + "name": "AssetWithdrawalQueued", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ethAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sharesAmount", + "type": "uint256" + } + ], + "name": "EtherReceived", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "minRsEthAmountToWithdraw", + "type": "uint256" + } + ], + "name": "MinAmountToWithdrawUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "lrtConfig", + "type": "address" + } + ], + "name": "UpdatedLRTConfig", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "withdrawalDelayBlocks", + "type": "uint256" + } + ], + "name": "WithdrawalDelayBlocksUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "assetsCommitted", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "completeWithdrawal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "getAvailableAssetAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "availableAssetAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "getExpectedAssetAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "underlyingToReceive", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + } + ], + "name": "getRequestId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "userIndex", + "type": "uint256" + } + ], + "name": "getUserWithdrawalRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "rsETHAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expectedAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "withdrawalStartBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userNonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "lrtConfigAddr", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rsETHUnstaked", + "type": "uint256" + } + ], + "name": "initiateWithdrawal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "lrtConfig", + "outputs": [ + { + "internalType": "contract ILRTConfig", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "minRsEthAmountToWithdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "nextLockedNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "requestNonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "nextUnusedNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "receiveFromLRTUnstakingVault", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minRsEthAmountToWithdraw_", + "type": "uint256" + } + ], + "name": "setMinRsEthAmountToWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawalDelayBlocks_", + "type": "uint256" + } + ], + "name": "setWithdrawalDelayBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "firstExcludedIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumRsEthPrice", + "type": "uint256" + } + ], + "name": "unlockQueue", + "outputs": [ + { + "internalType": "uint256", + "name": "rsETHBurned", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "assetAmountUnlocked", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "lrtConfigAddr", + "type": "address" + } + ], + "name": "updateLRTConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "userAssociatedNonces", + "outputs": [ + { + "internalType": "uint128", + "name": "_begin", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "_end", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "withdrawalDelayBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "requestId", + "type": "bytes32" + } + ], + "name": "withdrawalRequests", + "outputs": [ + { + "internalType": "uint256", + "name": "rsETHUnstaked", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expectedAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "withdrawalStartBlock", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/tests/networks/ethereum/staderlabs/b2c.json b/tests/networks/ethereum/staderlabs/b2c.json index ae25261..54c134a 100644 --- a/tests/networks/ethereum/staderlabs/b2c.json +++ b/tests/networks/ethereum/staderlabs/b2c.json @@ -26,11 +26,6 @@ "address": "0xcf5ea1b38380f6af39068375516daf40ed70d299", "contractName": "StaderStakePoolsManager", "selectors": { - "0xf340fa01": { - "erc20OfInterest": [], - "method": "deposit", - "plugin": "Staderlabs" - }, "0xb7482509": { "erc20OfInterest": [], "method": "deposit", @@ -42,11 +37,6 @@ "address": "0x9f0491b32dbce587c50c4c43ab303b06478193a7", "contractName": "UserWithdrawalManager", "selectors": { - "0xccc143b8": { - "erc20OfInterest": [], - "method": "requestWithdraw", - "plugin": "Staderlabs" - }, "0x1f7ec122": { "erc20OfInterest": [], "method": "requestWithdraw", @@ -76,6 +66,26 @@ "plugin": "Staderlabs" } } + }, + { + "address": "0x62de59c08eb5dae4b7e6f7a8cad3006d6965ec16", + "contractName": "LRTWithdrawalManager", + "selectors": { + "0xc8393ba9": { + "erc20OfInterest": [ + "asset" + ], + "method": "initiateWithdrawal", + "plugin": "Staderlabs" + }, + "0x6dbaf9ee": { + "erc20OfInterest": [ + "asset" + ], + "method": "completeWithdrawal", + "plugin": "Staderlabs" + } + } } ], "name": "Staderlabs" diff --git a/tests/networks/fantom/staderlabs/abis/0xb458bfc855ab504a8a327720fcef98886065529b.json b/tests/networks/fantom/staderlabs/abis/0xb458bfc855ab504a8a327720fcef98886065529b.json deleted file mode 100644 index d048cb5..0000000 --- a/tests/networks/fantom/staderlabs/abis/0xb458bfc855ab504a8a327720fcef98886065529b.json +++ /dev/null @@ -1,929 +0,0 @@ -[ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "low", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "high", - "type": "uint256" - } - ], - "name": "LogDepositLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "ftmxAmount", - "type": "uint256" - } - ], - "name": "LogDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "duration", - "type": "uint256" - } - ], - "name": "LogEpochDurationSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "vault", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lockupDuration", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "LogLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "newValue", - "type": "bool" - } - ], - "name": "LogMaintenancePausedUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "newValue", - "type": "bool" - } - ], - "name": "LogUndelegatePausedUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wrID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountFTMx", - "type": "uint256" - } - ], - "name": "LogUndelegated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "validatorPicker", - "type": "address" - } - ], - "name": "LogValidatorPickerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "vault", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "maturedIndex", - "type": "uint256" - } - ], - "name": "LogVaultHarvested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "vault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "LogVaultOwnerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "vault", - "type": "address" - } - ], - "name": "LogVaultWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "newValue", - "type": "bool" - } - ], - "name": "LogWithdrawPausedUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "delay", - "type": "uint256" - } - ], - "name": "LogWithdrawalDelaySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wrID", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "bitmaskToSkip", - "type": "uint256" - } - ], - "name": "LogWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "DECIMAL_UNIT", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FTMX", - "outputs": [ - { - "internalType": "contract IERC20Burnable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_LOCKUP_DURATION", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SFC", - "outputs": [ - { "internalType": "contract ISFC", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "UNLOCKED_REWARD_RATIO", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "name": "allWithdrawalRequests", - "outputs": [ - { "internalType": "uint256", "name": "requestTime", "type": "uint256" }, - { "internalType": "uint256", "name": "poolAmount", "type": "uint256" }, - { - "internalType": "uint256", - "name": "undelegateAmount", - "type": "uint256" - }, - { "internalType": "uint256", "name": "penalty", "type": "uint256" }, - { "internalType": "address", "name": "user", "type": "address" }, - { "internalType": "bool", "name": "isWithdrawn", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "amountFTMx", "type": "uint256" } - ], - "name": "calculatePenalty", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" }, - { "internalType": "uint256", "name": "", "type": "uint256" }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "claimRewardsAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "currentVaultCount", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentVaultPtr", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "epochDuration", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ftmPendingWithdrawal", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getExchangeRate", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "ftmAmount", "type": "uint256" }, - { "internalType": "bool", "name": "toIgnore", "type": "bool" } - ], - "name": "getFTMxAmountForFTM", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "vaultIndex", "type": "uint256" } - ], - "name": "getMaturedVault", - "outputs": [ - { "internalType": "address payable", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getMaturedVaultLength", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPoolBalance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "vaultIndex", "type": "uint256" } - ], - "name": "getVault", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "wrID", "type": "uint256" } - ], - "name": "getWithdrawalInfo", - "outputs": [ - { - "components": [ - { - "internalType": "address payable", - "name": "vault", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountToUnlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountToUndelegate", - "type": "uint256" - } - ], - "internalType": "struct FTMStaking.UndelegateInfo[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "vaultIndex", "type": "uint256" } - ], - "name": "harvestVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20Burnable", - "name": "_ftmx_", - "type": "address" - }, - { "internalType": "contract ISFC", "name": "_sfc_", "type": "address" }, - { - "internalType": "uint256", - "name": "maxVaultCount_", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "epochDuration_", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "withdrawalDelay_", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "lastKnownEpoch", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "lock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maintenancePaused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxDeposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxVaultCount", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minDeposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nextEligibleTimestamp", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "pickVaultsToUndelegate", - "outputs": [ - { - "components": [ - { - "internalType": "address payable", - "name": "vault", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountToUnlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountToUndelegate", - "type": "uint256" - } - ], - "internalType": "struct FTMStaking.UndelegateInfo[]", - "name": "", - "type": "tuple[]" - }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "protocolFeeBIPS", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "low", "type": "uint256" }, - { "internalType": "uint256", "name": "high", "type": "uint256" } - ], - "name": "setDepositLimits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "duration", "type": "uint256" } - ], - "name": "setEpochDuration", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bool", "name": "desiredValue", "type": "bool" } - ], - "name": "setMaintenancePaused", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "newFeeBIPS", "type": "uint256" } - ], - "name": "setProtocolFeeBIPS", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "newTreasury", "type": "address" } - ], - "name": "setTreasury", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bool", "name": "desiredValue", "type": "bool" } - ], - "name": "setUndelegatePaused", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IValidatorPicker", - "name": "picker", - "type": "address" - } - ], - "name": "setValidatorPicker", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bool", "name": "desiredValue", "type": "bool" } - ], - "name": "setWithdrawPaused", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "delay", "type": "uint256" } - ], - "name": "setWithdrawalDelay", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "totalFTMWorth", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "treasury", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "wrID", "type": "uint256" }, - { "internalType": "uint256", "name": "amountFTMx", "type": "uint256" }, - { "internalType": "uint256", "name": "minAmountFTM", "type": "uint256" } - ], - "name": "undelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "undelegatePaused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address payable", "name": "vault", "type": "address" }, - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "name": "updateVaultOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "validatorPicker", - "outputs": [ - { - "internalType": "contract IValidatorPicker", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "wrID", "type": "uint256" }, - { "internalType": "uint256", "name": "bitmaskToSkip", "type": "uint256" } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "maturedIndex", "type": "uint256" } - ], - "name": "withdrawMatured", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawPaused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawalDelay", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { "stateMutability": "payable", "type": "receive" } -] diff --git a/tests/networks/fantom/staderlabs/b2c.json b/tests/networks/fantom/staderlabs/b2c.json deleted file mode 100644 index 02451fb..0000000 --- a/tests/networks/fantom/staderlabs/b2c.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "chainId": 250, - "contracts": [ - { - "address": "0xb458bfc855ab504a8a327720fcef98886065529b", - "contractName": "FTMStaking", - "selectors": { - "0xd0e30db0": { - "erc20OfInterest": [], - "method": "deposit", - "plugin": "Staderlabs" - }, - "0x4f864df4": { - "erc20OfInterest": [], - "method": "undelegate", - "plugin": "Staderlabs" - }, - "0x441a3e70": { - "erc20OfInterest": [], - "method": "withdraw", - "plugin": "Staderlabs" - } - } - } - ], - "name": "Staderlabs" -} diff --git a/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00001.png b/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00001.png deleted file mode 100644 index 1d263aad4d46ef0bdb1c12568e0009e9ccaafbc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmV-w0hRuVP)m@xKZPP-0{(?kd%g!u7VKc53*zwCBk(KC6* zEITio%hy`B{0%_?C`l=qzUO6=p*bqew9SpFTXiW1%Gs2bJ0pvau5Wo)HtO9*XLBcF z2b2jbGtRDsrRUIW5$PXSf~sm$-I@&A8TGQvmixHJ;NiR;G)hjKM#K(KDt29dA|MS^$^TbzlX%p8vRJ>o?y{y}&U zG>LVDyZ~;f!mgKTaZ>Xr#MdqmdL_u>Tw0t|FbA{*dk6IBxn{j!$lUt<8 diff --git a/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00002.png b/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00002.png deleted file mode 100644 index 4c243430c16700de9a151a5c0cee78af361bc82a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmV;70dxL|P)0NB| zj2?hV@7!so!fF0K*YDOO`mL8}0hFSrpk6Ktc~eyO*a;%{3ef1MGm(3gbGW{8!2ncm zYB6YUdkIm_lzA>&gh|FfPnQ{{r+zamyKy@;_ zKMcXu@cv*BgGi8tBKddnB)oQR&iKZW#7{gi)ut%q#)(c*HjazR_E5#`>{=ba(+=DF zYRkpGtKnBM+>W8MP1)$RVPN*{(@NqFV(mbb@ie4x!cg}Gz_|cVEiF8dVraGVbCWoG zal)q2&JG1 zTDb_;uK;#Fc3pD$9N%D|ZE(%4XZ--6v;Z5sZ@IeoPJTA^Q#1H1J-epo2F}=o;b7D_ zq82LP(k98UPwB>vRP7$@?>_d*4Er@VARTRYjefbz0B8zt9Q~`oggT?YnH+;N$t-jx zpFuvD$MjgHpTm$0>_GntQzRuDBF9AP3pGG-hc&y9;OGJL9cnEVK}!WjstAp#wcDo4 zD@AEmtuY$ZS=B=4m+;&oZFerf8oe$?J*SNW2DqTJ+n_)ECEPwlEi2Jx6IO0795rD! zfmqThD`w2YL&NDD0BRpB$}1MQl3-WHA|Sn@zsriz7IyO(Vofb5Qa_1DzrybSv!Khp zeCB7f`~E!u70V(h^Heur7PE$@#-#p=Z%wExz>+tOxs|%w3d`*lNlFThuh7FHvXeD{ k&9S;YNs=T?E5~T3WNlagH?PM!Dsr6a+yK1YLOCzn?}u?Vbpipg{Sw z-SnP}6N#2__i1OhuU)mP%u!7@+*1CWZtw40i6$(R|1a<@GydQud2O&o^DTW=A-DTV z^q&FneRM;rig`hT^2sD7RzBzY(|-WOvXD2ry{b&`Y?WMw%SLuyEBIP^S~56N_R~I_ za6TBXT!@xZph}x212_C~V;8En9?+GF2=t-pY$u9<5f$T%b_v%P6!b6K_j|1|zM4>s2`bOikDT7MV){ z+jV!m;icF0Q-oGV%9yT)8vte{b%Ep!~nR)MyhRD4C$v=4IQj@ zcqCTagx!4-RuFRmO^@iytgws>EPWd#SpE%j|Fb4S>#%18K@bE%5S)W2n%`KPy#DSd P00000NkvXXu0mjfc2v~s diff --git a/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00005.png b/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00005.png deleted file mode 100644 index d00ffb987ac091a0c0367b1df5856e4ae2338ea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmV-!0g?WRP)@BhHN*e+ZcftDY!<>=0rWf7>wwg^&|g%CmrG2#9C{RZ`nKS}aPqCnm{ z-t|myEYUn(Z8d)Er>S<8VAZSj+Mm5ThwVDoAr)0G^AG0#H4tY^)L2073{Mgb;$n2M*B)WT+%Yr2qf` M07*qoM6N<$f*)I<(*OVf diff --git a/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00007.png b/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00007.png deleted file mode 100644 index 07b4b292bfb48f482e9e77fd4f1f41d703620693..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q}P)U8j`_(D3RAP9oss@!G?KOZTjbose4fwyM;81>sD^6iT&#`CA^JKplHVr^MsmpvM4@QOBQ$&y$T#MZQ;sx@P zn862bV=1NRSYDE6Vh@YI#{nxKQ?^|=Vd08tYFZW(+GZy_xNov^ zE!_83|3~&k9exZ!5j?>AX=fDlj-z>)$lt(2IGe$9n~cY*FqARjoH+}32Zwm3A@cR! zPrC;|)47884*|G3yuX+jgPp`Kw3Gi%X4z0F*lJ!=mBc5%$69QZY!7US6kn27S@iXI z6xOKph}d{ySxcg(E33m(L(1YaW*ziAk56AO1>0|FZN;XW@Yoy8`aA8o8W-M#n~j$C z1o*+kF01JKO7+&L8XxmPMn4RE(@n~5DmKPaQgsAF`&SLXs5J}Ey?X!cnx{?g!y>Ro zIDrftvjTibd(kBCD>Ztt4FFH;*CS8<(m$<87=uE$AZ%5$QhQ&9w?7DiAP9ost9b!} W?Nu-wrfEC?0000fc diff --git a/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00008.png b/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00008.png deleted file mode 100644 index 095bef49a6d473646060d540ebc791cc108177df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmV-j0iyniP)?1K0y!psXD zQ*&2AM>j6B(Nfv#!~hwP;BD7jux7^WYVIaeIr*A0@+iR*P_Q-UV@{{F!m+;Diqd#l3$Q3D(0iczz vza-S*oMX?n28EioS000000MxJo%_6-iE0xfO00000NkvXXu0mjft}U2Z diff --git a/tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00001.png b/tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00001.png deleted file mode 100644 index f8d7ed1c874775abf36c47a1f90864bc9a25ebb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmV-V0kHmwP)DS2S*fONYK&pUA-$0H#QVd z6P9M2TnkBLQ*RdOZ&!kfYEzsF0_}u)NqS2$>T~c?9?vyQPCSOi3ScUJHCwB?2u0(nx&MK)NEVh{YK9WEH8}Zi5n12`VzMC10ssKuu9Rp4boT9aF01Rl=Nj-r z1E5L#+N?aI4RBNaTfb$s>VuX-yN2R8&A#E!5{{a zpbJIv?qs$N9kx^C%bYI!O-St#&C{l3QRR{Rk3=h5t=jDUkFg^4s66xYSS~jSpCvjU zLnmS9n0o1#DKr4i?Bo6VLfpOuMS}nYGs7ET(^j7JH)K6?6_)@20001h2o9C`mo4eT R%dP+b002ovPDHLkV1fkDi6;O6 diff --git a/tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00003.png b/tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00003.png deleted file mode 100644 index 3d2dc64cad7f39b7f0deca6396c306555751e7b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmVyU=pRlT21vjCFdg}r|^2v>*qClhP1lE^|U z`E~L}T&{Lq`G)3JjN8w>?J#FPf(TR)s#CpSLUSPpDb$RDD@ebQqqS{nm4|}(h*5vs z2wUXSQ_UDOg5;zQ987VB66FvEdnN32POE%0^uI1lE1>!et*C@?APZ$`rd%ZpRHb04 zndQ=#gS*{#nYn1?az!(cO?Sy-unKylpyt?G!8#}cdeTvqF8iOU;erPYsU2cpfc;7A zN$iHd43Fq(DMB!$c1UXh$ixT1hIjN!Avqw;z83eyjr~bnFr9v1Kbjr6;E*5)f*=Tj a;KK_dqm{F>Y*`%u0000D)d z_D_8#*0DtMxZ68f?VqXaDt4>3D{hg0ZrA5`PNE4H+K z@(Wp#)LM*?WxAM%uhpj<*0srncz}VL6c8DSRlj zMV=f*@<@wd=y+`20#v0JO&AVrjoG&Wml!%yP}~1ZWC3z-ArAnUl#B|idmGLH)!=U* mTFXiW@IW9C2m}Iw74Qq7g>aFP)!(`R0000@BhHN*e+Zcqd$Ps7Ps?dSyXC)Q$#Gw0ssI2nDBgjekc8$Z%NT4)_|6t zuR4->dLk)aEj4cT-PF5C>eagOSLo@wz5jD3l5yeue_=?)mSYZjr|kA zj>l@3y87HJQ2tcq2W+V^_5moSh5TamuC6Ms$<3*reFh)p$7^^x5b+YugR$#aT%iVC z-Xt64^`2l?2d=@s_Oe&zaKFY1Qt|ey>Mzp-Ky&!R>dyuvHPm+oF^B}SP$b_XuS~J^ zs%vin%>pg*SDUoZlopXyV_GR~m<91)Fb7gMQc+4EH{Li$`m@06OE{MJaVHX#jxI1w zAWQ1ck+qHp0DZ=(1kxN$kBfZ*_C^-HQZL*Cz$&GfCFnqAJ+LXv8K~nVzDpSTnqQL z&3`Fg9Je1sPy{z{A6D*ydW`1VL|!8PgiDzC-zM`hYa7Z4_|NQxdw@fnIT87L_hIz} zXgXJLe-i|&)BVZh9IPZ)p_O?4!~9ULJR&9KR*ccZ^hTTd5TtL(cJM}xsn%(s(+nj`r@YB%P!%>gE>!h|i8COdti%BHo2y1moi(;>g4jRwN zdWI1I=6wM?(a2vk?zJy9B-Z6E_Fz;qjAF_J49TM4TFe*aA@t~X)Qw+)M&+;^Ytc0Q z=)P%tDf>3Gsg_tGc0eqdukVOVk|arzB)KpjnXai{==?d!00000NkvXXu0mjf{E^Tk diff --git a/tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00008.png b/tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00008.png deleted file mode 100644 index 7b71a4dc60e334fa58cceeeb897445fb5477d717..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmV-n0iOPeP)Dg zT2>%gCYS@{Rl3oYue)LuDvVrrmfDqlCmJPSJE>_tvc^e;ty4^p1&l==Ke@nuvM{wF zW6s=V=*Z4xR(eieb)tg`$k1z7ov>=f9BLjGlU;m86?v7)2{3Hk^Knn7wC54~?(=E= z0DrPm+wF%7?tL=1jq#-$kCf5 zU;^Y9n8;uaXiT+_^7T-UIm502000000AsQOQH8rvE7&ib00000NkvXXu0mjf-Zq$c diff --git a/tests/snapshots/ethereum_ethx_nanosp_legacy_request_withdraw_eth/00001.png b/tests/snapshots/ethereum_ethx_nanosp_legacy_request_withdraw_eth/00001.png deleted file mode 100644 index 911e699574f003f051507ab2294d156d9b1c1d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmV;f0a5;mP)O!pGnp(2>8Fl=n=R3`B1my0Sx@sLzr?1`j)vJRgt1S$|b>?o!d8tzw4(uji@DePk#C9 z82|vl=M!&)H+}*6d`$hv)*oUc_D^x!vfa=TgWqo5{nVgs_0%!n%bJ49^VS~R$cEiW zIjd|v0xaYEscP^hsZZXo0m{E$8du9RB6zEr=Uo@!dh_nCU}tg!SUqd1_WCK*OK4-` zvt5_}lXlX(Z8!NOW|GOi8zt3b-x+PN60^`sog~u+Q;}W(000000000000000003Z` YCvN;2;~T>V`~Uy|07*qoM6N<$f`RwRrvLx| diff --git a/tests/snapshots/ethereum_ethx_nanosp_legacy_request_withdraw_eth/00002.png b/tests/snapshots/ethereum_ethx_nanosp_legacy_request_withdraw_eth/00002.png deleted file mode 100644 index 30f0cec80e926fecaf34a62e53c032a360d726fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmV;$0XqJPP)m|+-6$chslZtwYWWFQ#A!z3jD007{>DW#NB^!22#IMDa* z3cTg;#*O&dT>)DuCFk54H|Jb~EkS>`Ui6WcMU>gc{lv?hI|6DS=y=Y##@pRK(yqnG zFh7nGuXN}LaEKqWzU2_jeZuthqz(|%j_8BFV}dQaapq~xoq|kl(zuZ^xua*7uiX`} z7eleGnv1Z=E*9aW8r@&gKl)4n006jfa~rDnaHB0?zr$-MJUVEWFOntq1=vaK*H-U+ zN4cCdt2eTvSIx)?jCm1Erqf3fJGow}TaEa2e$}3%2=RvX6f@0C793X$z!%jp09ytO= z|3hiFcVPWj=v}Ew?b000000000000000fN6dK_Vkx|4#+RY|QegSLhjaaLK-o)W! zaYQHWr0I52!4dx4l9-Skzf;H875q2xu}P!;@jeqL#tW5FEKQ8q+NhkBVwFb zXt?SkLZI_Q*QVOZf%@hM{S-qph1j{f;uB~BkW3oVI#JSfobHfDTHJrX7&wLti6A3w#khj93ubmU31P^+!2c6y!BO*wvoIIqP)%PNC^M{00000cYgd;mQs!%IcKS5 zSmv8@{CPzWU?v;cy%OnwQcBL5EZ+2gIUhD{w}^ea^m26J7Maueb=GGgpQO_|yCJ1+hAL$<{Ug$%RH#`B)^s_o zQoYzz`WAnym!wgd(S(ewQqt5vvcJq$O)1*-7Ny*3SiauNSoNg`m6)6G+%&y^-hZM- zzhvCyprx2VdJTVd8H)+*sBUT0UtT2}svibp%Z+qoKc)4;Exjalq{T9RCkM>hv+TLY zR(4u6URs~+!fIp}kcCxtz!*|2ddT{U#$ikjsP)7B4EslYiv{DK!eN2zs4kV-=Q4f# z000000H4hswV@SzLKHlUJt4X{A5s^DweL!wP-EM-;6rx6zHD{~Cm|u)f>`t{w>~be j4?++C000000N=+SSC0It5SR!F00000NkvXXu0mjfq00wE diff --git a/tests/snapshots/ethereum_ethx_nanosp_legacy_stake_eth/00001.png b/tests/snapshots/ethereum_ethx_nanosp_legacy_stake_eth/00001.png deleted file mode 100644 index fff06c78a834d6c4e2bced8907f2ff8a80352074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmV;Q0bu@#P)`A)An+(Cd;wGRXyFsSG+aKk5^W+(vbCyP`Np0*rxg?Evk&FBUJfl=~ z_&hj|kGEt^k8Z>Z*36cx*U<5o`Zq0Z2gvd~m#PlX!`EK>=GDQL%^0~iGB<|qfU1Y3 zYEciiRxWMNRLkAe_wS-p&=fB}EPYmF{z;KPL(T77`AP7ybNj~h`TaE0h}m-Y{1ouC?=}+(Bma z!x%%&=m%pC?nD;4Q)iHwgQXZ=0000000000000000001BnLqqS7Q=${?dAXg002ov JPDHLkV1k9Wz(W84 diff --git a/tests/snapshots/ethereum_ethx_nanosp_legacy_stake_eth/00002.png b/tests/snapshots/ethereum_ethx_nanosp_legacy_stake_eth/00002.png deleted file mode 100644 index 41f278ca76cb703370dce9ea69f5d64b0439df62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hnba4!+nDh2Vv{17Gk3-Tv@&|&(C;k{e0ojTb;Ud9G-xC?cYhDC{LfADECF}QFrNQr64slvJi=2 zk#oRS`#C=WMLJG@=DQr(@UN`RJGYLsA|rB21A;!on~vbTDhXSkegcheP}hfA_Z0Z zR$Z)fR=`L)D$?cnH8tH}ha)^7%@dH^v4-@?9X4IhP7N8P9T-bX>?2dlEv3Rf4@5@)?4UxA`tQxBVZ z62Oyi%-)`yTX`b0uDCus$eK{8Pk?oJvreibj$<6OQ&g5NaQekK^mzS; zdLqwH>gpKqD@%^t%GcJ-Oug|0Y@}A)tHG&EK$EiQtAq0L@m=5GOJUY~qM#i)B6aCh ztyLzVDZN;g)rKPi>RSLNhW-@P6u3N%T6!UP1MsEFR4Bzu#J<`MeD`6M?0Gm!2qA}(7zSC{&o&Zo_@t<)z7SuY3ntMtdd_)SW(ygaX zd|0%I-4kFvN0Wt4LrYH`>B&QG34{*;1}HWvy`~EN?QN`002ovPDHLkV1kg& BgQWlf diff --git a/tests/snapshots/ethereum_ethx_nanosp_legacy_stake_eth/00004.png b/tests/snapshots/ethereum_ethx_nanosp_legacy_stake_eth/00004.png deleted file mode 100644 index e4e5c5da7fa164aed1477b8109b07b03ffed3c3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 598 zcmV-c0;&CpP)#Z7V=3twZruy zYO0h{wOKp1a>T-R&=;QOf*oBDUlZwk_j~rJZHR4@1+}iG@?a?tIfs75Lf=go00000;4^WEhCVK;#wc`%x4tEe0gT>UjK1v*T#z#`fHTwp z+b-L3;ysZeF6JNo@j}p5GPJ)8LDkUyVqgPL;DtQFKI{osuPGX;8 zpvs6!$z1tj_shPwQSzC1)vd<7%Gj8vTj>c{FUjYKef2KEPQpCIKR4n(BLCU-gHJH- z(goFQwFeh0y}o2baaKkRit`r}ST9}Bq7^{q$1~AL$g|`p(ULGfJ~O#R>yV zxf-m#m^()(8&~YT#1e4=V##{>4_X2M0001h zVBGqq1e4(*MoZ9fTY^PH{~uve6BR5$$88B|0KNf;{|^X3JOl76gwS9Qa3;oIlv>2Q kt+;yt00000000jB0_$NrBee%$@&Et;07*qoM6N<$f+5!z8vpO!pGnp(2>8Fl=n=R3`B1my0Sx@sLzr?1`j)vJRgt1S$|b>?o!d8tzw4(uji@DePk#C9 z82|vl=M!&)H+}*6d`$hv)*oUc_D^x!vfa=TgWqo5{nVgs_0%!n%bJ49^VS~R$cEiW zIjd|v0xaYEscP^hsZZXo0m{E$8du9RB6zEr=Uo@!dh_nCU}tg!SUqd1_WCK*OK4-` zvt5_}lXlX(Z8!NOW|GOi8zt3b-x+PN60^`sog~u+Q;}W(000000000000000003Z` YCvN;2;~T>V`~Uy|07*qoM6N<$f`RwRrvLx| diff --git a/tests/snapshots/ethereum_ethx_nanox_legacy_request_withdraw_eth/00002.png b/tests/snapshots/ethereum_ethx_nanox_legacy_request_withdraw_eth/00002.png deleted file mode 100644 index 30f0cec80e926fecaf34a62e53c032a360d726fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmV;$0XqJPP)m|+-6$chslZtwYWWFQ#A!z3jD007{>DW#NB^!22#IMDa* z3cTg;#*O&dT>)DuCFk54H|Jb~EkS>`Ui6WcMU>gc{lv?hI|6DS=y=Y##@pRK(yqnG zFh7nGuXN}LaEKqWzU2_jeZuthqz(|%j_8BFV}dQaapq~xoq|kl(zuZ^xua*7uiX`} z7eleGnv1Z=E*9aW8r@&gKl)4n006jfa~rDnaHB0?zr$-MJUVEWFOntq1=vaK*H-U+ zN4cCdt2eTvSIx)?jCm1Erqf3fJGow}TaEa2e$}3%2=RvX6f@0C793X$z!%jp09ytO= z|3hiFcVPWj=v}Ew?b000000000000000fN6dK_Vkx|4#+RY|QegSLhjaaLK-o)W! zaYQHWr0I52!4dx4l9-Skzf;H875q2xu}P!;@jeqL#tW5FEKQ8q+NhkBVwFb zXt?SkLZI_Q*QVOZf%@hM{S-qph1j{f;uB~BkW3oVI#JSfobHfDTHJrX7&wLti6A3w#khj93ubmU31P^+!2c6y!BO*wvoIIqP)%PNC^M{00000cYgd;mQs!%IcKS5 zSmv8@{CPzWU?v;cy%OnwQcBL5EZ+2gIUhD{w}^ea^m26J7Maueb=GGgpQO_|yCJ1+hAL$<{Ug$%RH#`B)^s_o zQoYzz`WAnym!wgd(S(ewQqt5vvcJq$O)1*-7Ny*3SiauNSoNg`m6)6G+%&y^-hZM- zzhvCyprx2VdJTVd8H)+*sBUT0UtT2}svibp%Z+qoKc)4;Exjalq{T9RCkM>hv+TLY zR(4u6URs~+!fIp}kcCxtz!*|2ddT{U#$ikjsP)7B4EslYiv{DK!eN2zs4kV-=Q4f# z000000H4hswV@SzLKHlUJt4X{A5s^DweL!wP-EM-;6rx6zHD{~Cm|u)f>`t{w>~be j4?++C000000N=+SSC0It5SR!F00000NkvXXu0mjfq00wE diff --git a/tests/snapshots/ethereum_ethx_nanox_legacy_stake_eth/00001.png b/tests/snapshots/ethereum_ethx_nanox_legacy_stake_eth/00001.png deleted file mode 100644 index fff06c78a834d6c4e2bced8907f2ff8a80352074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmV;Q0bu@#P)`A)An+(Cd;wGRXyFsSG+aKk5^W+(vbCyP`Np0*rxg?Evk&FBUJfl=~ z_&hj|kGEt^k8Z>Z*36cx*U<5o`Zq0Z2gvd~m#PlX!`EK>=GDQL%^0~iGB<|qfU1Y3 zYEciiRxWMNRLkAe_wS-p&=fB}EPYmF{z;KPL(T77`AP7ybNj~h`TaE0h}m-Y{1ouC?=}+(Bma z!x%%&=m%pC?nD;4Q)iHwgQXZ=0000000000000000001BnLqqS7Q=${?dAXg002ov JPDHLkV1k9Wz(W84 diff --git a/tests/snapshots/ethereum_ethx_nanox_legacy_stake_eth/00002.png b/tests/snapshots/ethereum_ethx_nanox_legacy_stake_eth/00002.png deleted file mode 100644 index 41f278ca76cb703370dce9ea69f5d64b0439df62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hnba4!+nDh2Vv{17Gk3-Tv@&|&(C;k{e0ojTb;Ud9G-xC?cYhDC{LfADECF}QFrNQr64slvJi=2 zk#oRS`#C=WMLJG@=DQr(@UN`RJGYLsA|rB21A;!on~vbTDhXSkegcheP}hfA_Z0Z zR$Z)fR=`L)D$?cnH8tH}ha)^7%@dH^v4-@?9X4IhP7N8P9T-bX>?2dlEv3Rf4@5@)?4UxA`tQxBVZ z62Oyi%-)`yTX`b0uDCus$eK{8Pk?oJvreibj$<6OQ&g5NaQekK^mzS; zdLqwH>gpKqD@%^t%GcJ-Oug|0Y@}A)tHG&EK$EiQtAq0L@m=5GOJUY~qM#i)B6aCh ztyLzVDZN;g)rKPi>RSLNhW-@P6u3N%T6!UP1MsEFR4Bzu#J<`MeD`6M?0Gm!2qA}(7zSC{&o&Zo_@t<)z7SuY3ntMtdd_)SW(ygaX zd|0%I-4kFvN0Wt4LrYH`>B&QG34{*;1}HWvy`~EN?QN`002ovPDHLkV1kg& BgQWlf diff --git a/tests/snapshots/ethereum_ethx_nanox_legacy_stake_eth/00004.png b/tests/snapshots/ethereum_ethx_nanox_legacy_stake_eth/00004.png deleted file mode 100644 index e4e5c5da7fa164aed1477b8109b07b03ffed3c3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 598 zcmV-c0;&CpP)#Z7V=3twZruy zYO0h{wOKp1a>T-R&=;QOf*oBDUlZwk_j~rJZHR4@1+}iG@?a?tIfs75Lf=go00000;4^WEhCVK;#wc`%x4tEe0gT>UjK1v*T#z#`fHTwp z+b-L3;ysZeF6JNo@j}p5GPJ)8LDkUyVqgPL;DtQFKI{osuPGX;8 zpvs6!$z1tj_shPwQSzC1)vd<7%Gj8vTj>c{FUjYKef2KEPQpCIKR4n(BLCU-gHJH- z(goFQwFeh0y}o2baaKkRit`r}ST9}Bq7^{q$1~AL$g|`p(ULGfJ~O#R>yV zxf-m#m^()(8&~YT#1e4=V##{>4_X2M0001h zVBGqq1e4(*MoZ9fTY^PH{~uve6BR5$$88B|0KNf;{|^X3JOl76gwS9Qa3;oIlv>2Q kt+;yt00000000jB0_$NrBee%$@&Et;07*qoM6N<$f+5!z8vp!|*7@EMQS>HwZNYT5SH zLHyZ!bpX@G)o)w=>isw*zc{K>UfP@Bp%Bz1k`lD-eh%Q*_ZCkHvK;g!B}I85IRVB! z2jqB8fNAHTPsVr@f+2JXwixmhZel|YeIEEMF2e(ldmjEooCxuQPDVLcDSs70#`GVy zyKaBuW$%Vk1o;)WfU>~8hy~ZEvE|ts6{jKWOBr?o0&O+jGtrNZSwTXZ0MrG2imDlR wVjUrJ*a^t8%>%$C$o`)*El&{<5fNeY0oy`%TRwN&DgXcg07*qoM6N<$g5k)21ONa4 literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_eth_nanos/00002.png b/tests/snapshots/ethereum_kelp_claim_eth_nanos/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..48d0f868b7dbb5368dc8a50ec9b94fdf1f627c0a GIT binary patch literal 279 zcmV+y0qFjTP)OVB=lI#cMF=^68`WPAuO(Z9iIkcs|nDxoI&HzNm;s6vrmgPbbef~%YA&W}}W z2j#2O?nQ7&mz=$tMZ13}NqZ&y2ZUF`g^Rn&Jv{YRKMA;4I*U0#9wjIk2?*9t3DW*& d5dZ)HO*ZFMU6No<7G?kd002ovPDHLkV1kb?bejMG literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00006.png b/tests/snapshots/ethereum_kelp_claim_eth_nanos/00003.png similarity index 100% rename from tests/snapshots/ethereum_ethx_nanos_legacy_request_withdraw_eth/00006.png rename to tests/snapshots/ethereum_kelp_claim_eth_nanos/00003.png diff --git a/tests/snapshots/ethereum_kelp_claim_eth_nanos/00004.png b/tests/snapshots/ethereum_kelp_claim_eth_nanos/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..b66bc3ce4bd99a90be39e6a372676cfb38e6c443 GIT binary patch literal 465 zcmV;?0WSWDP)?20d}IAcsr&twwUA9AA)UV;=`TRygQdTTuPEjHJ~ z*WTOzQM{;+A5%~S4{#rLo`Ob<=Ep={BW}VaOx(B0cwBW1Wh~fd&LZ5wDb5%o|K5Gr zJph`{9o#{8-c4rNQ01^?eyQrYPg27_ZU=R`l*L1;-of6st+3!( z)|0C-3wkOhR){@e>r(3p!%uE;)tB%A-<$@@y#L@_kV)M=Js+pUIHy0qwH^Rt?)&oL zy9b~~{7Zl*gn1095!;ISR~WFkmAc^iDq9D@?0jn&dWq?fUBOIT_v!<{Su@}?TBnz( zyMlWF_~Khnd2-3KnmccSm;5oYnl8-DYs`TpNs=Tk|)I3XZv5F-0d6ypvo1St>!005YkrIqk^B_dirrJ6%h!U+YX z#tI^<1UVpmDlfY7c2{gdgPz;YO1ZJ`LZ<=PPHLHts!*x0bxH}UfVtrQiwo+f3Ns67 zOwC&bowV}18a0(qofsek7+H4B32SD|uI6qsm6PvKMxLed02FM^`Iyr=T62qi*Ln4B zz#n#MyZvy%UC^6;yPzw+q}#-_#{39#m>HmQ<*sdL!r1f0fzusyab`#4@$OUa0VwIr z;Qk;OR>S?9!5H)et58p3e~0;aAlJyj8&45hSc`e^5U_j0{1d*&@J9|0qHstVFayG( z&W+Q`AjDsS=%sy0000058(&O!N~wKVbW^=00001e3sJUA6io+SXJ}lInF1`4L`~Omn z141fFcUhe0JP0;SbJ%&MX5#MWK}R(jR^|D;4L$MsRPm12)7#%Roo)CW0CceT&IR`+ ztk+9juYYmRYu@xtuftkCvfM6nEvYK?wZBJK9Q0e`WL+qGud{*? e=s6_NFu#)7t86*fj72%_AYo5eKbLh*2~7YO6pn5H literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_eth_nanosp/00002.png b/tests/snapshots/ethereum_kelp_claim_eth_nanosp/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..62fd4e7582a9d6dff3a816a0088573cdfd98c524 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qr|pX978JRyuA^a*KEMU5McIJ zZRh`qMbm2+xJ_Yl4efsWcJF$VrIWISm2G?(7z%c-f5EWr>%HTW9*|^;0B|&6UxdzT@@uQz8#i%;RmD?ZnRA&Tu>^qHtpuLuUWmdj(sjsecUrU#%;P4(M4Z_%S0sWok=TMQyw!NW|0C&t;ucLK6TZb%V74 literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_eth_nanosp/00003.png b/tests/snapshots/ethereum_kelp_claim_eth_nanosp/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..e1452e9bb1d5be6014d5a96fdd5c1e9f34164c94 GIT binary patch literal 591 zcmV-V0H4$z8@5#|D5>T=tApigX0000mov-;*rj(9Gj8W?8 zmN_VAJ|Axd?qnmoXFMH{Qi?H>#T))E=fkGu7O`)aT8=KC(mago`lmnwOv?C zrIfNY^AAfoY-c&?18;M|iXo`p6X9I@l0Wh@L_#Tw?Ife~ec>{&I_JMNtpeJz3 zPIB_X-^zQC&H?&yVf-LHffbW+uVT5Au!J!Sy~V08*~S6JXwGKeRt6!+892Zh>VRdp zZ94H*WQYs>cYnPt5RDA$PlGWvtUnp}z!O9vPw*Y~q&9CuHdLvcsfR9ml(MxxIZcw; z#D@NYt-l>Fc%>SUhB72Il!~bCMxTb#kfdR^=9f%539p}*mo$9(Qo%VHSH51ZP}3`@ z>|sh5WvN9RvA!_`EtCz-Z_5T;?K-#w>%lLM04X5dC2}uUr!TKb?Kl5000000KlT?SM$iF z&x6ft?&yGjQWx}e&Jz4muk?;AJQ#(|bnfVY?L$z`St?gr;C}Qw!j0H09ewjnHvj+t d0002*1e3sJUA6io+SXJ}lInF1`4L`~Omn z141fFcUhe0JP0;SbJ%&MX5#MWK}R(jR^|D;4L$MsRPm12)7#%Roo)CW0CceT&IR`+ ztk+9juYYmRYu@xtuftkCvfM6nEvYK?wZBJK9Q0e`WL+qGud{*? e=s6_NFu#)7t86*fj72%_AYo5eKbLh*2~7YO6pn5H literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_eth_nanox/00002.png b/tests/snapshots/ethereum_kelp_claim_eth_nanox/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..62fd4e7582a9d6dff3a816a0088573cdfd98c524 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qr|pX978JRyuA^a*KEMU5McIJ zZRh`qMbm2+xJ_Yl4efsWcJF$VrIWISm2G?(7z%c-f5EWr>%HTW9*|^;0B|&6UxdzT@@uQz8#i%;RmD?ZnRA&Tu>^qHtpuLuUWmdj(sjsecUrU#%;P4(M4Z_%S0sWok=TMQyw!NW|0C&t;ucLK6TZb%V74 literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_eth_nanox/00003.png b/tests/snapshots/ethereum_kelp_claim_eth_nanox/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..e1452e9bb1d5be6014d5a96fdd5c1e9f34164c94 GIT binary patch literal 591 zcmV-V0H4$z8@5#|D5>T=tApigX0000mov-;*rj(9Gj8W?8 zmN_VAJ|Axd?qnmoXFMH{Qi?H>#T))E=fkGu7O`)aT8=KC(mago`lmnwOv?C zrIfNY^AAfoY-c&?18;M|iXo`p6X9I@l0Wh@L_#Tw?Ife~ec>{&I_JMNtpeJz3 zPIB_X-^zQC&H?&yVf-LHffbW+uVT5Au!J!Sy~V08*~S6JXwGKeRt6!+892Zh>VRdp zZ94H*WQYs>cYnPt5RDA$PlGWvtUnp}z!O9vPw*Y~q&9CuHdLvcsfR9ml(MxxIZcw; z#D@NYt-l>Fc%>SUhB72Il!~bCMxTb#kfdR^=9f%539p}*mo$9(Qo%VHSH51ZP}3`@ z>|sh5WvN9RvA!_`EtCz-Z_5T;?K-#w>%lLM04X5dC2}uUr!TKb?Kl5000000KlT?SM$iF z&x6ft?&yGjQWx}e&Jz4muk?;AJQ#(|bnfVY?L$z`St?gr;C}Qw!j0H09ewjnHvj+t d0002*!|*7@EMQS>HwZNYT5SH zLHyZ!bpX@G)o)w=>isw*zc{K>UfP@Bp%Bz1k`lD-eh%Q*_ZCkHvK;g!B}I85IRVB! z2jqB8fNAHTPsVr@f+2JXwixmhZel|YeIEEMF2e(ldmjEooCxuQPDVLcDSs70#`GVy zyKaBuW$%Vk1o;)WfU>~8hy~ZEvE|ts6{jKWOBr?o0&O+jGtrNZSwTXZ0MrG2imDlR wVjUrJ*a^t8%>%$C$o`)*El&{<5fNeY0oy`%TRwN&DgXcg07*qoM6N<$g5k)21ONa4 literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_lst_nanos/00002.png b/tests/snapshots/ethereum_kelp_claim_lst_nanos/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..c410454e687c398cabfeaba116aacd2817ff2a9c GIT binary patch literal 326 zcmV-M0lEH(P)*@z2ettYs%9}JZ11-#Nc^nASf0RX_HASrEPh%yrx1B4b2Bv4jy3nm2(9votyI}$<&A%u{O Y3&7}yXdw6rqW}N^07*qoM6N<$f~>BJ$^ZZW literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00006.png b/tests/snapshots/ethereum_kelp_claim_lst_nanos/00003.png similarity index 100% rename from tests/snapshots/ethereum_ethx_nanos_legacy_stake_eth/00006.png rename to tests/snapshots/ethereum_kelp_claim_lst_nanos/00003.png diff --git a/tests/snapshots/ethereum_kelp_claim_lst_nanos/00004.png b/tests/snapshots/ethereum_kelp_claim_lst_nanos/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..2129c85a8bb1804534368ff6de3e50e40dbc2f11 GIT binary patch literal 465 zcmV;?0WSWDP)g;V*QuIPfplVfM|v9s@)O#@I)>O3FWfl;A!iV3oSdy$?$yTE?3 zFnAziELSNymPU5W;^F0E9PkDta@vIx7QQh}P0Py!^AEexA5KAvtu-HOI=w9x`<%_S z@Ui#yza%fp<;N5h!2{fS-6YRE=qX|CKM zPwm^<0nmF7)A2QBSZ%$gJh2amg#+MMOMzu%>bKi6{pmfw>!oZ%A65;(GWT7n<)VQ; zms_VZokDfl-)GYebNv_)C!7<)K^r4}0mK@bE%5WM&SPy0t69{Pj400000NkvXX Hu0mjfprg?` literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_lst_nanos/00005.png b/tests/snapshots/ethereum_kelp_claim_lst_nanos/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..a40245609781b91cb6d0e9956de2a6aac43c1d27 GIT binary patch literal 348 zcmV-i0i*tjP)k|)I3c2FF#POyLX11IA&No-003ZCmRiE!m56BhSi zfj{ijcKP9gyP!95tDrl+q|3y#$9xHMm>HmI<*8+8LfiAjfy)DQappi|c=stf0Xdx+ z+;0TKYPkO}$U!7{3Pm!)dszJ>;KN?-ynBlN8Z}QdU&6D31Ozis0-FEtW->|w`gETL uNkF&mQ^igBs;E7Nbh`!s00000w9OBpp|?wZHBAfv00001e3sJUA6io+SXJ}lInF1`4L`~Omn z141fFcUhe0JP0;SbJ%&MX5#MWK}R(jR^|D;4L$MsRPm12)7#%Roo)CW0CceT&IR`+ ztk+9juYYmRYu@xtuftkCvfM6nEvYK?wZBJK9Q0e`WL+qGud{*? e=s6_NFu#)7t86*fj72%_AYo5eKbLh*2~7YO6pn5H literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_lst_nanosp/00002.png b/tests/snapshots/ethereum_kelp_claim_lst_nanosp/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..47010a71bfa483b15e54d988d23d4bdce9b8cc98 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hoba4!+nDh2#w9p|1p4P;Y zJDk7cg{nU`8aD3@s8Vh}_utlHYFO$dq1z@bKwS%VPyfy`ZRwO8>th+pmAgMpJjFQ6 z?w)W&fzFh}t#-ja2bTT(#qmGWTl1(y?vXxmpG&u^ncR=e|1iHN=$zxug_%D@4R(DD zYY-KC`gzyg3eF0Nqbw0`&uLZ5s<8tdr`=KJe0bipJ5jGo>>}!BS9Bk`xi0&Um-ULj zYsIHZZ~V0Fbeyi+=e>?@0ZE>*?F@5 zz(314|D`NX-!1b9s0#9QxHhSIPk`LywV9lsc3D{eyb|zpVREMOp7R#VkE~^z`J#NY xK-QxBl9nG_L_cj2OereRKEw_5E;6|DjQg71o?XSt*EfTNJzf1=);T3K0RXw)mz4kj literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_lst_nanosp/00003.png b/tests/snapshots/ethereum_kelp_claim_lst_nanosp/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..6b87502e476fda4b14782c06e522fb168d353888 GIT binary patch literal 575 zcmV-F0>J%=P)Q@-BVI#Bl))(FmITzo#8ck^M1jBsK&9000000L=NZpE9L%e26jD zEZsf_{n+#89l(=pqTq2| zrBX^+&HRU@AJJG&I^o+~uwn_~_e40?ek~vQ8sedJB^t@7eGc3bK#B=pxuK%e-C6SI zTJ0jU8|T2e1nDKdl^9XPhO%DuCoEWk%2Jc*xD|+>LtoM8`y&hh0002+oj7zuJ7_m> zN+a2M;j!`=YWslpc42%YZNQ4nxUXWlop23h7kZ0TU$RXCl+|49zO4*OkTXbtGc*Cq z-nQw)JCGqR;@|!2Z9!FJsBeZKHPkl-Iq(Ek$P@eyd&1?t(G6{!oZ&;nA~q6g*Kp&Y zXYsPj+1oGc%T}v0h9MfKn)s0ZV)5VMaK`eHCj zfSLMJsnw#97_@hUpNfZD8000004gZAQ-+$$h?S=pV N002ovPDHLkV1fjE31e3sJUA6io+SXJ}lInF1`4L`~Omn z141fFcUhe0JP0;SbJ%&MX5#MWK}R(jR^|D;4L$MsRPm12)7#%Roo)CW0CceT&IR`+ ztk+9juYYmRYu@xtuftkCvfM6nEvYK?wZBJK9Q0e`WL+qGud{*? e=s6_NFu#)7t86*fj72%_AYo5eKbLh*2~7YO6pn5H literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_lst_nanox/00002.png b/tests/snapshots/ethereum_kelp_claim_lst_nanox/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..47010a71bfa483b15e54d988d23d4bdce9b8cc98 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hoba4!+nDh2#w9p|1p4P;Y zJDk7cg{nU`8aD3@s8Vh}_utlHYFO$dq1z@bKwS%VPyfy`ZRwO8>th+pmAgMpJjFQ6 z?w)W&fzFh}t#-ja2bTT(#qmGWTl1(y?vXxmpG&u^ncR=e|1iHN=$zxug_%D@4R(DD zYY-KC`gzyg3eF0Nqbw0`&uLZ5s<8tdr`=KJe0bipJ5jGo>>}!BS9Bk`xi0&Um-ULj zYsIHZZ~V0Fbeyi+=e>?@0ZE>*?F@5 zz(314|D`NX-!1b9s0#9QxHhSIPk`LywV9lsc3D{eyb|zpVREMOp7R#VkE~^z`J#NY xK-QxBl9nG_L_cj2OereRKEw_5E;6|DjQg71o?XSt*EfTNJzf1=);T3K0RXw)mz4kj literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_claim_lst_nanox/00003.png b/tests/snapshots/ethereum_kelp_claim_lst_nanox/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..6b87502e476fda4b14782c06e522fb168d353888 GIT binary patch literal 575 zcmV-F0>J%=P)Q@-BVI#Bl))(FmITzo#8ck^M1jBsK&9000000L=NZpE9L%e26jD zEZsf_{n+#89l(=pqTq2| zrBX^+&HRU@AJJG&I^o+~uwn_~_e40?ek~vQ8sedJB^t@7eGc3bK#B=pxuK%e-C6SI zTJ0jU8|T2e1nDKdl^9XPhO%DuCoEWk%2Jc*xD|+>LtoM8`y&hh0002+oj7zuJ7_m> zN+a2M;j!`=YWslpc42%YZNQ4nxUXWlop23h7kZ0TU$RXCl+|49zO4*OkTXbtGc*Cq z-nQw)JCGqR;@|!2Z9!FJsBeZKHPkl-Iq(Ek$P@eyd&1?t(G6{!oZ&;nA~q6g*Kp&Y zXYsPj+1oGc%T}v0h9MfKn)s0ZV)5VMaK`eHCj zfSLMJsnw#97_@hUpNfZD8000004gZAQ-+$$h?S=pV N002ovPDHLkV1fjE34O1oUUbFwaxnol4iehM<{nj`tDyLsd} zlfaGu5AV;6=ZxTo!E6#bpjgxMK^<*-fXk?Q%P&<~e|kzC0i@IpLA6~q%BtGAXB;PD?|>Hd>&)yuonuH}xZna5 zHCt;yt+j=9jud$=n}k`!AJ};`C}n@Hhz@w_}}W;2F>fnS79z2~1u9scaqPnQ<2xorm~FRhDdI zVFHswP~NONOGk=h?rto~0f8?g-C3Rk>_4#1ypl3xQ|M5e*o;m&000000N_7)0s522 UXzYsE8vp0001h!MtBCHuE!!iCuSasI+Jm z+xiV&Z+Wza=U8)9vhHmcisVZ%i^WHHQ*5-j+Phs3#mp@P`jbB zn!Z&{m;r|f$j*59a_L0GB}ETyLjod)OFK~X_HR_S;gf>+07#-B#iaOyM!M{Kiz#@x zSl#yX;onJ)Hu~Bzg?2mh*aq7pi6wvOT7<<4DbdL*yR$69UGkE5d@SoqC&Be!$P2Ds zL;N9B6~>pYVTn-)BA3wpPhbva^5x=m}#p4T>jn# zcFDrT4{=P*uQEC{;^F17=e`|;ff3;F)j)hP#Sv4~Y^@$FzG+0BWpW2(Y)$!?(rInE z#J+xB+7Ixh`*DZ&l8{d`F2@Y|lAaZ;6 zNxK7bI!|!l2!hpc|643`8DIO;n1|>)tbbvDJl%UEv00000006AO7a23LaXAb4dH?_b M07*qoM6N<$f{Wdk?*IS* literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_unstake_eth_nanos/00005.png b/tests/snapshots/ethereum_kelp_unstake_eth_nanos/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..734e7b24cf49064055f42ecd807de0f4f1e415f0 GIT binary patch literal 466 zcmV;@0WJQCP)Jt-cA`g?g{)j*N!%L83tL3Am(^`YrH`!c- zueE>wOY!2k{TPBHxPkk$au;;Q=z5!2*QhVy5~jYl#dut`4Xv2)p4p4;8ywDLU?sTn|>DjVu-w!)LDllydzvVE=8o>*HYi0%y26g;Yk5y1}K^-xE&keRY37@2IW+6=`AHFU;30n!|rhJ*DGs-4EC)f(m zv8x8aU)J%vRdpP!!3*QVEM8cHvHcgZaCqtu4}N-?`pq(RRAp>pZ9f1Z)*fSzWM>FG z0QKVdI($AAm(*asWYr++ue!MegORpnzEdHG?2xu7-URzXjENtcOfkN6ReVPXKQm0rux1mE+;fZGE!ai$>h_wI+$3D9&_ zaNh}n)o{Nv$iYbP78=R)-{H7JP~24T$rKM+OXdELZ`}M7UKJ!@Fq0g}q~vxEKo4?u xBMm)JT%Iri%?{<;p&ZWm-ueds00000#25GJy(`4NL+1bh002ovPDHLkV1n(Inc@Hd literal 0 HcmV?d00001 diff --git a/tests/snapshots/fantom_ftmx_nanos_deposit/00005.png b/tests/snapshots/ethereum_kelp_unstake_eth_nanos/00007.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanos_deposit/00005.png rename to tests/snapshots/ethereum_kelp_unstake_eth_nanos/00007.png diff --git a/tests/snapshots/fantom_ftmx_nanos_deposit/00006.png b/tests/snapshots/ethereum_kelp_unstake_eth_nanos/00008.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanos_deposit/00006.png rename to tests/snapshots/ethereum_kelp_unstake_eth_nanos/00008.png diff --git a/tests/snapshots/fantom_ftmx_nanosp_deposit/00000.png b/tests/snapshots/ethereum_kelp_unstake_eth_nanosp/00000.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanosp_deposit/00000.png rename to tests/snapshots/ethereum_kelp_unstake_eth_nanosp/00000.png diff --git a/tests/snapshots/ethereum_kelp_unstake_eth_nanosp/00001.png b/tests/snapshots/ethereum_kelp_unstake_eth_nanosp/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7d10e935bf92b1e69786364aa8f954df991897 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9gba4!+nDh2#w9p|19*4k^ zJD%V6t9*OJZp`C+_%Qo~l6OB>iDvsMDDW}@HQjhu_=~M7sYj7T@Z|BIsrxr7pTBJW zL9+a#Y}MR-jhff*&1HAFuqkNYYO@W84{~I<#=ER~6|zz0`x!^3Nit7AEfD>6EuFV0 zpvlFhcR@Fw-IHXNDNCPq?}+xB+Ru`5_0X31R-N#9vuDqj>nk>6de_dvz|glUOs78P zz>RqBo%37Xw(mIqC9GxF(?~lBkK;e@N2Yh199t2Wcy;aXOInUkE5APZy7X4XGppq@ zqtD)C$|Z+nqLbyh0Hp2Y?)U7bmdKI;Vst0G)oNeE&srQjZTR^%kw!o z|M^_Lxs1%O-12s_h3xS6i1(Lbm|Av4;tKO-iJJ$`D4+9nRP&TF=kqyyQ~0T9EmN6c zNa6Zx__C_N>ul1nN3nTVYxvCP}gH)?{DZ|F*AWVMb-anaMKq z7!0Ls>jjVOTH>?y%(j?UZ@+Bv{CahlOUzZ-&O^Jb3!~Rhlbz<6=ihKoU)}ajP?3IN zr-tdXB&a;n2%YS=E@O*kTXhBZYpstQ&PZN#e;<)q-&S=baZ2!ow8r_1Ydh^%LO4FW_pOv+ znJ>zj&yRHn?qnmqM=T8xLh#;alh^&9&WBFZC8A$0r5stfM&|8&Pi{|xKXIpaO1)Gy z6+(#Gj1^Nk)x@;X2S#(jiY};J6YiY*EqlZ=nS@kSH8IPbZv!&}WX`0Vxvrt9-d5sw z%Xek1Pqu-v3(~8&%P>_X3YxX@KW;%6l)9S8z*5NM9Qv&$+HS%C0001=i9s}U06Bn@ zCT1ruepcQ?>l`2-7hXR|PhiDh+()t8Nw|eF3cbawPua!*N^f3`zO4){$QTS@Om2W> zmu)z)?#N4A^ndr^Z9!AXXnz_NRipjMU;|6=LYA-(TT-gGBN{5aoGG)i6#22+K&@&| z((tE7{&Ok!U-S#Fn#wHULnB$!L{*OP;!60CA8+Z)$USfICMV&s(7&e2(>Dt9f^nr! zP`(B%uUSetcd049lDkEqrel)~AiH(_XsdDrTE@F9FZXJ|)wEbW9DQk?%tvSYa9X$5 zcrAo|KHDlZ6Kiz?T++G(-sM7AYk<-@#u1iT)xt5Wm7?*#%6qYDVNKn!K6Ld800000 z+%9iJQ$1E_G<07ufHAwqf_lT8a3{*Y3&102ZZ|h#iDvsMDDW}@HQjhu_=~M7sYj7T@Z|BIsrxr7pTBJW zL9+a#Y}MR-jhff*&1HAFuqkNYYO@W84{~I<#=ER~6|zz0`x!^3Nit7AEfD>6EuFV0 zpvlFhcR@Fw-IHXNDNCPq?}+xB+Ru`5_0X31R-N#9vuDqj>nk>6de_dvz|glUOs78P zz>RqBo%37Xw(mIqC9GxF(?~lBkK;e@N2Yh199t2Wcy;aXOInUkE5APZy7X4XGppq@ zqtD)C$|Z+nqLbyh0Hp2Y?)U7bmdKI;Vst0G)oNeE&srQjZTR^%kw!o z|M^_Lxs1%O-12s_h3xS6i1(Lbm|Av4;tKO-iJJ$`D4+9nRP&TF=kqyyQ~0T9EmN6c zNa6Zx__C_N>ul1nN3nTVYxvCP}gH)?{DZ|F*AWVMb-anaMKq z7!0Ls>jjVOTH>?y%(j?UZ@+Bv{CahlOUzZ-&O^Jb3!~Rhlbz<6=ihKoU)}ajP?3IN zr-tdXB&a;n2%YS=E@O*kTXhBZYpstQ&PZN#e;<)q-&S=baZ2!ow8r_1Ydh^%LO4FW_pOv+ znJ>zj&yRHn?qnmqM=T8xLh#;alh^&9&WBFZC8A$0r5stfM&|8&Pi{|xKXIpaO1)Gy z6+(#Gj1^Nk)x@;X2S#(jiY};J6YiY*EqlZ=nS@kSH8IPbZv!&}WX`0Vxvrt9-d5sw z%Xek1Pqu-v3(~8&%P>_X3YxX@KW;%6l)9S8z*5NM9Qv&$+HS%C0001=i9s}U06Bn@ zCT1ruepcQ?>l`2-7hXR|PhiDh+()t8Nw|eF3cbawPua!*N^f3`zO4){$QTS@Om2W> zmu)z)?#N4A^ndr^Z9!AXXnz_NRipjMU;|6=LYA-(TT-gGBN{5aoGG)i6#22+K&@&| z((tE7{&Ok!U-S#Fn#wHULnB$!L{*OP;!60CA8+Z)$USfICMV&s(7&e2(>Dt9f^nr! zP`(B%uUSetcd049lDkEqrel)~AiH(_XsdDrTE@F9FZXJ|)wEbW9DQk?%tvSYa9X$5 zcrAo|KHDlZ6Kiz?T++G(-sM7AYk<-@#u1iT)xt5Wm7?*#%6qYDVNKn!K6Ld800000 z+%9iJQ$1E_G<07ufHAwqf_lT8a3{*Y3&102ZZ|h#4O1oUUbFwaxnol4iehM<{nj`tDyLsd} zlfaGu5AV;6=ZxTo!E6#bpjgxMK^<*-fXk?nzTGo`V3Q8#e002NF_nY=OvFChTq8<2|^b+e_ zqa9G8;?{#3>+$@4ezr%}zWu7(11M!2f~dV~l#kuUmVScBy#q$j<;?7s#yO-v*>D0* zHAi#M-ck!|oGJ2bn}k`!pV)XUId*`aKN&KGwj^8(;f0QsX)CEjxFY-eD1q?-o z`pf7@4fPj;Ifw*ND3VW+Yv=Wp!N-geqxviT80uOznkBDkB>7$L zu+g5=3qGTMl)8{!GNKk^%Smi|6J{vO%D&>(EzdX0Z^BAx%y0ssI20PM;G@36^6cgE~g00000NkvXXu0mjfVuP{X literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_unstake_lst_nanos/00003.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanos/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..49bbb9f69ecb640a096230bacf782a398e1e3408 GIT binary patch literal 375 zcmV--0f_#IP)n)Gg@EmKdO4hx-gd%xU&R?!jGn)+(%cO0i$Fg`TF9tjU#L@C1|3Rve6x430 ztfp^O6V`!21Y~F2eYtcZ;*z3=wjlwL!=)W4diysj_hFNQ_y9sHo{oFq6fzkaK=NGTVmoedI*MeP;*(8vN8&~`Fp~ZhH23c_1xu%(2rNAT5$;M?Spxt70000$D85`s V=Dix=m}#p4T>jn# zcFDrT4{=P*uQEC{;^F17=e`|;ff3;F)j)hP#Sv4~Y^@$FzG+0BWpW2(Y)$!?(rInE z#J+xB+7Ixh`*DZ&l8{d`F2@Y|lAaZ;6 zNxK7bI!|!l2!hpc|643`8DIO;n1|>)tbbvDJl%UEv00000006AO7a23LaXAb4dH?_b M07*qoM6N<$f{Wdk?*IS* literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_unstake_lst_nanos/00005.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanos/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..93dcb754ae4761a7390a415808844774291ecfaf GIT binary patch literal 463 zcmV;=0WkiFP)<}VU3ttB{&}U8(&K5BgrtZL z1*Vo2NR|oa3i4lSIF#?UoEA>Mr?$bH65dsp(CqZ z95a=7#CP0232qh^;tz8|;&YiY*%&R8A9|_FcCsxj@ zo5)9b8GHEyHKr2^A8SqQ9z)@*tme@PjTry{0000KyaC5yR{eSybSD4+002ovPDHLk FV1ngG&OQJD literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_unstake_lst_nanos/00006.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanos/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..2f38728c3d71e70b8bf8bdc8b6aa864c1f51b8e9 GIT binary patch literal 337 zcmV-X0j~auP)P;j zoVhBYV}sw-iJUweLn$330gNEQ3;^J;wq zf7q$*_9KLF!D!m;g6{ZYw~035K7={VO;EK`Ya43ld%gs4xq~6j9Ed#LeQG@bDV-VI z?*zwcxL+BJK})a-wd6U^Vg6Jw&<)d2_GU10uex~?o)ruLxXH-t&-lRomOR4!Vn5|8 jVE@tp00000fI;{Hc!RA=#U&>C00000NkvXXu0mjf_sWo) literal 0 HcmV?d00001 diff --git a/tests/snapshots/fantom_ftmx_nanos_undelegate/00005.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanos/00007.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanos_undelegate/00005.png rename to tests/snapshots/ethereum_kelp_unstake_lst_nanos/00007.png diff --git a/tests/snapshots/fantom_ftmx_nanos_undelegate/00006.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanos/00008.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanos_undelegate/00006.png rename to tests/snapshots/ethereum_kelp_unstake_lst_nanos/00008.png diff --git a/tests/snapshots/fantom_ftmx_nanosp_withdraw/00000.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00000.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanosp_withdraw/00000.png rename to tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00000.png diff --git a/tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00001.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7d10e935bf92b1e69786364aa8f954df991897 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9gba4!+nDh2#w9p|19*4k^ zJD%V6t9*OJZp`C+_%Qo~l6OB>iDvsMDDW}@HQjhu_=~M7sYj7T@Z|BIsrxr7pTBJW zL9+a#Y}MR-jhff*&1HAFuqkNYYO@W84{~I<#=ER~6|zz0`x!^3Nit7AEfD>6EuFV0 zpvlFhcR@Fw-IHXNDNCPq?}+xB+Ru`5_0X31R-N#9vuDqj>nk>6de_dvz|glUOs78P zz>RqBo%37Xw(mIqC9GxF(?~lBkK;e@N2Yh199t2Wcy;aXOInUkE5APZy7X4XGppq@ zqtD)C$|Z+nqLbyh0Hp2Y?)U7bmdKI;Vst0G)oNeE3U9v@VywNNcObfnz5Mw3 zw`?!GG%cTt-I-IYn2=yR-VS1z$QS+p{JllPXyHG3kBx7hVf z_OE|ExinohT_^DTwmYg`X4!U65ASQyovdE+|KZkY|6}IHac{a-a7ioZ9(Q{9qWLk_ z2|a6eDQvF1ouyQ{xpMaOvbWO56;DK2bWgZ&Y|Xq~EDAz1vYYR=FWAK;rugFQ4Y};D z(gja9F~{hy#g`y|Mp(=$#%20e7@tw?O698UD;9jH=c=!wI=EIMohPU9rZPTw{omTl$^|GmG=4u ziQakpIg(<7mPMsS>wPV&y1C?6R;<#xSA8ytcjxX{8-AMaw8HlKhI{(fws(Sx^a?vQ zq+c(Te*bryw%n@HDYuzkOzaeR|9gey>Qw)bz5I`|cxU-KmVUabdFh<}=fd}@ujBd` z-O2kCvvzS>|3YO+wXI1epK@}ZeJoo3+c|>g(~B7&lm7-5wVkhK@JnW7c<{gIx0KXD zyA#)1AIY4#c)|U>NoIX*)nem}s&ASnzAINwIB@==-jV8;r*A*Vv}3*df9;QxnlE&1 zDjC0+e~_NUU9f#)-u`uR9sT0Mm1k_;uaQn!wBJYhic7uWwFh1)3$;JW>=Sy(3Jg7D aaHxiPGn=c@nuFC*AYo5eKbLh*2~7axoWWNB literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00004.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..c206d4f3a4af354dfeacaeaa588f691972a3a985 GIT binary patch literal 567 zcmV-70?7S|P)|d#i|mO>J<%Q0D*u0001{^D|#%2;q3}-q%XH zWe&=j&&#?4PqLBSFDxApLh#-vgV+5Z&WBCoDWab)xg1%zM&{%EPS&TvpSaUHxm}8u z3L#w9yc))GiiNS#H~g9#Rt!P;oN(vZuleJulSqg~6$_KM^L=3EfFzjYBiB_d)vD!s zuEnlI`(z&&hakO)n;cU#qF`C8_~RA~L2;%}9myn-v8(j-lilKjL?8Cd#8*dzyp=yI~V>+7wJM!L}|S^1^y z?(-xE=#OgO_nnyOS3Uj9&{*p`mZ3FWt~3}0Ijw)q(93D+GXMYp0L1KZH?+uuIRhAC z>oW}Q1sQ__V2rKf&-P$_OFqN;pRf#dtV96-0001*_yd_X=>Vv3LQ?<$002ovPDHLk FV1n263DW=o literal 0 HcmV?d00001 diff --git a/tests/snapshots/fantom_ftmx_nanosp_withdraw/00005.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00005.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanosp_withdraw/00005.png rename to tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00005.png diff --git a/tests/snapshots/fantom_ftmx_nanosp_withdraw/00006.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00006.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanosp_withdraw/00006.png rename to tests/snapshots/ethereum_kelp_unstake_lst_nanosp/00006.png diff --git a/tests/snapshots/fantom_ftmx_nanox_deposit/00000.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanox/00000.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanox_deposit/00000.png rename to tests/snapshots/ethereum_kelp_unstake_lst_nanox/00000.png diff --git a/tests/snapshots/ethereum_kelp_unstake_lst_nanox/00001.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanox/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7d10e935bf92b1e69786364aa8f954df991897 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9gba4!+nDh2#w9p|19*4k^ zJD%V6t9*OJZp`C+_%Qo~l6OB>iDvsMDDW}@HQjhu_=~M7sYj7T@Z|BIsrxr7pTBJW zL9+a#Y}MR-jhff*&1HAFuqkNYYO@W84{~I<#=ER~6|zz0`x!^3Nit7AEfD>6EuFV0 zpvlFhcR@Fw-IHXNDNCPq?}+xB+Ru`5_0X31R-N#9vuDqj>nk>6de_dvz|glUOs78P zz>RqBo%37Xw(mIqC9GxF(?~lBkK;e@N2Yh199t2Wcy;aXOInUkE5APZy7X4XGppq@ zqtD)C$|Z+nqLbyh0Hp2Y?)U7bmdKI;Vst0G)oNeE3U9v@VywNNcObfnz5Mw3 zw`?!GG%cTt-I-IYn2=yR-VS1z$QS+p{JllPXyHG3kBx7hVf z_OE|ExinohT_^DTwmYg`X4!U65ASQyovdE+|KZkY|6}IHac{a-a7ioZ9(Q{9qWLk_ z2|a6eDQvF1ouyQ{xpMaOvbWO56;DK2bWgZ&Y|Xq~EDAz1vYYR=FWAK;rugFQ4Y};D z(gja9F~{hy#g`y|Mp(=$#%20e7@tw?O698UD;9jH=c=!wI=EIMohPU9rZPTw{omTl$^|GmG=4u ziQakpIg(<7mPMsS>wPV&y1C?6R;<#xSA8ytcjxX{8-AMaw8HlKhI{(fws(Sx^a?vQ zq+c(Te*bryw%n@HDYuzkOzaeR|9gey>Qw)bz5I`|cxU-KmVUabdFh<}=fd}@ujBd` z-O2kCvvzS>|3YO+wXI1epK@}ZeJoo3+c|>g(~B7&lm7-5wVkhK@JnW7c<{gIx0KXD zyA#)1AIY4#c)|U>NoIX*)nem}s&ASnzAINwIB@==-jV8;r*A*Vv}3*df9;QxnlE&1 zDjC0+e~_NUU9f#)-u`uR9sT0Mm1k_;uaQn!wBJYhic7uWwFh1)3$;JW>=Sy(3Jg7D aaHxiPGn=c@nuFC*AYo5eKbLh*2~7axoWWNB literal 0 HcmV?d00001 diff --git a/tests/snapshots/ethereum_kelp_unstake_lst_nanox/00004.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanox/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..c206d4f3a4af354dfeacaeaa588f691972a3a985 GIT binary patch literal 567 zcmV-70?7S|P)|d#i|mO>J<%Q0D*u0001{^D|#%2;q3}-q%XH zWe&=j&&#?4PqLBSFDxApLh#-vgV+5Z&WBCoDWab)xg1%zM&{%EPS&TvpSaUHxm}8u z3L#w9yc))GiiNS#H~g9#Rt!P;oN(vZuleJulSqg~6$_KM^L=3EfFzjYBiB_d)vD!s zuEnlI`(z&&hakO)n;cU#qF`C8_~RA~L2;%}9myn-v8(j-lilKjL?8Cd#8*dzyp=yI~V>+7wJM!L}|S^1^y z?(-xE=#OgO_nnyOS3Uj9&{*p`mZ3FWt~3}0Ijw)q(93D+GXMYp0L1KZH?+uuIRhAC z>oW}Q1sQ__V2rKf&-P$_OFqN;pRf#dtV96-0001*_yd_X=>Vv3LQ?<$002ovPDHLk FV1n263DW=o literal 0 HcmV?d00001 diff --git a/tests/snapshots/fantom_ftmx_nanox_deposit/00005.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanox/00005.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanox_deposit/00005.png rename to tests/snapshots/ethereum_kelp_unstake_lst_nanox/00005.png diff --git a/tests/snapshots/fantom_ftmx_nanox_deposit/00006.png b/tests/snapshots/ethereum_kelp_unstake_lst_nanox/00006.png similarity index 100% rename from tests/snapshots/fantom_ftmx_nanox_deposit/00006.png rename to tests/snapshots/ethereum_kelp_unstake_lst_nanox/00006.png diff --git a/tests/snapshots/fantom_ftmx_nanos_deposit/00001.png b/tests/snapshots/fantom_ftmx_nanos_deposit/00001.png deleted file mode 100644 index f8d7ed1c874775abf36c47a1f90864bc9a25ebb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmV-V0kHmwP)DS2S*fONYK&pUA-$0H#QVd z6P9M2TnkBLQ*RdOZ&!kfYEzsF0_}u)NqS2$>T~c?9?vyQPCSOi3ScUJHCwB?UtP)!Juvc z-@+y`T~r+4n8)k`{F?51aF62>q*VO2Iw`cl2y+RCN}qV_$P4ucAc_q2hrvh<^#_9( z%mh_vCZ8gcY3SgYVi$7y7BBU~dWWoc&J!m^?nbtf=jaq@cO`Mnu<}Db?0&CK*jI9y zh!cReI-N6eF-Uf4Y`1}mt!ZNaJtA%qZO#<7jx;(Pb2Sd03X0)faohhp|e-;nwm|w>jqc`grY=kkGGVy&JLUgfS_2JAM#TD z0jMHV{b6LJruu`S4=mv$-~WL<*aI^RB@ljuB+V%;P?y#~3a^JgL37=aF7CW(b3m2p#Y){QCzLl8?!->;)auau<_FoSSrjXWO|= zBHJ<5oQ=)23m@xKZPP-0{(?kd%g!u7VKc53*zwCBk(KC6* zEITio%hy`B{0%_?C`l=qzUO6=p*bqew9SpFTXiW1%Gs2bJ0pvau5Wo)HtO9*XLBcF z2b2jbGtRDsrRUIW5$PXSf~sm$-I@&A8TGQvmixHJ;NiR;G)hjKM#K(KDt29dA|MS^$^TbzlX%p8vRJ>o?y{y}&U zG>LVDyZ~;f!mgKTaZ>Xr#MdqmdL_u>Tw0t|FbA{*dk6IBxn{j!$lUt<8 diff --git a/tests/snapshots/fantom_ftmx_nanos_undelegate/00002.png b/tests/snapshots/fantom_ftmx_nanos_undelegate/00002.png deleted file mode 100644 index f6ce4ea7a742163530c6983ad4980c0e8a42f737..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1e0P)_R@_KY)$*f&6f9%m-^D912;=7t-P zt*Pxnc}pcsIg;nOZ4hQ2zoGJ2V%z{belqG1T7qzLxEDHCq^s~F>PdMB2j+$K2cQ}m z)*psoYFK|T*n^qC3(e%;$cym0RdU9*vrfio;z%c@wH+p})x^F@Nm8}tY0CcO*hxe4 zx+e3;_sx=cN;ihix$ed|t%>m=W>D@;#E+&1#3)5j?{x8!=G)^xuyne-46%6EZTmal zfaX3_oT4tYiS=jyP(wX+Km0MEJQ(iSuKOPUf4Y`1}mt!ZNaJtA%qZO#<7jx;(Pb2Sd03X0)faohhp|e-;nwm|w>jqc`grY=kkGGVy&JLUgfS_2JAM#TD z0jMHV{b6LJruu`S4=mv$-~WL<*aI^RB@ljuB+V%;P?y#~3a^JgL37=aF7CW(b3m2p#Y){QCzLl8?!->;)auau<_FoSSrjXWO|= zBHJ<5oQ=)23K?4J2QqX3 zXn7ePqhBDwvA-|J28LIrjF%tX0z{3v6!_gF&(SYH)S*7TN;1RxW-%}TLH9_+sttDO z-T32w&rL(!1@Vr`jm5G(8dd=Ruu#)JAN?l#rFLU`oQ(r?$33AC7s0}pw!fi~(9k^# zU9aci?pXN=I7A<-f!Mw2untnw9MivqZYw}c5&)gweYhbTnv#2#t$0X2wST7_1F;LR zw?>Da2SkSfG>qWq1mej-6nW@2l+Z=0om5jdB%3o3Qx19_LNUlTqF4R_1Iaj%@^2O= z@;n%h1N>H$2;%-~Dvx1!0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4o Uje8$F8UO$Q07*qoM6N<$g5rpv%m4rY diff --git a/tests/snapshots/fantom_ftmx_nanos_withdraw/00001.png b/tests/snapshots/fantom_ftmx_nanos_withdraw/00001.png deleted file mode 100644 index 9a2b3d0e3967e6f3cf3a2a0c40a655ad6583faa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmV-a0jvIrP)S|Nn!1a1UL&S{S1)0tZJf46$ zU}?nZwb0D$TFoQ;{ZdeqZJMD)p`B7M&1z+ixep%3`-Mh`iOcYK0)&juMk}jJZIr`S zs0R^?aIn|p+4vzZ)HmR($WY%5Mrx>U41C}TvXCbu)nVE<9jDF7GsK^K!}hC3x&ajd zx}gHXXAy04mPSG|6zC(1A+`eqOf100000U{+qsm8TK!bXZCN0000yOaI^ diff --git a/tests/snapshots/fantom_ftmx_nanos_withdraw/00002.png b/tests/snapshots/fantom_ftmx_nanos_withdraw/00002.png deleted file mode 100644 index dbfd11e154e1957b690cf3ab5a49f357b7761e01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmV+&0pk9NP);f1h&E}fWy>(TPge?GSpm)8zC-6X-F?W?)unUmo zHa7roLEH1wc!cIGPtJb@<0M|DKR`ERraw$0YNkIJYv75ykf-mEOQRd@?dEV>=;Iw} zkzsoBb&ET|c+d6L<)OVkJ#C(+g28?h{sXxRpm(PriyinVLaR^zvj|dv>!Hgc2vVn9 jTTnnO01*)p5jpq(M}A?D_KO~300000NkvXXu0mjf$e(*z diff --git a/tests/snapshots/fantom_ftmx_nanos_withdraw/00003.png b/tests/snapshots/fantom_ftmx_nanos_withdraw/00003.png deleted file mode 100644 index 6ac0cce0a35a5c0ff2bc18a4022ca26a56636f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmV-Q0k!^#P)Uf4Y`1}mt!ZNaJtA%qZO#<7jx;(Pb2Sd03X0)faohhp|e-;nwm|w>jqc`grY=kkGGVy&JLUgfS_2JAM#TD z0jMHV{b6LJruu`S4=mv$-~WL<*aI^RB@ljuB+V%;P?y#~3a^JgL37=aF7CW(b3m2p#Y){QCzLl8?!->;)auau<_FoSSrjXWO|= zBHJ<5oQ=)23j~f|{k#}B z4)Di%0(GQh%XXzDG$sKK-Q2JkKR-`QsiPFD-4d_!i{fwH;J|_aEL%ZYNu#B0FJ7G| z;=_VQWOA9;dQ4Y9)LpKCV=ri`X({49JagUwO3&5UdSK)wEJxPN%9wG}45n;lzK(aC zKtbL$y*-#9uSql`7 zENOEh^0jsFWbV&<+yj5)WEX_aERLO-`${sQhD#B5ZCio#Fr4qHlr^7X|9DL69eFa= z#kf#}$Pcl(QEE=tNl8Pt$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL07*qo IM6N<$g02I(Gynhq diff --git a/tests/snapshots/fantom_ftmx_nanos_withdraw/00006.png b/tests/snapshots/fantom_ftmx_nanos_withdraw/00006.png deleted file mode 100644 index ce795f34e8569e986af689fded3b59c9a8af2961..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA diff --git a/tests/snapshots/fantom_ftmx_nanosp_deposit/00001.png b/tests/snapshots/fantom_ftmx_nanosp_deposit/00001.png deleted file mode 100644 index fff06c78a834d6c4e2bced8907f2ff8a80352074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmV;Q0bu@#P)`A)An+(Cd;wGRXyFsSG+aKk5^W+(vbCyP`Np0*rxg?Evk&FBUJfl=~ z_&hj|kGEt^k8Z>Z*36cx*U<5o`Zq0Z2gvd~m#PlX!`EK>=GDQL%^0~iGB<|qfU1Y3 zYEciiRxWMNRLkAe_wS-p&=fB}EPYmF{z;KPL(T77`AP7ybNj~h`TaE0h}m-Y{1ouC?=}+(Bma z!x%%&=m%pC?nD;4Q)iHwgQXZ=0000000000000000001BnLqqS7Q=${?dAXg002ov JPDHLkV1k9Wz(W84 diff --git a/tests/snapshots/fantom_ftmx_nanosp_deposit/00002.png b/tests/snapshots/fantom_ftmx_nanosp_deposit/00002.png deleted file mode 100644 index c9c70b140ae31522995c8ed53e7202600693335a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-!ba4!+nDh2#AYZcrPebCi zH){9(d+a?eccw#=wKF*C%l~;i!N;Q(o(KYIYOAg+KcJ@cvm$cZKW{7lzQ>R6GCE71 z@@&4XoWwN6Myg2a)????*9Q`$G#`mfabDJRqwlNPg;g7E`jj7WoH)OuW5&mzjb`sB zbS)GPKEkpjjZezI_Hmy0mya^}@A>BFe9B4Yie;V@>K!WR=XxQOlQXV`k%3{}$x6v6 zJ&p2mk!|Ad@>piZr|9MO|8HA)H7+%DcgLG;Pgb9)zUEg}zS{hur2Laip$&8AX3Z|i z{d74)@_fB<-kC7R$L|}Lt1qyBQ7Lf7;_4M2W7fM<{TwE2Js7zyHF>K0d8>JSQz!rb zUHl?>&O)h_MfN>{S&Qr?EI%C4dD3b1rt<^H=g46CPo`52kJ;bX)-47Jd%F6$taD0e F0stu>njruH diff --git a/tests/snapshots/fantom_ftmx_nanosp_deposit/00003.png b/tests/snapshots/fantom_ftmx_nanosp_deposit/00003.png deleted file mode 100644 index f248f9b447ab7a447a424b4ad40eaf99282876b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_WIba4!+nDh2#E?<)YPs78k zJtyDQFS&PA{z%%J?#x3`4{PflD)nu-dq4@KN$2~ASrMVzo2N{wz0(&Sci@!d?0Nex zpAQZ_eRJxbJ^BtITlEgxT+>wj9no`o--Or6C$nm1uh6Txzf_=*HNr(_irCyQioa7% zxTw7fo~7Jvsh%LPc&6?0okqt3xBa;~{o$c{?pKBTZPz{A&nntDucvyW=F{eQ(TZa8 z=#%!0rrcipxSuwE-mh?3vUI;B&^33uqRqDi*s$Jv5+9*pZ{PO+_vh+6VJ_=GM)u2? zIey;!O5Y(R;>6>===Hqj_0!fnXfFs~bzMw@aj)8~t;T{ICCjy+a%JpO_+k|K`=|7l z2j6cre~7Ez$bOO6=wkdb!K_95B`iN2(R=bz;lz^%AuZxS8JAF~!6VC#ONQ|+Vyy0~^A34pJ$oz8Aar(h$V&3l0_<1wpDV*8Sd8uYf zL{c`>FXnNogZV=je4BwCTaaE8;hg)edZeEzBIKc}gT-C@8n_jpXeN5*hDN5|eM-7+ z^{(RS#x-zmLGvkot1#6hb~5YLf5L_>C~q~%g{4r$Ir3W_^!+0Y008it7M_Oc6UyqD zrQU+JHl>}->P(Q~NOh;?wL`u^>*Za);}1td_aH&vx^~eD`1yvsW5>g|eHcvqEeha! z8sls2QN%ay@{MP}+5*gfle7qY>-2M{p<8k3e&q_-wgu}Yl0K@wb!{Zv@$UhBgY+(a z-@>7pWU_Cjl4`PVj2d{N3watOnHnrbdI10c000000000000000fMxyx2P!Dd4QS~~ P00000NkvXXu0mjfdHKQt diff --git a/tests/snapshots/fantom_ftmx_nanosp_undelegate/00001.png b/tests/snapshots/fantom_ftmx_nanosp_undelegate/00001.png deleted file mode 100644 index 911e699574f003f051507ab2294d156d9b1c1d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmV;f0a5;mP)O!pGnp(2>8Fl=n=R3`B1my0Sx@sLzr?1`j)vJRgt1S$|b>?o!d8tzw4(uji@DePk#C9 z82|vl=M!&)H+}*6d`$hv)*oUc_D^x!vfa=TgWqo5{nVgs_0%!n%bJ49^VS~R$cEiW zIjd|v0xaYEscP^hsZZXo0m{E$8du9RB6zEr=Uo@!dh_nCU}tg!SUqd1_WCK*OK4-` zvt5_}lXlX(Z8!NOW|GOi8zt3b-x+PN60^`sog~u+Q;}W(000000000000000003Z` YCvN;2;~T>V`~Uy|07*qoM6N<$f`RwRrvLx| diff --git a/tests/snapshots/fantom_ftmx_nanosp_undelegate/00002.png b/tests/snapshots/fantom_ftmx_nanosp_undelegate/00002.png deleted file mode 100644 index ed970e3d472b48b4e0052c24413ef030e79ee265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_89ba4!+nDh3gXVDP_9*4k5 zr+iEPE5Fo>3|OeanR1KM+4}$5I}$b=(Fs94e@JP;_EUgw~bn&u+0nvt}e;ds_H3^;|7;k^GM$!IMu@^J9ayot=I0&&}0) zE-lP=IAC+4F8n~t@0KrL{bUm^^}TG~mCUBR+wil<^JNQ`O)|+d@p*WA^XcP2!};6N zVsiNoE!!#CGMT%|X377Twv0fh99omPV!q(9VwcMX*Ug`v)nA|X`O2(|Y~eRn|2Y^+P!$X(wX)f%5USlI>IaBmf9bCeSP(+oommRexBFR znSWpwOV*;t(>f?139OVn-wj9no`o--Or6C$nm1uh6Txzf_=*HNr(_irCyQioa7% zxTw7fo~7Jvsh%LPc&6?0okqt3xBa;~{o$c{?pKBTZPz{A&nntDucvyW=F{eQ(TZa8 z=#%!0rrcipxSuwE-mh?3vUI;B&^33uqRqDi*s$Jv5+9*pZ{PO+_vh+6VJ_=GM)u2? zIey;!O5Y(R;>6>===Hqj_0!fnXfFs~bzMw@aj)8~t;T{ICCjy+a%JpO_+k|K`=|7l z2j6cre~7Ez$bOO6=wkdb!K_95B`iN2(R=bz;lz^%AuZxS8JAF~!6VC#ONQ|+Vyy0~^A34pJ$oz8Aar(h$V&3l0_<1wpDV*8Sd8uYf zL{c`>FXnNogZV=je4BwCTaaE8;hg)edZeEzBIKc}gT-C@8n_jpXeN5*hDN5|eM-7+ z^{(RS#x-zmLGvkot1#6hb~5YLf5L_>C~q~%g{4r$Ir3W_^!+0Y008it7M_Oc6UyqD zrQU+JHl>}->P(Q~NOh;?wL`u^>*Za);}1td_aH&vx^~eD`1yvsW5>g|eHcvqEeha! z8sls2QN%ay@{MP}+5*gfle7qY>-2M{p<8k3e&q_-wgu}Yl0K@wb!{Zv@$UhBgY+(a z-@>7pWU_Cjl4`PVj2d{N3watOnHnrbdI10c000000000000000fMxyx2P!Dd4QS~~ P00000NkvXXu0mjfdHKQt diff --git a/tests/snapshots/fantom_ftmx_nanosp_withdraw/00001.png b/tests/snapshots/fantom_ftmx_nanosp_withdraw/00001.png deleted file mode 100644 index b9c50034da66e53c2e7b74933fa58499a453b04b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crk;P);FAD7*PnIk`e#_01)mKd9$3e93RK=#c)>&ILUX|oyrDp(gkb9CBTr`AZe)04_)pSp20b1sl+6;G4teanVcAklOk%^DCLl~7xq+ZU$4?@xCback}tKK%0x z007{*vLYpo;Hc+%2Ho$vaLL2Wvuro?itcW{4wKCsbE@3_+sf7nXlQIJnX~SH?>_FD zfNeW;)YhAEZNa-{lWd)Ue>2P*Yy$Rav#j0j=TNGACT*_sz_)A99aTG--Vft+HN78< z9IV7Dv=Z;(mFQjo000000000000000003Z`AD}Js(pt?f5&!@I07*qoM6N<$f(m`T A+yDRo diff --git a/tests/snapshots/fantom_ftmx_nanosp_withdraw/00002.png b/tests/snapshots/fantom_ftmx_nanosp_withdraw/00002.png deleted file mode 100644 index ddc7638e0f64d6fad1b6572a1d801318481c5811..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*QolW2978JRyuBINcSu2iE#cZ5 z-yQ!a?&#+4W!W7eoy>jt?>_aQY^Q${1D9(uG8}kW=a#=<{gj~Vmd~qFBlGv9K5n!8 z+jr05czR%4cb#D}<{-h@jF8pZ@m+FT5}}B@h&^Vb%DhUzn$~vAC}pT^0?yihj2IXVUdppB_ zsaHsD`r?1NGwPRmaP!2Hg%fM|`&HtAK86B|GqMj?R0+zOZMy&x@pScbS?83{1OOOt BgNgtE diff --git a/tests/snapshots/fantom_ftmx_nanosp_withdraw/00003.png b/tests/snapshots/fantom_ftmx_nanosp_withdraw/00003.png deleted file mode 100644 index f248f9b447ab7a447a424b4ad40eaf99282876b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_WIba4!+nDh2#E?<)YPs78k zJtyDQFS&PA{z%%J?#x3`4{PflD)nu-dq4@KN$2~ASrMVzo2N{wz0(&Sci@!d?0Nex zpAQZ_eRJxbJ^BtITlEgxT+>wj9no`o--Or6C$nm1uh6Txzf_=*HNr(_irCyQioa7% zxTw7fo~7Jvsh%LPc&6?0okqt3xBa;~{o$c{?pKBTZPz{A&nntDucvyW=F{eQ(TZa8 z=#%!0rrcipxSuwE-mh?3vUI;B&^33uqRqDi*s$Jv5+9*pZ{PO+_vh+6VJ_=GM)u2? zIey;!O5Y(R;>6>===Hqj_0!fnXfFs~bzMw@aj)8~t;T{ICCjy+a%JpO_+k|K`=|7l z2j6cre~7Ez$bOO6=wkdb!K_95B`iN2(R=bz;lz^%AuZxS8JAF~!6VC#ONQ|+Vyy0~^A34pJ$oz8Aar(h$V&3l0_<1wpDV*8Sd8uYf zL{c`>FXnNogZV=je4BwCTaaE8;hg)edZeEzBIKc}gT-C@8n_jpXeN5*hDN5|eM-7+ z^{(RS#x-zmLGvkot1#6hb~5YLf5L_>C~q~%g{4r$Ir3W_^!+0Y008it7M_Oc6UyqD zrQU+JHl>}->P(Q~NOh;?wL`u^>*Za);}1td_aH&vx^~eD`1yvsW5>g|eHcvqEeha! z8sls2QN%ay@{MP}+5*gfle7qY>-2M{p<8k3e&q_-wgu}Yl0K@wb!{Zv@$UhBgY+(a z-@>7pWU_Cjl4`PVj2d{N3watOnHnrbdI10c000000000000000fMxyx2P!Dd4QS~~ P00000NkvXXu0mjfdHKQt diff --git a/tests/snapshots/fantom_ftmx_nanox_deposit/00001.png b/tests/snapshots/fantom_ftmx_nanox_deposit/00001.png deleted file mode 100644 index fff06c78a834d6c4e2bced8907f2ff8a80352074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmV;Q0bu@#P)`A)An+(Cd;wGRXyFsSG+aKk5^W+(vbCyP`Np0*rxg?Evk&FBUJfl=~ z_&hj|kGEt^k8Z>Z*36cx*U<5o`Zq0Z2gvd~m#PlX!`EK>=GDQL%^0~iGB<|qfU1Y3 zYEciiRxWMNRLkAe_wS-p&=fB}EPYmF{z;KPL(T77`AP7ybNj~h`TaE0h}m-Y{1ouC?=}+(Bma z!x%%&=m%pC?nD;4Q)iHwgQXZ=0000000000000000001BnLqqS7Q=${?dAXg002ov JPDHLkV1k9Wz(W84 diff --git a/tests/snapshots/fantom_ftmx_nanox_deposit/00002.png b/tests/snapshots/fantom_ftmx_nanox_deposit/00002.png deleted file mode 100644 index c9c70b140ae31522995c8ed53e7202600693335a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-!ba4!+nDh2#AYZcrPebCi zH){9(d+a?eccw#=wKF*C%l~;i!N;Q(o(KYIYOAg+KcJ@cvm$cZKW{7lzQ>R6GCE71 z@@&4XoWwN6Myg2a)????*9Q`$G#`mfabDJRqwlNPg;g7E`jj7WoH)OuW5&mzjb`sB zbS)GPKEkpjjZezI_Hmy0mya^}@A>BFe9B4Yie;V@>K!WR=XxQOlQXV`k%3{}$x6v6 zJ&p2mk!|Ad@>piZr|9MO|8HA)H7+%DcgLG;Pgb9)zUEg}zS{hur2Laip$&8AX3Z|i z{d74)@_fB<-kC7R$L|}Lt1qyBQ7Lf7;_4M2W7fM<{TwE2Js7zyHF>K0d8>JSQz!rb zUHl?>&O)h_MfN>{S&Qr?EI%C4dD3b1rt<^H=g46CPo`52kJ;bX)-47Jd%F6$taD0e F0stu>njruH diff --git a/tests/snapshots/fantom_ftmx_nanox_deposit/00003.png b/tests/snapshots/fantom_ftmx_nanox_deposit/00003.png deleted file mode 100644 index f248f9b447ab7a447a424b4ad40eaf99282876b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_WIba4!+nDh2#E?<)YPs78k zJtyDQFS&PA{z%%J?#x3`4{PflD)nu-dq4@KN$2~ASrMVzo2N{wz0(&Sci@!d?0Nex zpAQZ_eRJxbJ^BtITlEgxT+>wj9no`o--Or6C$nm1uh6Txzf_=*HNr(_irCyQioa7% zxTw7fo~7Jvsh%LPc&6?0okqt3xBa;~{o$c{?pKBTZPz{A&nntDucvyW=F{eQ(TZa8 z=#%!0rrcipxSuwE-mh?3vUI;B&^33uqRqDi*s$Jv5+9*pZ{PO+_vh+6VJ_=GM)u2? zIey;!O5Y(R;>6>===Hqj_0!fnXfFs~bzMw@aj)8~t;T{ICCjy+a%JpO_+k|K`=|7l z2j6cre~7Ez$bOO6=wkdb!K_95B`iN2(R=bz;lz^%AuZxS8JAF~!6VC#ONQ|+Vyy0~^A34pJ$oz8Aar(h$V&3l0_<1wpDV*8Sd8uYf zL{c`>FXnNogZV=je4BwCTaaE8;hg)edZeEzBIKc}gT-C@8n_jpXeN5*hDN5|eM-7+ z^{(RS#x-zmLGvkot1#6hb~5YLf5L_>C~q~%g{4r$Ir3W_^!+0Y008it7M_Oc6UyqD zrQU+JHl>}->P(Q~NOh;?wL`u^>*Za);}1td_aH&vx^~eD`1yvsW5>g|eHcvqEeha! z8sls2QN%ay@{MP}+5*gfle7qY>-2M{p<8k3e&q_-wgu}Yl0K@wb!{Zv@$UhBgY+(a z-@>7pWU_Cjl4`PVj2d{N3watOnHnrbdI10c000000000000000fMxyx2P!Dd4QS~~ P00000NkvXXu0mjfdHKQt diff --git a/tests/snapshots/fantom_ftmx_nanox_undelegate/00000.png b/tests/snapshots/fantom_ftmx_nanox_undelegate/00000.png deleted file mode 100644 index 487ea10fcfeb2f3e6b79239459672251d49addd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*O!pGnp(2>8Fl=n=R3`B1my0Sx@sLzr?1`j)vJRgt1S$|b>?o!d8tzw4(uji@DePk#C9 z82|vl=M!&)H+}*6d`$hv)*oUc_D^x!vfa=TgWqo5{nVgs_0%!n%bJ49^VS~R$cEiW zIjd|v0xaYEscP^hsZZXo0m{E$8du9RB6zEr=Uo@!dh_nCU}tg!SUqd1_WCK*OK4-` zvt5_}lXlX(Z8!NOW|GOi8zt3b-x+PN60^`sog~u+Q;}W(000000000000000003Z` YCvN;2;~T>V`~Uy|07*qoM6N<$f`RwRrvLx| diff --git a/tests/snapshots/fantom_ftmx_nanox_undelegate/00002.png b/tests/snapshots/fantom_ftmx_nanox_undelegate/00002.png deleted file mode 100644 index ed970e3d472b48b4e0052c24413ef030e79ee265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_89ba4!+nDh3gXVDP_9*4k5 zr+iEPE5Fo>3|OeanR1KM+4}$5I}$b=(Fs94e@JP;_EUgw~bn&u+0nvt}e;ds_H3^;|7;k^GM$!IMu@^J9ayot=I0&&}0) zE-lP=IAC+4F8n~t@0KrL{bUm^^}TG~mCUBR+wil<^JNQ`O)|+d@p*WA^XcP2!};6N zVsiNoE!!#CGMT%|X377Twv0fh99omPV!q(9VwcMX*Ug`v)nA|X`O2(|Y~eRn|2Y^+P!$X(wX)f%5USlI>IaBmf9bCeSP(+oommRexBFR znSWpwOV*;t(>f?139OVn-wj9no`o--Or6C$nm1uh6Txzf_=*HNr(_irCyQioa7% zxTw7fo~7Jvsh%LPc&6?0okqt3xBa;~{o$c{?pKBTZPz{A&nntDucvyW=F{eQ(TZa8 z=#%!0rrcipxSuwE-mh?3vUI;B&^33uqRqDi*s$Jv5+9*pZ{PO+_vh+6VJ_=GM)u2? zIey;!O5Y(R;>6>===Hqj_0!fnXfFs~bzMw@aj)8~t;T{ICCjy+a%JpO_+k|K`=|7l z2j6cre~7Ez$bOO6=wkdb!K_95B`iN2(R=bz;lz^%AuZxS8JAF~!6VC#ONQ|+Vyy0~^A34pJ$oz8Aar(h$V&3l0_<1wpDV*8Sd8uYf zL{c`>FXnNogZV=je4BwCTaaE8;hg)edZeEzBIKc}gT-C@8n_jpXeN5*hDN5|eM-7+ z^{(RS#x-zmLGvkot1#6hb~5YLf5L_>C~q~%g{4r$Ir3W_^!+0Y008it7M_Oc6UyqD zrQU+JHl>}->P(Q~NOh;?wL`u^>*Za);}1td_aH&vx^~eD`1yvsW5>g|eHcvqEeha! z8sls2QN%ay@{MP}+5*gfle7qY>-2M{p<8k3e&q_-wgu}Yl0K@wb!{Zv@$UhBgY+(a z-@>7pWU_Cjl4`PVj2d{N3watOnHnrbdI10c000000000000000fMxyx2P!Dd4QS~~ P00000NkvXXu0mjfdHKQt diff --git a/tests/snapshots/fantom_ftmx_nanox_undelegate/00005.png b/tests/snapshots/fantom_ftmx_nanox_undelegate/00005.png deleted file mode 100644 index 570ce28d53e82ac396ba25c370110058f3a638f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ diff --git a/tests/snapshots/fantom_ftmx_nanox_withdraw/00000.png b/tests/snapshots/fantom_ftmx_nanox_withdraw/00000.png deleted file mode 100644 index 487ea10fcfeb2f3e6b79239459672251d49addd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*;FAD7*PnIk`e#_01)mKd9$3e93RK=#c)>&ILUX|oyrDp(gkb9CBTr`AZe)04_)pSp20b1sl+6;G4teanVcAklOk%^DCLl~7xq+ZU$4?@xCback}tKK%0x z007{*vLYpo;Hc+%2Ho$vaLL2Wvuro?itcW{4wKCsbE@3_+sf7nXlQIJnX~SH?>_FD zfNeW;)YhAEZNa-{lWd)Ue>2P*Yy$Rav#j0j=TNGACT*_sz_)A99aTG--Vft+HN78< z9IV7Dv=Z;(mFQjo000000000000000003Z`AD}Js(pt?f5&!@I07*qoM6N<$f(m`T A+yDRo diff --git a/tests/snapshots/fantom_ftmx_nanox_withdraw/00002.png b/tests/snapshots/fantom_ftmx_nanox_withdraw/00002.png deleted file mode 100644 index ddc7638e0f64d6fad1b6572a1d801318481c5811..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*QolW2978JRyuBINcSu2iE#cZ5 z-yQ!a?&#+4W!W7eoy>jt?>_aQY^Q${1D9(uG8}kW=a#=<{gj~Vmd~qFBlGv9K5n!8 z+jr05czR%4cb#D}<{-h@jF8pZ@m+FT5}}B@h&^Vb%DhUzn$~vAC}pT^0?yihj2IXVUdppB_ zsaHsD`r?1NGwPRmaP!2Hg%fM|`&HtAK86B|GqMj?R0+zOZMy&x@pScbS?83{1OOOt BgNgtE diff --git a/tests/snapshots/fantom_ftmx_nanox_withdraw/00003.png b/tests/snapshots/fantom_ftmx_nanox_withdraw/00003.png deleted file mode 100644 index f248f9b447ab7a447a424b4ad40eaf99282876b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_WIba4!+nDh2#E?<)YPs78k zJtyDQFS&PA{z%%J?#x3`4{PflD)nu-dq4@KN$2~ASrMVzo2N{wz0(&Sci@!d?0Nex zpAQZ_eRJxbJ^BtITlEgxT+>wj9no`o--Or6C$nm1uh6Txzf_=*HNr(_irCyQioa7% zxTw7fo~7Jvsh%LPc&6?0okqt3xBa;~{o$c{?pKBTZPz{A&nntDucvyW=F{eQ(TZa8 z=#%!0rrcipxSuwE-mh?3vUI;B&^33uqRqDi*s$Jv5+9*pZ{PO+_vh+6VJ_=GM)u2? zIey;!O5Y(R;>6>===Hqj_0!fnXfFs~bzMw@aj)8~t;T{ICCjy+a%JpO_+k|K`=|7l z2j6cre~7Ez$bOO6=wkdb!K_95B`iN2(R=bz;lz^%AuZxS8JAF~!6VC#ONQ|+Vyy0~^A34pJ$oz8Aar(h$V&3l0_<1wpDV*8Sd8uYf zL{c`>FXnNogZV=je4BwCTaaE8;hg)edZeEzBIKc}gT-C@8n_jpXeN5*hDN5|eM-7+ z^{(RS#x-zmLGvkot1#6hb~5YLf5L_>C~q~%g{4r$Ir3W_^!+0Y008it7M_Oc6UyqD zrQU+JHl>}->P(Q~NOh;?wL`u^>*Za);}1td_aH&vx^~eD`1yvsW5>g|eHcvqEeha! z8sls2QN%ay@{MP}+5*gfle7qY>-2M{p<8k3e&q_-wgu}Yl0K@wb!{Zv@$UhBgY+(a z-@>7pWU_Cjl4`PVj2d{N3watOnHnrbdI10c000000000000000fMxyx2P!Dd4QS~~ P00000NkvXXu0mjfdHKQt diff --git a/tests/snapshots/fantom_ftmx_nanox_withdraw/00005.png b/tests/snapshots/fantom_ftmx_nanox_withdraw/00005.png deleted file mode 100644 index 570ce28d53e82ac396ba25c370110058f3a638f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ diff --git a/tests/src/eth/ethx/deposit_legacy.test.js b/tests/src/eth/kelp/claimETH.test.js similarity index 52% rename from tests/src/eth/ethx/deposit_legacy.test.js rename to tests/src/eth/kelp/claimETH.test.js index e00487d..5f0e6ff 100644 --- a/tests/src/eth/ethx/deposit_legacy.test.js +++ b/tests/src/eth/kelp/claimETH.test.js @@ -8,30 +8,27 @@ import { txFromEtherscan, } from "../../test.fixture"; -const contractAddr = "0xcf5ea1b38380f6af39068375516daf40ed70d299"; -const pluginName = "staderlabs"; const testNetwork = "ethereum"; -const chainID = 1; -// Test from replayed transaction: https://etherscan.io/tx/0x4e771017864ff34176c8c9fa62fe1950852933345f921dc5316c63554c9bc453 +// Test from replayed transaction: https://etherscan.io/tx/0xa5458f18af5bd00d7bda4332f33af93e0f7cd7294c6715dbf5a4c143f0a1d6e3 const inputData = - "0x02f8980113850550de54dd850550de54dd8301c88a94cf5ea1b38380f6af39068375516daf40ed70d29987038d7ea4c68000a4f340fa01000000000000000000000000ad345b348bd84a4b42a5fde63feb7a29ef2af4e9c080a0a3adf22f4ce9fead664befb0ca33730f3bb8edb1a1d65a7f5275ac9a8622d29ea01a99e171740d723ee61049d7f0465f4e219fca86aaddf06bab02d3400f554242"; + "0x02f89001078439d106808502f335de57830227ce9462de59c08eb5dae4b7e6f7a8cad3006d6965ec1680a46dbaf9ee000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeec080a0e5b528d407765077dc056f703a6b616bff83ed970eb2250615e94347846ad133a040c023c952756e5aa6d25dec78cb7f67f9ebb5f42de588d6e46c34e2976f6308"; nano_models.forEach(function (model) { test( - "[Nano " + model.letter + "] Legacy Deposit ETH", + "[Nano " + model.letter + "] Kelp Claim ETH", zemu(model, async (sim, eth) => { const serializedTx = txFromEtherscan(inputData); const tx = eth.signTransaction("44'/60'/0'/0", serializedTx); - const right_clicks = model.letter === "S" ? 9 : 5; + const right_clicks = model.letter === "S" ? 6 : 4; // Wait for the application to actually load and parse the transaction await waitForAppScreen(sim); // Navigate the display by pressing the right button `right_clicks` times, then pressing both buttons to accept the transaction. await sim.navigateAndCompareSnapshots( ".", - testNetwork + "_ethx_" + model.name + "_legacy_stake_eth", + testNetwork + "_kelp_claim_eth_" + model.name, [right_clicks, 0] ); diff --git a/tests/src/eth/ethx/withdraw_legacy.test.js b/tests/src/eth/kelp/claimLST.test.js similarity index 50% rename from tests/src/eth/ethx/withdraw_legacy.test.js rename to tests/src/eth/kelp/claimLST.test.js index 48ded2f..2e7bcf1 100644 --- a/tests/src/eth/ethx/withdraw_legacy.test.js +++ b/tests/src/eth/kelp/claimLST.test.js @@ -8,30 +8,27 @@ import { txFromEtherscan, } from "../../test.fixture"; -const contractAddr = "0xcf5ea1b38380f6af39068375516daf40ed70d299"; -const pluginName = "staderlabs"; const testNetwork = "ethereum"; -const chainID = 1; -// Test from replayed transaction: https://etherscan.io/tx/0xa7b2f78c84bc5528629d37b56856d47601c42f4d7f1505fa6767bcd090fb5044 +// Test from replayed transaction: https://etherscan.io/tx/0x31a88ec3977a4cd4ab0a105607a9ac1d350e1f2a2148345f6bdf9b583a74518b const inputData = - "0x02f8b30182059585053f837bd185053f837bd18304d7be949f0491b32dbce587c50c4c43ab303b06478193a780b844ccc143b80000000000000000000000000000000000000000000000056a30e2758fb0a40000000000000000000000000087bc2f2ba8c83f412fed5c3151de0ffbdc959984c080a01bf62d962c7e2d888df40f0a61dd9eb6c60ed01e1291ce15b9acbad154e0cf619fc470d4477df1e52cb4030e2f976dc13856d09010d164dd97a5532d59b9d413"; + "0x02f8910181e48439d106808502c0b7a94e8302c6ad9462de59c08eb5dae4b7e6f7a8cad3006d6965ec1680a46dbaf9ee000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38fc001a015b3a4d1d38f492c00322e7a1eef1f044ddfbe0f145031d80470e22ffa63dc24a07605ee5c0b3b1b0d216e10ee28a1db78cd723df9812d3ec2585beaaa9f0844e1"; nano_models.forEach(function (model) { test( - "[Nano " + model.letter + "] Legacy Request Withdraw ETH", + "[Nano " + model.letter + "] Kelp Claim LST", zemu(model, async (sim, eth) => { const serializedTx = txFromEtherscan(inputData); const tx = eth.signTransaction("44'/60'/0'/0", serializedTx); - const right_clicks = model.letter === "S" ? 9 : 5; + const right_clicks = model.letter === "S" ? 6 : 4; // Wait for the application to actually load and parse the transaction await waitForAppScreen(sim); // Navigate the display by pressing the right button `right_clicks` times, then pressing both buttons to accept the transaction. await sim.navigateAndCompareSnapshots( ".", - testNetwork + "_ethx_" + model.name + "_legacy_request_withdraw_eth", + testNetwork + "_kelp_claim_lst_" + model.name, [right_clicks, 0] ); diff --git a/tests/src/eth/kelp/initiateWithdrawalETH.test.js b/tests/src/eth/kelp/initiateWithdrawalETH.test.js new file mode 100644 index 0000000..96a6696 --- /dev/null +++ b/tests/src/eth/kelp/initiateWithdrawalETH.test.js @@ -0,0 +1,39 @@ +import "core-js/stable"; +import "regenerator-runtime"; +import { + waitForAppScreen, + zemu, + nano_models, + serializeTx, + txFromEtherscan, +} from "../../test.fixture"; + +const testNetwork = "ethereum"; +// Test from replayed transaction: https://etherscan.io/tx/0x5a6a235be8865c5989bd5f604e9f4c14c442e5db0ee06b64e93a74ead5b5b14c +const inputData = + "0x02f8b00150839402a08501ccf6aae1830a78d19462de59c08eb5dae4b7e6f7a8cad3006d6965ec1680b844c8393ba9000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000015f021397cf0000c001a0b812d5b2183bd21ccde3765da1ad02a7233f835b01bc3519db9a123f84acbf38a0761578a1e66af567e40dcf4597af674956381fc85db0f2c9881f3f95eb863726"; + +nano_models.forEach(function (model) { + test( + "[Nano " + model.letter + "] Kelp Unstake ETH", + zemu(model, async (sim, eth) => { + const serializedTx = txFromEtherscan(inputData); + + const tx = eth.signTransaction("44'/60'/0'/0", serializedTx); + + const right_clicks = model.letter === "S" ? 7 : 5; + + // Wait for the application to actually load and parse the transaction + await waitForAppScreen(sim); + // Navigate the display by pressing the right button `right_clicks` times, then pressing both buttons to accept the transaction. + await sim.navigateAndCompareSnapshots( + ".", + testNetwork + "_kelp_unstake_eth_" + model.name, + [right_clicks, 0] + ); + + await tx; + }), + 50000 + ); +}); diff --git a/tests/src/eth/kelp/initiateWithdrawalLST.test.js b/tests/src/eth/kelp/initiateWithdrawalLST.test.js new file mode 100644 index 0000000..b2000a3 --- /dev/null +++ b/tests/src/eth/kelp/initiateWithdrawalLST.test.js @@ -0,0 +1,39 @@ +import "core-js/stable"; +import "regenerator-runtime"; +import { + waitForAppScreen, + zemu, + nano_models, + serializeTx, + txFromEtherscan, +} from "../../test.fixture"; + +const testNetwork = "ethereum"; +// Test from replayed transaction: https://etherscan.io/tx/0xa44d01da432225b7ad2cc49b0160d57464439107044af3497a9b71d7677c82c7 +const inputData = + "0x02f8b001318421bef4e984dfce82df83105db09462de59c08eb5dae4b7e6f7a8cad3006d6965ec1680b844c8393ba9000000000000000000000000a35b1b31ce002fbf2058d22f30f95d405200a15b0000000000000000000000000000000000000000000000000f99f5f1987e8000c001a05dd079fce787f4a03da05f8ba68d6a1abe3d094a6985c27dab843e84eff027b9a005fc6255e49140ca4d76477e6a4f3d6ae09d61f83a56655e166e960683d3127e"; + +nano_models.forEach(function (model) { + test( + "[Nano " + model.letter + "] Kelp Unstake LST", + zemu(model, async (sim, eth) => { + const serializedTx = txFromEtherscan(inputData); + + const tx = eth.signTransaction("44'/60'/0'/0", serializedTx); + + const right_clicks = model.letter === "S" ? 7 : 5; + + // Wait for the application to actually load and parse the transaction + await waitForAppScreen(sim); + // Navigate the display by pressing the right button `right_clicks` times, then pressing both buttons to accept the transaction. + await sim.navigateAndCompareSnapshots( + ".", + testNetwork + "_kelp_unstake_lst_" + model.name, + [right_clicks, 0] + ); + + await tx; + }), + 50000 + ); +}); diff --git a/tests/src/fantom/deposit.test.js b/tests/src/fantom/deposit.test.js deleted file mode 100644 index 760ae86..0000000 --- a/tests/src/fantom/deposit.test.js +++ /dev/null @@ -1,47 +0,0 @@ -import "core-js/stable"; -import "regenerator-runtime"; -import { - waitForAppScreen, - zemu, - nano_models, - serializeTx, -} from "../test.fixture"; - -const contractAddr = "0xb458bfc855ab504a8a327720fcef98886065529b"; -const pluginName = "staderlabs"; -const testNetwork = "fantom"; -const chainID = 250; -const signedPlugin = false; -// Test from replayed transaction: https://ftmscan.com/tx/0xe3a07a16873a19be351cacb1c48f7fe23c4b2975ba774e71b26c4992afca1ac0 -// msg.value is hardcoded, hence it will be wrong in test -const inputData = "0xd0e30db0"; - -nano_models.forEach(function (model) { - test( - "[Nano " + model.letter + "] Deposit FTM", - zemu( - model, - async (sim, eth) => { - const serializedTx = serializeTx(contractAddr, inputData, chainID); - - const tx = eth.signTransaction("44'/60'/0'/0/0", serializedTx); - - const right_clicks = model.letter === "S" ? 5 : 5; - - // Wait for the application to actually load and parse the transaction - await waitForAppScreen(sim); - // Navigate the display by pressing the right button `right_clicks` times, then pressing both buttons to accept the transaction. - await sim.navigateAndCompareSnapshots( - ".", - testNetwork + "_ftmx_" + model.name + "_deposit", - [right_clicks, 0] - ); - - await tx; - }, - signedPlugin, - testNetwork - ), - 20000 - ); -}); diff --git a/tests/src/fantom/undelegate.test.js b/tests/src/fantom/undelegate.test.js deleted file mode 100644 index 337e2bb..0000000 --- a/tests/src/fantom/undelegate.test.js +++ /dev/null @@ -1,47 +0,0 @@ -import "core-js/stable"; -import "regenerator-runtime"; -import { - waitForAppScreen, - zemu, - nano_models, - serializeTx, -} from "../test.fixture"; - -const contractAddr = "0xb458bfc855ab504a8a327720fcef98886065529b"; -const pluginName = "staderlabs"; -const testNetwork = "fantom"; -const chainID = 250; -const signedPlugin = false; -// Test from replayed transaction: https://ftmscan.com/tx/0x60130f5baa43bfdad15b79f4ff573b081e9a2f69a64b6db839b7afc71df2903b -const inputData = - "0x4f864df400000000000000000000000000000000000000000000000000011352faaba2bf00000000000000000000000000000000000000000000000ea00bf71b724f800000000000000000000000000000000000000000000000000f6eea29cfd81d7920"; - -nano_models.forEach(function (model) { - test( - "[Nano " + model.letter + "] Unstake FTM", - zemu( - model, - async (sim, eth) => { - const serializedTx = serializeTx(contractAddr, inputData, chainID); - - const tx = eth.signTransaction("44'/60'/0'/0/0", serializedTx); - - const right_clicks = model.letter === "S" ? 5 : 5; - - // Wait for the application to actually load and parse the transaction - await waitForAppScreen(sim); - // Navigate the display by pressing the right button `right_clicks` times, then pressing both buttons to accept the transaction. - await sim.navigateAndCompareSnapshots( - ".", - testNetwork + "_ftmx_" + model.name + "_undelegate", - [right_clicks, 0] - ); - - await tx; - }, - signedPlugin, - testNetwork - ), - 20000 - ); -}); diff --git a/tests/src/fantom/withdraw.test.js b/tests/src/fantom/withdraw.test.js deleted file mode 100644 index 447f6f0..0000000 --- a/tests/src/fantom/withdraw.test.js +++ /dev/null @@ -1,47 +0,0 @@ -import "core-js/stable"; -import "regenerator-runtime"; -import { - waitForAppScreen, - zemu, - nano_models, - serializeTx, -} from "../test.fixture"; - -const contractAddr = "0xb458bfc855ab504a8a327720fcef98886065529b"; -const pluginName = "staderlabs"; -const testNetwork = "fantom"; -const chainID = 250; -const signedPlugin = false; -// Test from replayed transaction: https://ftmscan.com/tx/0x8b5cc5810f4cf8048413ff3f66c32d3c0175e6f159a5c8dce0ce1a2207effc25 -const inputData = - "0x441a3e70000000000000000000000000000000000000000000000000000325c5ddb1a21c0000000000000000000000000000000000000000000000000000000000000000"; - -nano_models.forEach(function (model) { - test( - "[Nano " + model.letter + "] Withdraw FTM", - zemu( - model, - async (sim, eth) => { - const serializedTx = serializeTx(contractAddr, inputData, chainID); - - const tx = eth.signTransaction("44'/60'/0'/0/0", serializedTx); - - const right_clicks = model.letter === "S" ? 5 : 5; - - // Wait for the application to actually load and parse the transaction - await waitForAppScreen(sim); - // Navigate the display by pressing the right button `right_clicks` times, then pressing both buttons to accept the transaction. - await sim.navigateAndCompareSnapshots( - ".", - testNetwork + "_ftmx_" + model.name + "_withdraw", - [right_clicks, 0] - ); - - await tx; - }, - signedPlugin, - testNetwork - ), - 20000 - ); -});